Bonjour,
J’essaie de réaliser un programme en langage C à l'aide du logiciel codeblocks qui permettrait de calculer la masse molaire d'une molécule et étant débutant j'ai cherché sur internet un programme similaire mais je ne le comprend pas.
Quelqu'un pourrait-il me l'expliquer svp? En particulié la partie en rouge.
Merci
Code:#include <stdio.h> #include <stdlib.h> #include <string.h> char S[]=" \ H 1,008 \ He 4,003 \ Li 6,941 \ Be 9,012\ B 10,811\ C 12,011\ N 14,007\ O 15,999 \ F 18,998\ Ne 20,180\ Na 22,990\ Mg 24,305\ Al 26,982\ Si 28,086\ P 30,974\ S 32,066\ Cl 35,453\ Ar 39,948\ K 39,098\ Ca 40,078\ Sc 44,956\ Ti 47,880\ V 50,942\ Cr 51,996\ Mn 54,938\ Fe 55,847\ Co 58,933\ Ni 58,690\ Cu 63,546\ Zn 65,390\ Ga 69,723\ Ge 72,610\ As 74,922\ Se 78,960\ Br 79,904\ Kr 83,800\ Rb 85,468\ Sr 87,620\ Y 88,906\ Z 91,224\ Nb 92,906\ Mo 95,940\ Tc 98,906\ Ru 101,070\ Rh 102,906\ Pd 106,420\ Ag 107,868\ Cd 112,411\ In 114,820\ Sn 118,710\ Sb 121,750\ Te 127,600\ I 126,904\ Xe 131,290\ Cs 132,905\ Ba 137,327\ La 138,906\ Ce 140,115\ Pr 140,908\ Nd 144,240\ Pm 146,915\ Sm 150,360\ Eu 151,965\ Gd 157,250\ Tb 158,925\ Dy 162,500\ Ho 164,930\ Er 167,260\ Tm 168,934\ Yb 173,040\ Lu 174,967\ Hf 178,490\ Ta 180,948\ W 183,850\ Re 186,207\ Os 190,200\ Ir 192,220\ Pt 195,080\ Au 196,967\ Hg 200,590\ Tl 204,383\ Pb 207,200\ Bi 208,980\ Po 208,982\ At 209,987\ Rn 222,018\ Fr 223,020\ Ra 226,025\ Ac 227,028\ Th 232,038\ Pa 231,036\ U 238,029\ Np 237,048\ Pu 244,064\ Am 243,061\ Cm 247,070\ Bk 247,070\ Cf 251,080\ Es 252,083\ Fm 257,095\ Md 258,099\ No 259,101\ Lr 260,105\ Rf 261,109\ Db 262,114\ Sg 263,118\ Bh 262,123\ Hs 265,000\ Mt 266,000\ Ds 269,000\ Rg 272,000\ Cn 277,000\ "; float chercheMasse(char *s) { float masse; char *p=strstr(S, s); if(p==NULL) { fprintf(stderr,"Symbole %s inconnu !\n", s); exit(1); } if((sscanf(p,"%*s %f", &masse))!=1) { fprintf(stderr,"Masse invalide pour %s !\n", p); exit(1); } return masse; } void cumuler(float* somme, char *s, int o) { float masse; char t[10]; strcpy(t, s); strcat(t, " "); masse=chercheMasse(t); *somme=*somme+o*masse; } [COLOR="#FF0000"][COLOR="#FF0000"]void decode(float *masse, char *f) { // Pointeur dans le symbole int ps=0; char symbole[4]; int occurences=0; int cont=1; char c; while(cont) { c=*f; if (c=='\0' || (c>='A' && c<='Z')) { // 1 er cas : premier couple : rien à faire // 2 ème cas : un couple à été lu avant : cumuler le couple précédent if(ps!=0) { if (occurences==0) occurences=1; symbole[ps]=0; cumuler(masse, symbole, occurences); ps=0; occurences=0; } ps=0; symbole[ps]=c; ps++; if(c=='\0') cont=0; } else if (c>='a' && c<='z') { symbole[ps]=c; ps++; } else if (c>='0' && c<='9') { occurences=occurences*10+c-'0'; } f++; } } int main(void) { float mm; char formule[100]; printf("\n Bienvenue dans le programme automatique de calcul de masse molaire \n Attention le programme est sensible au minuscule et au MAJUSCULE \n\n Presser ENTRER pour commencer\n \n"); getchar(); printf("Entrez votre formule (ex : H2O) : "); while(fgets(formule, 100, stdin) != NULL) { formule[strlen(formule)-1]=0; mm=0.0; decode(&mm, formule); printf("La masse molaire de %s vaut %f g/mol\n", formule, mm); printf("\n"); printf("Entrez votre formule (ex : BeH2) : "); } return 0; }
-----