1

#include <stdio.h> #include <ctype.h> void main() { char sexe[10], reponse /*= 'T'*/, reponseC; float poids[10], recordFem = 0.0, recordHom = 0.0, temp1; int i = 0, j, /*k, l, */      indMin, //"Indice de la case contenant le plus petit nombre"      temp, //2 variables temporaires pour les 2 permutations à faire (poids sexe)      nbPers = 0;                     do{               //Permet la réexécution du programme complet while(i <= 9 && reponse != 'T'){//Début de la création de la liste de données      printf("Entrez le sexe de la personne %d (M/F) et son poids:\n", i+1);//i+1 représente le nombre de la personne      fflush(stdin);      scanf("%c%f", &sexe[i], &poids[i]);//Scan séquentiellement sexe + poids; une ligne à la fois           //scanf("%c", &sexe[i]);/*Ça passe pas avec les 2 prompts: pour les lire ensemble, il faut les demander ensemble*/      sexe[i] = toupper(sexe[i]); //Au cas où ça serait pas en majuscules           //scanf("%f", &poids[i]);      printf("sx: %c\n", sexe[i]); //Debug      printf("pds: %6.2f\n", poids[i]);//Debug      i++;//Indice du tableau correspondant      nbPers ++;//Compteur de personnes      if(sexe[i] == 'F' && recordFem < poids[i]){ // If qui détermine si c'est une fille ET si le poids lu dépasse le record      recordFem = poids[i];      }else if(sexe[i] == 'M' && recordHom < poids[i]){// If qui détermine si c'est un gars ET si le poids lu dépasse le record      recordHom = poids[i];      }           //Fin du parcours tableau qd on arrive au bout            printf("Entrez T pour terminer ou n'importe quelle lettre pour continuer\n");      fflush(stdin);//Plus commode question ergonomie      scanf("%c", &reponse);      reponse = toupper(reponse); }//Fin liste données           printf("Le poids le plus lourd parmi les femmes est: ");           printf("%.2f\n", recordFem);           printf("Le poids le plus lourd parmi les hommes est: ");           printf("%.2f\n", recordHom); printf("Vous avez entre les sexes et poids suivants:\n");//Affichage avant tri printf("Personnes:\n");      for(j = 0; j < i; j++){      printf("%d- %c %.2f\n\n", j+1, sexe[j], poids[j]);      }//Fin du For d'affichage des entrées /* Début de la boucle de tri selon les POIDS */      for(i=0 ; i <= nbPers -1 ; i++){           indMin = i;           for(j = i + 1 ; j < nbPers ; j++){                if(poids[j] < poids[indMin])                     indMin = j;           }                if(indMin != i){                     temp = sexe[i];                     sexe[i] = sexe[indMin];                     sexe[indMin] = temp;                     temp1 = poids[i];                     poids[i] = poids[indMin];                     poids[indMin] = temp1;                }      } /* Fin tri selon poids */ /*Affichage du tableau trié*/ printf("Le tableau dans l'ordre des poids:\n");//Affichage après tri      for(j = 0; j < i; j++){      printf("%d- %c %.2f\n", j+1, sexe[j], poids[j]);           }//Fin du For d'affichage des entrées      printf("\n"); /*fin affichage tableau trié*/ /*Partie qui détermine les records de poids */ //for(k = 0; k < i; k++){                           //Parcours du tableau //     if(sexe[k] == 'F' && recordFem < poids[k]){ // If qui détermine si c'est une fille ET si le poids lu dépasse le record //          record1 = poids[k]; //     }else if(sexe[k] == 'M' && recordHom < poids[k]){// If qui détermine si c'est un gars ET si le poids lu dépasse le record //          record2 = poids[k]; //  } //               Fin du parcours tableau qd on arrive au bout //          printf("Le poids le plus lourd parmi les femmes est: "); //          printf("%.2f\n", poids[k]); //          printf("Le poids le plus lourd parmi les hommes est: "); //          printf("%.2f\n", poids[k]); //}//Fin du parcours tableau qd on arrive au bout printf("\nVoulez-vous reexecuter le programme depuis le debut ? (O/N)");//Fin de la boucle pour réexécuter le programme complet getchar(); scanf("%c", &reponseC); reponseC = toupper(reponseC);                     }while(reponseC == 'O');//Pour réexécution complète }

Il veut pas se réexécuter à la fin ni déterminer les records de poids...

Bon OK chui débutant, donc là je sèche...si qqn peut me guider...

Vala une capture de texte de ce que ca me donne...

Le poids le plus lourd parmi les femmes est: 0.00
Le poids le plus lourd parmi les hommes est: 0.00
Vous avez entre les sexes et poids suivants:
Personnes:
1- M 125.00

2- F 56.00

3- M 90.00

4- F 70.00

Le tableau dans l'ordre des poids:
1- F 56.00
2- F 70.00
3- M 90.00
4- M 125.00


Voulez-vous reexecuter le programme depuis le debut ? (O/N)O
Le poids le plus lourd parmi les femmes est: 0.00
Le poids le plus lourd parmi les hommes est: 0.00
Vous avez entre les sexes et poids suivants:
Personnes:
1- F 56.00

2- F 70.00

3- M 90.00

4- M 125.00

Le tableau dans l'ordre des poids:
1- F 56.00
2- F 70.00
3- M 90.00
4- M 125.00


Voulez-vous reexecuter le programme depuis le debut ? (O/N)


Prise de tête: PhD dans la mire.

------------------------------------------------------------------------------------
Mon site TI 83+ et 83+SE (mort)
Le forum TI 83+ de yAronet !!! (rattaché au site..)

2

Euh... Je cherche toujours d'où vient le problème, mais j'ai remarqué un truc (qui n'a aucun rapport avec le problème, mais qui est quand-même important):
>void main()
C'est faux!!!
main doit toujours retourner une valeur (ce n'est pas comme le _main sous TIGCC). Il faut mettre int main et quitter avec return 0;. C'est le "exit code". 0=succès.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

ca a toujours marché avec mes autres programmes: de plus, c un des critères de correction, alors fo faire avec :-/


Prise de tête: PhD dans la mire.

------------------------------------------------------------------------------------
Mon site TI 83+ et 83+SE (mort)
Le forum TI 83+ de yAronet !!! (rattaché au site..)

4

Voilà, j'ai repéré les bogues (attention à l'ordre du code!):
[ftp83plus]
a écrit : Il veut pas se réexécuter à la fin

Le problème est là:
8: int i = 0, j, /*k, l, */
9:      indMin, //"Indice de la case contenant le plus petit nombre"
10:      temp, //2 variables temporaires pour les 2 permutations à faire (poids sexe)
11:      nbPers = 0;
12: 
13: 
14:                     do{               //Permet la réexécution du programme complet
15: 
16: while(i <= 9 && reponse != 'T'){//Début de la création de la liste de données

i n'est pas réinitialisé quand on repasse dans la boucle pour la deuxième fois. Déplace la ligne 8 à la place de la ligne 15.
ni déterminer les records de poids...

Le problème est là:
20:      scanf("%c%f", &sexe[[b][/b]i], &poids[[b][/b]i]);//Scan séquentiellement sexe + poids; une ligne à la fois
21:           //scanf("%c", &sexe[[b][/b]i]);/*Ça passe pas avec les 2 prompts: pour les lire ensemble, il faut les demander ensemble*/
22:      sexe[[b][/b]i] = toupper(sexe[[b][/b]i]); //Au cas où ça serait pas en majuscules
23:           //scanf("%f", &poids[[b][/b]i]);
24: 
25:      printf("sx: %c\n", sexe[[b][/b]i]); //Debug
26:      printf("pds: %6.2f\n", poids[[b][/b]i]);//Debug
27:      i++;//Indice du tableau correspondant
28:      nbPers ++;//Compteur de personnes
29: 
30:      if(sexe[[b][/b]i] == 'F' && recordFem < poids[[b][/b]i]){ // If qui détermine si c'est une fille ET si le poids lu dépasse le record
31:      recordFem = poids[[b][/b]i];
32:      }else if(sexe[[b][/b]i] == 'M' && recordHom < poids[[b][/b]i]){// If qui détermine si c'est un gars ET si le poids lu dépasse le record
33:      recordHom = poids[[b][/b]i];
34:      }

La ligne 21 change i entre la saisie et le traîtement du record, donc le traîtement du record ne travaille plus avec les bons champs des tableaux. Déplace les lignes 27 et 28 en-dessous de la ligne 34.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

[ftp83plus]
a écrit : ca a toujours marché avec mes autres programmes: de plus, c un des critères de correction, alors fo faire avec :-/

C'est faux, il ne faut pas faire avec, il faut mettre int main() et return 0;, point final.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Cf.:
http://www.midpec.com/djgpp/faq/faq22_25.html (explication courte)
http://homepages.tesco.net/~J.deBoynePollard/FGA/legality-of-void-main.html (précise la situation exacte: le standard ISO C90 permet aux compilateurs d'accepter void main() sans donner d'erreur, mais les compilateurs ne sont pas du tout obligés de l'accepter, donc il ne faut pas l'utiliser)
http://users.aber.ac.uk/auj/voidmain.shtml, http://www.eskimo.com/~scs/readings/voidmain.960823.html, http://www.eskimo.com/~scs/readings/voidmain.990301.html (explications plus longues)
etc.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

7

ca marche pas non plus, mais le pb est different...

f 55
sx: F
pds:  55.00
Entrez T pour terminer ou n'importe quelle lettre pour conti
t
Le poids le plus lourd parmi les femmes est: 55.00
Le poids le plus lourd parmi les hommes est: 0.00
Vous avez entre les sexes et poids suivants:
Personnes:
1- M 125.00

2- F 56.00

3- M 89.00

4- F 55.00

Le tableau dans l'ordre des poids:
1- F 55.00
2- F 56.00
3- M 89.00
4- M 125.00


Voulez-vous reexecuter le programme depuis le debut ? (O/N)


Prise de tête: PhD dans la mire.

------------------------------------------------------------------------------------
Mon site TI 83+ et 83+SE (mort)
Le forum TI 83+ de yAronet !!! (rattaché au site..)

8

Encore un problème d'initialisation. (D'ailleurs, active les warnings, tu auras certainement un warning du style: "reponse is used uninitialized".) À la ligne 16, reponse a une valeur aléatoire à la première exécution de la boucle extérieure (celle qui commence à la ligne 14), et la valeur 'T' à la deuxième. Change:
16: while(i <= 9 && reponse != 'T'){//Début de la création de la liste de données
[...]
41: }//Fin liste données

en:
16: do {//Début de la création de la liste de données
[...]
41: } while(i <= 9 && reponse != 'T'); //Fin liste données


PS: En ce qui concerne le void main(), si vous utilisez du VC++, ça passera (cf. http://homepages.tesco.net/~J.deBoynePollard/FGA/legality-of-void-main.html ou directement http://msdn.microsoft.com./library/default.asp?url=/library/en-us/vclang98/HTML/_pluslang_program_startup.3a_.the_main_function.asp), mais je voulais juste t'avertir de ne l'utiliser en aucun cas pour tes programmes à toi.

PPS: Je te signale que tu es censé faire tes devoirs scolaires/universitaires (ben oui, le message #2 t'a trahi) toi-même... roll
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

Kevin Kofler a écrit :
C'est faux, il ne faut pas faire avec, il faut mettre int main() et return 0;, point final.

A propos, comment peut on récupérer la valeur retournée par un programme sous windows ?

10

Je sais pas si ça répond à ta question mais en tout cas j'ai été étonné d'apprendre que les >, < (j'ai pas testé |) marchent sous windows, en ligne de commande... je savais pas. grin
Par exemple prog >output.txt renvoie tout dans output.txt
Je croyais que c'était que sous Unix. grin
avatar
;)

11

ExtendeD
a écrit : A propos, comment peut on récupérer la valeur retournée par un programme sous windows ?

IF ERRORLEVEL dans un fichier .bat, ou alors on examine la valeur de retour de ShellExecute ou semblable.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

Ok smile

13

sous MSVC, qd tu met void main, il te jette pas smile
(contrairement a GCC smile)
je suppose que MSVC rajoute tout seul le return 0, non <
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

14

En effet, c'est une des nombreuses extensions sans intérêt de M$. (Cf. message #7.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

15

disons que c plus pratique pr les débuttants.
un débuttant, il faut déjà lui expliquer tellement de trucs, que c pas un mal d'avoir une nouveauté de moins smile
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

16

en fait...

bon sinon g demandé à la démo, elle m'a résolu ça en 3 clicks...béton la meuf..


Prise de tête: PhD dans la mire.

------------------------------------------------------------------------------------
Mon site TI 83+ et 83+SE (mort)
Le forum TI 83+ de yAronet !!! (rattaché au site..)