2025(e)ko otsailaren 18(a), asteartea

Ariketa 33 | Fibonacci-ren zenbakiak

ZER DAKIDAN:
Dagoeneko for, do-while eta while agindu errepikakorra erabili ditut. Baina bakoitza edozein egoeratan erabil baiteke?



ZER IKASIKO DUDAN:
Prozesu errepikorraren iterazio kopurua ezaguna denean for agindu errepikakorra erabiliko dut. Aldiz, prozesu errepikorraren iterazio kopurua ezezaguna denean, do-while edo while agindu errepikakorrek erabiliko ditut.


Ariketa:
Teklatuaren bitartez N kopuru oso bat irakurri eta Fibonacci-ren lehen N zenbakiak pantailaratu. Fibonacci-ren lehen zenbakia 0 da, Fibonacci-ren bigarren zenbakia 1 da, eta hirugarren zenbakia lortzeko aurreko biak batuko dira, horregatik Fibonacci-ren hirugarren zenbakia 1 da, laugarren zenbakia 2 izango da, bosgarrena 3, ... 
Beraz, Fibonacci-ren sekuentzia honako hau da:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Programaren exekuzio batean N kopurua 9 balitz, bere irteera  0, 1, 1, 2, 3, 5, 8, 13, 21, izango litzateke.

Hauxe da Fibonacciren segidaren adierazpen orokorra:

{\displaystyle F_{n}={\begin{cases}0&n=0{\mbox{ bada}}\\1&n=1{\mbox{ bada}}\\F_{n-1}+F_{n-2}&n>1{\mbox{ bada}}\\\end{cases}}}




Fibonacci-ren sekuentziako bi zenbaki hartuz eta zatiketa eginez, urrezko zenbakia edo jainkozko proportzioa edo urrezko proportzioa edo zerutiar zenbakia lortzen da:

Leonardo Pisano, Fibonacci, ezagutzeko artikulu bat "Fibonacci, el matemático que se puso a contar conejos y descubrió la secuencia divina" eta hemen Fibonacci-ren sekuentziaren adibide bat naturan:



Goiko azalpenean egiten den bezala, Fibonacci zenbakien iZenbat kopurua teklatuz irakurri eta for egitura erabiliz ondoko taula pantailaratu, programan errepikatzen den prozesua hauxe dela:
    for (iKont=3; iKont<=iZenbat; iKont++)
    {
        iFiboBerria = iFibo1 + iFibo2;
        fUrrezkoProportzioa = (float)iFiboBerria / iFibo2;
        printf("\n %12d %20d %28.7f", iKont, iFiboBerria, fUrrezkoProportzioa);
        iFibo1 = iFibo2;
        iFibo2 = iFiboBerria;
    }
Lehen programaren irteera hau izan dadila:

Datua 15 izanik lortzen den Fibonacci-ren segida eta Urrezko Proportzioa goiko irudikoak dira




Aurreko bezalakoa da, hots, Fibonacci-ren sekuentzia pantailaratu nahi da. Baina, programak prozesu errepikakor nagusi bat izango du eta laster ikasiko dugun char datu-motako aldagai batek kontrolatuko du programaren amaitzea. Lehen bezala, iZenbat kopurua teklatuz irakurri eta for egitura erabiliz Fibonacci-ren zenbakiak pantailaratu dira, programan errepikatzen den prozesua hauxe dela:
        printf("\n\n 0, 1");
        iFibo1 = 0;
        iFibo2 = 1;
        for (iKont=3; iKont<=iZenbat; iKont++)
        {
            iFiboBerria = iFibo1 + iFibo2;
            iFibo1 = iFibo2;
            iFibo2 = iFiboBerria;
            printf(", %d", iFiboBerria);
        }
        printf(".");
Kalkuluen errepikapenak egiten dira eta prozesu errepikakorra kontrolatzeko aldagaiaren datu-mota char da (datu-mota berria da guretzat eta laster ikasiko dugu). Bigarren programaren irteera hau izan dadila, ikusi prozesua errepikatzen dela b edo B erantzun arte:

Datua 20 izanik lortzen den Fibonacci-ren segida goiko irudikoa da



Hirugarren programan iZbk teklatuz irakurri eta datu hori Fibonacci-ren segidako zenbaki bat den ala ez aztertu beharko da:
        iFibo1 = 0;
        iFibo2 = 1;
        iFibo3 = iFibo1 + iFibo2;
        iIterazio = 3;
        while (iFibo3 < iZbk)
        {
           iFibo1 = iFibo2;
           iFibo2 = iFibo3;
           iFibo3 = iFibo1 + iFibo2;
           iIterazio++;
        }
        if (iFibo3 == iZbk)
            printf("Bai, bada");
        else
            printf("Ez, ez da");
Hirugarren programaren irteera hau izan dadila, ikusi kalkuluak errepikatzen direla b edo B erantzun arte:

while (iFibo3<iZbk) eteten da iFibo3==iZbk delako

while (iFibo3<iZbk) eteten da iFibo3>iZbk delako






  • Ariketa-33a_FibonacciZenbakiak.cbp | main.c  
  • Ariketa-33b_FibonacciZenbakiak.cbp | main.c  
  • Ariketa-33c_FibonacciZenbakiak.cbp | main.c  


 

iruzkinik ez:

Argitaratu iruzkina