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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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 ;
writeln ( 'Hasieran, liBatukaria=' , liBatukaria) ;
writeln ;
for i:= 1 to iZenbat do
begin
liFaktoriala := 1 ;
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 .
|
|
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 ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
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 ;
writeln ( 'Hasieran, liBatukaria=' , liBatukaria) ;
writeln ;
for i:= 1 to iZenbat div 2 do
begin
liFaktoriala := 1 ;
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 .
|
|
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.