Téléchargement
illégal
Posez votre question Signaler

Langage C, classement ordre croissant-decroi. [Résolu]

keurdange 282Messages postés 8 novembre 2010Date d'inscription 9 mai 2012Dernière intervention - Dernière réponse le 28 déc. 2011 à 14:33
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.
Lire la suite 

Langage C, classement ordre croissant-decroi »

13 réponses
Réponse
+0
moins plus
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;
Hxyp- 7 mai 2011 à 19:04
C'est pour le signe supérieur ou inférieur comme ça la même fonction peut faire le tri croissant et décroissant en précisant le type. Il y a le ou || entre les deux j'ai sauté une ligne pour représenter le truc mais ça revient à :
if( (type==0 && temp>tab[i]) || (type==1 && temp<tab[i]) ) {
Je n'ai pas trop compris la question en fait

Pour l'utiliser :
on a un tableau 'a' de 10 int
pour le trier dans l'ordre croissant on met 0 :
tri_tab(a,10,0);
pour le trier dans l'ordre décroissant on met 1 :
tri_tab(a,10,1);

Vous pouvez ajouter un enum si 0 ou 1 n'est pas terrible
enum tt_tab{TRI_C=0,TRI_D};

void tri_tab(int *tab,int n,int type)
  {
    int u,i,temp;
    for(u=0;u<n;u++)
        for(i=1;i<n;i++){
            temp=tab[i-1];
            if((type==TRI_C && temp>tab[i]) ||
               (type==TRI_D && temp<tab[i])) {
                tab[i-1]=tab[i];
                tab[i]=temp;
            }
        }
  }

et quand on l'appel :
croissant,
tri_tab(a,10,TRI_C);
décroissant,
tri_tab(a,10,TRI_D);
meriem - 28 déc. 2011 à 11:25
merci ça marche bien
keurdange- 28 déc. 2011 à 14:33
cool
Ajouter un commentaire
Ce document intitulé « Langage C, classement ordre croissant-decroi. » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?