[Problème]Dichotomie et C++

Résolu
Hyperyon Messages postés 5 Statut Membre -  
oldirty Messages postés 21 Statut Membre -
Bonsoir,

J'ai un petit souci, je dois réaliser un programme en C++ dans lequel l'utilisateur saisi un nombre compris entre 0 et 999, et c'est l'ordinateur lui même qui doit trouver ce nombre en s'aidant avec la méthode dite dichotomique...

Vous avez pas une piste ? svp je n'ai vraiment pas d'inspiration pour trouver la soluce :(

Voici mon code un peu foireux lol.... xD

#include "stdafx.h"
#include <iostream>
using namespace std;

void main ()
{
	int nombre;
	int pc =100;
	int diviseur = 1;
	int plus;
	int moins;
	int i;
	i = 0;

	cout<<"Dichotomie"<<endl;
	cout<<"Entrez un nombre : "<<endl;
	cin>>nombre;

	if (nombre ==100) 
	{
		cout<<"J'ai trouve !"<<pc<<endl;
	}

	else if (pc != nombre)
	{	
		diviseur = diviseur * 2;
		pc = pc / diviseur;
		cout<<pc<<endl;
	}

	

	do
	{
		if (pc<nombre)
		{
			moins = 0;
			pc = pc + (pc/diviseur);
			cout<<pc<<endl;
			moins++;
		}

		else if (pc>nombre)
		{
			plus = 0;
			pc = pc - (pc/diviseur);
			cout<<pc<<endl;
			plus++;
		}

		else if ((plus == 1)&&(moins==1))
		{
			diviseur = diviseur / 2;
			
		}
		i++;
	}
	while ((pc != nombre)||(i!=6));

	cout<<"J'ai trouve"<<endl;
	
		
	system("pause"); 
}


Si vous pouvez m'aider ! ce serait sympa :D !
Configuration: Windows XP
Firefox 3.0.1

3 réponses

  1. oldirty Messages postés 21 Statut Membre 4
     
    sl si tu dois utilisé la dichotomie c'est mieux d'utilser une version recursif plutot que itératif

    je definit une fonction auxillaire recursif

    int recherche(int a,int b , int c){
    if (a+b)/2== c return c;
    else {
    if (a+b)/2<c recherche(a+b/2,b,c);
    else recherche(a,a+b/2,c);
    }
    }

    et donc ton programme principale
    fait un appel a recherche(0,1000,c) ou c est a été fourni par l'utilisateur
    je sai pa si ca répond a ta kestion
    ++
    -2
  2. Hyperyon Messages postés 5 Statut Membre
     
    Mon code a un défaut c'est qu'il ne trouve que certains nombres :s et si il n'arrive pas à trouver le nombre exact, il part dans une boucle infinie :/

    En ce qui concerne ton code je vais essayer de l'utiliser, mais j'aimerais avoir un peu plus de détails sur ta fonction (eh oui je débute :s)

    En tout cas merci de ton aide ;)
    -2
  3. oldirty Messages postés 21 Statut Membre 4
     
    la fonction engadre la ou se trouve ton entier
    si ton nombre est egale a la moitie de ton intervalle alors trouvé (youpi)
    sinon tu divise ton intervalle par 2
    si le nombre cherché > milieu de l'intervalle tu la cherche entre le milieu de l'intervalle et la fin
    sinon c'est entre le debut et le milieu de ton intervalle
    dsl de ne pa avoir commenté mon code
    bonne continuation pour la suite
    ++
    -3