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

10. astea | txertaketa array batean

Array batean elementu berri bat txertatzen duen 05_Txertaketa.pas programa aurrean duzula, hurrengo irudia azter ezazu. Lagungarria izan daitekeelakoan, hitzezko azalpena ArrayAlgoritmoak_2 [10 minutu 9 segundo] bideo honetan ikus dezakezu.

Irudian zenbaki errealen arNotak array bat daukagu, bere luzera efektiboa iLuzera aldagaiak adierazten du eta 4 balio du. Irudian ikusten da ere arNotak array hori bete-beterik ez dagoela. Demagun 66.6 balioa txertatu nahi dugulua arrayaren 2 posizioan.

Balio berria arrayan gorde aurretik, tokia egin behar zaio FOR-DOWNTO-DO baten bitartez, eta tokia egina dagoenean balio berria txertatuko da eta, noski, iLuzera aldagaia inkrementatu beharko da.

Irudia handiago ikusteko bere gainean klik egin

Programa nagusiak lau parametro pasatzen dizkio funtzioari, lehenengo biak sarrera/irteerakoak eta azken biak sarrerakoak. FOR-DOWNTO-DO kontrol-egiturari esker hiru iterazi emango dira adibide honetan:

  1. iterazioan: iIndizea=4 eta libre dagoen arNotak[5] posizioan arNotak[5] balioa kopiatzen delako 56.8 datua bikoiztuta geratzen da
  2. iterazioan: iIndizea=3 eta bikoiztuta dagoen arNotak[4]posizioko balioa zapaldurik suertatzen da arNotak[3] balioa bere gainean kopiatuz, horregatik 52.9 datua bikoiztuta geratzen da
  3. iterazioan: iIndizea=2 eta bikoiztuta dagoen arNotak[3]posizioko balioa zapaldurik suertatzen da arNotak[2] balioa bere gainean kopiatuz, horregatik 17.1 datua bikoiztuta geratzen da

Irudiaren adibidean 3. iterazioarekin bukatzen da prozesu errepikakorra, hots, txertaketa burutzeko prestakizunak egin dira baina oraindik txertaketa egin gabe dago. Txertaketa gauzatzeko ondoko bi hauek egin behar dira:

  • Eskatzen zen arNotak[3] posizioan 66.6 balioa gorde
  • Luzera efektiboa aldatu denez iLuzera:=5 jarri behar da (bigarren parametroa irteerakoa izatearen arrazoia hauxe da)

Adibidez, tokia egin eta iNon posizioan rElementua txertatu:

{ 05_Txertaketa.pas }

procedure Txertaketa(var arNotak: tarZerrenda;
                     var iLuzera: integer;
                      rElementua: real;
                            iNon: integer);
var
   iIndizea: integer;
begin
   for iIndizea:=iLuzera downto iNon do
   begin
      arNotak[iIndizea+1] := arNotak[iIndizea];
   end;
   arNotak[iNon] := rElementua;
   iLuzera := iLuzera + 1;
end;

Elementu bakar bat txertatzeaz gain, array baten elementu guztiak banan-banan txerta daitezke array ordenatu bat prestatzeko, ikusi 10. astea | mediana eta batezbestekoa adibidea.

Array batean elementu berri bat txertatzeko algoritmoa ulertuz gero, erraza da ulertzea array batean elementu bakar bat nola kentzen den (ikusi 10. astea | ezabaketa array batean irudia eta azalpena).



Eta arrayaren elementu bat baino gehiago txertatu behar baditugu?

Arrayaren elementu bat baino gehiago txertatu behar baditugu bi aukera ditugu:

  1. Goiko algoritmoa hainbat aldiz errepikatzea (07a_HainbatTxertaketa.pas programa).
  2. Array laguntzaile bat erabiltzea (07b_HainbatTxertaketa.pas programa). Zenbat elementu berri eta non sartuko diren teklatuz emaniko datuak ditugula array berria lortzen da 10. astea | hainbat txertaketa array batean artikuluan.
 

iruzkinik ez:

Argitaratu iruzkina

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