gillesdc
Messages postés338Date d'inscriptionjeudi 3 novembre 2016StatutMembreDernière intervention18 septembre 2017
-
Modifié par NHenry le 11/01/2017 à 18:38
cptpingu
Messages postés3840Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention23 août 2024
-
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:
Racine carrée de 18
Racine carrée de 45 - Meilleures réponses
Comment simplifier une racine carrée - Meilleures réponses
gillesdc
Messages postés338Date d'inscriptionjeudi 3 novembre 2016StatutMembreDernière intervention18 septembre 2017 11 janv. 2017 à 21:42
Bonjour,
Oui effectivement, il n'y a pas de POO,... Je contais le dire, puis je me suis dit que ça allait alourdir mon message... Je ne suis pas tres bon en POO, meme vraiment pas bon... Ce qui est normal, j'ai enormement d'activité et je ne peux pas avancer rapidement en programmation...
Oui, j'ai tous mis dans la main, c'est ce que j'appelle un "premier jet", seulement celui-ci ne fonctionnant pas, je l'ai publié pour que vous m'aidiez a m'en sortir (ce que vous avez fait et je vous en remercie).
J'ai continuer un peu mon programme par moi meme et si vous l'accepter, j'aimerais beaucoup recevoir des conseils pour structurer ma POO, je ne "pense pas encore objet"...
Je vous met mon 2e code plus bas. Je vais encore surement l'améliorer.
Merci beaucoup pour votre message tres instructif !
gillesdc
Messages postés338Date d'inscriptionjeudi 3 novembre 2016StatutMembreDernière intervention18 septembre 2017 Modifié par KX le 11/01/2017 à 21:58
Bonjour,
J'ai un peu retravaillé mon code, il compile maintenant et est un rien plus lisible. Je vais encore travailler a sa lisibilité. J'adorais recevoir de l'aide pour la POO, ne fusse que pour structurer le code. Cela me ferait enormement plaisir !
mon code main.cpp :
#include <iostream>
#include <cmath>
#include "Nombre.h"
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 nombreA(0); //initialisation de toutes les variables
int nombreB (0);
int nombreC (0);
int nombreD (0);
int nombreE (0);
int nombreGauche1 (1);
int nombreGauche2 (0);
int nombreDroite1 (nombreB);
int nombreDroite2 (nombreC);
for (nombreA = 150; nombreA > 2; nombreA--)
{
int nombreY (nombreX%nombreA); //nombre Y egal doit valeur 0
int nombreZ (nombreX/nombreA);
if (nombreY == 0)
{
cout << nombreA << " X " << nombreZ << endl; //affichage des PPCM
}
else
{
cout << "erreur de simplification" << endl;
}
}
cout << "Indiquer le premier facteur PPCM" << endl;
cin >> nombreB;
cout << "Indiquer le deuxieme facteur PPCM" << endl;
cin >> nombreC;
nombreD = carreParfaitOuNon(nombreB); // vérification qu'il s'agit bien de carré parfait
nombreE = carreParfaitOuNon(nombreC);
if (nombreD == 1)
{
nombreGauche1 = sqrt(nombreB);
}
else
{
nombreDroite1 = nombreB;
}
if (nombreE == 1)
{
nombreGauche2 = sqrt(nombreC);
}
else
{
nombreDroite2 = nombreC;
}
cout << nombreGauche1 << " X " << nombreGauche2 << " sqrt " << nombreDroite1 << " X " << nombreDroite2 << endl;
return 0;
}
KX
Messages postés16752Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention31 août 2024127 11 janv. 2017 à 21:58
Alors je ne vois pas du tout le rapport entre ton code et ton objectif, car si j'ai bien compris ce que tu veux faire, la fonction de calcul fait 10 lignes...
int f(int n) {
int a = 1;
for (int d = 2, s = sqrt(n); d <= s; d++) {
int p = d * d;
while (n % p == 0) {
a *= d;
n /= p;
s /= d;
}
}
return a;
}
Exemple :
void s(int n) {
int a = f(n);
int b = n / (a * a);
printf("sqrt(%d)=%d.sqrt(%d)\n", n, a, b);
}
int main() {
s(16); // sqrt(16)=4.sqrt(1)
s(77); // sqrt(77)=1.sqrt(77)
s(24255); // sqrt(24255)=21.sqrt(55)
}
Après tu peux mettre un peu d'objet là dedans, mais très honnêtement je ne vois pas trop l’intérêt ici, ce n'est que du calcul...
Vous n’avez pas trouvé la réponse que vous recherchez ?
POO != obligation. La POO n'est pas une fin en soi. Certains langages ne font même pas de POO ! Dire que tu veux faire de la POO dans ce programme, c'est comme dire: "Faut vraiment que je visse ce clou, parce que je ne sais pas utiliser de tournevis". Il faut bien comprendre que l'on utilise la POO avec parcimonie, et que si l'on se force à en mettre, c'est vraisemblablement inadapté. Pour apprendre la POO, cherche des exos de POO. Ne pas oublier que le C++ n'est pas un langage de "POO", mais un langage "multi-paradigme" (qui est adapté pour mélanger plusieurs styles), dont le principal atout est le "RAII". Si on doit décrire le C++, alors on dira que c'est un langage qui gère le RAII (voir ce qu'est le RAII ici: https://fr.wikipedia.org/wiki/Resource_acquisition_is_initialization).