ZER DAKIDAN: Fibonacci matematikariaren sekuentza ezagutzen dut, lehen zenbakia 0 da eta bigarrena 1 da, hurrengoak lortzeko aurreko bi zenbakien batura egin behar da. ZER IKASIKO DUDAN: Fibonacci sekuentziako zenbakiak lortzen ikasiko dut baina funtzioak erabiliz. |
Leonardo Pisano (Pisa, Italia, 1170-1250), Leonardo Bonacci, Leonardo Fibonacci edo Fibonacci moduan ezaguna, Italiar matematikaria izan zen, Erdi Aroko ezagunetarikoa. Ezaguna da batez ere bi aurkikuntzengatik:
|
Fibonacciren sekuentziako lehen zenbakia 0 da, Fibonacci-ren bigarren zenbakia 1 da, eta hirugarren zenbakia lortzeko aurreko biak batuko dira, horregatik Fibonacciren hirugarren zenbakia 1 da, laugarren zenbakia 2 izango da, bosgarrena 3, ...
Beraz, Fibonacciren sekuentzia honako hau da: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, ...Ondorengoa da Fibonacciren segidaren adierazpen orokorra:
|
Fibonacciren zenbakiak grafikoki adieraztean honako blokeen sorta eta espirala lortzen dira:
Fibonacciren sekuentziako bi zenbaki hartuz eta zatiketa eginez, urrezko zenbakia edo jainkozko proportzioa edo urrezko proportzioa edo zerutiar zenbakia lortzen da:
Fibonacciren sekuentzia sarritan agertzen da naturan. Izan ere, naturan hazkundea gertatzen denean Fibonacciren sekuentziaren arabera ematen da:
Eskatzen den programa (bi funtzio)
Programa bakarra izan arren programak bi zati izango ditu. Lehen zatian emaitzik itzultzen ez duen funtzio bati dei egingo zaio eta programaren bigarren zatian zenbaki bat itzultzen duen funtzio bati dei egingo zaio.
Hau garrantzitsua da
Ez ahaztu, edozein ariketa programatzerakoan beti main() funtzio nagusitik hasiko garela, eta main() funtzio nagusia bukatzean jarraituko dugula azpiprograma guztien kodea idazten. Horregatik, bi adibide hauetan main() funtzio nagusiak ematen dira eta eskatzen da garatzea bakoitzari dagokion azpiprograma. |
Lehen zatia. Fibonacciren sekuentzia osatuko duten zenbakien iZenbat kopurua teklatuz irakurri programa nagusian eta funtzio batek ondoko taularen pantailaraketa egin dezala FOR-DO egitura bat erabiliz, funtzioaren izena FibonaccirenSekuentziaPantailaratu() izan daiteke.
Hona hemen kodifikazioa non programa nagusia ematen den eta funtzioa falta den:
/* Ariketa-40a_FibonacciAzpiprogramaz: ezer itzultzen ez duen funtzioa. */ // Zenbaki osoekin lan eginez, FibonaccirenSekuentziaPantailaratu() funtzioak lan // bat burutzen du (pantailaraketa) baina ez dio ezer itzultzen programa nagusiari. #include <stdio.h> #define ZENBAKIKOPURUMAX 23 // Fibonacci zenbakien gehienezko kopurua // Fibonacci sekuentzia pantailaratzeko funtzioa void FibonaccirenSekuentziaPantailaratu(int iZenbat) { // funtzioaren kodea hemen } // iKopurua (3 eta 24 artekoa) teklatuz irakurri eta Fibonacci zenbakien // sekuentziaren horrenbeste elementu pantailaratuko dira 0-tik hasita int main() { int iKopurua; printf("\n\n"); // zenbaki kopurua eskatu eta baieztatu do { printf("Fibonacci zenbakien kopurua eman (3 eta %d artekoa)\n", ZENBAKIKOPURUMAX); printf("eta 0-tik hasita Fibonacciren segida erakutsiko da: "); scanf("%d", &iKopurua); } while (iKopurua < 3 || iKopurua > ZENBAKIKOPURUMAX); // Fibonacci sekuentzia pantailaratu FibonaccirenSekuentziaPantailaratu(iKopurua); printf("\nPrograma bukatu da, irteteko RETURN sakatu\n"); getchar(); // Return tekla itxaron return 0; }
Programaren lehen zatiko irteera bat hau izan daiteke:
Bigarren zatia. Prozesu errepikakor bat izango da eta bertatik irteteko b edo B erantzun beharko da, bestela programa nagusian iMuga teklatuz irakurriko da eta funtzio batek kalkulatuko du 0-tik hasita zenbat Fibonacciren zenbaki dauden. Horretarako, WHILE-DO egitura bat edo DO_WHILE egitura bat erabiliko da fniFibonacciZenbakienKopuruaKalkulatu() izeneko funtzioan.
Hona hemen fniFibonacciZenbakienKopuruaKalkulatu() funtzioa bi modutan programatuta:
/* Ariketa-40b1_FibonacciAzpiprogramaz */ // Fibonacci zenbakien kopurua kalkulatzeko funtzioa int FibonacciZenbakienKopuruaKalkulatu(int iMuga) { int iFibo1 = 0, iFibo2 = 1, iFibo3 = iFibo1 + iFibo2; int iFiboKopuru; if (iMuga == 0) iFiboKopuru = 1; // ez da while barrura sartuko else iFiboKopuru = 2; // hasieraketa, while barruan inkrementatuko da iFibo1 = 0; iFibo2 = 1; iFibo3 = iFibo1 + iFibo2; while (iFibo3 <= iMuga) { iFibo1 = iFibo2; iFibo2 = iFibo3; iFibo3 = iFibo1 + iFibo2; iFiboKopuru++; } return iFiboKopuru; }
/* Ariketa-40b2_FibonacciAzpiprogramaz */ // Fibonacci zenbakien kopurua kalkulatzeko funtzioa void FibonacciZenbakienKopuruaKalkulatu(int iMuga, int *iFiboKopuru) { int iFibo1 = 0, iFibo2 = 1, iFibo3 = iFibo1 + iFibo2; if (iMuga == 0) *iFiboKopuru = 1; // ez da while barrura sartuko else *iFiboKopuru = 2; // hasieraketa, while barruan inkrementatuko da iFibo1 = 0; iFibo2 = 1; iFibo3 = iFibo1 + iFibo2; while (iFibo3 <= iMuga) { iFibo1 = iFibo2; iFibo2 = iFibo3; iFibo3 = iFibo1 + iFibo2; (*iFiboKopuru)++; } }
Programaren bigarren zatiko irteera bat hau izan daiteke:
Goiko bi programa horiek bukatu ondoren, saiatu zaitez bi ariketak programa bakar batean biltzen, hots, funtzionalitate guztiak betetzen dituen Programa Nagusi berria idatzi eta bi azpiprogramen kodea inportatu.
|
iruzkinik ez:
Argitaratu iruzkina