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:
{----------------------------------------------------------------------------- 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.