Probleme en C.
Résolu/Fermé
adamodin
Messages postés
78
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
15 décembre 2010
-
15 mars 2010 à 18:24
adamodin Messages postés 78 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 15 décembre 2010 - 17 mars 2010 à 13:24
adamodin Messages postés 78 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 15 décembre 2010 - 17 mars 2010 à 13:24
14 réponses
adamodin
Messages postés
78
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
15 décembre 2010
13
15 mars 2010 à 22:23
15 mars 2010 à 22:23
il n'affiche pas des msg ; peut etre il y a un erreur ds cette partie .car si j éliminer cette partie le pc compiler bien le programme et le # si je l'eliminer pas .donc la question est : ou est le probleme ds cette partie malheureusement je le trouve pas .
A part l'erreur de compilation , la condition pour la repetition des instructions est que trie==0 , or des le debut trie =1 .
mohammed3011
Messages postés
23
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
18 février 2011
16 mars 2010 à 11:11
16 mars 2010 à 11:11
bonjour,
je croi que t'a ici une boucle infini,
quand le programme sort de cette partie de code
for (i = 0 ; i < 10 ; i++)
{
{if (tableau[i] > tableau[i+1])
{
ech =tableau[i];
tableau[i] =tableau[i+1];
tableau[i+1] =ech;
trie =0;
}
}
}
trie aura une valeur de 0
et juste apres tu fais
while (trie==0); "ca c'est une boucle infini"
je croi que t'a ici une boucle infini,
quand le programme sort de cette partie de code
for (i = 0 ; i < 10 ; i++)
{
{if (tableau[i] > tableau[i+1])
{
ech =tableau[i];
tableau[i] =tableau[i+1];
tableau[i+1] =ech;
trie =0;
}
}
}
trie aura une valeur de 0
et juste apres tu fais
while (trie==0); "ca c'est une boucle infini"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
Il n'y a aucune boucle infinie. Le trie==0 , et le trie =1 sont très bien placés.
Mais il y a une { en trop avant le if.
Attention aussi à la limite 10 : s'il y a 10 éléments, la limite devrait être 8 (le dernier élément est tableau[9] et la dernière comparaison se fait avec tableau[i+1]
Il n'y a aucune boucle infinie. Le trie==0 , et le trie =1 sont très bien placés.
Mais il y a une { en trop avant le if.
Attention aussi à la limite 10 : s'il y a 10 éléments, la limite devrait être 8 (le dernier élément est tableau[9] et la dernière comparaison se fait avec tableau[i+1]
WinError
Messages postés
511
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
19 juillet 2010
30
16 mars 2010 à 11:23
16 mars 2010 à 11:23
do
{
trie=0;
for (i = 0 ; i < 9 ; i++)
{
if (tableau[i] > tableau[i+1])
{
ech =tableau[i];
tableau[i] =tableau[i+1];
tableau[i+1] =ech;
trie =0;
}
}
} while (trie==1);
Moi je le verrais mieux comme sa le code ;)
{
trie=0;
for (i = 0 ; i < 9 ; i++)
{
if (tableau[i] > tableau[i+1])
{
ech =tableau[i];
tableau[i] =tableau[i+1];
tableau[i+1] =ech;
trie =0;
}
}
} while (trie==1);
Moi je le verrais mieux comme sa le code ;)
WinError
Messages postés
511
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
19 juillet 2010
30
16 mars 2010 à 11:32
16 mars 2010 à 11:32
Désolé trompé non le tire doit rester a 0 :s la tété dans le luc' sorry
WinError
Messages postés
511
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
19 juillet 2010
30
16 mars 2010 à 11:33
16 mars 2010 à 11:33
Mais si tu as un compilateur tu devrais avoir une option de déboguage..
mohammed3011
Messages postés
23
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
18 février 2011
16 mars 2010 à 11:37
16 mars 2010 à 11:37
désolé je me suis trempé je suis d'accord avec "le père"
adamodin
Messages postés
78
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
15 décembre 2010
13
16 mars 2010 à 22:06
16 mars 2010 à 22:06
je crois pas que le probleme en nombre des element car le compteur prend la valeur 0 au débit il arrête quand il arrive a la valeur 9 (car i<10) d'autre part soit trie=0 au debut soit egal a 1 seulement il faut mettre l'inverse au condition ( apres while ).
Si ton tableau a 10 éléments (tableau[0] à tableau[9] ) tu as bien un problème de limite. Car dans ta dernière boucle, avec i=9 tu accèdes à tableau[i+1] soit tableau[10] -> erreur.
J'avais tort aussi en disant 8. 8 doit être la valeur de i lors de la dernière boucle, le test doit donc être i<9
Pour tes valeurs et tes tests sur trie, je suis d'accord depuis le début.
Mais tu avais bien une { en trop avant le if. Tu as 4 { pour 3 }
J'avais tort aussi en disant 8. 8 doit être la valeur de i lors de la dernière boucle, le test doit donc être i<9
Pour tes valeurs et tes tests sur trie, je suis d'accord depuis le début.
Mais tu avais bien une { en trop avant le if. Tu as 4 { pour 3 }
adamodin
Messages postés
78
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
15 décembre 2010
13
16 mars 2010 à 22:53
16 mars 2010 à 22:53
je ai modifie et j ai fait ce que vous avez me dit mais le programme fait pas le trie et il affiche les element sans faire le trie voila ce que j ai fait
#include<stdio.h>
#include <stdlib.h>
#define n_max 500
int main()
{
int tableau[n_max], i = 0, max =0, min =0,s =0,ech =0,trie,p;
double m =0;
printf("bonjour Mr xxxx\n\n");
do{ printf("saisir la taille de tableau ou le nombre des element\n\n");
scanf("%d",&p);
}while ((p<0) || (p>n_max));
for (i = 0 ; i < p ; i++)
{
printf("saisir le %d eme element\n\n",i+1);
scanf("%d",&tableau[i]);
}
max =tableau[0];
min =tableau[0];
for (i = 0 ; i < p ; i++)
{ if (tableau[i]>max)
max=tableau[i];
if (tableau[i]<min)
min=tableau[i];
}
for (i = 0 ; i < p ; i++)
s =s +tableau[i];
do
{
trie=0;
for (i = 0 ; i < p-1 ; i++)
{
if (tableau[i] > tableau[i+1])
{
ech =tableau[i];
tableau[i] =tableau[i+1];
tableau[i+1] =ech;
trie =0;
}
}
} while (trie==1);
for (i = 0 ; i < p ; i++)
{
printf("%d\n", tableau[i]);
}
m =s/p;
printf("la somme des element de tableau est %d\n\n",s);
printf("le moyenne est %2f\n\n",m);
printf("le maximun est %d\n\n",max);
printf("le minimum est %d\n\n",min);
printf("merci je suis ravi de vous srevir Mr xxxx\n\n");
system("PAUSE");
return 0;
}
#include<stdio.h>
#include <stdlib.h>
#define n_max 500
int main()
{
int tableau[n_max], i = 0, max =0, min =0,s =0,ech =0,trie,p;
double m =0;
printf("bonjour Mr xxxx\n\n");
do{ printf("saisir la taille de tableau ou le nombre des element\n\n");
scanf("%d",&p);
}while ((p<0) || (p>n_max));
for (i = 0 ; i < p ; i++)
{
printf("saisir le %d eme element\n\n",i+1);
scanf("%d",&tableau[i]);
}
max =tableau[0];
min =tableau[0];
for (i = 0 ; i < p ; i++)
{ if (tableau[i]>max)
max=tableau[i];
if (tableau[i]<min)
min=tableau[i];
}
for (i = 0 ; i < p ; i++)
s =s +tableau[i];
do
{
trie=0;
for (i = 0 ; i < p-1 ; i++)
{
if (tableau[i] > tableau[i+1])
{
ech =tableau[i];
tableau[i] =tableau[i+1];
tableau[i+1] =ech;
trie =0;
}
}
} while (trie==1);
for (i = 0 ; i < p ; i++)
{
printf("%d\n", tableau[i]);
}
m =s/p;
printf("la somme des element de tableau est %d\n\n",s);
printf("le moyenne est %2f\n\n",m);
printf("le maximun est %d\n\n",max);
printf("le minimum est %d\n\n",min);
printf("merci je suis ravi de vous srevir Mr xxxx\n\n");
system("PAUSE");
return 0;
}
j ai fait ce que vous avez me dit
Non, tu n'as pas fait ce que j'ai dit
Je t'ai dit que ta façon de gérer la variable 'trie' était bonne dès le départ. Or tu l'as modifiée.
Laisse l'initialisation trie=1 au début de la boucle et while (trie==0) comme condition
Tu peux aussi inverser le sens de la variable : l'initialiser à 0, la forcer à 1 quand tu permutes deux élements et faire while (trie==1). Mais sois cohérent
Non, tu n'as pas fait ce que j'ai dit
Je t'ai dit que ta façon de gérer la variable 'trie' était bonne dès le départ. Or tu l'as modifiée.
Laisse l'initialisation trie=1 au début de la boucle et while (trie==0) comme condition
Tu peux aussi inverser le sens de la variable : l'initialiser à 0, la forcer à 1 quand tu permutes deux élements et faire while (trie==1). Mais sois cohérent
adamodin
Messages postés
78
Date d'inscription
lundi 10 août 2009
Statut
Membre
Dernière intervention
15 décembre 2010
13
17 mars 2010 à 13:24
17 mars 2010 à 13:24
ok merci bien j ai trouve la solution .
merci bien
merci bien