CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Pb avec C++

MathieuN7
MathieuN7
Niveau 10
28 novembre 2003 à 16:56:24

Amis programmeurs, bonjour!
Je débute en prog, g comencé samedi dernier...
Voici mon pb: je voulais programmer un petit programme pour calculer le PGCD de deux nombres. Voici mon code:

  1. include < iostream.h>
  2. include < stdlib.h>
  3. include < stdio.h>

using namespace std;

int main()
{
int reste, resteA, nombreX, nombreY;
int x = 0;
int y = 0;

cout < < " Ce programme vous permet de calculer le PGCD de deux nombres x et y. \n";
cout < < " Quelle est la valeur de x? \n";
cin > > x ;
cout < < " \nQuelle est la valeur de y? \n";
cin > > y ;
cout < < " Appuyez sur la touche \" Entrée \" pour continuer";
getchar ( );
cout < < " Calcul du PGCD de " < < x < < " et " < < y < < " . .. \n";

if ( x > y)
{
x % y > > reste;
while ( reste ! = 0 || resteA ! = 0)
{
x % y > > reste;
y > > x;
reste > > y;
while ( reste ! =0)
{
x % y > > resteA;
y > > x;
resteA > > y;
}
}
if ( reste == 0 )
{
cout < < " Le PGCD de " < < nombreX < < " et " < < nombreY < < " est " < < resteA;
}

if ( resteA == 0 )
{
cout < < " Le PGCD de " < < nombreX < < " et " < < nombreY < < " est " < < reste;
}
}

if ( x < y)
{
y % x > > reste;
while ( reste ! = 0 || resteA ! = 0)
{
y % x > > reste;
x > > y;
reste > > x;
while ( reste ! =0)
{
y % x > > resteA;
x > > y;
resteA > > x;
}
}
if ( reste == 0 )
{
cout < < " Le PGCD de " < < nombreX < < " et " < < nombreY < < " est " < < resteA;
}

if ( resteA == 0 )
{
cout < < " Le PGCD de " < < nombreX < < " et " < < nombreY < < " est " < < reste;
}
}

return 0;
}

Voilà; quelqu´un peut-il me dire pourquoi ça ne marche pas???
Voici des explications pour ceux qui ne connaissent pas l´algorithme d´Euclide:
Pour trouver le PGCD de deux nombres x et y tel que x > y, on effectue la division euclidienne de x par y. si le reste est égal à 0, alors
PGCD ( x;y)=y
Sinon, on effectue la division euclidienne de y par r ( reste), si r1=0, PGCD ( x;y)=r
Et ainsi de suite...

Merci
Morpheus

DasHuhn
DasHuhn
Niveau 10
28 novembre 2003 à 17:02:17

Tiens je suis exactement dans ton cas ( en C) : recherche de l´application de l´algorithme d´Euclide.

Bon je lance PB, je me mets dessus, si je trouve quelque chose je le rapporte tout de suite.

MathieuN7
MathieuN7
Niveau 10
28 novembre 2003 à 17:36:04

Ok!!! Merci bcp! De mon côté je continue de chercher, si je trouve je te le signale! ; o)

DasHuhn
DasHuhn
Niveau 10
28 novembre 2003 à 17:46:43

Inutile de me remercier j´ai essayé de faire une version C et comme je suis au moins aussi débutant que toi.... mon programme fonctionne avec l´exemple de mon cours, mais pas avec les exercices :p

MathieuN7
MathieuN7
Niveau 10
28 novembre 2003 à 17:56:26

EUuuuuuhhhhh... je comprends rien, rassure-moi est-ce que c´est parce que c´est du C ? ??

DasHuhn
DasHuhn
Niveau 10
28 novembre 2003 à 18:36:54

Oui.

DasHuhn
DasHuhn
Niveau 10
28 novembre 2003 à 21:41:24

( Qu´on pardonne ma précédente publication, remplie de variables : je fait toujours ça quand j´écris un programme)

Voilà la version d´un copain macqueux :

  1. include < stdio.h>

long pgcd(long,long);

int main()
{
long x, y;

printf("Deux nombres dont vous souhaitez connaitre le PGCD. " );
printf("Le second est inferieur au premier");
scanf("%ld %ld", &, &);

printf("%d\n",pgcd(x,y));
return 0;
}

long pgcd(long x,long y)
{
long tmp;
while(x) {
tmp = y;
y = x%y;
x = tmp;
}
return y;
}

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 12:04:41

Y´a un truc qui va pas dans ton ème programme DasHuhn. J´ai beau le compiler et l´executer avec Visual C++ ou le compilateur de Borland version 5.5, bcc55, je rencontre la même erreur à l´execution. Il me dit que pgcd.exe ( le nom de mon programme) a rencontré une erreur et doit fermer.
Le problème vient de la fonction pgcd et surtout de la ligne suivante : while(x) vu qu´il n´y a pas de condition pour while. Un mauvais recopiage ?

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 12:11:43

Sinon une remarque tjs dans ce 2ème programme. ca concerne cette instruction là : printf("%d\n",pgcd(x,y)); Ne devrions pas plutot dire que ca affiche un long vu que la fonction renvoie un long ? Là tu lui dis d´afficher un entier normal. mais le jour ou la fonction va renvoyer un vrai long ca va bugger à l´execution non ?
Donc l´instruction devrait être : printf("%ld\n",pgcd(x,y)); et j´insiste bien sur le " %ld".

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 13:29:00

Bon je suis de retour et j´ai modifié le 1er programme de DasHuhn. En effet, l´instruction suivante ne sert à rien et n´est utilisée par aucun programmeur :
if(l == 0)
{
break;
}

Si je supprime cette instruction il y a cette fameuse erreur à l´execution. Il faut donc mettre une vrai condition dans le while :
Donc on a par exemple ici :

while(l!=0) //Tantque l différende 0 Faire
{
l = x % y;
z = x / y;
x = y;
y = l;
}

Voilà et le tour est joué

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 13:43:43

Moi j´ai la soluce en algorithmie si vous voulez mais sauf que cette solution utilise les soustractions.
Je vous donne l´énoncé comme ca ca vous aidera :
Ecrire un algorithme qui saisisse deux entiers naturels a et b et affiche leur pgcd. Le principe consiste à ranger le résultat de la valeur absolue de la soustraction de a par b dans le plus grand des deux nombres et poursuivre jusqu´à ce que les 2 nombres soient égaux.

Voici un exemple pour vous aider à comprendre :
L´utilisateur saisi a=42 et b=24
Donc le programme interagit sur ces 2 nombres et on a :
a=18 et b=24 puis nouvelle interaction ce qui fait :
a=18 et b=6 et on intéragit de nouveau ce qui a pour effet :
a=12 et b=6 et on continue l´intéraction pour obtenir cela :
a=6 et b=6
Ah tenez a=b donc voilà, on a trouvé le pgcd.

Voilà je vous ai mis sur la piste je pense, en tout cas je l´espère.

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 13:44:48

PS : le code n´est pas très long.

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 14:19:50

Bon finalement je l´ai fait avec votre méthode. je me uis aidée de ce lien là : http://villemin.gerard.fr.free.fr/ThNbDemo/AlgoEucl.htm ce lien explique en effet la méthode d´euclide que je ne connaissais pas. j´ai vu après qu´il y avait la soluce mais je l´ai remarqué qu´après l´avoir fait en C.
Mathieun7 :d) je vais le faire en C++ comme ca si t´as un pb je te le balance ici.

MathieuN7
MathieuN7
Niveau 10
29 novembre 2003 à 14:32:54

kilyn_ :d) en C++, j´ai trouvé une méthode assez stable, mais le pb est que dès que je rentre un nombre trop gros, ça m´affiche " pgcd.exe a effectué une erreur et doit fermer" ou un truc ds le genre...
Voici le code:

  1. include < iostream.h>
  2. include < stdlib.h>
  3. include < stdio.h>

using namespace std;

int main()
{
unsigned int reste, resteA, annex;
unsigned int x = 0;
unsigned int y = 0;
unsigned int nombreX = 0;
unsigned int nombreY = 0;

cout < < " \t Programme permettant de calculer le PGCD de deux nombres." < < endl ;
cout < < " \n";
cout < < " Ce programme vous permet de calculer la valeur du PGCD de deux nombres x et y. \n";
cout < < " Le PGCD ( Plus grand Commun Diviseur) est le plus grand diviseur commun … deux " < < endl;
cout < < " nombres. \nEn mathématiques, il est utilis‚, entre autres, pour simplifier une fraction..." < < endl;
cout < < " Le PGCD de deux nombre se calcule ainsi:" < < endl;
cout < < " \t *Diviser entre eux les deux nombres dont on recherche le PGCD; le r‚sultat nous donne un " ;
cout < < " quotient et un reste. Tant que le reste n´est pas ‚gal … z‚ro, on continue … faire les divisions." < < endl;
cout < < " \t *Losrque le reste de la division est ‚gal … z‚ro, cela signifie qu´on a trouv‚ le PGCD, qui " ;
cout < < " n´est autre que le dernier diviseur utilis‚, celui qui a permis d´avoir un reste ‚gal … z‚ro. " < < endl;
cout < < " \nPour calculer le PGCD de deux nombres x et y, il faut donc ces deux valeur, que nous vous proposons " ;
cout < < " d´entrer dans les invites suivantes:" < < endl;
cout < < " Quelle est la valeur de x? \n";
cin > > x ;
nombreX = x;
cout < < " \nQuelle est la valeur de y? \n";
cin > > y ;
nombreY = y;
cout < < " \nCalcul du PGCD...";
getchar ( );

if ( x > y)
{
while ( reste ! = 0 && resteA ! =0)
{
reste = x % y;
x = y;
y = reste;
resteA = x % y;
x = y;
y = resteA;
}
if ( reste == 0 )
{
cout < < " \nLe PGCD de " < < nombreX < < " et " < < nombreY < < " est " < < resteA < < " \n";
getchar();
}

else if ( resteA == 0 )
{
cout < < " \nLe PGCD de " < < nombreX < < " et " < < nombreY < < " est " < < reste < < " \n";
getchar();
}
}

if ( x < y)
{
annex = x; //annex vaut x
x = y; //x vaut y
y = annex; //y vaut annex, donc x
while ( reste ! = 0 && resteA ! =0)
{
reste = x % y;
x = y;
y = reste;
resteA = x % y;
x = y;
y = resteA;
}
if ( reste == 0 )
{
cout < < " \nLe PGCD de " < < nombreX < < " et " < < nombreY < < " est " < < resteA < < " \n";
getchar();
}

else if ( resteA == 0 )
{
cout < < " \nLe PGCD de " < < nombreX < < " et " < < nombreY < < " est " < < reste < < " \n";
getchar();
}
}

if ( x == y)
{
cout < < " \nLe PGCD de " < < nombreX < < " et " < < nombreY < < " est " < < nombreX < < " \n";
getchar ( );
}

return 0;
}

Voilà donc le pb est maintenant comment puis-je faire pour que la valeur entrée soit illimitée?

Merci pour tous pour ce que vous avez déjà fait et ce que vous allez faire...

Morpheus

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 15:47:50

je suis en train de voir ca. Moi je compile avec le compilateur de Borland C++ version 5.5. Il m´a mis 2 avertissement ( warning en anglais) comme quoi nombreX et nombreY ont des valeurs assignés qui ne sont jamais utilisé. En effet tu les initialises mais après dans le corps du programme tu leur affecte d´autres valeurs. Donc dans ce cas là il est inutile de les initialiser.

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 15:50:26

arf moi quand je rentre x=8136 et y=492, le programme n´est pas terminé. D´ailleurs je t´écris et le programme s´execute tjs.

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 15:51:00

C un pb de boucle infini certainement.

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 15:54:09

ah non c´est bon t´a oublier de mettre un message comme koi il faut appuyer sur entrée juste avant le getchar.
Par contre oué j´ai le meme pb que toi.

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 16:17:23

J´ai trouvé d´ou vient l´erreur mais je sais pas comment la résoude. je te mets le bloc de code :
cout < < " \nCalcul du PGCD...";
getchar ( );

if ( x > y) < === instruction provoquant l´erreur
{

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 16:19:35

D´ailleurs je me suis amusé à le faire avec y < x et ca bug

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment