Foy,

Comments inline: (entre  // ****)

Enjoy,

JeF


#pragma hdrstop
#include <condefs.h>
#include "iostream.h" //pour cin, cout
#include "conio.h"  //pour getch()

//Definition d'un membre de la suite de Collatz
struct Etape {
    int Valeur;     //Valeur du nombre
    Etape* Suivant; //Adresse du nombre suivant dans la suite
};
//--------------------------------------------------------------------------
-
#pragma argsused
int main(int argc, char **argv)
{
    int CurrentVal;
// ***********
// Cf plus loin, avons besoin de la declarer..
   Etape* Suite = NULL;
// *****
    cout << "ALGORITHME DE COLLATZ"<<endl;
    cout << "====================="<<endl<<endl;

    cout << "Entrez le nombre de d�part (ENTIER) : " ;
    cin >> CurrentVal; //Saisit le nombre entr� par l'utilisateur

    //d�finit la chaine de nombres de Collatz :
    Etape* Chaine = new Etape;
    //Place le nombre introduit par l'utilisateur dans la chaine, et
"termine" la chaine.
    Chaine->Valeur = CurrentVal;
    Chaine->Suivant = NULL;

    //sauvegarde la t�te de la chaine pour pouvoir la relire en entier par
la suite
//    Etape* ChaineTete = new Etape;
//    ChaineTete = Chaine;

    // **********************
    // Tu assigne la memoire et tu n'en fait rien.. assigne le pointeur a la
place:
   Etape* ChaineTete = Chaine;
   // ***********************

    //CALCULE LES VALEURS DES NOMBRES SUCCESSIFS DE COLLATZ, JUSQU'A
ATTEINDRE 1
// ******
//    Etape* Suite = new Etape; //d�clare un terme qui sera chain� aux
autres
// Tu alloue ton element a l'exterieur de la boucle --> ca ne sera fait
qu'une fois !!!
// Bougons le donc dans la bouclette..
// *****
    while (CurrentVal != 1)
        {   //calcule la valeur du terme suivant
            if (CurrentVal % 2 ==0)
                CurrentVal = CurrentVal / 2;
            else
                CurrentVal = (3 * (CurrentVal)) + 1;

            Suite = new Etape; //d�clare un terme qui sera chain� aux autres

            //inscrit dans le terme Suite le terme suivant
            Suite->Valeur = CurrentVal;
            Suite->Suivant = NULL;
            //EN FAISANT CES DEUX INSTRUCTIONS, IL A MODIFIE DE LA MEME
            //MANIERE CHAINE QUE SUITE. POURQUOI ??????????????????????

            // ****
            // Donc, parcequ'on modifie a chaque fois la meme structure...
            // *****

            //Lie le nouveau terme au pr�c�dent
            Chaine->Suivant = Suite;
            //passe au terme suivant pour lier correctement le terme suivant
            Chaine = Chaine->Suivant;
        }
    delete Suite;

    //affiche les �tapes
    getch();

//****
// Boucle sur le pointer:  while (ChaineTete->Suivant != NULL)
// ****
    while (ChaineTete->Valeur != 0)
        {   cout << ChaineTete->Valeur<<endl;
            ChaineTete= ChaineTete->Suivant;
        }

    cout << ChaineTete->Valeur<<endl;

    //Attend une touche pour terminer le programme
    cout<<"Appuyez sur une touche pour terminer";
    getch();
    //Nettoie la m�moire
    delete Chaine;
    delete ChaineTete;

    return 0;
}

----- Original Message -----
From: "Jean-Marie Lambert" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: dimanche 11 f�vrier 2001 13:34
Subject: [linux-team] Off-Topic : Probl�me de programmation C++


Bonjour !

J'ai un probl�me (sans doute) simple de programmation
en C++, concernant des pointeurs.
L'exercice est d'impl�menter l'algorithme de COLLATZ.
cad: L'utilisateur entre un nombre entier. A chaque �tape,
- si le nombre est pair, il le divise par 2.
- si le nombre est impair, il le multiplie par 3 et
   ajoute 1.
L'algorithme d'ach�ve quand on atteint le nombre 1.

exemple : Du nombre de d�part 6, on a :
6 - 3 - 10 - 5 - 16 - 8 - 4 - 2 - 1

Actuellement, on ne sait pas si l'algorithme s'ach�ve pour
chaque valeur enti�re de d�part. (en en est presque sur,
mais on ne peut pas le prouver...)

Puisqu'on ne sait pas si la suite de nombres sera finie ou
infinie, pour impl�menter cet algo, il faut "chainer" des
nombres, donc allocation dynamique de la m�moire, d'o�
l'id�e des pointeurs.

J'ai essay� d'�crire un petit prog. en C++, mais il y a un
probl�me... ca ne fonctionne pas comme voulu...
Il a �t� �crit sous C++Builder 3.0, en console (donc sans
tout l'environnement graphique).
Je joins le code (fichier collp.cpp) o� est d�crit plus en
d�tails le probl�me. Je ne le comprends pas vraiment.
Il semble y avoir deux pointeurs qui occupent la m�me
adresse m�moire !!

Merci d'avance pour votre aide !!


[ [EMAIL PROTECTED] and [EMAIL PROTECTED] in ONE :)         ]
[ To subscribe or unsubscribe, go to http://linuxbe.org/ml.php     ]
[ http://LinuxBe.org - http://OpenBe.net - [EMAIL PROTECTED]  ]

Répondre à