prob de tri [C] - C++ - Programmation
Marsh Posté le 08-02-2003 à 10:38:46
c'est une histoire d'algo c'est tout.
- petites ramrques: utlise cpp comme balise
- fflush(stdin) n'as tout simplement aucun effet
- le while(!feof)) tu le ranges vite fait (fait une recherche sur le forum, j'ai abordé le problème y a pas longtemps)
- int k=0;
while(k!=j)
{
k++;
}
c'est tout simplement un for(k=0; k<j; ++k)
- evites les macros, les pseudo-constantes sont la:préfères un "const int max=10;" plutot qu'un #define
- compt=compt+1; ou mieux compt++ ou ++compt
- en cas d'aerreur, y a mieux que le printf, y perror
perror("erreur d'ouverture" ) qui t'affiche ton message plus la derniere erreur systeme sur stderr
-si tu peut peut-etre utliser un fichier binaire plutot que texte, ça serait plus simple. sinon, pourquoi passer par NOTE et NOM plutot que passer directement par la structure. d'ailleurs, NOM est déjà un pointeur, donc pas de &
- dans ta boucle de lecture, à quoi sert i? tu as déjà compt
Marsh Posté le 08-02-2003 à 11:38:49
oki thx pour les ptites astuces ki me permetteront d ameliorer mon prog
mai en ce ki concerne mon tri par odre alfabetik elle est ou l erreur car ma fonction marche (tou le reste marche sof le tri )
Marsh Posté le 08-02-2003 à 11:42:28
++Taz a écrit : - fflush(stdin) n'as tout simplement aucun effet |
Tout dépend du type de variable concerné.
Avec des entiers : inutile/
Avec des caractère : obligatoire si on veut éviter les mauvaises surprises
Marsh Posté le 08-02-2003 à 11:47:55
Schumacher a écrit : |
quoi tout dépend des variables? sur les flux d'entrée, ça n'a aucun effet ./
Marsh Posté le 09-02-2003 à 08:27:03
++Taz a écrit : sur les flux d'entrée, ça n'a aucun effet. |
Soyons précis, ça a un effet indéterminé.
Marsh Posté le 09-02-2003 à 09:30:22
Musaran a écrit : Soyons précis, ça a un effet indéterminé. |
ben moi je lis mon K&R et je lis mon man et je vois plus qu'indéterminé: non-défini. et quelque chose qui n'est pas défini peut tres bien ne pas exister
Marsh Posté le 10-02-2003 à 05:40:33
'undefined', indéfini. C'est juste un petit problème de traduction.
Lu je-sais-plus-où :
Quand un comportement est dit 'undefined' c'est qu'il pourrait avoir n'importe quoi comme conséquence.
Par exemple, il pourrait utiliser le modem pour appeler votre belle-mère et l'inviter à dîner.
Marsh Posté le 10-02-2003 à 22:40:44
Amstaff a écrit : Pour ma fonction tri jdoi fair koa alor ?! |
ben tu sors ton crayon HB et tu nous ponds un joli algo, tu le déroules à la main, puis tu essayes de traduire en C (et trouves mieux que le tri a bulles, c'es tle pire de tous. moi j'aime bien le tri par sélection min-max)
Marsh Posté le 08-02-2003 à 09:51:55
bon voila g un programme ki doi lir dan un fichier des noms et des notes, pui les tries par ordre alphabetique et les afficher
mai le prob c ke ma fonction tri marche po et je c po pkoi
help me plz !
voici le code :
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define maxi 10
/* D?claration de la structure de type candidat*/
typedef struct Candidat{
char nom[20];
int note;
}Candidat ;
void main()
{
Candidat tab[maxi];
int compt=0;
FILE *fichier;
int i=0;
char NOM[20];
int NOTE;
//int LG_NOM;
void affichage(Candidat*TAB,int j);
fichier = fopen("C:\\result.don","r" );
/* verification de l'existence du fichier */
if(fichier==NULL)
{
printf("Erreur fichier introuvable\n" );
exit(-1);
}
/**********************************************/
else
{
while(!feof(fichier))
{
fscanf(fichier,"%s%d",&NOM, &NOTE);
tab[i].note=NOTE;
strcpy(tab[i].nom,NOM);
compt=compt+1;
i++;
}
fclose(fichier);
}
tri(tab,compt);
affichage(tab,i);
}
void affichage(Candidat *TAB,int j)
{
int k=0;
while(k!=j)
{
printf("Nom du candidat : %s\nNote : %d\n",TAB[k].nom,TAB[k].note);
k++;
}
fflush(stdin);
getchar();
}
void tri(struct Candidat *tab, int nombre)
{
int i,j;
struct Candidat cle;
for(i=1;i<nombre;i++)
{
cle=tab[i];
for(j=i-1;(j>=0)&&(strcmp(cle.nom,tab[j].nom)<0);j--)
tab[j+1]=tab[j];
tab[j+1]=cle;
}
}
marchi pour votre aide