IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème avec la mémoire


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Points : 40
    Points
    40
    Par défaut Problème avec la mémoire
    Bonjour,

    j'écris un programme en C qui recherche les caractéristiques d'un produit à partir de son code en utilisant la recherche dichotomique( laquelle méthode consiste à rechercher un élément du tableau à partir du milieu.Si on ne trouve pas le code dans la première moitié du tableau , on passe à la seconde moitié ) . Mais ,j'ai un problème avec la mémoire car à la place du libellé du premier produit , j'ai entièrement des chiffres . Après cela , il n'y a plus de problème aux autres lignes ; juste la première.Voici , mon code accompagné d'une capture d'écran .
    voici mon code en pièce jointe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define max 4
    #include "dichotomie2.h"
    struct produit 
    {
    char nom[30] ; 
    float prix  ; 
    long code ;
     
    } ;
     
     
    main()
    {
     
    char rep;
          int i=0 ,j=0 ;
    long change_code=0 ;
    float change_prix=0 ;
    char change_nom[100] ;
    struct produit produit[max]=
     
    {
     "avion",13049.459,12 ,
     "moto",330000,03 ,
     "ordinateur",600000,11,
     "portable",40000,14      
     
     
     
     
    }; 
     
    printf("\n");printf("\n");printf("\n");
    printf("*************** %conner les caract%cristiques de vos produits********** \n" ,68 ,130);
    printf("\n");
    for(i=0;i<max ;i++)
    {
    printf("%ces carat%cristiques du produit  %d" ,76,130, i+1);
     
    printf("\n");
    printf("\n");
    printf("***************%conner le libell%c du  produit %c %d   " ,68,130 ,248 , i+1);
     
    fgets(produit[i].nom , 40 ,stdin  ) ;
    vide_buffer() ;
    printf("\n");
    printf("%connez le code de %s   ",68 ,produit[i].nom );
     
     
    scanf("%5d" ,  &produit[i].code   ) ;
    vide_buffer() ;
    printf("\n");
     
     
     
    printf("%connez le prix  de %s  ",68 ,produit[i].nom );      
     
     
    scanf("%5f"  ,&produit[i].prix ) ;
    vide_buffer() ;
    printf("\n");printf("\n");
     
    }
     
    /*On range les articles par ordre croissant */
    for(i=0;i<max-1;i++ )
    {
     for(j=i+1;j<=max;j++ )
    {
      if( produit[i].code>produit[j].code     ) 
       {
         /*on range les codes par ordre croissant */
         change_code=produit[i].code  ;
         produit[i].code =produit[j].code ;
         produit[j].code= change_code; 
         /*On range les prix par ordre croissant */
         change_prix=produit[i].prix ;
       produit[i].prix=produit[j].prix ; 
        produit[j].prix=change_prix;
        /*On échange les libellés des produits  */ 
        strcpy (change_nom , produit[i].nom ) ;
        strcpy (produit[i].nom,  produit[j].nom) ;
        strcpy (produit[j].nom ,change_nom ) ;
       }
     
     
    }
     
     
    }
     
    printf("%ca liste de vos produits par code croissant \n\n" ,76);  
     
    printf("%20s%10s%40s" ,"prix" ,"code","libelle" );   
    printf("\n");    
     for(i=0;i<max;i++ )
    {       
    printf("%20f%10d%40s" , produit[i].prix ,produit[i].code , produit[i].nom);
    printf("\n");
    printf("\n");        
     
    }      
    int size=max/2;
     
    long code_recherche=0;
    do
    {
         i=0;
     printf("%ce code recherch%c ",76,130); 
     scanf("%d" ,&code_recherche); 
     while(produit[i].code!=code_recherche && i<size){i++ ;}
     if( i>=size  )
     {
      i=max-1;
     
     while(produit[i].code!=code_recherche && i>=size){i--;} 
     if( i<size  ) {
    printf("%crticle de code %d n\'existe pas \n",65,code_recherche);  }
     else{   
     
    printf("%crticle de code %d\n",65,code_recherche); 
      printf("libell%c:%s\n",130,produit[i].nom);
      printf("prix : %f" ,produit[i].prix  );    
      printf("\n");printf("\n");
              }
     
     }
    else
    {
     
    printf("%crticle de code %d\n",65,code_recherche); 
      printf("libell%c:%s\n",130,produit[i].nom);
      printf("prix : %f" ,produit[i].prix  );    
      printf("\n");printf("\n");
     
     
     
    }
    vide_buffer() ;
    printf("%coulez vous recommencer (o/n) \n",86);
    scanf("%c",&rep);
    }while(rep=='o') ;   
     
    system("dichotomie2");
    return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    C'est quoi ce "vide_buffer()" ???
    C'est quoi ces "%c" associés à des nombres dans tes printf() ???

    Ta syntaxe de remplissage de "produit" (un tableau de structures) est mal écrite (t'as oublié les accolades autour des éléments)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct produit produit[max]=
    {
     {"avion",13049.459,12} ,
     {"moto",330000,03} ,
     {"ordinateur",600000,11},
     {"portable",40000,14}      
    };

Discussions similaires

  1. [WD17] Problème avec tables mémoire
    Par farabi dans le forum WinDev
    Réponses: 2
    Dernier message: 19/09/2014, 23h30
  2. [AC-2007] problème avec "erreur 7" mémoire insuffisante
    Par rominous41 dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/07/2011, 13h49
  3. Problème de listener, mémoire avec JSF
    Par curious_31 dans le forum JSF
    Réponses: 0
    Dernier message: 21/06/2010, 15h09
  4. [3D] Blender problème avec la mémoire
    Par VinnieMc dans le forum Développement 2D, 3D et Jeux
    Réponses: 18
    Dernier message: 06/04/2006, 19h42
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo