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] ]