2023(e)ko martxoaren 29(a), asteazkena

10. astea | bi array paralelo




Array batean ikasleen izenak ditugu eta beste array batean ikasleen notak gorderik daude. asIzenak arraya karaktere-kateak biltegitzen ditu, eta arNotak arrayak zenbaki errealak jasoko ditu. 




Array biren arteko lotura posizioetan datza, hau da, array baten lehen posizioko informazioa elkarturik dago beste arrrayaren lehen posizioko informazioarekin, eta horrela posizio guztiekin. Noski, luzera efektiboa bera delako, array bientzat lan egiten duen iLuzera aldagai bakarra erabiliko dugu. 




Adibidez:
















































     asIzenak 
1   'Klara' 
2    'Pedro'  
3    'Igone'  
4
 
...
 
40  



                iLuzera=3





































     arNotak 
1   6.77 
2     4.35  
3    9.25  
4
 
...
 
40  




Hona hemen iturburu-programa, aurrexeago erregistroak ikastean array bakarra erabiliko dugu:


program BiArrayParalelo ;
const
BEHEMUGA = 1 ;
GOIMUGA = 40 ;
type
tarNotak = array[BEHEMUGA..GOIMUGA] of real ;
tsKatea = string[30] ;
tasIzenak = array[BEHEMUGA..GOIMUGA] of tsKatea ;


procedure IzenakLortu(var asIzenak: tasIzenak; var iLuzera: integer) ;
var
iIndizea: integer ;
begin
repeat
write('Zenbat ikasle dira? ') ;
readln(iLuzera) ;
until (iluzera >= BEHEMUGA) and (iLuzera <= GOIMUGA) ;

writeln ('Izenen arrayan ', iLuzera, ' datu gordetzen') ;
for iIndizea:=BEHEMUGA to iLuzera do
begin
write('Eman ', iIndizea, '. izena: ') ;
readln(asIzenak[iIndizea]) ;
end ;
writeln ;
end ;


procedure NotakLortu(var arNotak: tarNotak; iLuzera: integer) ;
var
iIndizea: integer ;
begin
writeln ('Noten arrayan ', iLuzera, ' datu gordetzen') ;
randomize ;
for iIndizea:=BEHEMUGA to iLuzera do
begin
arNotak[iIndizea] := random*10 ; { 0.0 eta 9.999 arteko balioak }
end ;
end ;


procedure IzenakIkusi(const asIzenak: tasIzenak; iLuzera: integer) ;
var
iIndizea: integer ;
begin
writeln('Izenen arrayaren edukia: ') ;
for iIndizea:=BEHEMUGA to iLuzera do
begin
writeln(iIndizea:2, '. ikaslea = ', asIzenak[iIndizea]) ;
end ;
end ;


procedure NotakIkusi(const arNotak: tarNotak; iLuzera: integer) ;
var
iIndizea: integer ;
begin
writeln('Noten arrayaren edukia: ') ;
for iIndizea:=BEHEMUGA to iLuzera do
begin
writeln(iIndizea:2, '. nota = ', arNotak[iIndizea]:0:3) ;
end ;
end ;


procedure NotakInkrementatu(var arNotak: tarNotak; iLuzera: integer) ;
var
iIndizea: integer ;
begin
writeln('Suspendituak inkrementatzen: ') ;
for iIndizea:=BEHEMUGA to iLuzera do
begin
if arNotak[iIndizea] < 5.0 then
begin
arNotak[iIndizea] := arNotak[iIndizea] + 1.0 ;
end ;
end ;
end ;


function fniIkasleaBilatu(const asIzenak: tasIzenak;
iLuzera: integer;
sGakoa: tsKatea): integer ;
var
iIndizea: integer ;
boAurkitua: Boolean ;
begin
iIndizea := BEHEMUGA ;
boAurkitua := FALSE ;
while (iIndizea <= iLuzera) and not boAurkitua do
begin
if asIzenak[iIndizea] = sGakoa then
boAurkitua := TRUE
else
iIndizea := iIndizea + 1 ;
end ;

if boAurkitua then
fniIkasleaBilatu := iIndizea
else
fniIkasleaBilatu := -1 ; { -1 gezurrezko posizioa litzateke }
end ;

(* ---------------------- PROGRAMA NAGUSIA ---------------------- *)

var
arNotak : tarNotak ;
asIzenak : tasIzenak;
iLuzera : integer ;
sGakoa : tsKatea ;
iPosizioa: integer ;
begin
writeln ;
writeln ;

IzenakLortu(asIzenak, iLuzera) ;
IzenakIkusi(asIzenak, iLuzera) ;
writeln ;

NotakLortu(arNotak, iLuzera) ;
NotakIkusi(arNotak, iLuzera) ;
writeln ;

writeln('Suspendituen notak inkrementatu') ;
NotakInkrementatu(arNotak, iLuzera) ;
NotakIkusi(arNotak, iLuzera) ;
writeln ;

writeln('Ikasle baten nota aldatu') ;
write('Ikaslearen izena eman: ') ;
readln(sGakoa) ;

iPosizioa := fniIkasleaBilatu(asIzenak, iLuzera, sGakoa) ;

if iPosizioa = -1 then
writeln(sGakoa, ' izena duen ikaslerik ez dago')
else
begin
write(asIzenak[iPosizioa], ' ikaslearen nota berria eman: ') ;
readln(arNotak[iPosizioa]);
writeln; (* asIzenak[iPosizioa] edo sGakoa *)
writeln('Datuak "', asIzenak[iPosizioa], '" ikaslearen nota aldatu ondoren') ;
NotakIkusi(arNotak, iLuzera) ;
end ;

readln ;
end.


 

iruzkinik ez:

Argitaratu iruzkina