Simplification racine carrée en c++

Résolu
gillesdc Messages postés 338 Date d'inscription jeudi 3 novembre 2016 Statut Membre Dernière intervention 18 septembre 2017 - Modifié par NHenry le 11/01/2017 à 18:38
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 12 janv. 2017 à 10:45
Bonjour,

J'apprends pour le moment la POO en C++, et je me suis lancé comme défi de faire un programme qui ne calculerait pas la racine, mais la simplifierait, pour ce, j'ai divisé mon programme en 2 parties :

1) on trouve les PPCM du nombre
2) on calculs les chiffres qui doivent etre a l'interieur ou a l'exterieur de la racine (ici le point virgule ";").

Seulement, voilà, mon programme fonctionne bien pour la premiere partie, mais pour la deuxieme, il met tous les chiffres a l'exterieur de la racine,...
je vous met mon programme :

#include <iostream>
#include <cmath>

using namespace std;

int nombreX (0); //initialisation de la valeur de la racine

int main()
{
cout << "Choississez la valeur de la racine : ";
cin >> nombreX;
int nombreW (0);
if (nombreX == 4 || 9 || 16 || 25 || 36 || 49 || 64 || 81 || 100 || 121 || 144 || 169 || 196 || 225 || 256 || 289 || 324 || 361 || 400 || 441 || 484 || 529)
{
nombreW = sqrt(nombreX);
cout << nombreW << " il s'agit d'un carre parfait, ne vous preoccupez pas du reste." << endl;
}
int nombreA(0);
for (nombreA = 150; nombreA > 2; nombreA--)

{
int nombreY (nombreX%nombreA); //nombre Y egal soit 1 soit 0
int nombreZ (nombreX/nombreA);

if (nombreY == 0)
{
cout << nombreA << " X " << nombreZ << endl;
}
else
{
cout << "erreur" << endl;
}
}

int nombreB (0);
int nombreC (0);
int nombreGauche1 (1);
int nombreGauche2 (0);
int nombreDroite1 (0);
int nombreDroite2 (0);

cout << "Indiquer le premier facteur PPCM" << endl;
cin >> nombreB;
cout << "Indiquer le deuxieme facteur PPCM" << endl;
cin >> nombreC;

if (nombreB == 4 || 9 || 16 || 25 || 36 || 49 || 64 || 81 || 100 || 121 || 144 || 169 || 196 || 225 || 256 || 289 || 324 || 361 || 400 || 441 || 484 || 529)
{
nombreGauche1 = sqrt(nombreB);
}
else
{
nombreDroite1 = nombreB;
}

if (nombreC == 4 || 9 || 16 || 25 || 36 || 49 || 64 || 81 || 100 || 121 || 144 || 169 || 196 || 225 || 256 || 289 || 324 || 361 || 400 || 441 || 484 || 529)
{
nombreGauche2 = sqrt(nombreC);
}
else
{
nombreDroite2 = nombreC;
}

cout << nombreGauche1 << " X " << nombreGauche2 << ";" << nombreDroite1 << " X " << nombreDroite2 << endl;


return 0;

}


Il n'est pas tres beau et concis, mais soyez indulgent, c'est mon premier programme aussi dur tout seul ;)
Si vous savez comment corriger ce probleme, comment ameliorer la beauté de mon programme ou comment proceder pour le transformer en POO, je suis a l'écoute !

Merci d'avance,

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

6 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
11 janv. 2017 à 19:16
Bonjour,

"J'apprends pour le moment la POO en C++"
Ton code ne fait pas de POO... et pire, tu as tout mis dans le main !

if (nombreX == 4 || 9 || 16 || 25 || 36 || 49 || 64 || 81 || 100 || 121 || 144 || 169 || 196 || 225 || 256 || 289 || 324 || 361 || 400 || 441 || 484 || 529)

Ce code est faux. Il faudrait plutôt faire
if (nombreX == 4 || nombreX == 9 || nombreX == 16 ...)
même si dans le fond, lister l'ensemble de ces valeurs n'est pas la bonne manière de faire.

Ce qu'il faut c'est faire une décomposition en produit de facteurs premiers de ta racine, et à chaque fois que tu as deux facteurs identiques, le sortir de la racine.

Voir algorithme de décomposition en produit de facteurs premiers
0
Rejoignez-nous