Tri par ordre alphabétique en C
Résolu/Fermé
mmdrame
Messages postés
14
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
23 avril 2006
-
4 nov. 2005 à 20:08
snam54 - 30 avril 2008 à 10:03
snam54 - 30 avril 2008 à 10:03
A voir également:
- Algorithme de tri par ordre alphabétique en c
- Comment trier par ordre alphabétique sur excel - Guide
- Classer les applications par ordre alphabétique iphone - Guide
- Algorithme euromillion excel gratuit - Forum Excel
- Liste amis facebook ordre alphabétique - Forum Facebook
- Ordre meilleur ami snap - Forum Snapchat
4 réponses
bonjour, j'aimerais trier un tableau de structure comportant des noms par ordre alphabétique en C. Et le soucis c'est que j'ai pas le droit d'utiliser qsort. voici mon programme (il ne fonctionne pas je voudrais savoir pourquoi, et obtenir votre aide si possible):
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#define MAXN 30
#define MAX_etu 150
typedef struct etudiant {
char nom[MAXN];
char prenom[MAXN];
float med;
float final;
float tp;
}ETUDIANT;
void initialise(ETUDIANT *tab_etu, int nb_etu);
int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements);
int comparer(char* nom1, char* nom2);
void insereNom(ETUDIANT *tab_etu, int nbelements,int pos);
void affiche(ETUDIANT *tab, int nb_etu);
int main()
{
ETUDIANT tab[MAX_etu];
int nb_etu;
float note;
char reponse;
int i=0,j=0;
printf("entrez le nombre d'etudiants\n");
scanf("%d",&nb_etu);
fgetc(stdin);
for(i=0;i<nb_etu;i++)
{initialise(tab,i);//fonction déja définie
j=recherchePosition(tab,tab[i].nom,tab[i].prenom,i);//c'est la fonction qui me pose le plus problème
printf("----------valeur retournee vaut-----%d--------------\n\n",j);// juste pour avoir le resultat sous les yeux
insereNom(tab,i+1, j);//pour inserer le dernier nom entré à la place qu'il doit occuper.
}
affiche(tab,nb_etu);//pour afficher le tableau
}
voici les fonctions que j'ai appelées sur le programme principal:
int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements)
{
// int n, m,k=0,i=0;
int i;
int j=0;
for(i=0;i<=nbelements;i++)
{
if(strcmp((tab_etu[i].nom),nom1)<0)
{ j++;
}
}
return j;
}
void insereNom(ETUDIANT *tab_etu, int nbelements,int pos)
{
int i,j=nbelements;
i=pos; //recherchePosition(tab_etu,tab_etu[j-1].nom,tab_etu[j-1].prenom,nbelements);
j=nbelements;
while(j>i)
{
strcpy((tab_etu[j].nom),(tab_etu[j-1].nom));
strcpy((tab_etu[j].prenom),(tab_etu[j-1].prenom));
(tab_etu[j].med)=(tab_etu[j-1].med);
(tab_etu[j].final)=(tab_etu[j-1].final);
(tab_etu[j].tp)=(tab_etu[j-1].tp);
j--;
}
strcpy((tab_etu[i].nom),tab_etu[j-1].nom);
}
void affiche(ETUDIANT *tab, int nb_etu)
{
int j;
for(j=0;j<nb_etu;j++)
{
printf("\n%s",tab[j].nom);
printf("\n%s",tab[j].prenom);
prinf("\n%f",tab[j].med);
prinf("\n%f",tab[j].final);
prinf("\n%f",tab[j].tp);
}
}
merci d'avance
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#define MAXN 30
#define MAX_etu 150
typedef struct etudiant {
char nom[MAXN];
char prenom[MAXN];
float med;
float final;
float tp;
}ETUDIANT;
void initialise(ETUDIANT *tab_etu, int nb_etu);
int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements);
int comparer(char* nom1, char* nom2);
void insereNom(ETUDIANT *tab_etu, int nbelements,int pos);
void affiche(ETUDIANT *tab, int nb_etu);
int main()
{
ETUDIANT tab[MAX_etu];
int nb_etu;
float note;
char reponse;
int i=0,j=0;
printf("entrez le nombre d'etudiants\n");
scanf("%d",&nb_etu);
fgetc(stdin);
for(i=0;i<nb_etu;i++)
{initialise(tab,i);//fonction déja définie
j=recherchePosition(tab,tab[i].nom,tab[i].prenom,i);//c'est la fonction qui me pose le plus problème
printf("----------valeur retournee vaut-----%d--------------\n\n",j);// juste pour avoir le resultat sous les yeux
insereNom(tab,i+1, j);//pour inserer le dernier nom entré à la place qu'il doit occuper.
}
affiche(tab,nb_etu);//pour afficher le tableau
}
voici les fonctions que j'ai appelées sur le programme principal:
int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements)
{
// int n, m,k=0,i=0;
int i;
int j=0;
for(i=0;i<=nbelements;i++)
{
if(strcmp((tab_etu[i].nom),nom1)<0)
{ j++;
}
}
return j;
}
void insereNom(ETUDIANT *tab_etu, int nbelements,int pos)
{
int i,j=nbelements;
i=pos; //recherchePosition(tab_etu,tab_etu[j-1].nom,tab_etu[j-1].prenom,nbelements);
j=nbelements;
while(j>i)
{
strcpy((tab_etu[j].nom),(tab_etu[j-1].nom));
strcpy((tab_etu[j].prenom),(tab_etu[j-1].prenom));
(tab_etu[j].med)=(tab_etu[j-1].med);
(tab_etu[j].final)=(tab_etu[j-1].final);
(tab_etu[j].tp)=(tab_etu[j-1].tp);
j--;
}
strcpy((tab_etu[i].nom),tab_etu[j-1].nom);
}
void affiche(ETUDIANT *tab, int nb_etu)
{
int j;
for(j=0;j<nb_etu;j++)
{
printf("\n%s",tab[j].nom);
printf("\n%s",tab[j].prenom);
prinf("\n%f",tab[j].med);
prinf("\n%f",tab[j].final);
prinf("\n%f",tab[j].tp);
}
}
merci d'avance
Bonjour,
Je ne sais trier des noms par ordre alphabétiaque sur INUX open office org calcul.
Je ne suis pas une pro en informatique!
Est-ce-que quelqu'un peut me donner quelques conseils et me dire la marche à suivre?
D'avance merci
Je ne sais trier des noms par ordre alphabétiaque sur INUX open office org calcul.
Je ne suis pas une pro en informatique!
Est-ce-que quelqu'un peut me donner quelques conseils et me dire la marche à suivre?
D'avance merci
Salut!!
Alors tu veux trier des noms se trouvant dans un fichier, est ce bien sa??
As-tu déja programmé en C?
Il faut que tu utilise les instructions en C pour lire dans un fichier.
FILE *f, fopen....
A première vue tu as plusieur possibilité pour créer tes instruction.
Je pense qu'il faut que tu stock tes noms dans des variable et que ensuite tu les compares en comparant le code ascii de leur diffèrente lettres.
Ensuite tu écris dans un nouveau fichier qui te récris tes variable en les classant par ordre alphabétique.
Voilà en "gros" les démarche a suivre.
Si tu as déja programmé en C cela ne devrait pas etre trop difficile.
Alors tu veux trier des noms se trouvant dans un fichier, est ce bien sa??
As-tu déja programmé en C?
Il faut que tu utilise les instructions en C pour lire dans un fichier.
FILE *f, fopen....
A première vue tu as plusieur possibilité pour créer tes instruction.
Je pense qu'il faut que tu stock tes noms dans des variable et que ensuite tu les compares en comparant le code ascii de leur diffèrente lettres.
Ensuite tu écris dans un nouveau fichier qui te récris tes variable en les classant par ordre alphabétique.
Voilà en "gros" les démarche a suivre.
Si tu as déja programmé en C cela ne devrait pas etre trop difficile.
mmdrame
Messages postés
14
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
23 avril 2006
1
6 nov. 2005 à 16:25
6 nov. 2005 à 16:25
Salut! merci pour ta contribution! Seulement j'aimerais faire le tri sans utiliser les fichiers! Je vais essayer avec le fonction strncmp après je vous tiens informer; je suis en maîtrise informatique, mais j'ai pas encore fait le C...
12 janv. 2008 à 16:10
tu as mis deux fois #include <string.h> .
ensuite, tu ne dis "il ne marche pas". Mais les lecteurs du forum ne vont pas tout refaire le travail : aide nous un peu ! Qu'est ce qui ne marche pas ? Est ce que le programme compile bien (sinon quelles erreurs ? ) ? S'il compile, y'a t-il des "symptomes" ? Qu'est ce qu'il fait ? Il ne'affiche rien du tout ? Il affiche des trucs bizarres ? Il s'arrete tout de suite ? jamais ? Il fait exploser ton PC et tu dois en racheter un à chaque fois que tu le testes ?