Questions sur les boucles

Fermé
Jelleybeen - 18 oct. 2015 à 03:56
Kirkm9 Messages postés 20 Date d'inscription samedi 18 juillet 2015 Statut Membre Dernière intervention 17 janvier 2017 - 5 mars 2016 à 21:05
Bonjour, je tentes de faire deux programmes, mais pour chacun d'entre eux, je bloques et je ne sais pas trop quoi faire ou quoi modifier afin que ce la fonctionne.

J'aurais besoins d'aide afin de savoir quoi changer pour que cela marche.

1: Écrivez le programme qui permet de trouver les 5 premiers nombres parfaits

// DESCRIPTION: Cette fonction verifie si le nombre entier donne en
// parametre est un nombre parfait. La fonction donne comme valeur
// de retour zero (faux) si le nombre n'est pas parfait et une
// valeur de retour differente de zero (vrai) si le nombre est
// parfait.
//
// PRE-CONDITION (entree):
// valeur: un entier, il faut en verifier la perfection.
//
// POST-CONDITION (sortie):
// Vrai (different de 0) si le nombre est parfait sinon faux (0).
//
// ALGORITHME:
//
// somme <- 1
// max <- (valeur/2)
// facteur <- 2
//
// TANT_QUE facteur est plus petit ou egal a max
// SI valeur modulo facteur == zero ALORS
// somme = facteur + valeur/facteur (le facteur et son partenaire)
// max <- (valeur/facteur) -1 (max maintenant <= que ca)
// FIN_SI
// Incrementer facteur
// FIN_TANT_QUE
// SI somme == valeur ALORS
// retourne vrai
// SINON
// retourne faux
// FIN_SI
//
//*************************************************************************
int parfait(int valeur)
{
int facteur; // Valeur testee pour la factorisation
int somme = 1; // Somme courante pour les facteurs trouves
int max = valeur/2; // Valeur maximale pour un facteur

for (facteur = 2 ; facteur <= max ; facteur ++)
{
if (valeur%facteur == 0)
{
somme += (facteur + valeur/facteur); // on compatibilise la somme
max = valeur/facteur-1;
}
}
return (somme == valeur);
}

Quand je fais exécuter, il n'y a rien, simplement un écran noir.



2. Il existe des nombres à 3 chiffres tels que la somme des cubes des chiffres
qui composent un nombre est égale au nombre lui-même. Écrivez un programme qui trouve tous les nombres entre 100 et 500, inclusivement, qui
respectent cette particularité.

#include <iostream>
#include <cmath>
#include <string>

using namespace std;

int main()
{
int nombre, sommeCube, valeur, Chiffre;
int BORNE1 = 100;
int BORNE2 = 500;

for(nombre = BORNE1; nombre < BORNE2; nombre++)
{
valeur = nombre;
sommeCube = 0;

}

while (valeur > 0 )
{
Chiffre = valeur % 10;
sommeCube = sommeCube + Chiffre * Chiffre * Chiffre;
valeur = valeur / 10;
}

if ( nombre == sommeCube)
cout << "nombre = " << nombre << ", somme des cubes de ses chiffres = " << sommeCube << endl;

return 0;
}

Encore là, quand j'exécute mon programme, un écran noir apparaît.

Pouvez-vous m'aider ou me donner une piste de réflexion puisque je suis bloquer et je tentes de comprendre les boucles.

Merci

1 réponse

Kirkm9 Messages postés 20 Date d'inscription samedi 18 juillet 2015 Statut Membre Dernière intervention 17 janvier 2017
5 mars 2016 à 21:05
Pour le 1 tu n'as mis qu'une fonction qui n'affiche rien donc c'est normal que l'écran reste noir :p
Pour le 2, il faudrait revoir la position des accolades. En effet, une boucle exécute un certain nombre de fois (par exemple 500 fois pour la première) que ce qu'il y a à l’intérieur des accolades.
Par exemple pour la boucle for elle ne fera que changer la valeur de "valeur" 500 fois sans rien faire d'autre. Elle est inutile car elle s’arrête avant le début de la boucle while.
0