Un programme en C ! besoin d'aide

Khaliil -  
the F Messages postés 162 Statut Membre -
Bonjour,
je voudraii cree un programme qui affiche :
nombre de personne par batiment , en sachant que chaque batimen se compose de 4 appartment .
nombre de personne par quartier en sachant qu'au quartier se trouve 4 batiment .
le batiment a plu grand nombre de personne.

Voila deja ce que jai faii / je voi pa ou est le probleme :/

#include <stdio.h>
#include <conio.h>

int main ()
{
int a1 , a2 , a3 , a4 , b1 , b2 , b3 , b4 , q , i;

for ( i=1 ; i<=4 ; i++ )
{ printf("entrez le nombre de personne de l'apartement n 1 :\n");
scanf("%d",&a1);
printf("entrez le nombre de personne de l'apartement n 2 :\n");
scanf("%d",&a2);
printf("entrez le nombre de personne de l'apartement n 3 :\n");
scanf("%d",&a3);
printf("entrez le nombre de personne de l'apartement n 4 :\n");
scanf("%d",&a4);

if ( i = 1 ) {b1=a1+a2+a3+a4;
printf("le nombre de personne du batiment n 1 est :\n %d",b1);
scanf("%d",&b1);}
else if ( i= 2) {b2=a1+a2+a3+a4;
printf("le nombre de personne du batiment n 2 est :\n %d",b2);
scanf("%d",&b2);}
else if ( i= 3) {b3=a1+a2+a3+a4;
printf("le nombre de personne du batiment n 3 est :\n %d",b3);
scanf("%d",&b3);}
else if ( i=4) {b4=a1+a2+a3+a4;
printf("le nombre de personne du batiment n 4 est :\n %d",b4);
scanf("%d",&b3);}
else if ( i=4 ) {q = b1 + b2 + b3 + b4 ;
printf("le nombre de personne au quartier est :\n %d",q);
scanf("%d",&q);}
}

}
Configuration: Windows XP
Firefox 2.0.0.1

13 réponses

Résumé de la discussion

Un exemple de programme en C vise à afficher le nombre de personnes par bâtiment et par quartier, sachant que chaque bâtiment comporte 4 appartements et chaque quartier regroupe 4 bâtiments. Plusieurs réponses soulignent des erreurs de logique et de saisie, comme utiliser l’opérateur = au lieu de == dans les conditions et viser des adresses scanf incorrectes. En cas de corrections proposées, il est conseillé d'initialiser correctement les variables de somme, d’utiliser un tableau pour regrouper les bâtiments et d’éviter les lectures maladresses du buffer, notamment via le vide du '\n'.

Bobot (l'IA à votre service)
  1. naruto83700 Messages postés 58 Statut Membre 4
     
    Le debut je comprend t'as langue mais le2e paragraphe c'est quelle langue?
    0
  2. vh_77 Messages postés 539 Statut Membre 2
     
    int main (int argc, char *argv[])
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Non non, c'est bien int en minuscule ;-))). Et les arguments sont facultatifs...
      0
  3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,

    Plusieurs remarques :
    conio.h : évite de l'inclure dans la mesure du possible, car non standard.


    <ital>int main ()
    en C, le prototype sans arguments est : int main(void)
    for ( i=1 ; i<=4 ; i++ )</ital> : je te conseille de faire des boucles en partant de 0 car les tableaux commencent à l'indice 0, cela t'évitera bien des complications.

    if ( i = 1 ) : condition toujours vraie. L'opérateur de comparaison en C est le double égal (==). Le simple égal est utilisé pour l'affectation. Ceci fera i=1 et cela renverra 1 valeur vraie. Donc, le compilateur fera i=1; puis tout le bloc du if sera exécuté.

    Pour les autres else if, voire remarque ci-dessus.

    Ton dernier else if sera mieux de mettre i==5. Puisqu'en respectant la logique du programme, elle doit s'exécuter à la fin du for. Encore mieux car plus lisible, mettre ce bloc en dehors du for.

    N'oublie pas de mettre return 0; à la fin pour signaler que tout va bien.

    Cdlt
    0
  4. ninouhhichem Messages postés 303 Statut Membre 9
     
    slt,on veut calculer
    1)nombre de personne par quartier
    2)le batiment a plus grand nombre de personne

    #include <stdio.h>

    main ()
    {
    int a1 , a2 , a3 , a4 , b1 , b2 , b3 , b4 ,i,j,q,max,x[4];
    for ( i=1 ; i<=4 ; i++ ) {
    printf("entrez le nombre de personne de l'apartement n 1 :\n");
    scanf("%d",&a1);
    printf("entrez le nombre de personne de l'apartement n 2 :\n");
    scanf("%d",&a2);
    printf("entrez le nombre de personne de l'apartement n 3 :\n");
    scanf("%d",&a3);
    printf("entrez le nombre de personne de l'apartement n 4 :\n");
    scanf("%d",&a4);
    if ( i = 1 ) {b1=a1+a2+a3+a4;x[i]=b1;}
    if ( i = 2 ) {b2=a1+a2+a3+a4;x[i]=b2;}
    if ( i = 3 ) {b3=a1+a2+a3+a4;x[i]=b3;}
    if ( i = 4 ) {b4=a1+a2+a3+a4;x[i]=b4;}
    }

    q = b1 + b2 + b3 + b4
    printf("le nombre de personne au quartier est :\n %d",q);

    max=x[1];
    for ( j=1 ; j<=4 ; j++ )
    if (max<x[j]) max=x[j];

    }
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Salut,
      main ()
      Ce n'est pas le bon prototype. Tu dois spécifier int devant !

      if ( i = 1 ) {b1=a1+a2+a3+a4;x[i]=b1;}
      L'opérateur de comparaison en C est le double égal (==) !

      q = b1 + b2 + b3 + b4
      En C, une instruction se termine par un point-virgule.

      Ton tableau int x[4] est un tableau de 4 int dont le dernier indice est 3 et non 4. Ton programme pose donc problème. Voilà exactement pourquoi j'ai dit qu'il valait mieux commencer les boucles for à l'indice 0.

      Et enfin, n'oublie pas le return 0 final.
      0
    2. ninouhhichem Messages postés 303 Statut Membre 9 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
       
      ou est ton prg
      ou tu est la pour just "bla bla"
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > ninouhhichem Messages postés 303 Statut Membre
       
      Tu relis mon poste 4, et il y a toutes les corrections qu'il faut apporter à son programme.
      Le but du forum est d'aider, d'expliquer, pas de réaliser un programme en entier (qui plus est, avec des fautes) sans rien n'expliquer comme tu l'as fait.
      0
    4. ninouhhichem Messages postés 303 Statut Membre 9 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
       
      mon programme est correcte
      0
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > ninouhhichem Messages postés 303 Statut Membre
       
      Correcte ??
      Il y a plein de fautes :s.
      Relis mon poste 6, je t'ai signalé toutes tes erreurs.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. valgoku Messages postés 213 Statut Membre 47
     
    Petit conseil, utilise le plus possible la boucle for, cela t'évitera bien des bêtises dans l'avenir !
    0
  7. Lamp's Messages postés 57 Statut Membre 6
     
    J'ai un petit doute : le fait de déclarer ton tableau int x[4] créé-t-il un tableau à 4 cases ou allant jusque la case numéro 4?

    Les tableaux en C commençant par la case [0], la première solution poserait probleme ici puisque la case [4] n'existerait pas.
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Salut
      int x[4]; créé un tableau de 4 int dont le premier indice est 0.
      x[4] n'existe donc pas.
      0
  8. vh_77 Messages postés 539 Statut Membre 2
     
    pourquoi les fonction int main argv et argv sont facultative
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Pourquoi ?
      Ben car c'est la norme qui le dit.
      Soit tu écris : int main(void); soit int main(int argc, char **argv);
      0
  9. vh_77 Messages postés 539 Statut Membre 2
     
    de quel norme tu parles ?
    c'est quoi le void je l'ai pas encore vue sur le site du zero ?
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Je parle des normes du C (ANSI, C99) qui régissent le C.
      Eh oui, sur le site du zéro, il n'y a pas tout ^^. Mais c'est un excellent début.
      0
  10. Mins Messages postés 45 Statut Membre 9
     
    void c'est rien. Ca veut dire qu'il ne prend rien en argument si tu le mets à la place des paramètres. tu peux aussi avoir void comme retour de fonction si ta fonction ne doit rien retourner.

    Bonne journée
    0
  11. vh_77 Messages postés 539 Statut Membre 2
     
    mais void c'est pas un truc pour la voie ? pour parler ?
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Euh non void, c'est pour préciser qu'il n'y a pas de valeurs.
      Tu confondrais pas avec le mot anglais "voice" ? ^^.
      0
  12. vh_77 Messages postés 539 Statut Membre 2
     
    ha oui merci je confond.
    0
  13. the F Messages postés 162 Statut Membre 13
     
    Never miss your English lessons next time VH

    :-D
    0
  14. the F Messages postés 162 Statut Membre 13
     
    @ hichem :
    il n'y a pas de #serviteurs# dans ce furom en plus quand qq 1 te corrige : pas besoin de lui declarer la guerre
    0