WinFuture-Forum.de: Pascal Programmierung - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Pascal Programmierung Programm zum erstellen der Fibonacci Reihe


#1 Mitglied ist offline   number1ne 

  • Gruppe: aktive Mitglieder
  • Beiträge: 835
  • Beigetreten: 19. April 06
  • Reputation: 0
  • Wohnort:Bremen

geschrieben 07. Februar 2007 - 20:47

Hi,
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...
;D
Bin Anfänger und brauche das dringend^^

Danke
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 07. Februar 2007 - 21:13

Die Algorithmus ist überall gleich.
Sollte eigentlich auch für dich kein Problem sein, dass nach Pascal zu portieren.
Fibonacci >> Wie In Vba Oder Visual Stuio Realisieren?
0

#3 Mitglied ist offline   number1ne 

  • Gruppe: aktive Mitglieder
  • Beiträge: 835
  • Beigetreten: 19. April 06
  • Reputation: 0
  • Wohnort:Bremen

geschrieben 07. Februar 2007 - 21:46

Nunja da sind so viele antworten ich bin verwirrt.
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 ;D
Wäre nett wenn du hilfst
0

#4 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 07. Februar 2007 - 23:15

Integer a=1, b=1;
Write('1, 1, ');
For n:=3 To 20 do begin
Integer tmp=a;
a=b;
b=tmp+a;
Write(b); Write(', ');
end;
Write('...');
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#5 Mitglied ist offline   evert 

  • Gruppe: aktive Mitglieder
  • Beiträge: 44
  • Beigetreten: 20. Januar 07
  • Reputation: 0

geschrieben 08. Februar 2007 - 13:12

function Fibonacci(n: integer): integer;
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
0

#6 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 08. Februar 2007 - 17:55

Ja, und zwar mit exponentiellem Aufwand und linearem Stackverbrauch.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#7 Mitglied ist offline   evert 

  • Gruppe: aktive Mitglieder
  • Beiträge: 44
  • Beigetreten: 20. Januar 07
  • Reputation: 0

geschrieben 08. Februar 2007 - 18:49

Kompläxität müsste denk ich mal O(n²) sein.

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!
0

#8 Mitglied ist offline   number1ne 

  • Gruppe: aktive Mitglieder
  • Beiträge: 835
  • Beigetreten: 19. April 06
  • Reputation: 0
  • Wohnort:Bremen

geschrieben 08. Februar 2007 - 19:00

ich habs jetzt so gemacht:
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 <_<
0

#9 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 08. Februar 2007 - 19:29

Zitat

Kompläxität müsste denk ich mal O(n²) sein.

Nein. T(x)=2*T(x-1) -> T=O(2^n)

Zitat

Dafür aber mathematisch sehr elegant

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

Aber war ja auch nicht nach ne performaten Lösung gefragt!

"Demostrieren sie mal ihr Programm an fib(30)..."

Dieser Beitrag wurde von Rika bearbeitet: 08. Februar 2007 - 19:31

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#10 Mitglied ist offline   evert 

  • Gruppe: aktive Mitglieder
  • Beiträge: 44
  • Beigetreten: 20. Januar 07
  • Reputation: 0

geschrieben 09. Februar 2007 - 01:04

Beitrag anzeigenZitat (Rika: 08.02.2007, 19:29)

Nein. T(x)=2*T(x-1) -> T=O(2^n)
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.
0

#11 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 09. Februar 2007 - 05:32

Schau dir an, das ist rekursiv. Auch wenn es letztendlich in einer Iteration übergeführt wird, was idR auch wesentlich eleganter ist.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#12 Mitglied ist offline   number1ne 

  • Gruppe: aktive Mitglieder
  • Beiträge: 835
  • Beigetreten: 19. April 06
  • Reputation: 0
  • Wohnort:Bremen

geschrieben 09. Februar 2007 - 15:38

Also hab hier grad mal wieder was probiert und zwar:
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?
0

#13 Mitglied ist offline   evert 

  • Gruppe: aktive Mitglieder
  • Beiträge: 44
  • Beigetreten: 20. Januar 07
  • Reputation: 0

geschrieben 09. Februar 2007 - 16:35

Beitrag anzeigenZitat (number1ne: 09.02.2007, 15:38)

Also hab hier grad mal wieder was probiert und zwar:
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
0

#14 Mitglied ist offline   number1ne 

  • Gruppe: aktive Mitglieder
  • Beiträge: 835
  • Beigetreten: 19. April 06
  • Reputation: 0
  • Wohnort:Bremen

geschrieben 09. Februar 2007 - 17:37

Okay, das mit dem Int64 klappt, nur ab, keine Ahnung, bei 65 gehts noch bei hundert nicht mehr(kommt 0 raus^^) irgendwo dazwischen gleiche problem wie oben.
Denn bei 65 kommt z.b. -99337200, etc. raus( oder so i der Art)
Irgendwie komisch........
0

#15 Mitglied ist offline   evert 

  • Gruppe: aktive Mitglieder
  • Beiträge: 44
  • Beigetreten: 20. Januar 07
  • Reputation: 0

geschrieben 09. Februar 2007 - 17:47

Beitrag anzeigenZitat (number1ne: 09.02.2007, 17:37)

Okay, das mit dem Int64 klappt, nur ab, keine Ahnung, bei 65 gehts noch bei hundert nicht mehr(kommt 0 raus^^) irgendwo dazwischen gleiche problem wie oben.
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
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0