Zadanie 2 z laboratorium programowania na Informatyce UW.
Zadanie 2 (termin wysylania rozwiazan: 25 I 2008, godz. 23:59) (Liczby Fibonacciego) Ciag liczb Fibonacciego jest okreslony nastepujaco: * pierwsza liczba Fibonacciego jest 0 * druga liczba Fibonacciego jest 1 * liczba Fibonacciego o numerze N (wiekszym niz 2) jest suma liczb Fibonacciego o numerach N-1 i N-2 Oto kilkanascie poczatkowych wyrazow ciagu liczb Fibonacciego: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ... Napisz program, ktory wczyta z wejscia liczbe calkowita N i wypisze na wyjscie, w kolejnych wierszach, N poczatkowych wyrazow ciagu liczb Fibonacciego. Program powinien wypisac liczby w zapisie pozycyjnym o podstawie 26 poslugujac sie malymi literami alfabetu lacinskiego jako cyframi. Litera 'a' ma wiec reprezentowac cyfre 0, 'z' to 25. Cyfry nalezy wypisywac w kolejnosci od najbardziej znaczacych. Program nie moze zakladac, ze wartosc N bedzie na tyle mala, by liczby Fibonacciego zmiescily sie w zakresie typow integer, longint itp. Wolno jedynie zalozyc, ze liczby Fibonacciego, ktore program ma obliczyc, nie beda mialy wiecej, niz 100 cyfr (w zapisie o podstawie 26). Np. dla danej: 30 program powinien wypisac: a b c d f i n v bi cd dl fo iz on xm blz cjl dvk gev kaf qfa baff bqkf cqpk egzp gxoz leoo scdn bdgsb bvivo Wskazowka: W rozwiazaniu liczby nalezy reprezentowac jako ciagi cyfr w ukladzie o podstawie 26, zapisane w tablicy.
A oto rozwiązanie:
program zad2; //Program napisany na zajęcia z Laboratorium Języka Pascal i C. Zadania nr 2. type tablica=array [1..100] of char; var n,i:integer; //Tablice z liczbami a,b,c : tablica; procedure dodaj; //Dodaje tablice a i b, w wsyniku dajac c. Operacja w ukladzie 26 var i,tmp_a,tmp_b,wynik,przeniesienie:integer; begin przeniesienie:=0; //Liczby przedstawiamy od prawej strony tablicy. for i:=100 downto 1 do begin wynik:=0; tmp_a:=ord(a[i])-97; tmp_b:=ord(b[i])-97; wynik:=przeniesienie+tmp_a+tmp_b; c[i]:=char((wynik mod 26)+97); przeniesienie:=wynik div 26; end; //tutaj dodawanie powinno sie zakonczyc. end; procedure wypisz(t:tablica); //Wypisuje tablice var i:integer; znak:char; begin i:=2; znak:=t[1]; //Pomijamy poczatkowe 0 - czyli a. while (znak='a') AND (i<101) do begin znak:=t[i]; i+=1; end; i:=i-1; while i0 then writeln('a'); if n>1 then writeln('b'); for i:=3 to n do begin dodaj; wypisz(c); a:=b; b:=c; end; end.