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.