IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Fonction récursive créant un probleme.


Sujet :

C++

  1. #1
    Membre confirmé Avatar de Gilles57-H-G
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 88
    Par défaut Fonction récursive créant un probleme.
    Bonjour.
    J'ai récupéré une fonction VB générant toutes les combinaisons possible avec un nombre, et des lettres déterminées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Main
    Dim chaine As String 
    Dim PosLettre(1 To 3) As Integer 'initiale un tableau de n case pour un mot à n lettre 
    chaine = "" 
    PosLettre(1) = 1 
    PosLettre(2) = 1 
    PosLettre(3) = 1 
     
     
    GeneMot "abcd", PosLettre, chaine, 3, 3
    'le premier chiffre correspond au nombre lettre de la chaine ex abc = 3
    ' le deuxieme correspond au nombre de lettre voulue en sortie ex 3= aaa,aab,aac 2=aa,ab,ac

    MsgBox chaine
    End Sub


    Public Function GeneMot(chaine As String, PosLettre As Variant, ch As String, LongeurChaine As Integer, nbLettreVoulue As Integer)
    While PosLettre(1) < LongeurChaine + 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    For l = 1 To nbLettreVoulue 
    a = a & Mid(chaine, PosLettre(l), 1) 
    Next l 
    ch = ch & a & Chr(13) 
    For m = nbLettreVoulue To 1 Step -1 
    If PosLettre(m) = LongeurChaine Then 
    If m <> 1 Then 
    PosLettre(m) = 1 
    Else 
    PosLettre(m) = PosLettre(m) + 1 
    End If 
    Else 
    PosLettre(m) = PosLettre(m) + 1 
    Exit For 
    End If 
    Next m 
    GeneMot chaine, PosLettre, ch, LongeurChaine, nbLettreVoulue 
    Wend 
    end function

    J'ai transformé cette fonction en C++, mais elle crée un problème, si on ne l'appelle pas, la compilation ne pose pas de problème.
    Par contre, si on appelle la fonction, le compilateur se ferme.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #include <cstdlib>
    #include <iostream>
    #include <stdio.h>
    #include <cstring>
    #include <string> 
    #include <fstream>
    using namespace std;
     
    string GeneMot(string chaine, int PosLettre[], string ch, int LongeurChaine, int nbLettreVoulue);
     
    int main(int argc, char *argv[])
     
     { string chaine ;
        int PosLettre [3];
        PosLettre[1] = 1;
        PosLettre[2] = 1; 
        PosLettre[3] = 1 ;
        string s= "abc";
     
     GeneMot(s,PosLettre,chaine,2,2); }
     
     
    string GeneMot(string chaine, int PosLettre[], string ch, int LongeurChaine, int nbLettreVoulue)
     
    {	
       int l;
        int m;
       string a ;
     
    while (PosLettre[1] < LongeurChaine + 1)
     
                   for (l = 1; l <= nbLettreVoulue; l++) 
    		  {  a = chaine.substr (PosLettre[l],1) ; } 
     
    				ch = ch + a + "\r";
     
     
    				for (m = nbLettreVoulue; m >= 1; m--)
    				{  
    					if (PosLettre[m] == LongeurChaine) 
    					{ 
    					if (m != 1) 
     
    						{ PosLettre[m] = 1;	} 
    						else
     
    						{ PosLettre[m] = PosLettre[m] + 1;} 
     
     
                                  	} 
    					else
    					{	PosLettre[m] = PosLettre[m] + 1;   
     
                           	break;
    						}  
     
     
    				} 
     
    				GeneMot(chaine, PosLettre, ch, LongeurChaine, nbLettreVoulue);
    			}
    }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PosLettre[1] = 1;
    PosLettre[2] = 1;
    PosLettre[3] = 1 ;
    En C++ les indices des tableaux commencent à 0, donc la vu que PosLettre contient 3 valeurs en faisant tu fais un dépassement de tableau.

    Il te faut modifier l'indice de départ sur ton tableau.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonction récursive: erreur
    Par calla29 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/05/2006, 11h51
  2. [VB6] XML, fonction récursive de recherche
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2006, 21h27
  3. [XSLT] fonction récursive à N niveaux
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/03/2006, 12h30
  4. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08
  5. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo