Prog_dichotomique en c
Résolu/Fermé
tarik
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour, voici le code tout simple:
#include<stdio.h>
int main()
{
int tableau[] ={15,20,23,24,25,26,30,45,55,66,67,68,77};
int elem;
int inf;
int sup;
int m=0;
int trouve;
elem=23;
inf =0; sup=6;
trouve=0;
while((inf<=sup) && (trouve==0))
{
m=(inf+sup) / 2 ;
if(tableau[m]==elem){ trouve=1;
printf("elem se trouve à la %d ème position\n",m);
}
else{
if(tableau[m] > elem)
inf=m+1;
else
inf=m+1;
}
}
}
Je débute en c, , le programme se compile normalement avec la commande:gcc -g -o exo_2_11 exo_2_11.c, (nom du fichier)
mais ne s execute pas et avec aucun message d'avertissement,
et quand j utilise gdb il me dit :
Failed to read a valid object file image from memory
Breakpoint 1 at 0x80483f8: file exo_2_11.c, line 4, la ligne 4est la ligne de déclaration du tableau, je ne comprends pas please help me
#include<stdio.h>
int main()
{
int tableau[] ={15,20,23,24,25,26,30,45,55,66,67,68,77};
int elem;
int inf;
int sup;
int m=0;
int trouve;
elem=23;
inf =0; sup=6;
trouve=0;
while((inf<=sup) && (trouve==0))
{
m=(inf+sup) / 2 ;
if(tableau[m]==elem){ trouve=1;
printf("elem se trouve à la %d ème position\n",m);
}
else{
if(tableau[m] > elem)
inf=m+1;
else
inf=m+1;
}
}
}
Je débute en c, , le programme se compile normalement avec la commande:gcc -g -o exo_2_11 exo_2_11.c, (nom du fichier)
mais ne s execute pas et avec aucun message d'avertissement,
et quand j utilise gdb il me dit :
Failed to read a valid object file image from memory
Breakpoint 1 at 0x80483f8: file exo_2_11.c, line 4, la ligne 4est la ligne de déclaration du tableau, je ne comprends pas please help me
9 réponses
petite erreur voila ton code qui marche
#include<stdio.h>
int main()
{
int elem;
int borneinf=0;
int bornesup=13;
int m=0;
int trouve;
int t[] ={15,20,23,24,25,26,30,45,55,66,67,68,77};
elem=45;
trouve=0;
printf("inf=%d sup=%d\n",borneinf,bornesup);
while((borneinf <= bornesup) && (trouve==0))
{
int m=(borneinf+bornesup) / 2 ;
if(t[m]==elem)
{trouve=1;
printf("elem se trouve à la %d ème position\n",m+1);
}
else
{
if(t[m] > elem)
bornesup=m-1;
else
borneinf=m+1;
}
}
}
t'avais oublier des accolades apres ton if(t[m]==elem) car tu as 2 instructions qui suivent...
Et puis dans l'algo tu avais inversé à la fin. Aussi il faut renommer tes inf et sup parce que g remarqué qu'il avé des valeurs pour elles.
Voila ++
#include<stdio.h>
int main()
{
int elem;
int borneinf=0;
int bornesup=13;
int m=0;
int trouve;
int t[] ={15,20,23,24,25,26,30,45,55,66,67,68,77};
elem=45;
trouve=0;
printf("inf=%d sup=%d\n",borneinf,bornesup);
while((borneinf <= bornesup) && (trouve==0))
{
int m=(borneinf+bornesup) / 2 ;
if(t[m]==elem)
{trouve=1;
printf("elem se trouve à la %d ème position\n",m+1);
}
else
{
if(t[m] > elem)
bornesup=m-1;
else
borneinf=m+1;
}
}
}
t'avais oublier des accolades apres ton if(t[m]==elem) car tu as 2 instructions qui suivent...
Et puis dans l'algo tu avais inversé à la fin. Aussi il faut renommer tes inf et sup parce que g remarqué qu'il avé des valeurs pour elles.
Voila ++
Bonjour
Je ne connais ni gcc nio gbd, mais tu as visiblement un problème d'algorithme. Quel que soit le résultat de la comparaison < ou > , c'est toujours la borne inf que tu modifies, et toujours de la même manière. Pas logique.
Je ne connais ni gcc nio gbd, mais tu as visiblement un problème d'algorithme. Quel que soit le résultat de la comparaison < ou > , c'est toujours la borne inf que tu modifies, et toujours de la même manière. Pas logique.
#include<stdio.h>
int main()
{
int elem;
int inf;
int sup;
int m=0;
int trouve;
int t[] ={15,20,23,24,25,26,30,45,55,66,67,68,77};
elem=23;
inf =0; sup=13;
trouve=0;
while((inf<=sup) && (trouve==0))
{
m=(inf+sup) / 2 ;
if(t[m]==elem) trouve=1;
printf("elem se trouve à la %d ème position\n",m);
else{
if(t[m] > elem)
inf=m+1;
else
sup=m-1;
}
}
}
int main()
{
int elem;
int inf;
int sup;
int m=0;
int trouve;
int t[] ={15,20,23,24,25,26,30,45,55,66,67,68,77};
elem=23;
inf =0; sup=13;
trouve=0;
while((inf<=sup) && (trouve==0))
{
m=(inf+sup) / 2 ;
if(t[m]==elem) trouve=1;
printf("elem se trouve à la %d ème position\n",m);
else{
if(t[m] > elem)
inf=m+1;
else
sup=m-1;
}
}
}
Dsl de te dire ça mais ta un probleme d'algorythme derriere ton probleme, j'ai corrigé certain problemes de code mais meme apres ça, le resultat n'est pas la pour te dire voila les sequences donné pour m et t[m]
inf=0 sup=13
m=6 t[m]=30
m=10 t[m]=67
m=12 t[m]=77
m=13 t[m]=0 .......
corrige ton algo
inf=0 sup=13
m=6 t[m]=30
m=10 t[m]=67
m=12 t[m]=77
m=13 t[m]=0 .......
corrige ton algo
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question