Dichotomie recursive en c [Fermé]

Signaler
-
 Hajar -
Bonjour, je ne vois pas où est le problème dans ce mini programme, il ne s execute pas, si une âme charitable veut bien m'aider à comprendre ce que je ne vois pas

#include<stdio.h>

int dich (int t[],int elem,int borninf,int bornsup){

int m=(borninf+bornsup) / 2 ;

if(t[m]==elem)
printf("elem se trouve à la %d ème position\n",m);

else{
if(elem<t[m])
return dich(t,elem,borninf,m-1);

else
return dich(t,elem,m+1,bornsup);

}
}
int main()
{
int t[14] ={15,20,23,24,25,26,30,45,55,66,67,68,77};
int borninf=0;
int bornsup=13;
int elem=68;

}

3 réponses

code qui marche, sinon je ne connais pas VB désolé
merci
#include<stdio.h>


int dich (int t[],int elem,int borninf,int bornsup){

int m=(borninf+bornsup) / 2 ;

if(t[m]==elem) {

return m;
}
else
if(elem<t[m])
return dich(t,elem,borninf,m-1);

else
return dich(t,elem,m+1,bornsup);


}




int main(void)
{

int t[] ={15,20,23,24,25,26,30,45,55,66,67,68,77};
int borninf=0;
int bornsup=13;
int elem=20;
int n=dich ( t, elem, borninf, bornsup);
printf("la position de elem est %i\n",n+1);

return 0;
}
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Merci pour la reponse
c'est pas très bien d'imbriquer des if else les uns dans les autres... Je ne pourrai pas te corriger car je débute mais voila quoi...

aaaahhh!!
j'ai peut-être touvé l'erreur peut-être que ce que je dis est idiot mais...: t'aurais pas oublié la bibliothèque #include <stdlib.h>???

c'est tout ce que je peux te dire...
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 706
t'aurais pas oublié la bibliothèque #include <stdlib.h>???
Il n'en a pas besoin dans son programme ;-)))
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 706
Salut,

int t[14] ={15,20,23,24,25,26,30,45,55,66,67,68,77};
Si tu fais ça ton dernier élément sera un 0, est-ce volontaire ? (Je doute ^^).
Dans ce cas, tu peux mettre tout simplement : int t[] = {15,20,23,24,25,26,30,45,55,66,67,68,77};
et laisser le soin au compilateur de calculer la taille du tableau.


else{
if(elem<t[m])

Beaucoup plus simple est d'utiliser "else if". Ce qui donnerait : else if(eleme<t[m]) {

Et enfin, ton programme va exécuter le main, et comme tu n'appelles pas la fonction dich(), il ne le fera pas tout seul ;-))). Donc faut rajouter : dich(t,elem,borninf,bornsup);

N'oublie pas de mettre return 0; avant l'accolade finale.

Et enfin attention ta fonction dich est mal construite. Elle renvoie un int alors que dans le cas (t[m]==elem) tu ne renvoies pas d'entier. Ou alors tu peux utiliser void dich et enlever les return ;-))).

Cdlt