Batukariaren batugaiak zenbait zenbakien faktorialak dira, hauek:
liBatukaria = 0! + 2! + 4! + 6! + ... + (iZenbat-2)! + iZenbat!
Batukaria lortzen duen programaren bi bertsio egingo ditugu.
1. BERTSIOA iZenbat=8 | |||||||||
Kanpoko i |
hasieraketa 0!=1 |
1 |
2 |
3 | 4 |
5 | 6 |
7 | 8 |
Barruko j |
1 |
1..2 |
1..3 |
1..4 |
1..5 |
1..6 |
1..7 | 1..8 | |
liFaktoriala |
2 |
24 |
720 |
40320 | |||||
liBatukaria |
1 |
1 |
3 |
3 | 27 |
27 | 747 |
747 | 41067 |
1. BERTSIOA Kanpoko FOR-TO-DO Kanpoko prozesu errepikakorra iZenbat aldiz errepikatuko da. Gogoratu prozesu errepikakorrera sartu aurretik beharrezkoak diren hasieraketak egin behar direla. Suposatuz prozesu errepikakorraren 0! lehen batugaia kanpoan egiten dela, lehen iterazioa i=1 hau izango litzateke: Barruko FOR-TO-DO Barruko prozesu errepikakorrak faktoriala kalkulatuko du. Konkretuki, kanpoko i kontagailuaren faktoriala kalkulatuko du: {---------------------------------------------------------------------------- 1. BERTSIOA iZenbat kopuru osoa, positiboa eta bikoitia teklatuaren bitartez irakurri eta batukari hau kalkulatu: liBatukaria = 0! + 2! + 4! + ... + (iZenbat-2)! + iZenbat! -----------------------------------------------------------------------------} program FOR_bat_beste_FOR_baten_barruan_1 ; var iZenbat, i, j: integer ; liBatukaria, liFaktoriala: longint ; begin writeln ; writeln ; repeat write('iZenbat zenbaki osoa, positiboa eta bikoitia eman: ') ; readln(iZenbat) ; if iZenbat < 0 then writeln('Kopuru positiboa behar da') ; if iZenbat mod 2 <> 0 then writeln('Kopurua zenbaki bikoitia izan behar da') ; until (iZenbat >= 0) and (iZenbat mod 2 = 0) ; writeln ; liBatukaria := 1 ; (* 0! = 1 eta hasieran egiten dugulako liBatukaria = 1 *) writeln('Hasieran, liBatukaria=', liBatukaria) ; writeln ; for i:=1 to iZenbat do begin liFaktoriala := 1 ; (* i iterazioaren faktoriala kalkulatu *) for j:=1 to i do begin liFaktoriala := liFaktoriala * j ; writeln('i=', i, ' j=', j, ' liFaktoriala=', liFaktoriala) ; end ; if i mod 2 = 0 then liBatukaria := liBatukaria + liFaktoriala else write('i=', i, ' bakoitia delako ez inkrementatu, ') ; writeln('liBatukaria=', liBatukaria) ; writeln ; end ; writeln('Batukaria = ', liBatukaria) ; writeln ; writeln ; writeln('=======================') ; writeln('RETURN sakatu amaitzeko') ; writeln('=======================') ; readln ; end. { lehen bertsioaren amaiera } |
2. BERTSIOA iZenbat=8 | ||||||||
Kanpoko i |
hasieraketa 0!=1 |
1 |
2 |
3 | 4 |
|||
Barruko j |
1..1x2 |
1..2x2 |
1..3x2 |
1..4x2 |
||||
liFaktoriala |
2 |
24 |
720 | 40320 |
||||
liBatukaria |
1 |
3 |
27 |
747 | 41067 |
2. BERTSIOA Kanpoko FOR-TO-DO Kanpoko prozesu errepikakorra iZenbat div 2 aldiz errepikatuko da. Gogoratu prozesu errepikakorrera sartu aurretik beharrezkoak diren hasieraketak egin behar direla. Suposatuz prozesu errepikakorraren 0! lehen batugaia kanpoan egiten dela, lehen iterazioa i=1 hau izango litzateke: Barruko FOR-TO-DO Barruko prozesu errepikakorrak faktoriala kalkulatuko du. Konkretuki, kanpoko i kontagailuaren dobleari dagokion faktoriala kalkulatuko du: {---------------------------------------------------------------------------- 2. BERTSIOA iZenbat kopuru osoa, positiboa eta bikoitia teklatuaren bitartez irakurri eta batukari hau kalkulatu: liBatukaria = 0! + 2! + 4! + ... + (iZenbat-2)! + iZenbat! -----------------------------------------------------------------------------} program FOR_bat_beste_FOR_baten_barruan_2 ; var iZenbat, i, j: integer ; liBatukaria, liFaktoriala: longint ; begin writeln ; writeln ; repeat write('iZenbat zenbaki osoa, positiboa eta bikoitia eman: ') ; readln(iZenbat) ; if iZenbat < 0 then writeln('Kopuru positiboa behar da') ; if iZenbat mod 2 <> 0 then writeln('Kopurua zenbaki bikoitia izan behar da') ; until (iZenbat >= 0) and (iZenbat mod 2 = 0) ; writeln ; liBatukaria := 1 ; (* 0! = 1 eta hasieran egiten dugulako liBatukaria = 1 *) writeln('Hasieran, liBatukaria=', liBatukaria) ; writeln ; for i:=1 to iZenbat div 2 do begin liFaktoriala := 1 ; (* i iterazioaren faktoriala kalkulatu *) for j:=1 to i*2 do begin liFaktoriala := liFaktoriala * j ; writeln('i=', i, ' j=', j, ' liFaktoriala=', liFaktoriala) ; end ; liBatukaria := liBatukaria + liFaktoriala ; writeln('liBatukaria=', liBatukaria) ; writeln ; end ; writeln('Batukaria = ', liBatukaria) ; writeln ; writeln ; writeln('=======================') ; writeln('RETURN sakatu amaitzeko') ; writeln('=======================') ; readln ; end. { bigarren bertsioaren amaiera } |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.