2023(e)ko martxoaren 15(a), asteazkena

8. astea | izena eta zenbakia

Gehienez 15 karaktereko katean izena eta zenbakia era jarraituan ditugu, adibidez: Adela245 edo Jon33. Ikusten denez zenbakia adierazten duten karaktereak datu-katearen bukaeran daude, 245 adibide batean eta 33 bestean.



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
-----------------------------------------------------------------------------}
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