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

18. Ariketa: zerrendak (I)

ZER DAKIDAN:
Zenbakiak, karaktereak eta kateak lantzeko gai naiz.



ZER IKASIKO DUDAN:
Oinarrizko datu-mota bateko balioak zerrendetan antolatzen eta gordetzen ikasiko dut. Horretarako Array datu-mota funtsezkoa da. Array datu-motako aldagai batek bere elementuak elkar ondoan kokatzen ditu memorian eta elementu bakoitzari erreferentzia egiteko indize bat erabiltzen da.




ESKATZEN DEN PROGRAMA (I) 

Karaktereekin lan eginez, 1 eta 10 arteko karaktereen zerrenda bat lortu nahi da. Baina, zerrendan ez da onartuko karaktere errepikaturik.

Gure programak lehenik zenbat karaktere gordeko dituen galdetuko du. Ondoren karaktereak banan banan teklatuz irakurriko ditu programak. Karaktere bat irakurtzean zerrendan gorde aurretik, konprobatu beharko da lehendik ez dagoela.

Hauxe da ariketaren programa:
{ 18. ariketa: hainbat karakteren zerrenda osatu ondoko baldintzekin: }
{     - Karakteren kopurua 1 eta 10 artekoa izango da                 }
{     - Karakatereak ez dira errepikatuko zerrendan                   }

program Ariketa_18_I ;

const
   BEHEMUGA = 1 ;
   GOIMUGA = 10 ;
type
   tacZerrenda = array[BEHEMUGA..GOIMUGA] of char ;


{ Bilaketa gauzatzeko funtzioan while-DO egitura erabiltzen da }
function fniDatuaZerrendanBilatu(const acLetrak: tacZerrenda; iZenbat: integer; cKarak: char): integer ;
var
   iIndizea : integer ;
   boAurkitua : boolean ;
begin
   iIndizea := BEHEMUGA ;
   boAurkitua := FALSE ;
   while (iIndizea <= iZenbat) and not boAurkitua do
   begin
      if acLetrak[iIndizea] = cKarak then
         boAurkitua := TRUE
      else
         iIndizea := iIndizea + 1 ;
   end ;

   if boAurkitua = TRUE then
     fniDatuaZerrendanBilatu := iIndizea
   else
     fniDatuaZerrendanBilatu := 0 ;          { 0 gezurrezko posizioa litzateke }
end ;


procedure ZerrendaDatuDesberdinekinBete(var acLetrak: tacZerrenda; iLuzera: integer) ;
var
   iIndizea, iPosizioa: integer ;
   cKarak: char ;
begin
   write('   Eman zerrendaren ', BEHEMUGA, '. datua: ') ;
   readln(acLetrak[BEHEMUGA]) ;           (* Lehen datua beti izango da berria *)
   for iIndizea:=BEHEMUGA+1 to iLuzera do
   begin
      repeat
         write('   Eman zerrendaren ', iIndizea, '. datua: ') ;
         readln(cKarak) ;
         cKarak := upcase(cKarak) ;

         iPosizioa := fniDatuaZerrendanBilatu(acLetrak, iIndizea-1, cKarak) ;

         if iPosizioa <> 0 then
            writeln(cKarak:9, ' balioa ', iPosizioa, '. posizioan dago, beste balio bat aukeratu.')
         else
            acLetrak[iIndizea] := cKarak ;
      until iPosizioa = 0 ;
   end ;
end ;


procedure ZerrendarenEdukiaIkusi(const acLetrak: tacZerrenda; iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   writeln('   Zerrendaren edukia: ') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      writeln(iIndizea:4, '. karakterea = ', acLetrak[iIndizea]) ;
   end ;
   writeln ;
end ;

{ ---------------------- PROGRAMA NAGUSIA ---------------------- }

var
   acLetrak: tacZerrenda ;
   iLuzera: integer ;
begin
   writeln ;
   writeln ;
   writeln ;
   
   repeat
      write('   Zenbat elementu izango dira (', BEHEMUGA, ' eta ', GOIMUGA, ' arteko balioa): ') ;
      readln(iLuzera) ;
   until (iLuzera >= BEHEMUGA) and (iLuzera <= GOIMUGA) ;

   writeln ;
   ZerrendaDatuDesberdinekinBete(acLetrak, iLuzera) ;
   
   writeln ;
   ZerrendarenEdukiaIkusi(acLetrak, iLuzera) ;

   readln ;
end.

Programaren balizko exekuzio bat hurrrengo irudian erakusten da:





ESKATZEN DEN PROGRAMA (II) 

Aurreko programaren aldaera bat: Karaktereekin lan egin ordez kateekin lan egin daiteke, hots, autoen matrikulak jaso daitezke zerrenda batean matrikula errepikatuak onartu gabe.

Gure programak lehenik zenbat matrikula gordeko dituen galdetuko du. Ondoren matrikulak banan banan teklatuz irakurriko ditu programak. Matrikula bat irakurtzean zerrendan gorde aurretik, konprobatu beharko da lehendik ez dagoela.

Hauxe da programaren aldaerak zerrendarako definituko duen datu-mota:
{ 18. ariketa: hainbat matrikulen zerrenda osatu ondoko baldintzekin: }
{     - Matrikulen kopurua 1 eta 10 artekoa izango da                 }
{     - Matrikulak ez dira errepikatuko zerrendan                     }

program Ariketa_18_II ;

const
   BEHEMUGA = 1 ;
   GOIMUGA = 10 ;
type
   tsMatrikula = string[8] ;
   tasZerrenda = array[BEHEMUGA..GOIMUGA] of tsMatrikula ;
...   







 

iruzkinik ez:

Argitaratu iruzkina

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