2010-12-12 9 views
2

le problème est: "Ecrire une fonction pour savoir si un nombre est un nombre premier ou parfait."décider si un nombre est parfait ou premier

jusqu'à présent j'ai travaillé sur la partie parfaite d'abord et c'est ce que j'ai:

#include <iostream> 
using namespace std; 
bool perfectNumber(int); 
int main() 
{ 
int number; 

cout<<"Please enter number:\n"; 
cin>>number; 
bool perfectNumber(number); 

return 0; 
} 
bool perfectNumber(int number) 
{ 
int i; 

int sum=0; 
for(i=1;i<=number/2;i++) 
{ 
    if(number%i==0) 
    { 
    sum+=i; 
    } 
} 
if (sum==number) 
    return i; 
else 
    return 0; 
} 

Cependant, il semble y avoir des erreurs sur ce code. J'ai regardé le livre mais rien ne parle de ce sujet. Je voudrais obtenir des conseils sur la façon de corriger ce code.

merci!

+0

% signifie reste du nombre/i 4% 2 = 0 –

+0

Sonne comme l'un des projets d'Euler. Mais peut-être que c'est juste moi;) –

+0

Quelles sont les erreurs que vous obtenez. En regardant l'exemple de code, vous définissez perfectNumber (int) comme un bool mais vous renvoyez un int. –

Répondre

7
bool perfectNumber(number); 

Cela n'appelle pas la fonction perfectNumber; il déclare une variable locale nommée perfectNumber de type bool et l'initialise avec la valeur de number convertie en type bool.

Pour appeler la fonction perfectNumber, vous avez besoin d'utiliser quelque chose le long des lignes de:

bool result = perfectNumber(number); 

ou:

bool result(perfectNumber(number)); 

Sur une autre note: si vous allez lire depuis un flux (par exemple cin>>number), vous devez vérifier que l'extraction de la valeur du flux a réussi. Comme c'est le cas maintenant, si vous avez tapé asdf, l'extraction échouerait et number ne serait pas initialisée. La meilleure façon de vérifier si une extraction réussit est tout simplement de tester l'état du flux:

if (cin >> number) { 
    bool result = perfectNumber(number); 
} 
else { 
    // input operation failed; handle the error as appropriate 
} 

Vous pouvez en apprendre davantage sur la façon dont les états d'erreur de flux sont remis à zéro à définir et Semantics of flags on basic_ios. Vous devriez également consulter le a good, introductory-level C++ book pour connaître les meilleures pratiques d'utilisation des flux.

1
void primenum(long double x) { 
    bool prime = true; 
    int number2; 
    number2 = (int) floor(sqrt(x));// Calculates the square-root of 'x' 

    for (int i = 1; i <= x; i++) { 
     for (int j = 2; j <= number2; j++) { 
      if (i != j && i % j == 0) { 
       prime = false; 
       break; 
      } 
     } 
     if (prime) { 
      cout << " " << i << " "; 
      c += 1; 
     } 
     prime = true; 
    } 
} 
+2

Veuillez mettre le code correctement en retrait. –

+1

bool prime = true; // Calcule la racine carrée de 'x' Vraiment? Il est également important de placer les commentaires correctement. –

+1

ok merci à tous pour l'aide :) – carla

-1
#pragma hdrstop 

#include <tchar.h> 
#include <stdio.h> 
#include <conio.h> 
//--------------------------------------------------------------------------- 


bool is_prim(int nr) 
{ 

    for (int i = 2; i < nr-1; i++) { 

    if (nr%i==0) return false; 

    } 

    return true; 

} 

bool is_ptr(int nr) 
{ 
    int sum=0; 

    for (int i = 1; i < nr; i++) { 

    if (nr%i==0) { 
     sum=sum+i; 
    } 

    } 

    if (sum==nr) { return true; 

    } 
    else return false; 
} 
#pragma argsused 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int numar; 

    printf ("Number=");scanf("%d",&numar); 
    if (is_prim(numar)==true) { printf("The number is prime"); 

    } 
    else printf("The number is not prime"); 

    if (is_ptr(numar)==true) { printf(" The number is perfect"); 

    } 
    else printf(" The number is not perfect"); 
    getch(); 
    return 0; 
} 
+0

is_ptr renvoie false ou true pour un nombre parfait et is_prim renvoie true ou false pour un nombre premier – opc0de

+4

* Veuillez * mettre en forme votre code. N'avez-vous pas regardé l'aperçu et remarqué "ceci est illisible" avant de poster la réponse? Dans l'éditeur, sélectionnez le code source, puis cliquez sur le bouton '101010'. – jalf

+0

@jalf '101010' signifie' fine'? Je ne savais pas :-) –

1
bool isPerfect( int number){ 
    int i; 
    int sum=0; 
    for(i=1;i<number ;i++){ 
     if(number %i == 0){ 
      cout<<" " << i ; 
      sum+=i; 
     } 
    } 

    if (sum == number){ 
     cout<<"\n \t\t THIS NUMBER >>> "<< number <<" IS PERFECT \n\n"; 
     return i; 
    }else if (sum |= number) { 
       cout<<"\nThis number >>> " << number <<" IS NOT PERFECT \n\n"; 
       return 0; 
    } 
} 
Questions connexes