Rechercher : dans
Par :

Dichotomie recursive en c

Dernière réponse le 7 jui 2009 à 19:14:28 tarik, le 3 jui 2009 à 18:51:37 
 Signaler ce message aux modérateurs

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;

}

Configuration: Linux Suse

Meilleures réponses pour « dichotomie recursive en c » dans :
Inverser les éléments d'un tableau -Récursivité- VoirVoici une procédure récursive qui permet d’inverser les éléments d’une partie d’un tableau compris entre la position p et n : Procedure Inverser (Var t : Tab; p, n : Integer); Var aux : Real; Begin If p < n Then ...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C - Les listes chaînées VoirLa notion de structure autoréferrentielle Une structure autoréferrentielle (parfois appelée structure récursive) correspond à une structure dont au moins un des champs contient un pointeur vers une structure de même type. De cette façon on crée...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les structures en langage C VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...

1

elayyy, le 3 jui 2009 à 19:28:05

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...

Répondre à elayyy

2

fiddy, le 3 jui 2009 à 22:02:39

t'aurais pas oublié la bibliothèque #include <stdlib.h>???
Il n'en a pas besoin dans son programme ;-)))
Google is your friend

Répondre à fiddy

3

fiddy, le 3 jui 2009 à 22:09:39

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
Google is your friend

Répondre à fiddy

4

 tarik, le 7 jui 2009 à 19:14:28

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;
}

Répondre à tarik