Algorithmus in C programmieren
-
hallo,
Eine Zahl soll eingegeben werden und das Programm soll berechnen ob die eingegebene Zahl eine perfekte Zahl ist.
Eine Perfekte zahl ist zb. 6 = 3+2+1, also ohne rest).Eigentlich sollte das eh kein Problem sein, aber zum Algorithmus komm ich nicht.
Dann steht noch in der Angabe, dass man ein Hauptprogramm implementieren muss, das vom Benutzer eine Zahl als Obergrenze einliest und dann alle perfekten Zahlen bis zu diesem Grenzwert berechnet.
was ist da gefragt?
-
ganz daemliche und langsame variante:
int i, j, zahl; // zahl = 8 (zB) for(i = 0; i + j; i < zahl) ++j; if(!(zahl - i)) printf("Eingegebene Zahl ist eine perfekte Zahl."); else printf("Eingegebene Zahl ist keine perfekte Zahl."); // j ist die variable, in der die werte 1, 2, 3, 4, zahl durchgezaehlt werden, // und jeweils zu i hinzugefuegt werden -> i = 1+2+3+4+... < solange i<zahl ist // dann wird nur noch ueberprueft, ob die differenz zwischen i und zahl == 0 // ist, und daraus geschlussfolgert, // ob die zahl eine perfekte oder nicht perfekte zahl ist :)
ich hoffe ich hab das richtig verstanden, was du mit einer perfekten zahl meinst :o
lg, hannibal
-
nö. hab schon.
so gehts:
#include <stdio.h> int main(int argc, char* argv[]) { int zahl,erg = 0,i = 1, j = 2; /*Deklaration der variablen*/ printf("Geben Sie bitte eine Zahl ein: "); scanf("%d",&zahl); /*eingabe des wertes*/ for(j = zahl; j > 1;j--) /*Erste Schleife. Durchläuft alle Zahlen bis j (=eingegebene Zahl)*/ { int summe = 1; for(i = 2; i*i < j; i++) /*Zweite Schleife. Überprüft alle Zahlen i bis zur aktuellen Zahl j, ob sie Teiler von i sind, wenn ja werden sie auf die Summe aufsummiert*/ { if(j % i == 0) /*wenn j teiler von i, dann wahr*/ summe = summe + i + j/i; } if(summe == j) /*falls summe wahr, dann = j*/ { printf("Zahl: %d ist perfekt!\n",j); /*Perfekte Zahl wird hier ausgegeben, also j*/ } } return 0; }
-
ich versteh grad nicht, was du unter einer perfekten zahl verstehst - meinst du primzahlen? bin verwirrt.
-
meinst du sowas?
int perfekte_zahl(unsigned int zahl){double x=-.5+sqrt(.25+2*zahl);return x==(int)x;} int main(){ for(unsigned int i=0;i<100;++i) printf("%d\t%d\n ",i,perfekte_zahl(i)); }
epsilonvergleich wäre besser...
an sonten zahl=2*summe(i) =x*(x+1) also ist x^2+x-2zahl=0... pq-Formel...
x=-1/2 + wurzel(1/4 +2zahl);