2024(e)ko martxoaren 18(a), astelehena

21. Ariketa: zerrendak (IV)

ZER DAKIDAN:
Array bat erabiltzeko gai naiz.



ZER IKASIKO DUDAN:
FUNCTION erako azpiprograma batek ez du Array datu-motako zerrenda bat itzuliko. Horregatik, array bat emaitza izan behar bada beti PROCEDURE erako azpiprogramaz prozesatuko dugu.




ESKATZEN DEN PROGRAMA

Kateekin lan eginez 20. Ariketa: zerrendak (III) programatik abiatu eta ZZZZ-LLL itxurako matrikulak biltzen dituen hasierako zerrendatik beste zerrenda bat lortu LLLZZZZ itxurako datuekin. Suposatuko dugu programari emandako matrikulen datuak egokiak direla, baina programak datuen egokitasuna kontrolatu beharko balu gogoratu 19. Ariketa: karaktere-kateak (II) programan ikasitakoa.

Gure programaren zereginak:
  1. Datuak jaso eta ZZZZ-LLL itxurako matrikulen zerrenda lortu, hasierako zerrenda izango dena
  2. Hasierako zerrendaren elementu guztiak banan banan prozesatu eta LLLZZZZ itxurako zerrenda berria eskuratu
Hasierako zerrenda definitzeko asMatrikulak eta iLuzera aldagaiak behar dira; era beretsuan, bukaerako zerrenda definitzeko asKateak eta iLuzera aldagaiak behar dira (iLuzera berdina da kasu bietan). Helburuko asKateak zerrendari balioak emateko ondoko bi aukera hauek daude, baina horietarik bakarra ontzat emango dugu.

Prozedura bai, non bilatzen den zerrenda irteerako parametroa den:
procedure ZerrendaBerriaLortu(const asMatrikulak: tasHasierakoZerrenda;
                                    var asKateak: tasBukaerakoZerrenda;
                                         iLuzera: integer);
Funtzioa ez, array bat itzultzen duen funtziorik ez dugu onartuko:
function fnasZerrendaLortu(const asMatrikulak: tasHasierakoZerrenda;
                                      iLuzera: integer) : tasBukaerakoZerrenda ;

Hauxe da ariketaren programa:
{ 21. ariketa: hainbat matrikula zerrenda zerrenda batean jaso eta    }
{              zerrenda berri bat lortu.                              }

{ ZZZZ-LLL (non Z zifrak eta L letrak diren) formatuko matrikulak     }
{ gordetzen dituen arrayarekin lan egingo da. Zerrenda berria lortu   }
{ LLLZZZZ itxura datuekin.                                            }
 
program Ariketa_21 ;

const
   BEHEMUGA = 1 ;
   GOIMUGA = 10 ;
type
   tsKate8 = string[8] ;
   tasHasierakoZerrenda = array[BEHEMUGA..GOIMUGA] of tsKate8 ;
   tsKate7 = string[7] ;
   tasBukaerakoZerrenda = array[BEHEMUGA..GOIMUGA] of tsKate7 ; 


procedure HasierakoZerrendaBete(var asMatrikulak: tasHasierakoZerrenda; var iLuzera: integer) ;
var
   k : integer ;
begin
   repeat
      write('   Zerrendak zenbat elementu izango ditu? ') ;
      readln(iLuzera) ;
   until (iLuzera >= BEHEMUGA) and (iLuzera <= GOIMUGA) ;
   writeln ;
   
   for k:=BEHEMUGA to iLuzera do
   begin
      write('   ''1234-XYZ'' itxurako ', k, '. matrikula eman: ') ;
      readln(asMatrikulak[k]) ;
   end ;
end ;
  

procedure HasierakoZerrendaIkusi(const asMatrikulak: tasHasierakoZerrenda; iLuzera: integer) ;
var
   iIndizea : integer ;
begin
   writeln('   Matrikulen zerrendaren edukia: ') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      writeln(iIndizea:4, '. matrikula = ', asMatrikulak[iIndizea]) ;
   end ;
end ;
 

procedure BukaerakoZerrendaIkusi(const asKateak: tasBukaerakoZerrenda; iLuzera: integer) ;
var
   iIndizea : integer ;
begin
   writeln('   Emaitzen zerrendaren edukia: ') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      writeln(iIndizea:4, '. katea = ', asKateak[iIndizea]) ;
   end ;
end ;


procedure ZerrendaBerriaLortu(const asMatrikulak: tasHasierakoZerrenda;
                                    var asKateak: tasBukaerakoZerrenda;
                                         iLuzera: integer) ;
var
   iIndizea : integer ;
   sZenbakiak, s3Letrak : tsKate7 ;
begin
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      sZenbakiak := Copy(asMatrikulak[iIndizea], 1, 4) ;
      s3Letrak := Copy(asMatrikulak[iIndizea], 6, 3) ;
      asKateak[iIndizea] := s3Letrak + sZenbakiak ;
   end ;
end ;


{
function fnasZerrendaBerriaLortu(const asMatrikulak: tasHasierakoZerrenda;
                                            iLuzera: integer) : tasBukaerakoZerrenda ;
var
   asKateak : tasBukaerakoZerrenda ;
   iIndizea : integer ;
   sZenbakiak, s3Letrak : tsKate7 ;
begin
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      sZenbakiak := Copy(asMatrikulak[iIndizea], 1, 4) ;
      s3Letrak := Copy(asMatrikulak[iIndizea], 6, 3) ;
      asKateak[iIndizea] := s3Letrak + sZenbakiak ;
   end ;
   fnasZerrendaBerriaLortu := asKateak ;
end ;
}

(* ---------------------- PROGRAMA NAGUSIA ---------------------- *)
 
var
   asMatrikulak : tasHasierakoZerrenda ;
   asKateak : tasBukaerakoZerrenda ;
   iLuzera : integer ;
begin
   writeln ;
   writeln ;
   writeln ;
      
   HasierakoZerrendaBete(asMatrikulak, iLuzera) ;
   HasierakoZerrendaIkusi(asMatrikulak, iLuzera) ;
   writeln ;
   
   writeln('   Matrikulen zerrenda prozesatzen...') ; 
   writeln ;
     
   ZerrendaBerriaLortu(asMatrikulak, asKateak, iLuzera) ;          { BAI }
   //asKateak := fnasZerrendaBerriaLortu(asMatrikulak, iLuzera) ;  { EZ }
   
   BukaerakoZerrendaIkusi(asKateak, iLuzera) ;
   writeln ;   
    
   readln ;
end.

Programaren balizko exekuzio bat hurrrengo irudian erakusten da:

Arraya itzultzen duen funtziorik ez dugu programatuko, gauza bera gertatzen da erregistroekin (22. Ariketa: erregistroak (I))

 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.