Pascal Programmierung Programm zum erstellen der Fibonacci Reihe
#1
geschrieben 07. Februar 2007 - 20:47
ich brauch dringend Hilfe.
Ich bräuchte ein Code, welcher für die konsole geschrieben ist,
und der die ersten 20 Glieder der Fibonacci Formel ausgibt, in Pascal.
Wers nich kennt:
1,1,2,3,5,8 etc. also immer die vorherigen addieren...
Bin Anfänger und brauche das dringend^^
Danke
Anzeige
#2
geschrieben 07. Februar 2007 - 21:13
Sollte eigentlich auch für dich kein Problem sein, dass nach Pascal zu portieren.
Fibonacci >> Wie In Vba Oder Visual Stuio Realisieren?
#3
geschrieben 07. Februar 2007 - 21:46
AUßerdem hab ich ja keine grafische Oberfläche wie boxen...
also nur writln(''); readln sonst nichts, das is kla oder?
Wenn nich dann jetzt
Wäre nett wenn du hilfst
#4
geschrieben 07. Februar 2007 - 23:15
Write('1, 1, ');
For n:=3 To 20 do begin
Integer tmp=a;
a=b;
b=tmp+a;
Write(b); Write(', ');
end;
Write('...');
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#5
geschrieben 08. Februar 2007 - 13:12
begin
if n > 2 then Fibonacci := Fibonacci(n - 1) + Fibonacci(n - 2)
else Fibonacci := 1;
end;
hab zwar schon lange kein pascal mehr gemacht aber müsste so funktionieren.
LG evert
#6
geschrieben 08. Februar 2007 - 17:55
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#7
geschrieben 08. Februar 2007 - 18:49
Klar Rekursion ist im allg. langsamer als Itteration. Dafür aber mathematisch sehr elegant
Aber war ja auch nicht nach ne performaten Lösung gefragt!
#8
geschrieben 08. Februar 2007 - 19:00
var zahl1,zahl2,i,gesucht : integer;
begin
zahl1:=1 ;
zahl2:=1;
writeln('Folgeglied Nr.1',zahl1) ;
writeln('Folgeglied Nr.2',zahl2) ;
for i:=3 to 20 do
begin
gesucht:=zahl1+zahl2;
writeln('Folgeglied Nr.',i,':',gesucht);
zahl2:=zahl1;
zahl1:=gesucht;
end;
end.
Funktioniert einwandfrei
#9
geschrieben 08. Februar 2007 - 19:29
Zitat
Nein. T(x)=2*T(x-1) -> T=O(2^n)
Zitat
Elegant? Daran ist überhaupt nix elegant. Insbesondere weil man jede Rekursion zu einer rekursiv notierten Iteration umschreiben kann:
fib(n)=fib2(1,1,n);
fib2(x,y,z)=(n>1)?fib2(y,x+y,z-1):1;
Zitat
"Demostrieren sie mal ihr Programm an fib(30)..."
Dieser Beitrag wurde von Rika bearbeitet: 08. Februar 2007 - 19:31
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#10
geschrieben 09. Februar 2007 - 01:04
Zitat (Rika: 08.02.2007, 19:29)
Elegant? Daran ist überhaupt nix elegant. Insbesondere weil man jede Rekursion zu einer rekursiv notierten Iteration umschreiben kann:
fib(n)=fib2(1,1,n);
fib2(x,y,z)=(n>1)?fib2(y,x+y,z-1):1;
"Demostrieren sie mal ihr Programm an fib(30)..."
Ok hast recht Komplexität ist expotentiell. Denoch bin ich immer noch der Meinung das sich viel algorithmen
einfach besser rekursiv beschreiben lassen.
#11
geschrieben 09. Februar 2007 - 05:32
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#12
geschrieben 09. Februar 2007 - 15:38
program FakultaetRekursiv (INPUT, OUTPUT); var n : integer; fertig : boolean; Function fakultaet (zahl : integer): integer; begin if zahl = 0 or 1 then fakultaet := 1 else fakultaet := zahl * fakultaet(zahl - 1); end; begin repeat write ('Gib was ein/zum Beenden "fertig" eingeben: '); Readln (n); if n < 0 then writeln ('Negative zahl!!') else writeln ('Fakultaet von: ', n:1 , ' = ', fakultaet(n)); until fertig end.
Nur irgendwie, wenn ich Zahlen ab 32 eingebe kommen neg. Werte raus und bei 33 der gleich wie bei 32 und ab 34 kommt immer 0 raus
Was läuft da falsch?
#13
geschrieben 09. Februar 2007 - 16:35
Zitat (number1ne: 09.02.2007, 15:38)
program FakultaetRekursiv (INPUT, OUTPUT); var n : integer; fertig : boolean; Function fakultaet (zahl : integer): integer; begin if zahl = 0 or 1 then fakultaet := 1 else fakultaet := zahl * fakultaet(zahl - 1); end; begin repeat write ('Gib was ein/zum Beenden "fertig" eingeben: '); Readln (n); if n < 0 then writeln ('Negative zahl!!') else writeln ('Fakultaet von: ', n:1 , ' = ', fakultaet(n)); until fertig end.
Nur irgendwie, wenn ich Zahlen ab 32 eingebe kommen neg. Werte raus und bei 33 der gleich wie bei 32 und ab 34 kommt immer 0 raus
Was läuft da falsch?
Das negative Zahle rauskommen ist mir noch klar. Den Integer "läuft über"(32 bit hat nen Wertebereich von -2^31-1 bis 2^31). Aber das dann ab 34 0 raus kommt find ich bissel komisch. Probier mal nen größeren Datentyp zu nehmen, glaub bei pascal ist das int64
#14
geschrieben 09. Februar 2007 - 17:37
Denn bei 65 kommt z.b. -99337200, etc. raus( oder so i der Art)
Irgendwie komisch........
#15
geschrieben 09. Februar 2007 - 17:47
Zitat (number1ne: 09.02.2007, 17:37)
Denn bei 65 kommt z.b. -99337200, etc. raus( oder so i der Art)
Irgendwie komisch........
Gleiches Problem wie oben der int64 läuft über. Weiß aber nicht ob Pascal nen noch größeren Datentyp hat