Batugaien iZenbat kopurua zehaztuko duen balioa teklatuz irakurriz, kalkulatu ondoko batukaria eta emaitza liBatukaria aldagaian gorde. Ziurtatu iZenbat kopuru osoa, positiboa eta bikoitia dela.
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
|
1
|
2
|
6 |
24
|
120 |
720
|
5040 |
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:
liBatukaria := liBatukaria + liFaktoriala ; liBatukaria [hasieraketa] + [lehenengoa] liBatukaria (0!=1) + 1! if i mod 2 = 0 then (* ez da betetzen *) liBatukaria := liBatukaria + liFaktoriala ; Suposatuz prozesu errepikakorraren 0! kanpoan egiten dela, bigarren iterazioa i=2 hau izango litzateke:
liBatukaria := liBatukaria + liFaktoriala ; liBatukaria [metatua] + [bigarrena] liBatukaria 1 + 2! if i mod 2 = 0 then (* bai betetzen da *) liBatukaria := liBatukaria + liFaktoriala ; 3 1 + 2!
Suposatuz prozesu errepikakorraren 0! kanpoan egiten dela, hirugarren iterazioa i=3 hau izango litzateke:
liBatukaria := liBatukaria + liFaktoriala ; liBatukaria [metatua] + [hirugarrena] liBatukaria 3 + 3! if i mod 2 = 0 then (* ez da betetzen *) liBatukaria := liBatukaria + liFaktoriala ; Suposatuz prozesu errepikakorraren 0! kanpoan egiten dela, laugarren iterazioa i=4 hau izango litzateke:
liBatukaria := liBatukaria + liFaktoriala ; liBatukaria [metatua] + [laugarrena] liBatukaria 3 + 4! if i mod 2 = 0 then (* bai betetzen da *) liBatukaria := liBatukaria + liFaktoriala ; 27 3 + 4!
Barruko FOR-TO-DO
Barruko prozesu errepikakorrak faktoriala kalkulatuko du. Konkretuki, kanpoko i kontagailuaren faktoriala kalkulatuko du:
liFaktoriala := 1 ; (* i iterazioaren faktoriala kalkulatu *) for j:=1 to i do begin liFaktoriala := liFaktoriala * j ; writeln('i=', i, ' j=', j, ' liFaktoriala=', liFaktoriala) ; end ;
{---------------------------------------------------------------------------- 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:
liBatukaria := liBatukaria + liFaktoriala ; liBatukaria [hasieraketa] + [lehenengoa] liBatukaria (0!=1) + (2*1)! liBatukaria := liBatukaria + liFaktoriala ; 3 1 + 2!
Suposatuz prozesu errepikakorraren 0! kanpoan egiten dela, bigarren iterazioa i=2 hau izango litzateke:
liBatukaria := liBatukaria + liFaktoriala ; liBatukaria [metatua] + [bigarrena] liBatukaria 3 + (2*2)! liBatukaria := liBatukaria + liFaktoriala ; 27 3 + 4!
Barruko FOR-TO-DO
Barruko prozesu errepikakorrak faktoriala kalkulatuko du. Konkretuki, kanpoko i kontagailuaren dobleari dagokion faktoriala kalkulatuko du:
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 ;
{---------------------------------------------------------------------------- 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