Honen moduko hainbat kate irakurri ondoren programak zenbakien batezbestekoa kalkulatuko du; adibidez, hurrengo irudian 3 kate irakurri dira. Horretarako, irakurritako kate bakoitzean banaketa bat egingo du, izena alde batetik eta digituak beste alde batetik; banaketa egin ondoren val prozeduraren (hemen laburrago) bitartez bihurketa burutu beharra dago, adibidez: 245 katea 245 zenbaki bihurtu.
Ikusi irudi honetan programa nola dabilen:
Eta hona hemen iturburu-programa:
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 | {----------------------------------------------------------------------------- Programa Izenak eta zenbakiak: Gaia: string datu-mota Deskribapena: KOPURUA karaktere-kateetan dauden zenbakien batezbestekoa kalkulatzen da Zenbakiak kopurua osoak izango dira eta karaktere-kateen bukaeran daude, adibidez: Olatz81 Estibaliz3 Martin16 Adibide horretan, emaitza (81+3+16)/3=33.33 izango da -----------------------------------------------------------------------------} program KateenBatezbestekoa; uses crt; const KOPURUA = 3 ; type tsKatea = string [ 15 ]; { FUNTZIOA: fniZenbakiaAtera SARRERA PARAMETROAK: string bat IRTEERA PARAMETROAK: ATAZA: Izenaren ondoren dagoen zenbakia identifikatu } function fniZenbakiaAtera(sTestua: tsKatea): integer ; var sDigituak: tsKatea; k: integer ; iErrorea: integer ; iZenbakia: integer ; begin { Izenaren azken karakterea identifikatu eta k aldagaian gorde egiten dugu } k := length(sTestua); while (sTestua[k] >= '0' ) and (sTestua[k] <= '9' ) do k := k - 1 ; { Zenbakiaren digutuak kate isolatu batean gorde } sDigituak := copy(sTestua, k+ 1 , length(sTestua) - k); { Lortutako digituen katea pantailaratu } writeln ( 'Digituak (karaktere-kate bat) --->' : 40 , sDigituak, '<--- aldagaian="" balioa="" bat="" begin="" bihurtu="" digituak="" dugu="" egiten="" enbakia="" esleitu="" eta="" funtzioari="" gorde="" ierrorea="0" if="" integer="" izenbakia="" lortutako="" pantailaratu="" sdigituak="" then="" val="" writeln="" zenbaki="" zenbakia="" zenbakiaren="">' : 40 , iZenbakia, '<===' ); fniZenbakiaAtera := iZenbakia; end else begin writeln ( 'Zenbakia (integer bat) ===>' : 40 , iZenbakia, '<===' ); { Datuak sartzean erroren bat egon da eta zenbakirik ez da eman, 0 itzuli } writeln ( 'Datuak sartzean ez da zenbakirik eman' : 46 ); fniZenbakiaAtera := 0 ; end ; end ; { FUNTZIOA: fnrBatezbestekoaKalkulatu SARRERA PARAMETROAK: iBatura, KOPURUA ez da pasatu behar konstante orokor bat delako IRTEERA PARAMETROAK: ATAZA: Izenaren ondoren dagoen zenbakia identifikatu } function fnrBatezbestekoaKalkulatu(iBatura: integer ): real ; begin fnrBatezbestekoaKalkulatu := int(iBatura) / KOPURUA; (* konpiladoreak ematen duen DIV abisua kentzeko: *) (* iBatura integer da, baina int(iBatura) real da *) end ; {-----------------------------Programa Nagusia-------------------------} var sKatea: tsKatea; iKontagailua: integer ; cAukera: char ; iBatura: integer ; rBatezbestekoa: real ; begin clrscr; writeln ( 'Programak ' , KOPURUA, ' karaktere-katetan dauden zenbakien batezbestekoa kalkulatzen du.' ); writeln ( 'Zenbakiak kopurua osoak izango dira eta karaktere-kateen bukaeran daude, honela adibidez:' ); writeln ( ' Olatz81' ); writeln ( ' Estibaliz3' ); writeln ( ' Martin16' ); writeln ; writeln ( 'Adibide horretan, emaitza (81+3+16)/3=33.33 izango da' ); writeln ; writeln ( '--------------------------------------------------------------' ); writeln ; { Programak behin eta berriro exekutatuko da erabiltzaileak amaitzeko erabakia hartu arte } repeat iBatura := 0 ; { Batezbestekoaren kalkulurako } { KOPURUA karaktere-kate eskatu eta bakoitzaren zenbakia rBaturari gehitu egiten dugu } for iKontagailua := 1 to KOPURUA do begin { Kate hutsak saihesten ditugu } repeat write ( 'Sar ezazu ' , iKontagailua, '. testua (izena eta zenbakia jarraian): ' ); readln(sKatea); until length(sKatea) <> 0 ; iBatura := iBatura + fniZenbakiaAtera(sKatea); end ; { Batezbestekoa pantailaratu eta hurrengo exekuzioa prestatu egiten dugu, erabiltzailea amaitzeko aukera hartu arte } writeln ; rBatezbestekoa := fnrBatezbestekoaKalkulatu(iBatura); writeln ( 'Batezbestekoa: ' : 25 , rBatezbestekoa: 0 : 4 ); writeln ; writeln ( '==============================================================' ); writeln ; write ( 'Beste zerrenda bat? (B ala E): ' : 30 ); repeat cAukera := upcase(readkey); until (cAukera = 'E' ) or (cAukera = 'B' ); clrscr; until cAukera = 'E' ; write ( 'Edozein tekla sakatu programatik irteteko ' ); repeat until keypressed; end . { Programaren amaiera } <!-------> |
Aurreko programa horri zer kode gehitu beharko zaio zenbakiak positiboak eta negatiboak onartzeko? Adibidez, aurreko Adela245 eta Jon33 sarreren gain honako bikote hauek eman ahal izateko:
- Adela+245 eta Jon+33
- Adela+245 eta Jon-33
- Adela-245 eta Jon+33
- Adela-245 eta Jon-33
- Adela245 eta Jon33
Eta dezimalak ere onartzeko? Esate baterako, aurreko Adela245 eta Jon33 sarrerekin batera honako bikote hauek eman ahal izateko:
- Adela+2.45 eta Jon+33.4
- Adela+.245 eta Jon-.33
- Adela+24.5 eta Jon-33
- Adela-245 eta Jon+3.3
- Adela-245.1 eta Jon-33
- Adela245 eta Jon33
- Adela2.45 eta Jon33.7
- Adela.245 eta Jon.337
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.