Sunteți pe pagina 1din 6

Algoritmi elementari- structuri repetitive - Aplicaţia nr.

Sirul lui Fibonacci este 1, 1, 2, 3, 5, 8, 13, 21, 34, …. si are legatura cu celebrul numar de aur.
Se observa ca sirul incepe cu valorile 1 si 1 , dupa care, fiecare noua valoare se obtine prin adunarea ultimelor doua valori:

F(1)=1
F(2)=1
F(n)=F(n-1)+F(n-2)

Trebuie determinat al N-lea termen din sir.


Daca N=1 sau N=2, raspunsul este simplu, 1. In restul cazurilor trebuie ca avand mereu ultimile valori A si B, sa calculam noua valoare
C=A+B.

PSEUDOCOD
citeste N;

A=1;B=1;

daca (N<=2) atunci scrie 1;

altfel
pentru i=3,N executa //calculam noua valoare

C=A+B; //pregatim noua pereche


A=B;B=C
scrie B;

Se consideră algoritmul de mai jos, descris în pseudocod.


Se citşte un număr natural. Să se afişeze primii n termeni ai şirului Fibonacci.
Explicaţii:
Şirul lui Fibonacci este 1, 1, 2, 3, 5, 8, 13, 21, 34, ….
Se observă că şirul începe cu valorile 1 si 1 , după care, fiecare nouă valoare se obţine prin adunarea ultimelor două valori:
F(1)=1
F(2)=1
F(3)=F(2)+F(1)=1+1=2
F(4)=F(2)+F(3)=1+2=3
F(5)=F(3)+F(4)=2+3=5
……………….
F(n)=F(n-1)+F(n-2)

Şirul se formează după urmatoarea formulă:

F (n) = 1 dacă n = 1 sau n = 2


F (n-1) + F (n-2) dacă n > 2

Algoritmul utilizează variabila F care calculează fiecare termen în funcţie de variabilele F(n-1), F(n-2), şi când ajunge la al N-lea se
opreşte şi îl afişează.
Se foloseşte o structură repetitivă cu număr necunoscut de repetiţii, unde variabila contor ia valori de la 3 la N, deoarece primii doi
termeni sunt daţi, iar noi trebuie să calculăm termenii începand cu al 3-lea.

Pentru noi problema este de a determina al N-lea termen din şir.


Utilizăm urmatoarele notaţii:
N : numărul de termeni ai şirului
F : elementul şirului Fibo
F (n-1) = f1 şi F(n-2) =f2 numerele anterioare care formează elementului Fibo
Daca N=1 sau N=2, răspunsul este simplu, 1. În restul cazurilor trebuie ca având mereu ultimile valori f1 si f2, să calculam noua
valoare F=f1+f2.

Algoritmul în pseudocod:

citeste N; //Citim pe n (numarul de termeni)


f1=1; f2=1; // iniţializăm primii 2 termeni
daca (N<=2) atunci scrie 1;
altfel {pentru i=3, N executa // Cît timp trebuie să se parcurgă cei n termeni
{
F=f1+f2; //calculăm noua valoare până când i>n
f1=f2 ; //pregătim noua pereche
f2=F;
scrie F;
}

Parcurgerea programului:
Presupunem că s-a citit n=10. Iniţial f1=1; f2=1; i=3.

Urmărim paşii ciclului:


Pas1: i<=n, 3<=10? Da  F= f2 + f1, F=1+1=2;  f1 = f2 , f1=1; f2 = F, f2=2; i=4
Pas2: i<=n, 4<=10? Da  F= f2 + f1, F=1+2=3;  f1 = f2 , f1=2; f2 = F, f2=3; i=5
Pas3: i<=n, 5<=10? Da  F= f2 + f1, F=2+3=5;  f1 = f2 , f1=3; f2 = F, f2=5; i=6
Pas4: i<=n, 6<=10? Da  F= f2 + f1, F=3+5=8;  f1 = f2 , f1=5; f2 = F, f2=8; i=7
Pas5: i<=n, 7<=10? Da  F= f2 + f1, F=5+8=13;  f1 = f2 , f1=8; f2 = F, f2=13; i=8
Pas6: i<=n, 8<=10? Da  F= f2 + f1, F=8+13=21;  f1 = f2 , f1=13; f2 = F, f2=21; i=9
Pas7: i<=n, 9<=10? Da  F= f2 + f1, F=13+21=34;  f1 = f2 , f1=21; f2 = F, f2=34; i=10
Pas8: i<=n, 10<=10? ? Da  F= f2 + f1, F=21+34=55;  f1 = f2 , f1=34; f2 = F, f2=55; i=11
Pas9: i<=n, 11<=10? ? NU  abandonează ciclul

Matricea de variaţie a valorilor în memorie:

n f1 f2 F i=3
10 1 1 2 4
1 2 3 5
2 3 5 6
3 5 8 7
5 8 13 8
8 13 21 9
13 21 34 10
21 34 55 11
11>10 Iese din bucla
Table 1 Matricea de variaţie a valorilor în memorie

Se afişează pe monitor : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,


Încercaţi singuri:

a) Scrieţi ce se va afişa dacă se citeşte N=15?


b) Scrieţi în pseudocod un algoritm, echivalent cu cel dat, în care să se înlocuiască structura repetitivă cu număr ştiut de
paşi în structura repetitivă cu număr neştiut de paşi cât timp...execută
c) Scrieţi în pseudocod un algoritm echivalent cu cel dat, în care să se înlocuiască structura pentru...execută cu o structură
repetitivă de tip executa...cât timp
Tema pentru acasă:

Se citesc (memorează) temperaturile pentru n zile. Afişaţi numărul de zile cu temperaturi pozitive,
temperatura cea mai rece ( valoarea minimă), valoarea maximă şi temperatura medie.

Exemplu:
Date de intrare n=5, temperaturile: t=12, 10, -2, 0, -5.
Date de ieşire nr_poz=2, t_min= -5, t_max=12, t_medie=3
Utilizând cele trei structuri de control repetitive cunoscute elaboraţi în pseudocod algoritmi
echivalenţi care rezolvă problema.
Realizaţi matricea de valori pentru fiecare caz.

Sa ne amintim...
- Ce structuri de control repetitive cunoaşteţi?
- Care este forma generală a structurii repetitive cu test iniţial?
- Care este efectul acestei structuri de control?
- Care este forma generală a structurii repetitive cu test final?
- Care este efectul acestei structuri de control?
- Identificaţi diferenţe între structura repetitivă cu test iniţial şi structura repetitivă cu test final.
- Care este forma generală a structurii repetitive cu număr cunoscut de paşi.
- Care este efectul acestei structuri de control?
Fişa A Chestionar
Clasa ……………………………………..

1. Ce ai învăţat din această lecţie?

2. Ce dificultăţi ai întâmpinat în rezolvarea fişei?

3. Cred că mi-aş putea îmbunătăţi performanţa dacă…

4. Cred că activitatea mea ar putea fi apreciată ca (bifează calificativul care ţi se potriveşte):

slabă medie bună foarte bună

S-ar putea să vă placă și