2023(e)ko otsailaren 8(a), asteazkena

4. astea | FOR-DO bat beste FOR-DO baten barruan

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