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

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 17:01:13

ca y est j´ai debuggué ton programme.
Voici le code incriminé :
while ( reste ! = 0 && resteA ! =0)
{
reste = x % y;
x = y;
y = reste;

resteA = x % y;
x = y;
y = resteA;
}

Bon je t´explique. Toi tu fais pour x=10000 et y=5000, reste = 10000 % 5000 donc reste = 0. D´accord ?
Ensuite tu dis que y = reste donc y = 0. On est tjs d´accord ?
Or tu fais resteA = 10000 % 0 car y=0. Sachant que les divisions ( car % c´est comme une division) par 0 ne marche pas que ce soit un PC ou une calculatrice, d´ou l´erreur d´execution.

Donc pour que l´execution fonctionne tu fais :
while ( reste ! = 0 && resteA ! =0)
{
reste = x % y;
x = y;
y = reste;
if ( reste ! =0)
{
resteA = x % y;
x = y;
y = resteA;
}
}
Et oui tu rajoute une condition pour s´assurer que reste ne fasse pas 0.
Le pb c´est que ton programme ne donne pas le bon résultat avec 10000 et 5000.

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 17:05:28

En fait, tu en as fait trop dans ton programme, ce qui fausse le résultat. Y´a des bouts de code dans ton programme ( mise a part les saisies et les trucs de base) qui sont la solution. Pour info moi je l´ai fait en une 20aine de ligne sans compter les sauts de ligne. Et je n´ai utilisé que le #include < iostream.h>.
Mais si tu veux plus d´aide va voir le lien que je t´ai fourni plus haut. Tiens je te le refile : http://villemin.gerard.fr.free.fr/ThNbDemo/AlgoEucl.htm Regarde que jusqu´à l´organigramme pour corser un peu, c´est ce que je fait.
Mais je le répète un bout de ton code est la solution. ce que tu as rajouté autour a tout fait foiré.

Kilyn_
Kilyn_
Niveau 10
29 novembre 2003 à 17:06:36

En fait, regarde avant l´orginagramme. Et tu mets juste ce bout de code qui est la solution et t´as fini ton programme.

MathieuN7
MathieuN7
Niveau 10
29 novembre 2003 à 23:55:21

Ok merci je pense que je vais tt refaire je vs recontacte dès ke c´est recodé...

MathieuN7
MathieuN7
Niveau 10
30 novembre 2003 à 01:27:41

Bon, voilà c´est recodé, mais y a un pb à la compilation cette fois ci:

"C:\DEV-C_~1\Lib\\libmingw32.a(main.o)(.text+0x8e)
: undefined reference to `WinMain@16´"

Voici le code:

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

using namespace std;

int maint ( )
{
long x, y, r, xx, yy;
cout < < " Ce programme vous permet de calculer le PGCD de deux nombres x et y" < < endl;
cout < < " Quelle est la valeur de x? \n" < < endl;
cin > > x;
xx = x;
cout < < " \nQuelle est la valeur de y?" < < endl;
cin > > y;
yy = y;

if ( x > y)
{
r = x % y
while ( r ! = 0)
{
x = y;
y = r;
r = x % y;
}
cout < < " Le PGCD de " < < xx < < " et " < < yy < < " est " < < y;
getchar ( );
}

if ( x < y)
{
r = x;
x = y;
y = r;
r = x % y;
while ( r ! = 0)
{
x = y;
y = r;
r = x % y;
}
cout < < " Le PGCD de " < < xx < < " et " < < yy < < " est " < < y;
getchar ( );
}

if ( x == y)
{
cout < < " Le PGCD de " < < xx < < " et " < < yy < < " est " < < x;
getchar ( );
}

return 0;
}

Morpheus, qui a de gros pbs

freedix
freedix
Niveau 10
30 novembre 2003 à 10:29:51

Ligne 7 :
int main() et non int maint() :)

Kilyn_
Kilyn_
Niveau 10
30 novembre 2003 à 13:48:06

Ton programme doit surement marcher mais tu pouvais le raccourcir. En effet dans tes 3 tests de condition tu fais la même chose. En effet, quelque soit la condition ( x<y ou x>y ou x=y), ben ca marche.

Kilyn_
Kilyn_
Niveau 10
30 novembre 2003 à 14:18:33

Sinon ici :
if ( x > y)
{
r = x % y

T´as oublié un point-virgule ( ;)

MathieuN7
MathieuN7
Niveau 10
30 novembre 2003 à 19:30:42

freedix :d) Mais keske chui con!!! franchement là je m´étonne! Mais bon g unee xcuse: il était 1h du at, un samedi... :p)

kylin :d) OUé bah je crois ke le prog est bouclé... Merci pour toute ton aide!!!

Et longue vie à jeuxvideo.com!!!

Morpheus

Kilyn_
Kilyn_
Niveau 10
30 novembre 2003 à 20:28:42

De rien Morpheus mais tu pouvais encore le raccourcir. T´enlèves toutes les conditions ( les if) et tu supprimes ce qui est inutile et hop tu obtiendras un programme optimiser avec le même résultat.

DasHuhn
DasHuhn
Niveau 10
03 décembre 2003 à 15:23:43

Kilyn_ > Comme je l´ai dis, mes programmes dans leur première version sont bourrés d´erreurs ( je sais mal coder, et ne sais pas du tout écrire un programme correct. On va dire que j´ai appris sur le tas.)

Quand à l´erreur %d au lieu de %ld c´est juste un problème d´inatention lorsque j´ai changé deux ou trois choses.

J´espère que vous m´excuserez de toutes ces erreurs. Après reflexion, je suis capable de réécrire pgcd.c sans ennuis, et le nouveau code est bien différent du code d´origine.

Kilyn_
Kilyn_
Niveau 10
03 décembre 2003 à 20:26:19

Non ce n´est pas grave DasHuhn. Tout le monde fait des erreurs, même les meilleurs programmeurs du monde. Moi il m´arrive d´oublier les points virgules, alors tu vois. ^^

zedix
zedix
Niveau 5
03 décembre 2003 à 20:49:38

Les points virgules, c´est assez lourd au debut, mais tres vite tu vas ne plus les oublier. Nan, apres les erreurs sont beaucoup plus subtiles et surtout plus coriaces à trouver :(

Genre les segmentation fault :((

MathieuN7
MathieuN7
Niveau 10
26 janvier 2006 à 12:24:59

Après 1an d´arrêt, je me suis remis à la prog, et je me rends compte que la fonction de calcul du pgcd peut tenir en 2 lignes:

int pgcd(int a, int b)
{
if(a%b == 0) return b;

else return pgcd(b, a%b);
}

:rire:

MathieuN7
MathieuN7
Niveau 10
26 janvier 2006 à 12:25:18

(comparez à ma première version ^^)

godrik
godrik
Niveau 30
26 janvier 2006 à 13:49:37

et oui, ceci est l´algorithme d´euclide...
mais cette version est recursive. peut etre peux tu ecrire cette fonction en iteratif...

Bigloo
Bigloo
Niveau 10
26 janvier 2006 à 17:40:14

Sympathique remontée. Que de (mauvais) souvenirs.

dnob700
dnob700
Niveau 10
26 janvier 2006 à 17:45:16

ta fonction est récursive terminale comme on dit, donc n´importe quel compilo (même gcc d´après moi) est capable de dérouler ça).

Ce qui veut dire que tu as la simplicité d´un code récursif avec la quasi efficacité d´un code itératif (pas de limite de la profondeur de récursions entre autre)

Donc contrairement à godrik, je ne pense pas qu´il faille la réécrire en itératif.

Bigloo
Bigloo
Niveau 10
26 janvier 2006 à 17:51:54

Le C optimise les récursivités terminales ? (si c´est pas comme ça qu´on dit, pas taper)

Le Scheme je savais mais le C...

dnob700
dnob700
Niveau 10
26 janvier 2006 à 18:04:38

ICC le fait, pour le reste je n´ais pas testé, mais c´était peut-être une supposition hasardeuse - il faudrait vérifier effactivement.

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