|
Serwis Edukacyjny w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
ProblemOblicz n-tą liczbę ciągu Fibonacciego, gdzie n > 100. |
Wykorzystując arytmetykę dużych liczb, zadanie jest dosyć łatwe, jeśli n nie jest specjalnie duże. Liczby Fibonacciego obliczamy dynamicznie:
f0 = 0 f1 = 1 f2 = f0+f1 f3 = f1+f2 … fn = fn-2+fn-1
Z powyższego wzoru wynika, iż program powinien pamiętać dwie ostatnie liczby ciągu Fibonacciego, aby policzyć kolejną.
K01: Jeśli n < 0, ; dwie pierwsze wartości zwracamy bezpośrednio to f ← "0" i zakończ K02: Jeśli n = 1, to f ← "1" i zakończ K03: f0 ← "0" ; ustawiamy dwie początkowe liczby Fibonacciego K04: f1 ← "1" K05: Dla i = 2, 3, …, n: ; w pętli liczymy kolejne liczby Fibonacciego wykonuj kroki K06…K08 K06: f = dodaj(f0, f1) ; jako sumę dwóch poprzednich K07: f0 ← f1 ; przygotowujemy dwie poprzednie liczby K08: f1 ← f ; dla następnego obiegu K09: Zakończ
|
Uwaga: Zanim uruchomisz program, przeczytaj wstęp do tego artykułu, w którym wyjaśniamy funkcje tych programów oraz sposób korzystania z nich. |
| Program odczytuje liczbę n i wylicza n-tą liczbę Fibonacciego. |
Pascal// Duże liczby Fibonacciego
// Data: 25.10.2012
// (C)2020 mgr Jerzy Wałaszek
//---------------------------
program bigfibo;
// Oblicza sumę podanych liczb
//----------------------------
function dodaj(var x, y : ansistring)
: ansistring;
var
z : ansistring;
p, w, i, j, k, n : integer;
begin
i := length(x);
j := length(y);
n := i; if j < i then n := j;
p := 0;
z := '';
for k := 1 to n do
begin
w := ord(x[i])+ord(y[j])+p-96;
dec(i); dec(j);
p := w div 10;
z := chr((w mod 10)+48)+z;
end;
while i > 0 do
begin
w := ord(x[i])+p-48;
dec(i);
p := w div 10;
z := chr((w mod 10)+48)+z;
end;
while j > 0 do
begin
w := ord(y[j])+p-48;
dec(j);
p := w div 10;
z := chr((w mod 10)+48)+z;
end;
if p > 0 then z := chr(p+48)+z;
if z = '' then z := '0';
dodaj := z; // zwracamy wynik dodawania
end;
//********************
//** PROGRAM GŁÓWNY **
//********************
var
f0, f1, f : ansistring;
i, n : dword;
begin
// odczytujemy n
readln(n);
// obliczamy fn
if n = 0 then f := '0'
else if n = 1 then f := '1'
else
begin
f0 := '0';
f1 := '1';
for i := 2 to n do
begin
f := dodaj(f0, f1);
f0 := f1;
f1 := f;
end;
end;
// wyświetlamy wynik
writeln(f);
end. |
// Duże liczby Fibonacciego
// Data: 25.10.2012
// (C)2020 mgr Jerzy Wałaszek
//---------------------------------------
#include <iostream>
#include <string>
using namespace std;
// Oblicza sumę podanych liczb
//----------------------------
string dodaj(string & x, string & y)
{
string z;
int p, w, i, j, k, n;
i = x.length();
j = y.length();
n = i; if(j < i) n = j;
p = 0;
z = "";
for(k = 1; k <= n; k++)
{
w = (int)(x[--i])+(int)(y[--j])+p-96;
p = w/10;
z = (char)((w%10)+48)+z;
}
while(i)
{
w = x[--i]+p-48;
p = w/10;
z = (char)((w%10)+48)+z;
}
while(j)
{
w = y[--j]+p-48;
p = w/10;
z = (char)((w%10)+48)+z;
}
if(p) z = (char)(p+48)+z;
if(z == "") z = "0";
return z; // zwracamy wynik dodawania
}
//********************
//** PROGRAM GŁÓWNY **
//********************
int main()
{
string f0, f1, f;
unsigned int i, n;
// odczytujemy n
cin >> n;
// obliczamy fn
if(!n) f = "0";
else if(n == 1) f = "1";
else
{
f0 = "0";
f1 = "1";
for(i = 2; i <= n; i++)
{
f = dodaj(f0, f1);
f0 = f1;
f1 = f;
}
}
// wyświetlamy wynik
cout << f << endl;
return 0;
} |
Basic' Duże liczby Fibonacciego
' Data: 25.10.2012
' (C)2020 mgr Jerzy Wałaszek
'---------------------------------------
' Oblicza sumę podanych liczb
'----------------------------
Function dodaj(ByRef x As String, _
ByRef y As String) _
As String
Dim As string z
Dim As Integer p, w, i, j, k, n
i = Len(x)
j = Len(y)
n = i: If j < i Then n = j
p = 0
z = ""
For k = 1 To n
w = Asc(Mid(x, i, 1))+_
Asc(Mid(y, j, 1))+p-96
i -= 1: j -= 1
p = w\10
z = Chr((w Mod 10)+48)+z
Next
While i > 0
w = Asc(Mid(x, i, 1))+p-48
i -= 1
p = w\10
z = Chr((w Mod 10)+48)+z
Wend
While j > 0
w = Asc(Mid(y, j, 1))+p-48
j -= 1
p = w\10
z = Chr((w Mod 10)+48)+z
Wend
If p > 0 Then z = Chr(p+48)+z
If z = "" Then z = "0"
dodaj = z
End Function
'********************
'** PROGRAM GŁÓWNY **
'********************
Dim As String f0, f1, f
Dim As UInteger i, n
' odczytujemy n
Open Cons For Input As #1
Input #1, n
Close #1
' obliczamy fn
If n = 0 Then
f = "0"
ElseIf n = 1 Then
f = "1"
Else
f0 = "0"
f1 = "1"
For i = 2 To n
f = dodaj(f0, f1)
f0 = f1
f1 = f
Next
End If
' wyświetlamy wynik
Print f
End |
Python
(dodatek)# Duże liczby ciągu Fibonacciego
# Data: 3.04.2024
# (C)2024 mgr Jerzy Wałaszek
#-------------------------------
# odczytujemy n
n = int(input())
# obliczamy fn
if n < 2:
f = n
else:
f0, f1 = 0, 1
for i in range(n-1):
f = f0+f1
f0, f1 = f1, f
# wyświetlamy wynik
print(f)
print()
|
| Wynik: |
2000 42246963333923048787067256023414827825798528402506810980102801373143085843701307 07224123599639141511088446087538909603607640194711643596029271983312598737326253 55580260699158591522949245390499872225679531698287448247299226390183371677806060 70116154978867198798583114688708762645973690867228840236544222952433479644801395 15349562972087652656069529806499841977448720155612802665404554171717881930324025 204312082516817125 |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.