Tableau et tri à bulles
Fermé
Lewisdu76
Messages postés
97
Date d'inscription
mercredi 13 juin 2007
Statut
Membre
Dernière intervention
17 novembre 2012
-
17 nov. 2012 à 03:10
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 17 nov. 2012 à 21:11
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 17 nov. 2012 à 21:11
A voir également:
- Tri bulle c
- Tri excel - Guide
- Video bulle whatsapp - Accueil - Messagerie instantanée
- Logiciel tri photo gratuit - Guide
- Changer couleur bulle whatsapp - Accueil - Messagerie instantanée
- Bulle numero ✓ - Forum Word
8 réponses
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
17 nov. 2012 à 09:50
17 nov. 2012 à 09:50
En pseudo-code:
procédure tri_bulle(tableau T, entier n) répéter échange_effectué = faux pour j de 0 à n - 2 si T[j] > T[j + 1], alors échanger T[j] et T[j + 1] échange_effectué = vrai tant que échange_effectué fin procédure
Lewisdu76
Messages postés
97
Date d'inscription
mercredi 13 juin 2007
Statut
Membre
Dernière intervention
17 novembre 2012
18
17 nov. 2012 à 12:00
17 nov. 2012 à 12:00
Merci pour ton aide. Ca c'est la fonction que j'ai à créer pour faire le tri? J'ai esssayé de on coté avec des morceaux de cours mais ca donne pas grand chose... Regarde :
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=10, A[100];
alea (A,n);
affichage (A,n);
Tri (A,n);
affichage (A,n);
return (0);
}
void alea(int A[],int n)
{
int i;
srand(1);
for (i=0;i<n;i++) A[i]=rand()/100;
}
void Tri (int A[],int n )
{
int j;
int i;
for( j=0,j<n-1,j++)
for(i=0,i<n-j-1,i++)
if(A[i]>A[i+1])echange (&A(i),&A(i+1));
}
void echange (int*x,int*y)
{
int k,h;
h=*x;
*x=*y;
*y=k;
}
void affichage(int n,float A[100])
{
int i;
for (i=0;i< n;i++) printf("A[%d] = %f\n",i,A[i]);
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=10, A[100];
alea (A,n);
affichage (A,n);
Tri (A,n);
affichage (A,n);
return (0);
}
void alea(int A[],int n)
{
int i;
srand(1);
for (i=0;i<n;i++) A[i]=rand()/100;
}
void Tri (int A[],int n )
{
int j;
int i;
for( j=0,j<n-1,j++)
for(i=0,i<n-j-1,i++)
if(A[i]>A[i+1])echange (&A(i),&A(i+1));
}
void echange (int*x,int*y)
{
int k,h;
h=*x;
*x=*y;
*y=k;
}
void affichage(int n,float A[100])
{
int i;
for (i=0;i< n;i++) printf("A[%d] = %f\n",i,A[i]);
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
17 nov. 2012 à 12:17
17 nov. 2012 à 12:17
Le C ce n'est pas juste de l'assemblage de code...
Tu utilises void affichage(int, float) alors que ton tableau est en int... Il faut au moins une certaine cohérence.
Pour la fonction Tri, Heliotte t'a donné le pseudo-code, encore faut-il respecter l'algorithme. Ce que vous avez écrit n'est pas du tri à bulle.
Ta fonction echange() est fausse. Tu fais *y=k. Alors que k vaut n'a pas été initialisé... Cette ligne est à revoir.
Et enfin, il ne faut pas oublier de déclarer tes variables avant de les appeler. Sinon ton compilateur va raler.
Tu utilises void affichage(int, float) alors que ton tableau est en int... Il faut au moins une certaine cohérence.
Pour la fonction Tri, Heliotte t'a donné le pseudo-code, encore faut-il respecter l'algorithme. Ce que vous avez écrit n'est pas du tri à bulle.
Ta fonction echange() est fausse. Tu fais *y=k. Alors que k vaut n'a pas été initialisé... Cette ligne est à revoir.
Et enfin, il ne faut pas oublier de déclarer tes variables avant de les appeler. Sinon ton compilateur va raler.
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
Modifié par Heliotte le 17/11/2012 à 18:04
Modifié par Heliotte le 17/11/2012 à 18:04
Le tri à bulles devrait ressembler à :
void Tri(int A[],int n) { int i,j,iTemp; bool EchangeEffectue; EchangeEffectue=true; while(EchangeEffectue) { EchangeEffectue=false; for (i=0 ; i<n-j-1 ; i++) { if (A[i] >= A[i+1]) { iTemp=A[i]; A[i]=A[i+1]; A[i+1]=iTemp; EchangeEffectue=true; } } } }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
17 nov. 2012 à 18:10
17 nov. 2012 à 18:10
T'as le chic pour faire les exos des autres ^^.
Mais, il y a des erreurs.
Espérons qu'il les voit :-)
Mais, il y a des erreurs.
Espérons qu'il les voit :-)
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
Modifié par Heliotte le 17/11/2012 à 19:07
Modifié par Heliotte le 17/11/2012 à 19:07
Espérant ne pas avoir contrecarré tes projets ..
Pour un simple tri à bulles, il est dessus depuis hier soir, je pense qu'il a bien bossé .. un coup de pouce, c'est tout
Sans rancune j'espère
Pour un simple tri à bulles, il est dessus depuis hier soir, je pense qu'il a bien bossé .. un coup de pouce, c'est tout
Sans rancune j'espère
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
17 nov. 2012 à 21:11
17 nov. 2012 à 21:11
Heliotte,
Perso, j'en ai rien à secouer que tu fasses ses devoirs.
Ce que je dis juste, c'est que je te propose plutôt de l'aider en donnant des indices, en le corrigeant que de donner la réponse. Surtout que ton code est faux...
Je t'invite à lire la charte CCM pour comprendre sa philosophie ;-)
Perso, j'en ai rien à secouer que tu fasses ses devoirs.
Ce que je dis juste, c'est que je te propose plutôt de l'aider en donnant des indices, en le corrigeant que de donner la réponse. Surtout que ton code est faux...
Je t'invite à lire la charte CCM pour comprendre sa philosophie ;-)
armasousou
Messages postés
1267
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
Modifié par armasousou le 17/11/2012 à 12:22
Modifié par armasousou le 17/11/2012 à 12:22
1) Pas besoin de pointeur à ton niveau.
2) Tu te permet de sauter les acolades des bloques conditionnels et des boucles, chose fortement deconseillé même pour les programmeurs expérimentés.
3) Ta fonction alea n'est absolument pas aléatoire, cherche sur le net des exemples.
2) Tu te permet de sauter les acolades des bloques conditionnels et des boucles, chose fortement deconseillé même pour les programmeurs expérimentés.
3) Ta fonction alea n'est absolument pas aléatoire, cherche sur le net des exemples.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Lewisdu76
Messages postés
97
Date d'inscription
mercredi 13 juin 2007
Statut
Membre
Dernière intervention
17 novembre 2012
18
17 nov. 2012 à 12:32
17 nov. 2012 à 12:32
Merci pour vos aides et désolé si je vous choque par mon travail ^^ Je trouve que le prof commence bien trop fort pour des étudiants qui ont jamais vu ça...
armasousou
Messages postés
1267
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
17 nov. 2012 à 12:39
17 nov. 2012 à 12:39
C'est des trucs de base à vrai dire ^^
Lewisdu76
Messages postés
97
Date d'inscription
mercredi 13 juin 2007
Statut
Membre
Dernière intervention
17 novembre 2012
18
17 nov. 2012 à 12:53
17 nov. 2012 à 12:53
Ah lol Quelqu'un aurait il la gentillesse de me proposer un programme complet? Je ne parvient pas à corriger les erreurs :/
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
17 nov. 2012 à 12:58
17 nov. 2012 à 12:58
T'arrives pas à traduire le code d'Héliotte en C ??
Un tuto sympa pour débuter : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c
Un tuto sympa pour débuter : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c
Lewisdu76
Messages postés
97
Date d'inscription
mercredi 13 juin 2007
Statut
Membre
Dernière intervention
17 novembre 2012
18
17 nov. 2012 à 13:01
17 nov. 2012 à 13:01
J'ai déjà lu le premier chapitre du tuto et c'est vrai qu'il est super ! Mais je bloque quand même :/
armasousou
Messages postés
1267
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
17 nov. 2012 à 13:09
17 nov. 2012 à 13:09
C'est simple.
Tu regarde tous les nombres dans ton tableau, tu cherche le plus petit, tu le met à la place 0. Tu reregarde tous les nombres dans ton tableau, tu cherche le plus petit sans compté le 0 et tu le met à la place 1. Autant de fois qu'il y a besoin.
Tu regarde tous les nombres dans ton tableau, tu cherche le plus petit, tu le met à la place 0. Tu reregarde tous les nombres dans ton tableau, tu cherche le plus petit sans compté le 0 et tu le met à la place 1. Autant de fois qu'il y a besoin.
Lewisdu76
Messages postés
97
Date d'inscription
mercredi 13 juin 2007
Statut
Membre
Dernière intervention
17 novembre 2012
18
17 nov. 2012 à 13:13
17 nov. 2012 à 13:13
Oui j'ai compris le principe mais c'est à retranscrire en language C que je n'arrive pas enfin bon je vais continuer d'essayer et au pire je rendrais un programme qui ne fonctionne pas ..
armasousou
Messages postés
1267
Date d'inscription
dimanche 16 août 2009
Statut
Membre
Dernière intervention
30 décembre 2016
83
17 nov. 2012 à 13:24
17 nov. 2012 à 13:24
if( t[i] < t[i-1] )
{
tmp=t[i];
t[i] = t[i-1];
t[i-1]=rmp;
}
{
tmp=t[i];
t[i] = t[i-1];
t[i-1]=rmp;
}
Lewisdu76
Messages postés
97
Date d'inscription
mercredi 13 juin 2007
Statut
Membre
Dernière intervention
17 novembre 2012
18
17 nov. 2012 à 14:05
17 nov. 2012 à 14:05
Alors voilà ce que j'ai, le programme marche seulement la fonction aléatoire non comment faire pour généner des chiffres aléatoire et non fixés?
#include <stdio.h> #include <stdlib.h> int main() { int A[100]; int n=10; alea(A,n); affichage(A,n); Tri(A,n); affichage(A,n); return(0); } void alea(int A[],int n) { int i; srand(1); for (i=0;i<n;i++) A[i]=rand()/100; } void affichage(int A[], int N) { int i; for (i=0 ; i<N ; i++) printf("%d\n",A[i]); printf("\n\n"); } void Tri(int A[],int n) { int i,j; for (j=0;j<n;j++) for (i=0 ; i<n-j-1 ; i++) if (A[i] >= A[i+1]) echange(&A[i],&A[i+1]); } void echange(int*x,int*y) { int k; k=*x; *x=*y; *y=k; }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
17 nov. 2012 à 14:43
17 nov. 2012 à 14:43
Normal, tu as mis srand(1); il faudrait mettre srand(time(NULL)); et inclure l'entête time.h.
Sinon, ton programme fonctionne, sauf que tu respectes pas la consigne...
Il faut implémenter le tri à bulle.
Sinon, ton programme fonctionne, sauf que tu respectes pas la consigne...
Il faut implémenter le tri à bulle.