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 |
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:2, ' j=', j:2, ' liFaktoriala=', liFaktoriala) ;
end ;
if i mod 2 = 0 then
liBatukaria := liBatukaria + liFaktoriala
else
write('i=', i:2, ' 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:2, ' j=', j:2, ' 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.