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

8. astea | zenbakiak teklatuz irakurtzen

Behin baino gehiagotan gertatu zaigu readln(iZenbakia)eta readln(rZenbakia) instrukzioak exekutatzean programa bukatu zaigula datu okerra sartu dugulako.



Adibidez, aurreko readln(iZenbakia)instrukzioarako -12.5 ematean puntua ez da onartzen eta programak abortatu egiten du. Arazo bera gertatuko litzateke -2M5 ematean edo  +2E5 ematean, batean M karakterea ez delako onartzen eta bestean E karakterea delako onartzen ez dena.



Zenbaki errealekin antzeko zerbait gertatzen da, osoek baino karaktere gehiago onartzen dituzte errealek (adibidez e, E eta puntua) baina karaktere desegoki bat ematean programak abortatu egiten du ere. Esate baterako, aurreko readln(rZenbakia)instrukzioarako ezin daiteke -2.7M5 eman.



Ondoko programa bi hauek zenbakien sarrera zaintzen dute. Horretarako zenbakia string bezala irakurtzen da, gero val prozedura aplikatuz erabakitzen da zer egin sarrera desegokia izan bada.








{-----------------------------------------------------------------
Programa honen bitartez integer datu-motako datuak jasoko ditugu.
-----------------------------------------------------------------}
program IntegerBatIrakurtzenKateBatenBitartez;

uses crt;

type
tsKatea = string[15];


{------------------------Programa Nagusia--------------------}
var
sDatua: tsKatea;
iDatua: integer;
iErrorea: integer;
cAukera: char;
begin
{ Programak behin eta berriro exekutatuko da erabiltzaileak amaitzeko erabakia hartu arte }
repeat
writeln('Programak honek zenbaki oso bat eskatuko du, teklatuz jasotako zenbaki hori');
writeln('string batean gordeko da eta val prozeduraren bitartez integer datu-motakoa');
writeln('den aztertuko da. Kopuru osoa teklatuz sartu ezean prozesua errepikatuko da');
writeln;

repeat
{zenbakia string bezala irakurtzen da, honek ez du sekulan errorerik sortzen}
write('Sar ezazu zenbaki oso bat: ');
readln(sDatua);

{datua den string hori zenbaki bihurtu eta aztertu errorerik gertatu den}
val(sDatua, iDatua, iErrorea);

if iErrorea <> 0 then
begin
writeln('Sarrera onartezina, ', iErrorea, '. posizioko zifra ez da egokia: ', sDatua[iErrorea]);
writeln('berriro errepikatu');
writeln;
end;
until iErrorea = 0;

{datua den string hori zenbaki bihurtu dela frogatzeko bere doble pantailaratu}
writeln('Sartutako datuaren doblea: ', iDatua*2);
writeln;
writeln;

write('Beste zenbakirik? (B ala E): ');
repeat
cAukera := upcase(readkey);
until (cAukera = 'E') or (cAukera = 'B');
clrscr;
until cAukera = 'E';
end. { Programaren amaiera }













{-----------------------------------------------------------------
Programa honen bitartez real datu-motako datuak jasoko ditugu.
-----------------------------------------------------------------}
program RealBatIrakurtzenKateBatenBitartez;

uses crt;

type
tsKatea = string[15];


{------------------------Programa Nagusia--------------------}
var
sDatua: tsKatea;
rDatua: real;
iErrorea: integer;
cAukera: char;
begin
{ Programak behin eta berriro exekutatuko da erabiltzaileak amaitzeko erabakia hartu arte }
repeat
writeln('Programak honek zenbaki bat eskatuko du, teklatuz jasotako zenbaki hori');
writeln('string batean gordeko da eta val prozeduraren bitartez real datu-motakoa');
writeln('den aztertuko da. Zenbaki teklatuz sartu ezean prozesua errepikatuko da');
writeln;

repeat
{zenbakia string bezala irakurtzen da, honek ez du sekulan errorerik sortzen}
write('Sar ezazu zenbaki bat: ');
readln(sDatua);

{datua den string hori zenbaki bihurtu eta aztertu errorerik gertatu den}
val(sDatua, rDatua, iErrorea);

if iErrorea <> 0 then
begin
writeln('Sarrera onartezina, ', iErrorea, '. posizioko zifra ez da egokia: ', sDatua[iErrorea]);
writeln('berriro errepikatu');
writeln;
end;
until iErrorea = 0;

{datua den string hori zenbaki bihurtu dela frogatzeko bere doble pantailaratu}
writeln('Sartutako datuaren doblea: ', rDatua*2:0:3);
writeln;
writeln;

write('Beste zenbakirik? (B ala E): ');
repeat
cAukera := upcase(readkey);
until (cAukera = 'E') or (cAukera = 'B');
clrscr;
until cAukera = 'E';
end. { Programaren amaiera }








 

iruzkinik ez:

Argitaratu iruzkina