AUTOEBALUAZIOA: izenak eta kalifikazioak
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.{
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
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.