Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx
Alles was du brauchst ist ein gescheiter Algorithmus, und den für die Fibonacci-Zahlen hast du ja schon gegeben. Eine Funktion dafür wäre in Pseudocode:
code:
1:
2:
3:
4:
5:
6:
FUNKTION fib(Zahl)
{
WENN Zahl=0 DANN fib=0;
SONST WENN Zahl=1 DANN fib=1;
SONST fib = fib(Zahl - 1) + fib (Zahl - 2);
}
Das in PASCAL zu übersetzen dürfte nicht das große Problem sein, du musst nur die PASCAL-Befehle dafür einsetzen.
Einen Algorithmus für den größten gemeinsamen Teiler kannst du dir auch selbst zusammenstellen. Es ist sinnvoller, einen Algorithmus selbst aufzustellen und ihn zu verstehen, als ihn nur einfach vorgesetzt zu bekommen. Das Prinzip ist ja dasselbe wie oben, du rufst die Funktion innerhalb der Funktion erneut auf (Rekursion). Du musst nur bedenken, dass die Rekursion nicht zu tief gehen sollte, sonst wird PASCAL sauer. Die millionste Fibonacci-Zahl würde ich lieber nicht ausprobieren
Seid PASCAL ist halt schon ne Weile her, deshalb hier der Code in Oberon (ist verwandt mit PASCAL, sollte deshalb kein Problem sein, das zu übersetzen):
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
PROCEDURE ggT (a,b: INTEGER):INTEGER;
BEGIN
IF a = 0 THEN
RETURN b;
ELSIF a > b THEN
RETURN ggT(b,a);
ELSE
RETURN ggT(b MOD a,a);
END;
END ggT;
Auch die Ein- und Ausgabe sollte kein Problem sein.
__________________ Success consists of simply getting up one more time than you fall down.