Langage C, classement ordre croissant-decroi.

Résolu
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   -  
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je voudrais faire un programme qui remplit les notes d'une classe, affiche le maximum, le minimum, la moyenne des notes, puis classe les notes par ordre croissant puis décroissant. Mais je n'arrive pas à programmer la partie des classements par ordre croissant ou decroissant (ou c'est très long et je m'embrouille). voici mon programme:

#include<stdio.h>
int tab[20];
int note,a,b,c,max,min;
float moy;
main()
{
for(a=0;a<=19;a++)
{
printf("Entrez les notes: ");
scanf("%d", &tab[a]);
}
max=tab[0];
for(a=1;a<=19;a++)
{
if(max<tab[a])
max=tab[a];
}
min=tab[0];
for(a=1;a<=19;a++)
{
if(min>tab[a])
min=tab[a];
}
for(a=0;a<20;a++)
{
moy=(moy+tab[a]);
}
moy=moy/20;
printf("La moyenne est %.2f, le minimum %d et le maximum %d", moy,min,max);
}

Merci d'avance.


1 réponse

Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
Bonjour,
Au plus simple, on a un tableau avec 5 notes : 1 5 3 4 2
on vérifie par paire en se décalant. Et si supérieur ou inférieur on échange les valeurs pour mettre dans l'ordre voulu au final.
En croissant si le nombre précédent est supérieur on échange sinon on ne fait rien.
En admetant qu'on commence à i=1 dans la boucle pour i<n
(if tab[i-1]>tab[i])
1 5 3 4 2 , (1>5) on ne change rien
1 5 3 4 2 , (5>3) on change
1 3 5 4 2 , (5>4) on change
1 3 4 5 2 , (5>2) on change
1 3 4 2 5
on boucle dessus autant de fois qu'il y a de valeurs dans le tableau, donc une seconde boucle pour répéter celle-ci. ça doit faire n*n en tout, mais pas sûr ahaha

Pour échanger vous pouvez utiliser une variable qui ne sert qu'à garder un instant la valeur :
int a=5, b=2, temp;
temp=a;
a=b;
b=temp;
3
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   231
 
Ok merci. On peut aussi le faire sans passer par variable intermédiaire en faisant:
a=a+b (cumule des valeurs dans b)
b=a-b=a+b-b=a (transfert de a dans b)
a=a-b=a+b-a=b (transfert de b dans a)

Mais imagine si tu as 20,40 ou 100 notes, ca serait vraiment long avec tout le risque de faire des erreurs
0
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   231
 
Voici le programme mais merci quand même pour ton aide Hxyp

#include<stdio.h>
int tab[5];
int note,a,b,c,x,max,min,g;
float moy;
main()
{
for(a=0;a<=4;a++)
{
printf("Entrez les notes: ");
scanf("%d", &tab[a]);
}
max=tab[0];
for(a=1;a<=4;a++)
{
if(max<tab[a])
max=tab[a];
}
min=tab[0];
for(a=1;a<=4;a++)
{
if(min>tab[a])
min=tab[a];
}
for(a=0;a<=4;a++)
{
moy=(moy+tab[a]);
}
moy=moy/5;
printf("La moyenne est %.2f, le minimum %d et le maximum %d\n", moy,min,max);
for(b=1;b<5;b++)
{
x=tab[b];
c=b-1;
while(c>=0&&tab[c]>x)
{
tab[c+1]=tab[c];
c=c-1;
tab[c+1]=x;
}
}
for(g=0;g<5;g++)
printf("%d\n", tab[g]);
}
1