2023(e)ko martxoaren 27(a), astelehena

10. astea | hainbat ezabaketa array batean

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: 06a_HainbatEzabaketa.pas non muga bat emanik elementu txikiak kentzen diren:



'rErrefereentzia' emanik txikiagoak diren elementuak arraytik kendu
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
(* Algoritmo hau egitan ez da ezabaketa bat prozesaketa bat baizik *)
(* bektore laguntzaile bat erabiltzen da emaitza lortzeko.         *)
program HainbatEzabaketaArrayetan_A ;
 
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.


 

iruzkinik ez:

Argitaratu iruzkina