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

19. Ariketa: zerrendak (II)

ZER DAKIDAN:
Zenbakiak, karaktereak eta kateak lantzeko gai naiz. Halaber, array bat erabiltzeko gai naiz.



ZER IKASIKO DUDAN:
Array datu-motako zerrenda batean ondoko bi algoritmoak ikasiko ditut:
  • Elementu berri bat zerrendaren erdian txertatzen ikasiko dut
  • Zerrendaren erdiko elementu bat ezabatzen ikasiko dut




ESKATZEN DEN PROGRAMA (I) 

Abiadurak adierazten dituzten zenbaki errealekin lan eginez, 1 eta 10 arteko errealen zerrenda bat lortu nahi da. Zerrendaren elementuak abiadurak dira eta balio errepikatuak onartzen dira.

Programa honek lehenik zenbat abiadura gordeko dituen erabakitzen du, eta gero abiaduren zerrenda osatzen du. Bildutako abiaduren balioak pantailaratu ondoren, rAbiaduraBerria elementu berri bat eta iNon posizio bat eskatuko ditu programak, bi datu horiekin burutzen da elementu berriaren tartekaketa zerrendan (aurreko guztia baldin eta lekurik badago zerrendan). Bukatzean, zerrenda berria pantailaratuko du progranak.

Hauxe da ariketaren programa:
{ 19. ariketa: hainbat abiaduren zerrenda osatu ondoko baldintzekin:  }
{     - Abiaduren kopurua zerrendan 1 eta 10 artekoa izango da        }
{     - Abiaduren balioak 30.0 Km eta 179.9 Km artekoak izango dira   }

{ Abiaduren zerrenda lortu eta elementu berri bat txertatu zerrendan. }

program Ariketa_19_I ;

const
  BEHEMUGA = 1 ;
  GOIMUGA = 10 ;
  
type
  tarAbiadurenSorta = array[BEHEMUGA..GOIMUGA] of real ;

   
procedure AbiadurenarrayaBete(var arAbiadurak: tarAbiadurenSorta;
                                  var iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   Randomize ;
   iLuzera := Random(GOIMUGA) + 1 ;

   writeln('    Abiaduren zerrendan ', iLuzera, ' datu gordetzen...') ;
   writeln('    Aurrera egiteko RETURN sakatu!') ;
   readln ;
            
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      arAbiadurak[iIndizea] := 30 + 150*Random ;      { 30.0 eta 179.9 arteko balioak }
   end ;
end ;


procedure AbiadurenarrayaIkusi(const arAbiadurak: tarAbiadurenSorta;
                                         iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   writeln ;
   writeln('    Abiaduren zerrendaren edukia: ') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      writeln(iIndizea:22, '. abiadura = ', arAbiadurak[iIndizea]:0:3) ;
   end ;
   writeln ;
end ;

 
procedure Tartekaketa(var arAbiadurak: tarAbiadurenSorta;
                          var iLuzera: integer;
                           rElementua: real;
                                 iNon: integer) ;
var
   iIndizea: integer ;
begin
   for iIndizea:=iLuzera doWNto iNon do
   begin
      arAbiadurak[iIndizea+1] := arAbiadurak[iIndizea] ;
   end ;
   arAbiadurak[iNon] := rElementua ;
   iLuzera := iLuzera + 1 ;
end ;

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

var
   arAbiadurak: tarAbiadurenSorta ;
   iLuzera, iNon: integer ;
   rAbiaduraBerria: real ;
begin
   writeln ;
   writeln ;
   writeln ;
   
   AbiadurenarrayaBete(arAbiadurak, iLuzera) ;
   AbiadurenarrayaIkusi(arAbiadurak, iLuzera) ;

   if iLuzera < GOIMUGA then
   begin
      write('    Eman abiadura berriaren balioa (30.0 eta 179.9 artekoa) ') ;
      readln(rAbiaduraBerria) ;
      repeat
         write('    Eman abiadura berriaren posizioa zerrendan: ') ;
         readln(iNon) ;
      until (iNon >= BEHEMUGA) and (iNon <= iLuzera) ;

      Tartekaketa(arAbiadurak, iLuzera, rAbiaduraBerria, iNon) ;
      AbiadurenarrayaIkusi(arAbiadurak, iLuzera) ;
   end
   else
      writeln('    Zerrenda beterik dago, ezin da elementu berria txertatu.') ;
      
   readln ;
end.

Programaren balizko exekuzio bat hurrrengo irudian erakusten da:





ESKATZEN DEN PROGRAMA (II) 

Abiadurak adierazten dituzten zenbaki errealekin lan eginez, 1 eta 10 arteko errealen zerrenda bat lortu nahi da. Zerrendaren elementuak abiadurak dira eta balio errepikatuak onartzen dira.

Programa honek (aurrekoak bezala) lehenik zenbat abiadura gordeko dituen erabakitzen du, eta gero abiaduren zerrenda osatzen du. Bildutako abiaduren balioak pantailaratu ondoren, zerrendatik kenduko den elementuaren iNon posizioa eskatuko du programak, datu horrekin burutzen da elementuaren ezabaketa zerrendatik. Bukatzean, zerrenda berria pantailaratuko du progranak eta ezabatutako abiadura erakutsiko du ere.

Hauxe da ariketaren programa:
{ 19. ariketa: hainbat abiaduren zerrenda osatu ondoko baldintzekin:  }
{     - Abiaduren kopurua zerrendan 1 eta 10 artekoa izango da        }
{     - Abiaduren balioak 30.0 Km eta 179.9 Km artekoak izango dira   }

{ Abiaduren zerrenda lortu eta elementu jakin bat zerrendatik kendu.  }

program Ariketa_19_II ;

const
  BEHEMUGA = 1 ;
  GOIMUGA = 10 ;
  
type
  tarAbiadurenSorta = array[BEHEMUGA..GOIMUGA] of real ;


procedure AbiadurenarrayaBete(var arAbiadurak: tarAbiadurenSorta;
                                  var iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   Randomize ;
   iLuzera := Random(GOIMUGA) + 1 ;

   writeln('    Abiaduren zerrendan ', iLuzera, ' datu gordetzen...') ;
   writeln('    Aurrera egiteko RETURN sakatu!') ;
   readln ;
            
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      arAbiadurak[iIndizea] := 30 + 1530*Random ;      { 30.0 eta 179.9 arteko balioak }
   end ;
end ;


procedure AbiadurenarrayaIkusi(const arAbiadurak: tarAbiadurenSorta;
                                         iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   writeln ;
   writeln('    Abiaduren zerrendaren edukia: ') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      writeln(iIndizea:22, '. abiadura = ', arAbiadurak[iIndizea]:0:3) ;
   end ;
   writeln ;
end ;


procedure Ezabaketa(var arAbiadurak: tarAbiadurenSorta;
                        var iLuzera: integer;
                               iNon: integer) ;
var
   iIndizea: integer ;
begin
   for iIndizea:=iNon to iLuzera-1 do
   begin
      arAbiadurak[iIndizea] := arAbiadurak[iIndizea+1] ;
   end ;
   iLuzera := iLuzera - 1 ;
end ;

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

var
  arAbiadurak: tarAbiadurenSorta ;
  iLuzera, iNon: integer ;
  rElemKopia: real ;
begin 
   writeln ;
   writeln ;
   writeln ;
   
   AbiadurenarrayaBete(arAbiadurak, iLuzera) ;
   AbiadurenarrayaIkusi(arAbiadurak, iLuzera) ;

   repeat
      write('    Ezabatuko den abiaduraren posizioa zerrendan: ') ;
      readln(iNon) ;
   until (iNon >= BEHEMUGA) and (iNon <= iLuzera) ;

   rElemKopia := arAbiadurak[iNon] ;        { aterako den datuaren kopia egin }

   Ezabaketa(arAbiadurak, iLuzera, iNon) ;

   AbiadurenarrayaIkusi(arAbiadurak, iLuzera) ;
   writeln('    Hona hemen zerrendatik ezabatu den abiadura: ', rElemKopia:0:3) ;
   
   readln ;
end.

Programaren balizko exekuzio bat hurrrengo irudian erakusten da:


 

iruzkinik ez:

Argitaratu iruzkina

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