Prog_dichotomique en c

Résolu/Fermé
tarik - 30 juin 2009 à 19:33
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 6 juil. 2009 à 11:28
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

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 ++
1
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.
0
#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;
}
}
}
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pense à mettre resolu aussi
0
Utilisateur anonyme
1 juil. 2009 à 17:46
merci beaucoup, je vais m'appliquer avec la version récursive
0
nord82 Messages postés 7 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 2 juillet 2009 2
1 juil. 2009 à 17:52
slt tarik je peux te poser une question
0
Utilisateur anonyme
1 juil. 2009 à 19:57
ben oui
0
nord82 Messages postés 7 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 2 juillet 2009 2
6 juil. 2009 à 11:23
je veux savoir svp si vous maitrisez le VB parceque je suis coincé dans un truc sous access
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
6 juil. 2009 à 11:28
Salut,

Merci d'ouvrir un nouveau thread pour ton problème vb
0