2023(e)ko martxoaren 29(a), asteazkena

10. astea | bi array paralelo




Array batean ikasleen izenak ditugu eta beste array batean ikasleen notak gorderik daude. asIzenak arraya karaktere-kateak biltegitzen ditu, eta arNotak arrayak zenbaki errealak jasoko ditu. 




Array biren arteko lotura posizioetan datza, hau da, array baten lehen posizioko informazioa elkarturik dago beste arrrayaren lehen posizioko informazioarekin, eta horrela posizio guztiekin. Noski, luzera efektiboa bera delako, array bientzat lan egiten duen iLuzera aldagai bakarra erabiliko dugu. 




Adibidez:
















































     asIzenak 
1   'Klara' 
2    'Pedro'  
3    'Igone'  
4
 
...
 
40  



                iLuzera=3





































     arNotak 
1   6.77 
2     4.35  
3    9.25  
4
 
...
 
40  




Hona hemen iturburu-programa, aurrexeago erregistroak ikastean array bakarra erabiliko dugu:


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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
program BiArrayParalelo ;
const
  BEHEMUGA = 1 ;
  GOIMUGA = 40 ;
type
   tarNotak = array[BEHEMUGA..GOIMUGA] of real ;
   tsKatea = string[30] ;
   tasIzenak = array[BEHEMUGA..GOIMUGA] of tsKatea ;
 
 
procedure IzenakLortu(var asIzenak: tasIzenak; var iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   repeat
      write('Zenbat ikasle dira? ') ;
      readln(iLuzera) ;
   until (iluzera >= BEHEMUGA) and (iLuzera <= GOIMUGA) ;  
 
   writeln ('Izenen arrayan ', iLuzera, ' datu gordetzen') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      write('Eman ', iIndizea, '. izena: ') ;
      readln(asIzenak[iIndizea]) ;
   end ;
   writeln ;
end ;
 
 
procedure NotakLortu(var arNotak: tarNotak; iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   writeln ('Noten arrayan ', iLuzera, ' datu gordetzen') ;
   randomize ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      arNotak[iIndizea] := random*10 ;      { 0.0 eta 9.999 arteko balioak }
   end ;
end ;
 
 
procedure IzenakIkusi(const asIzenak: tasIzenak; iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   writeln('Izenen arrayaren edukia: ') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      writeln(iIndizea:2, '. ikaslea = ', asIzenak[iIndizea]) ;
   end ;
end ;
 
 
procedure NotakIkusi(const arNotak: tarNotak; iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   writeln('Noten arrayaren edukia: ') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      writeln(iIndizea:2, '. nota = ', arNotak[iIndizea]:0:3) ;
   end ;
end ;
 
 
procedure NotakInkrementatu(var arNotak: tarNotak; iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   writeln('Suspendituak inkrementatzen: ') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      if arNotak[iIndizea] < 5.0 then
      begin
         arNotak[iIndizea] := arNotak[iIndizea] + 1.0 ;
      end ;
   end ;
end ;
 
 
function fniIkasleaBilatu(const asIzenak: tasIzenak;
                                 iLuzera: integer;
                                  sGakoa: tsKatea): integer ;
var
   iIndizea: integer ;
   boAurkitua: Boolean ;
begin
   iIndizea := BEHEMUGA ;
   boAurkitua := FALSE ;
   while (iIndizea <= iLuzera) and not boAurkitua do
   begin
      if asIzenak[iIndizea] = sGakoa then
        boAurkitua := TRUE
      else
        iIndizea := iIndizea + 1 ;
   end ;
 
   if boAurkitua then
     fniIkasleaBilatu := iIndizea
   else
     fniIkasleaBilatu := -1 ;    { -1 gezurrezko posizioa litzateke }
end ;
 
(* ---------------------- PROGRAMA NAGUSIA ---------------------- *)
 
var
   arNotak  : tarNotak ;
   asIzenak : tasIzenak;
   iLuzera  : integer ;
   sGakoa   : tsKatea ;
   iPosizioa: integer ;
begin
   writeln ;
   writeln ;
    
   IzenakLortu(asIzenak, iLuzera) ;
   IzenakIkusi(asIzenak, iLuzera) ;
   writeln ;
       
   NotakLortu(arNotak, iLuzera) ;
   NotakIkusi(arNotak, iLuzera) ;  
   writeln ;
    
   writeln('Suspendituen notak inkrementatu') ;
   NotakInkrementatu(arNotak, iLuzera) ;
   NotakIkusi(arNotak, iLuzera) ;  
   writeln ;
    
   writeln('Ikasle baten nota aldatu') ;
   write('Ikaslearen izena eman: ') ;
   readln(sGakoa) ;
    
   iPosizioa := fniIkasleaBilatu(asIzenak, iLuzera, sGakoa) ;
    
   if iPosizioa = -1 then
      writeln(sGakoa, ' izena duen ikaslerik ez dago')
   else
   begin
      write(asIzenak[iPosizioa], ' ikaslearen nota berria eman: ') ;
      readln(arNotak[iPosizioa]);      
      writeln;                    (* asIzenak[iPosizioa] edo sGakoa *)
      writeln('Datuak "', asIzenak[iPosizioa], '" ikaslearen nota aldatu ondoren') ;
      NotakIkusi(arNotak, iLuzera) ;
   end ;
    
   readln ;
end.


 

iruzkinik ez:

Argitaratu iruzkina