2010-12-12 10 views
2

das Problem ist: "Schreiben Sie eine Funktion, um herauszufinden, ob eine Zahl eine erste oder perfekte Zahl ist."entscheiden, ob eine Zahl perfekt oder prime ist

Bisher habe ich auf den perfekten Teil zuerst gearbeitet und das ist, was ich habe:

#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; 
} 

Es scheint jedoch Fehler in diesem Code. Ich habe über das Buch geschaut, aber nichts spricht über dieses Thema. Ich möchte einen Rat bekommen, wie man diesen Code repariert.

danke!

+0

% bedeutet verbleibende Anzahl/i als 4% 2 = 0 –

+0

Sounds wie ein von Projekt Eulersche. Aber vielleicht ist es nur ich;) –

+0

Welche Fehler bekommst du? Wenn Sie das Codebeispiel betrachten, definieren Sie perfectNumber (int) als Bool, aber Sie geben ein int zurück. –

Antwort

7
bool perfectNumber(number); 

Dies ruft nicht die perfectNumber Funktion auf; Sie deklariert eine lokale Variable mit dem Namen perfectNumber vom Typ bool und initialisiert sie mit dem Wert number, konvertiert in den Typ bool.

Um die perfectNumber Funktion aufzurufen, müssen Sie etwas entlang der Linien von verwenden:

bool result = perfectNumber(number); 

oder:

bool result(perfectNumber(number)); 

Auf einer anderen Anmerkung: Wenn Sie Eingabe lesen gehen aus Ein Stream (z. B. cin>>number), müssen Sie überprüfen, um sicherzustellen, dass die Extraktion des Werts aus dem Stream erfolgreich war. Wie es jetzt ist, wenn Sie asdf eintippten, würde die Extraktion fehlschlagen und number würde nicht initialisiert bleiben. Der beste Weg, um zu überprüfen, ob eine Extraktion gelingt, ist einfach, den Zustand des Stroms zu testen:

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

Sie können mehr darüber erfahren, wie die Strom Fehlerzustände gesetzt und zurückgesetzt in Semantics of flags on basic_ios. Sie sollten auch a good, introductory-level C++ book konsultieren, um Best Practices für die Stream-Nutzung zu erhalten.

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

Bitte Code richtig einrücken. –

+1

Bool Prime = wahr; // Berechnet die Quadratwurzel von 'x' Wirklich? Es ist auch wichtig, Kommentare korrekt zu platzieren. –

+1

ok vielen dank für die hilfe :) – 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 gibt false oder true für eine perfekte Zahl zurück und is_prim gibt true oder false für eine Primzahl zurück – opc0de

+4

* Bitte formatieren Sie Ihren Code. Haben Sie sich die Vorschau nicht angesehen und "Sie können nicht gelesen werden", bevor Sie die Antwort schreiben? Wählen Sie im Editor den Quellcode und klicken Sie auf die Schaltfläche "101010". – jalf

+0

@jalf '101010' bedeutet' fein'? Ich wusste es nicht :-) –

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; 
    } 
} 
Verwandte Themen