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.