Aide : Tri a bulle !
Mizo-Up
Messages postés
49
Statut
Membre
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 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]
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