Aide : Tri a bulle !
Mizo-Up
Messages postés
41
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Salut ! Je veux savoir il est ou le problem sur le coude source suivant :
#include <stdio.h>
#include <stdlib.h>
void Tri_A_Bulle(int n, int t[]){
int i,p,f;
f=1;
while (f=1){
f=0;
for (i=0;i<=n;i++){
if (t[i]>t[i+1]){
p=t[i+1];
t[i+1]=t[i];
t[i]=p;
f=1;
}
}
for (i=0;i<=n-1;i++){
printf ("%d !! ",t[i]);
}
}
}
int main()
{
int i,n;
printf("Donner la dimension du tableau\n");
scanf ("%d",&n);
int t[n];
for (i=0;i<n;i++){
printf ("Donner un nombre");
scanf ("%d",&t[i]);
}
Tri_A_Bulle(t,n);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void Tri_A_Bulle(int n, int t[]){
int i,p,f;
f=1;
while (f=1){
f=0;
for (i=0;i<=n;i++){
if (t[i]>t[i+1]){
p=t[i+1];
t[i+1]=t[i];
t[i]=p;
f=1;
}
}
for (i=0;i<=n-1;i++){
printf ("%d !! ",t[i]);
}
}
}
int main()
{
int i,n;
printf("Donner la dimension du tableau\n");
scanf ("%d",&n);
int t[n];
for (i=0;i<n;i++){
printf ("Donner un nombre");
scanf ("%d",&t[i]);
}
Tri_A_Bulle(t,n);
return 0;
}
2 réponses
int t[n];
Ne marche qu'en C99. Sinon il faut utiliser le malloc().
while (f=1)
Boucle infinie. L'opérateur de comparaison est == (et non =).
for (i=0;i<=n;i++){
if (t[i]>t[i+1]){
La valeur max est i=n. Donc t[i] est à l'extérieur du tableau et ne parlons pas de t[i+1]
Ne marche qu'en C99. Sinon il faut utiliser le malloc().
while (f=1)
Boucle infinie. L'opérateur de comparaison est == (et non =).
for (i=0;i<=n;i++){
if (t[i]>t[i+1]){
La valeur max est i=n. Donc t[i] est à l'extérieur du tableau et ne parlons pas de t[i+1]
Merci Fiddy,
Pour la derniere Remarque, j'ai pas bien compirs,
Enfin kesk'il faut faire ?!
Pour la derniere Remarque, j'ai pas bien compirs,
Enfin kesk'il faut faire ?!
Mais dans la class on utulise int t[n];
Exaspérant ^^.
En bon C, int t[X] est une allocation statique (on fixe X une bonne fois pour toute).
Si on désire créer un tableau d'une taille connue à l'exécution, on utilise l'allocation dynamique. Concrètement, il s'agit d'un pointeur qui pointe sur une zone qu'on va allouer dans le heap.
Cela donne :
/*déclaration*/
int *p;
/*allocation dynamique : n est défini avec scanf()*/
p=malloc(n*sizeof(int));
/*lorsque tu n'as plus besoin du tableau, libération de la mémoire*/
free(p), p=NULL;
Variante statique :
#define X 15
/*allocation statique : X est connue à la compilation*/
int t[X];
C'est d'ailleurs le cas idéal en C pour apprendre les pointeurs.
Une nouvelle norme est sortie pour le C (ISO C99) et cela autorise dans certains cas int t[n]; avec n défini à l'exécution. Il s'aggit du mécanisme complexe de VLA. Mais quand on débute, ce n'est pas recommandé.
En espérant avoir été clair
Exaspérant ^^.
En bon C, int t[X] est une allocation statique (on fixe X une bonne fois pour toute).
Si on désire créer un tableau d'une taille connue à l'exécution, on utilise l'allocation dynamique. Concrètement, il s'agit d'un pointeur qui pointe sur une zone qu'on va allouer dans le heap.
Cela donne :
/*déclaration*/
int *p;
/*allocation dynamique : n est défini avec scanf()*/
p=malloc(n*sizeof(int));
/*lorsque tu n'as plus besoin du tableau, libération de la mémoire*/
free(p), p=NULL;
Variante statique :
#define X 15
/*allocation statique : X est connue à la compilation*/
int t[X];
C'est d'ailleurs le cas idéal en C pour apprendre les pointeurs.
Une nouvelle norme est sortie pour le C (ISO C99) et cela autorise dans certains cas int t[n]; avec n défini à l'exécution. Il s'aggit du mécanisme complexe de VLA. Mais quand on débute, ce n'est pas recommandé.
En espérant avoir été clair