Forum
Tipps
News
Menu-Icon

Turbo pascal

hallo
ich muss für die Schule ein Program zur Fibonacci-Folge (1,1,3,5,8,13,21...) erstellen. ICh hatte mir gedacht dass ich das folgender maßen mache:

Program Fibonacci;
uses crt;
Var f,n :longint;

Procedure fib;
Begin
f:=1;
If n >= 2 then f:=(n-1)+(n-2)
Else if n = 0 then f:=1 else
f:=1;
fib;
End;

Begin
clrscr;
readln (n);
fib;
writeln (f);
readln;
End.


Allerdings "stürzt" das programm nachdem ich die zahl eingegeben habe zurück auf das blaue Fenster und die
Fehlermeldung:
Fehler 202: stack überlauf.


Kann mir bitte jemand helfen!!


Antworten zu Turbo pascal:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Rekursion braucht immer eine Abbruchbedingung, deine Prozedur ruft sich hingegen IMMER wieder selbst auf; dadurch würde sie theoretisch unendlich lange laufen.

Da ein Computer jedoch endlich gross ist, kommt es zum Stack-Überlauf  ::)

Moin,

versuchs mal damit. Ist zwar nu in C, aber da ich ja nu schon Deine Hausaufgaben mache, kannst Du das sicherlich auch nach PASCAL portieren ;)


#include <stdio.h>
#include <stdlib.h>


int fib( int n )
{
    if( n <= 2 )
    {
        // Abbruchbedingung
     return 1;
    }
    else
    {
        // reklursiver Aufruf
     return fib( n-1 ) + fib( n-2 );   
    }
}


// Hauptprogramm
int main( void )
{
    int n;

    printf( "Bitte eine Zahl groesser 1 eingeben: " );

    // Zahl einlesen
    scanf( "%d", &n);
    if( n < 2 )
    {
        printf( "Lern lesen!\n" );
     return 1;
    }

    // Ergebnis berechen und ausgeben
    printf( "Ergebnis fuer n=%d: %d\n", n, fib( n ) );

    return 0;
}

Achja, wenn Du das nach PASCAL portierst musste statt einer PROCEDURE eine FUNCTION verwenden, wegen des Rückgabewertes!

hallo J
ehrlich gesagt verstehe ich nur bahnhof

Moin,

also der Code, den ich gepostet habe ist in der Programmiersprache C geschrieben. Da Du ja offensichtlich in PASCAL programmierst musst Du den C-Code halt PASCAL gerecht umschreiben (portieren). Also aus printf( ... ) wird dann z.B. writeln(...).

Oder aus

if(...)
{
...
}

wird dann

if ... then
begin
...
end

Die beiden #include ... -Zeilen oben kannste vergessen (ist C-spezifisch), genau wie die Zeilen mit einem führenden // ... (das sind Kommentare, also für's Programm unwichtig).

Mit FUNCTION statt PROCEDURE meine ich, das deine PROCEDURE (Procedure fib) eine FUNCTION sein muss, da sie eine Integer Variable zurückgibt (das "return" in meinem Code gibt halt den Wert zurück. In PASCAL lautet das irgendwie so (is lange her das ich PASCAL gemacht habe):

FUNCTION fib( n : Integer ) : Integer;
   |      |     |                |
   |      |     |                +--->  gibt Integer-
   |      |     |                       wert zurück.
   |      |     +---> Die Funktion hat
   |      |           den Parameter n
   |      |           vom Typ integer.
   |      +---> Der Name der Funktion.
   +---> FUNCTION statt PROCEDURE
         (ist dasselbe, nur das eine
          PROCEDURE KEINEN Wert zurückgibt)


So, ich hoffe nu weisst Du was ich meine ....





Huch,

bei den Pfeilen bei der Erklärung zur FUNCTION ist irgendwie die Formatierung flöten gegangen, ich hoffe es wird trotzdem deutlich.

danke

Probier es mal so:

Program Fibonacci;
uses crt;
Var f,n :longint;

Procedure fib;
label ende;
Begin
f:=1;
If n >= 2 then f:=(n-1)+(n-2)
Else if n < 2 then goto ende
Else if n = 0 then f:=1 else
f:=1;
fib;
ende:
End;

Begin
clrscr;
readln (n);
fib;
writeln (f);
readln;
End.


« Excel VBA Web-AbfrageHyroglüven entschlüsseln »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Programm
Siehe Software...

Computer
Siehe PC....

Supercomputer
Bezeichnung für sehr schnelle Computersysteme, die ein vielfaches an Leistung normaler Desktop-Computer besitzen. Die Top 500 Liste der schnellsten Supercomputer wel...