Fakultät berechnen in Java < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 16:56 Mo 01.11.2010 | Autor: | Fatih17 |
Aufgabe | Schreiben Sie ein Programm, welches für eine eingegebene natürliche Zahl oder 0 die Fakultät zu dieser Zahl berechnet. Der Benutzer soll zu Programmbeginn solange dazu aufgefordert werden, eine natürliche Zahl oder 0 einzugeben, bis er dies gemacht hat.
Die Fakultät ist rekursiv für alle natürlichen Zahlen inkl. der Zahl 0 definiert durch:
0! = 1 n! = (n-1)! * n Beispiele: 0! = 1, 1! = 1, 2! = 2, 3! = 6, 4! = 24, 5! = 120
Verwenden Sie in Ihrem Programm eine geeignete Schleife. Begründen Sie Ihre Entscheidung für eine bestimmte Schleifenart. |
Ich bin bis jetzt so weit gekommen, dass das Programm einen immer wieder auffordert eine Zahl über 0 einzugeben. Leider weiß ich nicht wie ich dem weismachen soll, dass er 5=1*2*3*4*5=120 rechnen soll.
Gibt es da einen bestimmten Befehl für Primzahlen?
Hier mein Code bis jetzt:
public class Fakultät
{
public static void main ( String[] args )
{
System.out.println ("Dieses Programm berechnet die Fakultaet einer eingegeben Zahl");
int x;
do {
System.out.print ("Geben Sie eine natuerliche Zahl ein: " );
x= In.readInt();
} while (x<=0);
}
}
|
|
|
|
> Schreiben Sie ein Programm, welches für eine eingegebene
> natürliche Zahl oder 0 die Fakultät zu dieser Zahl
> berechnet. Der Benutzer soll zu Programmbeginn solange dazu
> aufgefordert werden, eine natürliche Zahl oder 0
> einzugeben, bis er dies gemacht hat.
>
> Die Fakultät ist rekursiv für alle natürlichen Zahlen
> inkl. der Zahl 0 definiert durch:
> 0! = 1 n! = (n-1)! * n Beispiele: 0! = 1, 1! = 1, 2! = 2,
> 3! = 6, 4! = 24, 5! = 120
>
> Verwenden Sie in Ihrem Programm eine geeignete Schleife.
> Begründen Sie Ihre Entscheidung für eine bestimmte
> Schleifenart.
> Ich bin bis jetzt so weit gekommen, dass das Programm
> einen immer wieder auffordert eine Zahl über 0 einzugeben.
> Leider weiß ich nicht wie ich dem weismachen soll, dass er
> 5=1*2*3*4*5=120 rechnen soll.
>
> Gibt es da einen bestimmten Befehl für Primzahlen?
wieso primzahlen?
also hier mal quasi c-mässig:
int zahl=5;
int fak=1;
while (zahl>0) {
fak*=zahl;
zahl--;
}
>
> Hier mein Code bis jetzt:
>
>
> public class Fakultät
> {
> public static void main ( String[] args )
> {
> System.out.println ("Dieses Programm berechnet die
> Fakultaet einer eingegeben Zahl");
> int x;
>
> do {
> System.out.print ("Geben Sie eine natuerliche Zahl ein: "
> );
> x= In.readInt();
> } while (x<=0);
>
>
> }
> }
>
>
gruß tee
|
|
|
|
|
Status: |
(Korrektur) kleiner Fehler | Datum: | 17:07 Mo 01.11.2010 | Autor: | Marc |
Hallo T,
> int zahl=5;
> int fak=0;
hier müsste int fak=1 stehen, da sonst alle Ergebnisse 0 werden
> while (zahl>0) {
> fak*=zahl;
> zahl--;
> }
> vorher noch ne if abfrage für die 0 rein.
Das ist dann doch auch nicht mehr nötig (oder?); die Variable fak enthält Ende des Programmlaufs den Wert von zahl! in jedem Fall.
-Marc
|
|
|
|
|
Status: |
(Korrektur) oberflächlich richtig | Datum: | 18:20 Mo 01.11.2010 | Autor: | fencheltee |
> Hallo T,
>
> > int zahl=5;
> > int fak=0;
>
> hier müsste int fak=1 stehen, da sonst alle Ergebnisse 0
> werden
oha, ganz übersehen, ich danke dir für die korrektur!
>
> > while (zahl>0) {
> > fak*=zahl;
> > zahl--;
> > }
> > vorher noch ne if abfrage für die 0 rein.
>
> Das ist dann doch auch nicht mehr nötig (oder?); die
> Variable fak enthält Ende des Programmlaufs den Wert von
> zahl! in jedem Fall.
>
auch wieder wahr ;)
> -Marc
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:12 Mo 01.11.2010 | Autor: | Fatih17 |
Hallo nochmal,
also ich bin noch reiner Java Anfänger und das mit der 5 war ja nur ein Beispiel.
Aus deiner Antwort werde ich leider irgendwie nicht schlau, tut mir leid :(
|
|
|
|
|
> Hallo nochmal,
>
> also ich bin noch reiner Java Anfänger und das mit der 5
> war ja nur ein Beispiel.
>
> Aus deiner Antwort werde ich leider irgendwie nicht schlau,
> tut mir leid :(
dein problem war doch nur, einen algorithmus für die fakultät zu finden.
ich schrieb dir dann:
int zahl=5;
int fak=1;
while (zahl>0) {
fak*=zahl;
zahl--;
}
wobei statt zahl=5 auch direkt dein x da stehen kann (wo ja der eingelesene wert drin ist)
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:34 Mo 01.11.2010 | Autor: | Fatih17 |
Hallo nochmal,
also bei mir stehen jetzt z.B. in der Konsole bei der Zahl 4 z.B. die Zahlen 1,2,3,4. Das Problem ist aber, wie sage ich dem dass er diese Zahlen multiplizieren soll um am ende auf das ergebnis zu kommen?
|
|
|
|
|
> Hallo nochmal,
>
> also bei mir stehen jetzt z.B. in der Konsole bei der Zahl
> 4 z.B. die Zahlen 1,2,3,4. Das Problem ist aber, wie sage
> ich dem dass er diese Zahlen multiplizieren soll um am ende
> auf das ergebnis zu kommen?
dazu ist die schleife da
int fak=1;
while (zahl>0) {
fak*=zahl;
zahl--;
}
fak*=zahl ist die kurzform für fak=fak*zahl
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:55 Mo 01.11.2010 | Autor: | Fatih17 |
Hallo nochmal,
es hat alles funktioniert, danke an euch :)
Jetzt wüsste ich aber gerne was diese Schleife genau bewirkt bzw dieses Zahl--
Sagen wir mal die eingegebene Zahl ist 4 dann müsste demnach ja die zeile:
fak=fak*zahl
folgendermaßen lauten:
1=1*4
Es hat bestimmt etwas mit zahl-- zu tun, aber nur was?
|
|
|
|
|
> Hallo nochmal,
>
> es hat alles funktioniert, danke an euch :)
>
> Jetzt wüsste ich aber gerne was diese Schleife genau
> bewirkt bzw dieses Zahl--
>
> Sagen wir mal die eingegebene Zahl ist 4 dann müsste
> demnach ja die zeile:
>
> fak=fak*zahl
>
> folgendermaßen lauten:
>
> 1=1*4
>
> Es hat bestimmt etwas mit zahl-- zu tun, aber nur was?
als beispiel nehmen wir mal die 3:
int zahl=3;
int fak=1;
while (zahl>0) {
fak*=zahl;
zahl--;
}
1. durchlauf, fak=1
while (zahl>0) { //3 ist grösser als 0
fak*=zahl; //fak=fak*3=3
zahl--; //3-1=2
}
2. durchlauf, fak=3
while (zahl>0) { //2 ist grösser als 0
fak*=zahl; //fak=fak*2=6
zahl--; //2-1=1
}
3. durchlauf, fak=6
while (zahl>0) { //1 ist grösser als 0
fak*=zahl; //fak=fak*1=6
zahl--; //1-1=0, schleife wird abgebrochen
}
oder war nur unklar, dass zahl-- das gleiche ist wie zahl=zahl-1?
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 21:15 Mo 01.11.2010 | Autor: | Fatih17 |
Hallo,
nein du hast mir im grunde das Problem vor augen geführt, dass ich hatte :)
Ich wusste nicht dass solange die Schleife durchläuft, biss der Wert Null erreicht wurde, aber an welcher stelle multipliziert er die zahlen 3,2 und 1?
Und für "fak" galt ja "fak=1" , warum kommt dann im 2.Durchlauf 6 heraus?
Da steht doch dann:
1=1*2 , das macht aber nicht 6 oder verstehe ich hier etwas falsch?
|
|
|
|
|
> Hallo,
>
> nein du hast mir im grunde das Problem vor augen geführt,
> dass ich hatte :)
>
> Ich wusste nicht dass solange die Schleife durchläuft,
> biss der Wert Null erreicht wurde, aber an welcher stelle
> multipliziert er die zahlen 3,2 und 1?
>
> Und für "fak" galt ja "fak=1" , warum kommt dann im
> 2.Durchlauf 6 heraus?
> Da steht doch dann:
>
> 1=1*2 , das macht aber nicht 6 oder verstehe ich hier etwas
> falsch?
die 1 steht ja von anfang an drin. "unsere" schleife multipliziert aber von unten nach oben.
wenn wir also 5! berechnen wollen, steht folgendes in fak:
init: fak=1 (DL=DurchLauf)
1. DL: fak=fak*5=1*5
2. DL: fak=fak*4=5*4=20
3. DL: fak=fak*3=20*3=60
4. DL: fak=fak*2=60*2=120
5. DL: fak=fak*1=120*1=120
wir sehn im 5. durchlauf, dass der code in der ersten zeile auch zu "while (zahl > 1)" verändert werden könnte, da die 1 am ende nix verändert
gruß tee
|
|
|
|