Prob c

caty -  
 caty -
Bonjour,j'ai un prob dans c de la recherche "dichotomique" ben voila ce que jai fait et si qlq 1 pt m aidée et merci ,
#include<stdio.h>
#include<conio.h>
#define n 6
void main ()
{
int t[n],k,kk,S;
int sup,inf,x,test;
t[k]=(1,2,3,4,5,6);
sup=6;
inf=1;
scanf("%d",&x);
test=0;
while((test==0)&&(inf<=sup))
{


kk=(inf+sup)/2;
printf("%d\n",kk);
if (x>t[kk])
{ (inf=kk+1);
printf("%d\n",inf);
}
if(x<t[kk])
{(sup=kk-1);
printf("%d\n",sup);
}
else
{
test=1;
printf("%d\n",test);
}
}
getche();
}

1 réponse

bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
Quel est ton problème ? Tu n'as même pas dit ce qu'est censé faire ton programme ... comment voudrais-tu qu'on t'aide.

Pourrais-tu préciser ton pb ? stp
0
caty
 
mon prob que ce programe il donne ps des bonne resultats concernant l'element rechérché
0
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861 > caty
 
Qu'est-il censé faire ?

Je t'aiderais bien mais je ne sais pas qu'est-ce qu'un "bon" ou un "mauvais" résultat si je teste ton code...

Cependant, ton if if else me parait suspect.

if (x>t[kk])
{//si x > t[kk]
	inf=kk+1;
	printf("%d\n",inf);
}

if(x<t[kk])
{//si x < t[kk]
	sup=kk-1;
	printf("%d\n",sup);
}
else
{//si x >= t[kk]
	test=1;
	printf("%d\n",test);
} 


En gros, avec ton code là comme il est :
si x > t[kk]
ça fait met kk+1 dans inf
puis ça affiche inf
puis ça met 1 dans test
puis ça affiche 1 (puisque ça affiche test qui vaut 1).

si x == t[kk]
ça met 1 dans test
puis ça affiche 1 (puisque ça affiche test qui vaut 1).

si x < t[kk]
ça fait met kk-1 dans sup
puis ça affiche sup

Est-ce bien ce que tu veux ? (je n'ai que rajouté les commentaires..)
0
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861 > caty
 
Au temps pour moi je n'avais pas vu que tu avais précisé tout en haut une recherche dichotomique, peut-être à cause de l'heure tardive :p
J'ai remarqué autre chose que je n'avais pas vu hier soir dans ton code.

Tu ne peux pas initialiser ton tableau de la manière que tu as faite.

Si tu veux qu'il contienne tous les chiffres de 1 à n, tu peux le rentrer en dur dans le code lors de la déclaration de ta variable :
int t[n] = {1,2,3,4,5,6};


Soit tu fais une petite boucle for() :
for(k = 0 ; k < n ; k++)
{
t[k] = k+1;
}


Sinon pour le fonctionnement, ce que je trouvais suspect l'était bien. Tu ne peux pas faire un else de 2 if à la fois.
Donc si tu veux tester > < et ==, soit tu les imbriques (ce qui n'est pas le plus joli parfois mais qui est le plus pratique), soit tu ne mets pas de else et tu mets le if() avec la condition voulue (le gros inconvénient de faire cela est que si dans la if() tu modifies une valeur qui te rend vrai la if() suivante qui te sert de else, les 2 peuvent être vraies !).

Et puis pour finir sur une pas erreur, tu déclares un S que tu n'utilises pas ;-).

Voilà donc comment je l'aurais rectifié :
#include <stdio.h>
#include <conio.h>

#define n 6

int main ()
{
	int t[n] = {1,2,3,4,5,6};
	int kk;
	int sup = 6;
	int inf = 1;
	int test = 0;
	int x;

	scanf("%d",&x);
	while((test==0)&&(inf<=sup))
	{
		kk=(inf+sup)/2;
		printf("kk=%d\n",kk);
		if (x>t[kk])
		{ //si >
			inf=kk+1;
			printf("inf=%d\n",inf);
		}
		else
		{ //si <=
			if(x<t[kk])
			{ //si <
				sup=kk-1;
				printf("sup=%d\n",sup);
			}
			else
			{ //si ==
				test=1;
				printf("test=%d\n",test);
			}
		}
	}
	
	return 1;
}

Au passage, j'ai rajouté dans les printf() de quoi il s'agit, parce que pendant l'éxécution ce n'est pas forcément évident de savoir si un "4" était l'affichage du k, du inf, ou du sup.
0
caty > bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour, ben merci pour ton aide c vraiment très gentil de ta part ben ce programme que ta lit une traduction en c de la recherche dichotomique qui nous la donné notre prof parce que c'est un prog qui ce fait une fois pour toute une foie tu le comprend sayer ,j'ai fait plusieurs essaie mais sa donne rien,si tu le fait avec une fielle et stylo sa donne des résultat :jusqu'en trouve sup=inf alors na trouve l'élement recherché ,ben je vais ressayer encore,,
0