begin process at 2012 02 10 17:38:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

recursivité


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

recursivité

mercredi 19 novembre 2008 à 10:42:45 | recursivité

adil1251985

bonjour; 
 j'ai créé une fonction recursive qui diminue le premier nombre par le deuxieme(=1) jusqu'a obtenir zero .
question : pourquoi quand je tape un petit nombre la fonction s'a marche mais pour les grand nombre non.
exemple : pour les nombres inférieur à 4189

code

#include <iostream>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <sstream>

using namespace std;

//fonction qui diminue le premier nombre par le deuxieme(=1) jusqu'a obtenir zero
string soustraction(string nbr1,string nbr2){

int Tnbr1; // contient la taille du premier nombre 'nbr1' (nombre de chiffre)

int retenu=0,compteur=0,aide1,aide2,resultat;

string resultatF;

ostringstream oss;// un flux de sortie

Tnbr1= nbr1.length();

char *tab1 = (char *)nbr1.c_str(); // creation d'un tableau de caracteres du 1er nombre

char *tab2 = (char *)nbr2.c_str(); // creation d'un tableau de caracteres du 2eme nombre

int tabResultat[Tnbr1]; // declaration d'un tableau pour le resultat de la difference

bool TenZero=true; // un boolean pour tester si le resultat retourné contient que des zero

// boucle pour faire la difference entre les 2
//nombres et cela caractere par caractere en comencant par le dernier
for(int j=Tnbr1-1; j>=0; j--)
{
aide1 = (int)(tab1[j]-'0');// conversion des caracteres du 1er nombre : char --> int
aide2 = (int)(tab2[j]-'0');// conversion des caracteres du 2eme nombre : char --> int
aide2 = aide2 + retenu;
// gestion de la soustraction caractere(int) par caractere(int)
if (aide1<aide2)
{retenu = 1; resultat = (aide1+10) - aide2;}
else
{retenu = 0; resultat = aide1 - aide2;}

tabResultat[compteur++]= resultat; // stockage du resultat dans le tableau " tabResultat "
}


//en comencant par le dernier on va empiler le flux
for(int j=Tnbr1-1; j>=0; j--)
{oss << tabResultat[j];}

// extraire le resultat dans le flux sous le format string( cette fonction doit retournée string !!!)
resultatF=oss.str();

// boucle pour tester si le resultat retourné ne contient que des zero
for(int j=Tnbr1-1; (j>=0)&&(TenZero); j--)
{
if (tabResultat[j]!=0)
{
TenZero = false;
}
}

// affecter au resultat final "0" si tabResultat ne contient que des zero
// sert à sortir de l'appel recusif ' cas de base '
if (TenZero == false){resultatF = oss.str();}
else{resultatF = "0";}

// affichage du resultat pour chaque appel
cout <<resultatF<<endl;

if(resultatF=="0"){cout <<" Fin "<<endl; return "0";} // cas de base de la fonction recusive " soustraction( , ) "
else{return soustraction(resultatF,nbr2);}
}

main ()
{
string s1,s2="1";
int i1,i2;
cout << " Taper un nombre : " ;
cin >> s1;
i1= s1.length();
i2= s2.length();
if (i1>i2)
{
for(int r=0; r<(i1-i2); r++){
s2 = "0" + s2;
}
}
cout <<"Lancer la soustraction : ";
getch();
cout <<endl<<soustraction(s1,s2)<<endl;
system("pause");
}

mercredi 19 novembre 2008 à 12:34:57 | Re : recursivité

adil1251985

Personne pour m'aider ???
mercredi 19 novembre 2008 à 13:42:19 | Re : recursivité

uaip

Salut,
je ne pige pas ton algo, et je ne pige pas non plus ce que tu entends par "diminuer un nombre par un deuxième nombre".

Cordialement, uaip.
mercredi 19 novembre 2008 à 18:20:09 | Re : recursivité

laurent1024

Membre Club
Au passage ta fonction n'a rien de récursive.
mercredi 19 novembre 2008 à 18:52:26 | Re : recursivité

uaip

C'est aussi ce que je m'apprêtais à lui dire ^^
Mais étant donné que le code est présenté bizarrement, je n'ai pas et le courage de voir si la fonction s'appelait elle-même ou pas, donc je n'ai rien dit
QUoi qu'en re-regardant là, si on considère que s'appeler dans un return est récursif, alors elle l'est. Mais c'est moche, là.

Cordialement, uaip.
mercredi 19 novembre 2008 à 19:08:42 | Re : recursivité

laurent1024

Membre Club
ha,  effectivement il y a bien un return soustraction.
Désolé, le code était tellement mal indenté que je ne l'ai pas vu.



Cette discussion est classée dans : nombre, int, string, resultat, resultatf


Répondre à ce message

Sujets en rapport avec ce message

Comment faire pour qu'un string soit egal a un int? en c++ [ par ndubien ] Salut, Comment faire pour qu'un string soit egal a un int? (en c++)int nombre(1);Je veux que :string a soit egal a "mot1" + nombre + "mo Multiplier un nombre a virgules [ par darkwhite ] Salut a tous, le principe de mon code est de multiplier par 3 un nombre decimal ecrit en notation française :xx,xx. j'ai donc ecrit ce code : #include savoir si un string n'est que numérique [ par nord666 ] Bonjour tout le monde!À première vue, utiliser un String pour stocker un chiffre est assez inscenser. Sauf lorsque le nombre maximal de caractère pour convertir un int en un String et l'inverse [ par ryoussef19 ] Bonjour,je travaille avec Visual Studio 2005 , comme langage visual c++ je peux convertir un int16, int32, ou un int 64 en un string ou l'inverse ..ma Classique code : conversion decimale=>binaire [ par darkwhite ] salut à tous,Comme un nombre incalculable de gens je dois faire le desormais classique code : convertir du binaire en decimale. Pour ma part je l'ai e Fonctions Imbriquées avec argument string [ par Zakata ] Bonjours,J'esaye de programmer deux classes de menu. L'architecture est la suivantes : Une classe Menuclass Menu{public:    Menu(void);    ~Menu(void) String en int [ par drcmomo ] Bonjour!!Je suis entrain de faire une interface graphique, dans ma textBox mes données sont type String j'aimerais bien s'avoir commentfaire pour pass Code qui ne marche pas [ par darkwhite ] Salut a tous . Je suis debutant en C et j'ai commencé un programme qui converti un nombre binaire de huit chiffres en un nombres decimal le code est Petit probleme int [ par ralebole ] Je voudrais recuperer le dernier ou les 2 dernier chiffres d'un nombre (int), je m'expliqueint nombre = 1789;   la je veux recuperé 89  int recup = 89 Calculer le nombre PI [ par Cedus ] Bonjour,J'ai trouvé une méthode permettant de calculer le nombre Pi et j'ai essayé de faire un algorithme sans succès . <p class="MsoNormal" style="


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,700 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales