Bonjour à tous,
J'ai cherché dans le forum le code pour trier et trouver la valeur max dans un fichier texte. J'en ai trouvé quelques un. Mais c'est pas en C. Quelqu'un peut me donner le code en C qui fait cela. C'est gentil. Merci beaucoup.
Bonjour à tous,
J'ai cherché dans le forum le code pour trier et trouver la valeur max dans un fichier texte. J'en ai trouvé quelques un. Mais c'est pas en C. Quelqu'un peut me donner le code en C qui fait cela. C'est gentil. Merci beaucoup.
Bonjour,
Qu'appelles tu la "valeur max dans un fichier texte" ?
Ça dépend de la manière dont est organisé ton fichier, de la façon dont sont stockées les valeurs... En bref, de la façon par laquelle a été généré le fichier.
Il faudrait que tu nous donnes plus d'informations pour qu'on puisse t'aider.
Par exemple, j'ai un fichier texte comme ci-dessous. Tu peux le metre dans l'ordre croissant et décroissant et trouver la valeur maximale de cette colone? Merci beaucoup.
-1533.
-1329.
-1107.
-828.
-625.
-76.
-220.
19.
40.
100.
161.
425.
5648.
5490.
1589.
1660.
1705.
4494.
4365.
4050.
Ton fichier est déjà ranger dans l'ordre croissant/ décroissant ??
Si oui alors soit tu lit la dernière ligne (ordre croissant) et tu auras la plus grande valeur. Dernière ligne si tu as un ordre décroissant.
Sinon trie tout d'abords tes données et ensuite reprend les lignes du dessus dans le cas qui va bien :p
Alors, il y a toujours plusieurs façon de faire une chose en C, il n'y a pas UN code pour un problème.
Dans ton cas, il faut :
- Lire le fichier
- Stocker les valeurs
- Trier les valeurs
- Les enregistrer triées dans un nouveau fichier
- Donner la valeur maximum
1- Lecture du fichier.
Une lecture de fichier est assez simple en C :
2- stockage des valeurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 FILE * f = fopen("le_fichier.txt", "r"); if(NULL == f) { perror("le_fichier.txt"); } else { char buf[256]; while(NULL != fgets(buf, sizeof buf, f) { printf("buf\n"); } fclose(f); }
Dans ce qui suit, je n'affiche plus les valeurs à la lecture, mais les stocke et les affiche en toute fin.
Et ainsi de suite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 int valeurs[100]; FILE * f = fopen("le_fichier.txt", "r"); if(NULL == f) { perror("le_fichier.txt"); } else { int i, cnt = 0; char buf[256]; while(NULL != fgets(buf, sizeof buf, f) { valeurs[cnt ] = strtol(buf, NULL, 10); ++cnt ; if(cnt >= 100) { printf("Attention : trop de valeurs dans le fichier.\n"); break; } } for(i = 0; i < cnt; ++i) { printf("valeur %d : %d\n", i, valeurs[i]); } fclose(f); }
et le tri, ça doit être l'exercice qu'on t'a demandé de faire..
Et que donc nous ne ferons pas à ta place![]()
Dans ce cas commence par mettre sur papier (du vrai papier hein pas du papier WORD ni NOTEPAD et autre) et ce grace à un crayon TES idées.
Marque sur ce papier la succession d'étapes qui vont te permettre de trouver ton résultat final. Construit ainsi ton algorithme.
Je suppose que plus de personnes seront prettes à t'aider si tu offre une petite ébauche, prouvant ainsi que tu as au moins tenter
Exemple pour illustrer mes propos(de ce que tu devrait faire sur feuille pour ton cas ) :
Ce que j'ai écrit au dessus peut paraître stupide, mais certaine personne n'y pense même pas et ce lance parfois (moi tout le temps et c'est pas bien je sais) dans le programme sans vraiment penser aux différents problèmes que l'on risque de rencontrer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 ! COMMENTAIRE : Algorithme de mise en route d'un four micro onde 1- Ouverture de la porte 2- Mise en place de la viande 3- Si viande congelée alors mettre sur "DEFROST" Sinon alors mettre sur 600 watt Fin Si 4- Fermer la porte 5- Suivant POIDS VIANDE Mettre le TEMPS de cuisson correct Fin Suivant 6- Appuyer sur DEMARER
Essais de prendre en compte le NOMBRE MAXIMUM que tu devra trier et aussi le nombre minimum.
Pense à comment tu ferais pour trier (et la je te met sur la route) :
Prenons 4 verres et 1 bol.
1 le bol est totalement vide.
Les verres contiennent 3, 7, 2 et 1 billes (dans l'ordre).
En te servant de ce bol comme de récipient provisoire pour tes billes, comment pourrais-tu trier dans l'ordre croissant le contenu des verres ?
a- Prendre un verre au hazard
b- Comparer le nombre de billes présente dans ce verre avec ceux contenu dans chacun des autres verres
c- Si le nombre est plus grand (ou plus petit comme tu veux) échanger les contenu par l'intermédiaire du bol vide.
d - etc... je te laisse deviner la suite
Mais a aucun moment il ne faut poser les billes sur la table ! Le BOL est la pour empecher cela et servir de recipient PROVISOIRE !!!
Bonne chance![]()
Apparemment, le but n'est pas de trier mais de trouver les valeurs minimum et maximum, ce qui est plus simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 - Définir deux variables min et max - Ouvrir le fichier et lire la première valeur. La mettre dans min et dans max - Tant qu'on n'est pas arrivé à la fin du fichier - lire une valeur - si cette valeur est inférieure à min, la mettre dans min - si cette valeur est supérieure à max, la mettre dans max - Fermer le fichier
Merci de m'avoir aidé pour trouver la valeur max et min. Mais mon but est de trier le fichier texte et le mettre dans un nouveau fichier.
dans ce cas l'algo est le suivant :
y a plus qu'à coder...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 1) créer un tableau suffisamment grand pour pouvoir contenir toutes les données qui seront lues => cf la fonction calloc() 2) lire toutes les données => cf les fonctions fopen(), fgets() et strtod() (ou strtol() si tu n'as que des entiers) et les stocker dans ton tableau 3) trier le tableau => cf un algo tri à bulle par exemple voir le net. Sinon tu as la fonction qsort qui fait le boulot. 4) écrire toutes les données dans le nouveau fichier => cf les fonctions fopen() et fprintf() 5) fermer les 2 fichiers => fclose() 6) libérer la mémoire du tableau alloué => free()
Ou une variation
...
insérer dans le tableau à la bonne place directement comme cela, il n'y a pas à trier en fin de lecture
...
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
Si jamais t'es pas chaud du trie par insertion parceque tu ne vois pas comment le mettre en oeuvre.
Tu peux utiliser un trie a bule particulierement simple a comprendre mais d'une lenteur proportionnel a sa simplicitee
Et assure toi que les chiffres que tu dois trier ne sont pas trop grands ou trop petits pour rentrer dans un int![]()
Partager