![]() |
Array laguntzaile bat erabiliko dugu |
Ezabaketa array batean algoritmoari esker, posizio jakin bateko elementua arraytik ken daiteke, baina algoritmo hori zaila bihurtzen da elementu bat baino gehiago kendu behar direnean. Array bateko zenbait elementu ezabatzeko algoritmo hau erabiliko dugu 08a_HainbatEzabaketa.pas non muga bat emanik elementu txikiak kentzen diren array laguntzaile bat erabiliz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | (* Bektore laguntzaile bat erabiltzen da emaitza eskuratzeko. Benetan *) (* algoritmo hau ez da ezabaketa bat arraya osorik prozesatzea baizik. *) program HainbatEzabaketaArrayetan_A; (* HainbatEzabaketaArrayLaguntzailez *) const BEHEMUGA = 1 ; GOIMUGA = 20 ; type tarZerrenda = array [BEHEMUGA .. GOIMUGA] of real ; procedure ArrayaBete( var arNotak: tarZerrenda; var iLuzera: integer ); var iIndizea: integer ; begin randomize; iLuzera := random(GOIMUGA) + 1 ; writeln ( 'Arrayan ' , iLuzera, ' datu gordetzen' ); for iIndizea:=BEHEMUGA to iLuzera do begin arNotak[iIndizea] := 10 *random; { 0.00 eta 9.99 arteko balioak } end ; end ; procedure ArrayaIkusi( const arNotak: tarZerrenda; iLuzera: integer ); var iIndizea: integer ; begin writeln ( 'Arrayaren edukia: ' ); for iIndizea:=BEHEMUGA to iLuzera do begin writeln (iIndizea: 2 , '. nota = ' , arNotak[iIndizea]: 0 : 3 ); end ; writeln ; end ; { array laguntzaile batean zenbaki handiak gorde eta amaitzean array laguntzailearen informazio hori emaitza izango den parametrora eraman. Benetan ez da ezabaketa bat. } procedure ArrayarenTxikiakEzabatu( var arNotak: tarZerrenda; var iLuzera: integer ; rErreferentzia: real ); var iIndizea, k: integer ; arNotaHandiak: tarZerrenda; begin k := 0 ; for iIndizea:=BEHEMUGA to iLuzera do begin if arNotak[iIndizea] > rErreferentzia then begin k := k + 1 ; arNotaHandiak[k] := arNotak[iIndizea]; end ; end ; (* array berritua kanporatu, bere balio berriak eta luzera berria *) arNotak := arNotaHandiak; iLuzera := k; end ; {------------------------PROGRAMA NAGUSIA------------------------} var arNotak: tarZerrenda; iLuzera: integer ; rErreferentzia: real ; begin ArrayaBete(arNotak, iLuzera); ArrayaIkusi(arNotak, iLuzera); writeln ( 'Elementu txikiak arrayetik ezabatu' ); write ( 'Eman erreferentziaren balioa: ' ); readln(rErreferentzia); ArrayarenTxikiakEzabatu(arNotak, iLuzera, rErreferentzia); ArrayaIkusi(arNotak, iLuzera); readln; end . |
Algoritmo honek aurrekoak bezala emaitza bera eskaintzen du, baina zailagoa delakoan gaude.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | (* Azken emaitza eskuratzeko, bektore laguntzailerik ez da erabiltzen. *) (* Ezabatu beharreko elementuak banan banan kentzen dira, akzioa errepikatuz. *) program HainbatEzabaketaArrayetan_B; (* HainbatEzabaketaArrayLaguntzailerikGabe *) const BEHEMUGA = 1 ; GOIMUGA = 20 ; type tarZerrenda = array [BEHEMUGA .. GOIMUGA] of real ; procedure ArrayaBete( var arNotak: tarZerrenda; var iLuzera: integer ); var iIndizea: integer ; begin randomize; iLuzera := random(GOIMUGA) + 1 ; writeln ( 'Arrayan ' , iLuzera, ' datu gordetzen' ); for iIndizea:=BEHEMUGA to iLuzera do begin arNotak[iIndizea] := 10 *random; { 0.00 eta 9.99 arteko balioak } end ; end ; procedure ArrayaIkusi( const arNotak: tarZerrenda; iLuzera: integer ); var iIndizea: integer ; begin writeln ( 'Arrayaren edukia: ' ); for iIndizea:=BEHEMUGA to iLuzera do begin writeln (iIndizea: 2 , '. nota = ' , arNotak[iIndizea]: 0 : 3 ); end ; writeln ; end ; procedure BatEzabatu( var arNotak: tarZerrenda; var iLuzera: integer ; iNon: integer ); var iIndizea: integer ; begin for iIndizea:=iNon to iLuzera- 1 do begin arNotak[iIndizea] := arNotak[iIndizea+ 1 ]; end ; iLuzera := iLuzera - 1 ; end ; { array laguntzaile batean zenbaki handiak gorde eta amaitzean array laguntzailearen informazio hori emaitza izango den parametrora eraman. Benetan ez da ezabaketa bat. } procedure ArrayarenTxikiakEzabatu( var arNotak: tarZerrenda; var iLuzera: integer ; rErreferentzia: real ); var iIndizea, k: integer ; begin iIndizea := BEHEMUGA; while iIndizea <= iLuzera do begin if arNotak[iIndizea] < rErreferentzia then begin BatEzabatu(arNotak, iLuzera, iIndizea); end else begin iIndizea := iIndizea + 1 ; end ; end ; end ; {------------------------PROGRAMA NAGUSIA------------------------} var arNotak: tarZerrenda; iLuzera: integer ; rErreferentzia: real ; begin ArrayaBete(arNotak, iLuzera); ArrayaIkusi(arNotak, iLuzera); writeln ( 'Elementu txikiak arrayetik ezabatu' ); write ( 'Eman erreferentziaren balioa: ' ); readln(rErreferentzia); ArrayarenTxikiakEzabatu(arNotak, iLuzera, rErreferentzia); ArrayaIkusi(arNotak, iLuzera); readln; end . |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.