Expandable
2005-11-18, 16:25:05
Hallo allerseits,
ich habe gerade ein Problem mit C und Visual Studio 2005. Und zwar habe ich festgestellt, dass sizeof(int) = sizeof(long) ist! Was soll denn das? Ich habe nämlich das Problem, dass ich rekursiv und iterativ die Fakultät einer natürlich Zahl berechnen soll, nur geht das eben nicht, weil int viel zu klein ist. Gibt es noch einen größeren Datentyp? Zur Zeit schaut das Programm so aus:
#include <stdio.h>
int rekFak(int);
int iterFak(int);
int main()
{
int n = 0;
int nFakRekursiv = 0, nFakIterativ = 0;
printf("Programm zur rekursiven und iterativen Berechnung von n!\n\n");
// Zahl einlesen
printf("Bitte geben Sie nun eine natuerliche Zahl (ausser 0) ein: ");
scanf("%i", &n);
getchar();
// Fakultät iterativ und rekursiv berechnen
nFakRekursiv = rekFak(n);
nFakIterativ = iterFak(n);
// Falls das rekursive und iterative Ergebnis gleich ist, Ergebnis ausgeben
if (nFakRekursiv == nFakIterativ)
printf("n! = %li\n", nFakIterativ);
else // Unterschiedliche Ergebnisse -> Fehler ausgeben
printf("Fehler! Rekursive und iterative Berechnung fuehrte zu verschiedenen Werten!\n");
getchar(); // Hält die Konsole offen
return 0;
}
int rekFak(int n)
{
if (n == 1)
return 1;
return n * rekFak(n - 1);
}
int iterFak(int n)
{
int fak = 1;
int i = 1;
for (i; i <= n; i++)
{
fak *= i;
}
return fak;
}
Danke schon mal. Die Aufgabenstellung war übrigens:
Aufgabe 1 (Iteration vs. Rekursion) ( / 6) Pkt.
1. Schreiben sie eine rekursive Funktion rekFak(n), die die Fakult¨at einer
nat¨urlichen Zahl n rekursiv berechnet.
2. Schreiben sie eine iterative Funktion iterFak(n) zur Berechnung der
Fakult¨at einer nat¨urlichen Zahl n.
3. Schreiben Sie ein Hauptprogramm, das ¨uber die Tastatur eine Zahl ein-
liest und zu dieser Zahl die Fakult¨at rekursiv berechnet. Pr¨ufen Sie das
Resultat indem Sie es mit dem Resultat der iterativen Berechnung ver-
gleichen. Falls beide ¨ubereinstimmen, soll das Ergebnis auf dem Bild-
schirm ausgegeben werden. Andernfalls soll eine Fehlermeldung ausge-
geben werden. Sie k¨onnen davon ausgehen, dass sich der Benutzer nicht
vertippt und wirklich nur eine ganze positive Zahl eingibt.
ich habe gerade ein Problem mit C und Visual Studio 2005. Und zwar habe ich festgestellt, dass sizeof(int) = sizeof(long) ist! Was soll denn das? Ich habe nämlich das Problem, dass ich rekursiv und iterativ die Fakultät einer natürlich Zahl berechnen soll, nur geht das eben nicht, weil int viel zu klein ist. Gibt es noch einen größeren Datentyp? Zur Zeit schaut das Programm so aus:
#include <stdio.h>
int rekFak(int);
int iterFak(int);
int main()
{
int n = 0;
int nFakRekursiv = 0, nFakIterativ = 0;
printf("Programm zur rekursiven und iterativen Berechnung von n!\n\n");
// Zahl einlesen
printf("Bitte geben Sie nun eine natuerliche Zahl (ausser 0) ein: ");
scanf("%i", &n);
getchar();
// Fakultät iterativ und rekursiv berechnen
nFakRekursiv = rekFak(n);
nFakIterativ = iterFak(n);
// Falls das rekursive und iterative Ergebnis gleich ist, Ergebnis ausgeben
if (nFakRekursiv == nFakIterativ)
printf("n! = %li\n", nFakIterativ);
else // Unterschiedliche Ergebnisse -> Fehler ausgeben
printf("Fehler! Rekursive und iterative Berechnung fuehrte zu verschiedenen Werten!\n");
getchar(); // Hält die Konsole offen
return 0;
}
int rekFak(int n)
{
if (n == 1)
return 1;
return n * rekFak(n - 1);
}
int iterFak(int n)
{
int fak = 1;
int i = 1;
for (i; i <= n; i++)
{
fak *= i;
}
return fak;
}
Danke schon mal. Die Aufgabenstellung war übrigens:
Aufgabe 1 (Iteration vs. Rekursion) ( / 6) Pkt.
1. Schreiben sie eine rekursive Funktion rekFak(n), die die Fakult¨at einer
nat¨urlichen Zahl n rekursiv berechnet.
2. Schreiben sie eine iterative Funktion iterFak(n) zur Berechnung der
Fakult¨at einer nat¨urlichen Zahl n.
3. Schreiben Sie ein Hauptprogramm, das ¨uber die Tastatur eine Zahl ein-
liest und zu dieser Zahl die Fakult¨at rekursiv berechnet. Pr¨ufen Sie das
Resultat indem Sie es mit dem Resultat der iterativen Berechnung ver-
gleichen. Falls beide ¨ubereinstimmen, soll das Ergebnis auf dem Bild-
schirm ausgegeben werden. Andernfalls soll eine Fehlermeldung ausge-
geben werden. Sie k¨onnen davon ausgehen, dass sich der Benutzer nicht
vertippt und wirklich nur eine ganze positive Zahl eingibt.