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

9. astea | izenak eta kalifikazioak


AUTOEBALUAZIOA

Datuen array bat daukagu. Datuak honelakoak dira: lehen karakterea nota eta azken bi karaktereak notaren dezimalak, zifren artean izena. Eskatzen dena: noten arteko batezbestekoa. Jarraian programa ematen da, eta 09astea_IzenakEtaKalifikazioak [28 minutu 28 segundo] bideoan ikus dezakezu programa horren azalpen zehatza.
IzenakEtaKalifikazioak.pas programan array batek karaktere-kateak gordetzen ditu
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
{
    Kateak gordetzen dituen array batekin lan egin.
    Kate bakoitzean letrak eta zifrak daude.
    Zifrekin eragiketaren bat egin (adibidean
    batezbesteko aritmetikoa kalkulatzen da).
 
    Arrayaren datuak kateak dira, itxura honetako datuak dira:
    lehen karakterea nota eta azken bi karaktereak dezimalak.
    Adibidez:
 
           '5Jokin40'
           '8Isabelle00'
           '4Luismari34'
           '6Ana66'
 
    - Emaitza batezbestekoa:   5.40 + 8.00 + 4.34 + 6.66  ==>  24.40 / 4 = 6.10
}
 
program IzenakEtaKalifikazioak ;
 
uses
   crt ;  { readkey funtzioa erabili ahal izateko }
const
   BEHEMUGA = 1 ;
   GOIMUGA = 40 ;
type
   tKate25 = string[25] ;
   tasZerrenda = array[BEHEMUGA..GOIMUGA] of tKate25 ;
 
 
(* Lehenengo parametroa array bat delako eta irteerakoa      *)
(* delako erreferentziaz pasatzen da. Gauza bera bigarren    *)
(* parametroarekin erreferentziaz ere bere balioa prozedura  *)
(* barruan hartu eta irteerakoa delako.                      *)
procedure ArrayaBete1(var asDatuak: tasZerrenda; var iLuzera: integer) ;
var
   k: integer ;
begin
   repeat
      write('Arrayak zenbat elementu izango ditu? ') ;
      readln(iLuzera) ;
   until (iLuzera >= BEHEMUGA) and (iLuzera <= GOIMUGA) ;
 
   for k:=BEHEMUGA to iLuzera do
   begin
      write('''7Joseba43'' itxurako ', k, '. elementua enan: ') ;
      readln(asDatuak[k]) ;
   end ;
end ;
 
 
(* Datuak bektorean jasotzen dira baina beste modu batez.    *)
procedure ArrayaBete2(var asDatuak: tasZerrenda; var iLuzera: integer) ;
var
   cErantz: char ;
begin
   iLuzera := 0 ;
   repeat
      iLuzera := iLuzera + 1 ;
      write('''7Joseba43'' itxurako ', iLuzera, '. datua eman: ') ;
      readln(asDatuak[iLuzera]) ;
      repeat
         write('Datu gehiagorik? (B/E): ') ;
         cErantz := readkey ;
         writeln(cErantz) ;
         cErantz := upcase(cErantz) ;
      until (cErantz = 'B') or (cErantz = 'E') ;
      writeln ;
   until (cErantz = 'E') or (iLuzera = GOIMUGA) ;
end ;
 
 
(* Nahiz eta parametro biak sarrerakoak izan, lehenengoa     *)
(* array bat delako eta memorian kopia berriak ekiditeko     *)
(* erreferentziaz pasatzen da, const delako babesturik       *)
(* dago. Bigarren parametroa berriz balioz doa.              *)
procedure ArrayaIkusi(const asDatuak: tasZerrenda; iLuzera: integer) ;
var
   iIndizea: integer ;
begin
   writeln ;
   writeln('Arrayaren edukia: ') ;
   for iIndizea:=BEHEMUGA to iLuzera do
   begin
      writeln(iIndizea:2, '. datua = ', asDatuak[iIndizea]) ;
   end ;
   writeln ;
end ;
 
 
(* Funtzio batean parametroak BETI sarrerakoak.              *)
function fnrIkaslearenNotaLortu(sIkaslearenDatuak: tKate25): real ;
var
   sNota, sDezimalak: tKate25 ;
   rNota: real ;
begin
   sNota := sIkaslearenDatuak[1] + '.' ;
   sDezimalak := copy(sIkaslearenDatuak, Length(sIkaslearenDatuak)-1, 2) ;
   sNota := sNota + sDezimalak ;
   writeln('|', sNota, '|') ;
 
   val(sNota, rNota) ;
 
   fnrIkaslearenNotaLortu := rNota ;
end ;
 
 
(* Funtzio batean parametroak BETI sarrerakoak.              *)
function fnrBatezbestekoaKalkulatu(const asDatuak: tasZerrenda;
                                          iLuzera: integer): real ;
var
   rMetagailu, rNota: real ;
   k: integer ;
begin
   rMetagailu := 0.0 ;
   for k:=BEHEMUGA to iLuzera do
   begin
      rNota := fnrIkaslearenNotaLortu(asDatuak[k]) ;
      rMetagailu := rMetagailu + rNota ;
   end ;
 
   fnrBatezbestekoaKalkulatu := rMetagailu / iLuzera ;
end ;
 
 
(* ---------------------- programa nagusia ---------------------- *)
 
var
   asDatuak: tasZerrenda ;
   iLuzera: integer ;
   rBatezbestekoa: real ;
begin
   ArrayaBete1(asDatuak, iLuzera) ;
 //ArrayaBete2(asDatuak, iLuzera) ;
   ArrayaIkusi(asDatuak, iLuzera) ;
 
   rBatezbestekoa := fnrBatezbestekoaKalkulatu(asDatuak, iLuzera) ;
 
   writeln('Batezbestekoa = ', rBatezbestekoa:0:3) ;
 
   readln ;
end.

Datuen array bat daukagu. Datuak honelakoak dira: lehen karakterea nota eta azken bi karaktereak notaren dezimalak, zifren artean izena. Aurreko adibide-ariketan egin dena: Noten arteko batezbestekoa. Jarraipena den programan hauxe eskatzen dena:

  •  Noten arteko batezbestekoa  
  • Izenak gordetzen dituen array berri bat lortu
  • Notak gordetzen dituen beste array berri bat lortu
  • Ikasle bat bilatu izenen arrayan:
    • Ez badago, mezu informatibo bat pantailaratu
    • Baldin badago, bere nota aldatu eta noten batezbestekoa izan dadila
  • Izen berri bat txertatu izenak gordetzen dituen arrayan eta berari dagokion nota berri bat txertatu notak gordetzen dituen beste arrayan. Horretarako:
    • Izen berria teklatuz eskatuko zaio erabiltzaileari
    • Nota berria batezbestekoa izan dadila, noten arrayak dituen azken balioiekin batezbestekoa berriro kalkulatu eta kalifikazio hori txertatu  
  • Izenak gordetzen dituen arraya alfabetikoki sailkatu eta ordena berbera aplikatu notak gordetzen dituen arrayri 
Baina, mesedez, zure programa ez dadila izan irudi honek adierazten duena:


    Ikusi hemen jarraipenaren balizko soluzio bat:

     programa osoa laster ikusgai... 

     

    iruzkinik ez:

    Argitaratu iruzkina

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