Fakultät in C++ < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Aufgabe | [Dateianhang nicht öffentlich] |
Ich habe nun diesen Quelltext entworfen:
1: |
| 2: | #include<iostream>
| 3: | using namespace std;
| 4: | void fakultaet(int);
| 5: |
| 6: | int main()
| 7: | {
| 8: | int n;
| 9: | do
| 10: | {
| 11: | cout << "Gib eine ganze Zahl ein: ";
| 12: | cin >> n;
| 13: | }
| 14: | while(n<0);
| 15: | fakultaet(n);
| 16: | return 0;
| 17: | }
| 18: | void fakultaet(int n)
| 19: | {
| 20: | int ergebnis = 1;
| 21: | for(int i=1; i<=n; i++)
| 22: | ergebnis *= i;
| 23: | cout << n << "! = " << ergebnis << endl;
| 24: | } |
Nur was passiert mit der Variablen "m" in der Aufgabenstellung?
Soweit ich das verstanden habe soll man eine Zahl (Bsp. 5) für m eingeben.
Dann soll folgendes separat (?) berechnet werden:
0!,1!,2!,3!,4!,5!
oder hab ich etwas falsch verstanden?
Dateianhänge: Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
|
|
|
|
Ist denn dieser (zusätzliche) Quelltext die mögliche Lösung?
1: | int m;
| 2: | cout <<"Geben sie eine natuerliche Zahl m ein:";
| 3: | cin >> m;
| 4: | if (m < 0){
| 5: | cout << "Fakultaet fuer negative Zahlen nicht definiert!";
| 6: | exit(1);}
| 7: | else
| 8: | int ergebnis = 1;
| 9: | for (int k=1; k <= m; k++)
| 10: | for (int i=1; i <= m; i++)
| 11: | ergebnis = i*i*k;
| 12: | cout << "Das Ergebnis lautet: " << ergebnis << "\n" ; |
|
|
|
|
|
Nein!
Was wäre denn zuätzlich? Wohin damit? Wenn nicht zusätzlich, dann hättest du aber überhaupt keine Funktionsaufrufe. Vergiss den Code, wir schauen uns den vom Anfang an:
Ersetze erstmal den Variablennamen n in der main-Methode durch m.
In der Aufgabenstellung steht nichts von einer Eingabeschleife! Die do-while-Schleife hat dort nichts zu suchen. Du liest ein m ein, prüfst, ob es ok ist und reagierst darauf, also if.
Falls es ok war, musst du nun eine Schleife basteln, die eine zweite Variable (z.B. i) die Werte von 0 bis m durchlaufen lässt und jedesmal die Funktion fakultaet mit i als Parameter aufruft.
Das ist alles.
Also: nur die main-Methode verändern, die Funktion bloß nicht mehr anfassen!
Gruß
Martin
|
|
|
|
|
Also kann ich das jetzt so stehen lassen, wie das ist?
|
|
|
|
|
Nicht, wenn du die Aufgabe lösen willst...
Ich habe meine Antwort mit "Nein" angefangen.
Die Funktion ist ok, deine main-Methode nicht.
Wenn etwas unklar ist, dann frag nochmal.
Gruß
Martin
|
|
|
|
|
Was versteh ich denn unter der Main-Methode?
|
|
|
|
|
int main() {...}
OK, man würde wohl eher main-Funktion sagen. Ich weiß nicht, was mich da geritten hat...
Gruß
Martin
|
|
|
|
|
sehr schön :( jetzt versteh ich nichts mehr...
es ist doch alles im int main (){...} oder ist das "void" das Problem?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:46 Di 13.11.2007 | Autor: | Gilga |
Also kann ich das jetzt so stehen lassen, wie das ist? JA
|
|
|
|
|
Status: |
(Korrektur) kleiner Fehler | Datum: | 21:52 Di 13.11.2007 | Autor: | Martin243 |
Die Berechnung soll aber mittels der fakultaet-Funktion stattfinden. Das ist hier nicht der Fall!
|
|
|
|
|
1: | #include<iostream>
| 2: | using namespace std;
| 3: |
| 4: |
| 5: | int main()
| 6: | {
| 7: | int n;
| 8: | do
| 9: | {
| 10: | cout << "Gib eine ganze Zahl ein: ";
| 11: | cin >> n;
| 12: | }
| 13: | while(n<0);
| 14: |
| 15: |
| 16: | int ergebnis = 1;
| 17: | for(int i=1; i<=n; i++)
| 18: | ergebnis *= i;
| 19: | cout << n << "! = " << ergebnis << endl;
| 20: |
| 21: | int m;
| 22: | cout <<"Geben sie eine natuerliche Zahl m ein:";
| 23: | cin >> m;
| 24: | if (m < 0){
| 25: | cout << "Fakultaet fuer negative Zahlen nicht definiert!";
| 26: | exit(1);}
| 27: | else
| 28: | int ergebnis = 1;
| 29: | for (int k=1; k <= m; k++)
| 30: | for (int i=1; i <= m; i++)
| 31: | ergebnis = i*i*k;
| 32: | cout << "Das Ergebnis lautet: " << ergebnis << "\n" ;
| 33: | } |
Das wäre also die int-Form?
|
|
|
|
|
Hallo,
nochmal ganz von vorne: Der Code in deinem ersten Beitrag traf es am besten. Dort war eine Funktion fakultaet enthalten und die musst du laut Aufgabenstellung haben.
Was dir nur noch fehlte, war eine Schleife, die diese Funktion mit aufsteigendem Argument aufruft. Die gehört in die main-Funktion.
Ich nehme mal deinen Code vom Anfang und verändere ihn ein bisschen:
#include<iostream>
using namespace std;
void fakultaet(int);
int main()
{
int n;
int i, m; //Zähler und Obergrenze
do
{
cout << "Gib eine ganze Zahl ein: ";
cin >> nm;
}
while(n<0);
if (m<0) cout << "Bla Bla...";
else for (i=0; i<=m; ++i)
fakultaet(ni);
return 0;
}
void fakultaet(int n)
{
int ergebnis = 1;
for(int i=1; i<=n; i++)
ergebnis *= i;
cout << n << "! = " << ergebnis << endl;
}
Im Großen und Ganzen fehlten nur die Zurückweisung bei falscher Eingabe und die Aufrufschleife.
Gruß
Martin
|
|
|
|
|
Hallo,
> Soweit ich das verstanden habe soll man eine Zahl (Bsp. 5) für m eingeben.
> Dann soll folgendes separat (?) berechnet werden:
> 0!,1!,2!,3!,4!,5!
> oder hab ich etwas falsch verstanden?
Ich habe es auch so verstanden, wenn du mit separat "durch aufeinanderfolgende Funktionsaufrufe" meinst.
Deine Funktion sieht auf jeden Fall gut aus. Die main-Methode sollte aber die Variablen m und einen Zähler (z.B. i) enthalten. Das n aus der Funktion hat mit deinem n nichts zu tun.
Gruß
Martin
|
|
|
|