Bonjour,
Je dois faire un programme qui reçoit les valeurs d'un tableau et les range en ordre croissant.
J'ai pensé faire comme dans le fichier cpp attaché mais ca ne marche pas
quelqu'un a une idée?
merci d'avance
Version imprimable
Bonjour,
Je dois faire un programme qui reçoit les valeurs d'un tableau et les range en ordre croissant.
J'ai pensé faire comme dans le fichier cpp attaché mais ca ne marche pas
quelqu'un a une idée?
merci d'avance
Le commentaire est bon. La boucle l'implementant est mauvaise. Essaie d'afficher ce qui se passe, tu devrais comprendre.
- En C l'extension d'un fichier source est *.c non pas *.cpp
- On ne déclare pas de prototype de fonction à l'intérieur d'une autre mais en dehors de toutes fonctions
- La dernière valeur est automatiquement tirée, il faut donc par courrir le tableau sur n -1
salut,
je te propose le tri par selection car je comprend pas trop la methode que tu as utilisé, voici un code qui pourrait t'aider:
a+Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 void main() {int t[N],i,temp,tri; //remplissage du tableau for(i=0;i<5;i++) scanf("%d",&t[i]); //application du tri par selection for(i=0;i<N-1;i++) {posmin=t[i]; for(j=i+1;j<N;j++) if (t[j]<t[posmin]) posmin=j; temp=t[posmin]; t[posmin]=t[i]; t[i]=temp; }}
Un essai de tri par minimum ;)Citation:
Envoyé par ranell
en général dans ce genre de problème il faut faire un while(condition )
De plus, dans ton code, ta boucle sur i va jusqu'à (nval-1), et donc ton premier j pour ton dernier i dépasse le tableau.
En pseudo-code, voilà l'algo :
Maintenant, tu as un moyen nettement plus simple de faire, mais... Tu ne l'as sans doute pas encore vu en cours..Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Initialiser continuer à vrai Tant que continuer est vrai mettre continuer à faux pour i = 1 à (n-1) pour j = (i+1) à n si t(j) < t(i) echanger t(i) et t(j) mettre continuer à vrai sortir de boucle j fin si fin pour si continuer est vrai sortir de boucle i fin si fin pour fin tant que
Note : j'ai mis les indices de 1 à n ... :D à toi de faire la traduction en C ... ;)
Merci à tous,
Je penseque la double condition t[j]<t[i] et i<nval posait problème car en introduisant une instruction if dans la boucle:
le programme marche très bienCode:
1
2
3
4
5
6
7
8
9 for(j=i+1; j<nval; j++) { if(t[j]<t[i]) { p = t[i]; t[i] = t[j]; t[j] = p; } }
reste à savoir pourquoi
Citation:
Envoyé par Franck.H
je travaille sur visual c++ c'est donc ce que j'ai comme extension mais tout marche bien.
dans le livre que j'utilise (Delannoy), il est expliqué que les prototypes doivent être déclarés dans la fonction appellante.
l'instruction ne sera pas executée pour le dernier i vu que la condition j<nval a été formulée dans la boucle.Citation:
Envoyé par souviron34
[-mod- Attention a bien utiliser les balises]
Ha ... jamais vu ca moi ... :cfou:Citation:
Envoyé par byonatane
Si tu parles de .cpp, c'est l'extension par défaut. Il faut la modifier en .c.Citation:
Envoyé par byonatane
Grosse ânerie.Citation:
dans le livre que j'utilise (Delannoy), il est expliqué que les prototypes doivent être déclarés dans la fonction appellante.
Je ne suis pas surpris. Les livres théoriques de Delannoy de sont pas dans ma liste de ressources recommandées. Je recommande plutôt le Braquelaire
Dans les programmes que j'ai faits jusqu'à maintenant ça marchait très bien et je trouve que le livre est bon.Citation:
Envoyé par Emmanuel Delahaye
Pourqoi ça poseriat un problème de déclarer les prototypes dans la fonction appelante?
Ca ne pose pas de problèmes particulier, si ce n'est que c'est une mauvaise pratique (risque d'incohérence, de doublon, code inutilement lourd et illisible...).Citation:
Envoyé par byonatane
La Bonne Pratique (celle de la bibliothèque C, par exemple), c'est de mettre les prototypes dans un .h, d'y ajouter une 'garde' (protection contre les inclusions multiples dans la même unité de compilation) et d'inclure ce .h à la demande et dans le fichier d'implémentation. C'est la seule façon de garantir des interfaces cohérentes.
A lire en entier :
http://emmanuel-delahaye.developpez.com/codage.htm
Merci de tes conseils
Penses-tu que le livre de delannoy est vraiment mauvais ?
Parce que je travaille dessus depuis 1 mois et demi pour m'avancer pour les études que je commence l'année prochaine et s'il est mauvais, ça risque;
Le mieux reste sans doute le K&R mais pas forcément accessible pour de l'initiation. Sinon le livre qu'Emmanuel à cité plus haut ;)
Je pense que j'ai déjà donné mon avis et que tu connais mes préférences.Citation:
Envoyé par byonatane
Le K&R2 est essentiellement un livre de référence.Citation:
Envoyé par Franck.H
Salut
Merci de ta réponse.
Pense-tu que ca me fera des lacunes si je continue sur ce livre (il m'a été conseillé par un prof d'info)
A propos, vive l'Alsace! (j'habite strasbourg)
:lahola:Citation:
Envoyé par byonatane
De mauvaises pratiques surtout. Le Braquelaire est bien meilleur pour ça.Citation:
Envoyé par byonatane