In mod obisnuit, tastatura este desemnata ca dispozitiv-standard de intrare. n6m2mg
Citirea datelor de la tastatura se realizeaza prin apelul procedurilor predefinite
read sau readln. Aceste doua proceduri apartin unit-ului System care este deasemenea
predefinit(nu trebuie de declarat). Lista parametrilor actuali a unui apel read
sau readln poate sa includa variabile de tip integer, real, char si string.
Astfel apelul read(x) are urmatorul efect. Daca variabila x este de tip integer
sau real, atunci este citit intregul sir de caractere care reprezinta
valoarea intreaga sau reala. Daca x este de tip char, procedura citeste
un singur caracter.
Apelul read(x1 , x2, …,xn) este echivalent cu read(x1); read(x2); …
;read(xn).
Datele numerice introduse de la tastatura trebuie separate prin spatii sau caractere
sfarsit de linie. Spatiile dinaintea unei valori numerice sunt ignorate.
Sirul de caractere care reprezinta o valoare numerica se conformeaza sintaxei
constantelor numerice de tipul respectiv. In caz contrar, este semnalata
o eroare de intrare-iesire.
De exemplu, fie programul:
Program exemplu;ACitirea datelor numerice de la tastaturaS
Var i, j : integer; x,y:real; begin read(i, j, x, y);
writeln('Ati introdus: ');
writeln('i=', i);
writeln('j=', j);
writeln('x=', x);
writeln('y=', y); end.
In care sunt citite de la tastatura valorile variabilelor i, j, x, y.
Dupa lansarea programului in executie, utilizatorul tasteaza:
1<Enter>
2<Enter>
3.0<Enter>
4.0<Enter>
Pe ecran se va afisa:
Ati introdus: i=1 j=2 x=3.0000000000E+00 y=4.0000000000E+00
Acelasi efect se va obtine si la tastarea numerelor intr-o singura linie:
1 2 3.0 4.0<Enter>
Procedura readln citeste datele in acelasi mod ca si procedura read. Insa,
dupa citirea ultimei valori, restul caracterelor din linia curenta se ignora.
Pentru exemplificare, prezentam programul urmator:
Program exemplu1; AApelul procedurii readlnS
Var i, j :integer; x,y : real; begin
writeln('Apelul procedurii read'); read(i, j); read(x, y);
writeln('Ati introdus:');
writeln('i=', i, 'j=', j, 'x=', x, 'y=', y);
writeln('Apelul procedurii readln'); readln(i,j); readln(x, y);
writeln('Ati introdus:');
writeln('i=', i, 'j=', j, 'x=', x, 'y=', y); end.
La executia instructiunilor read(i, j);read(x, y); valorile numerice din linia
introdusa de utilizator
1 2 3 4<Enter> vor fi atribuite variabilelor respectiv i, j, x, y. La executia instructiunii
readln(i, j); valorile numerice 1si 2 din linia 1 2 3 4<Enter> vor fi
atribuite variabilelor i si j. In continuare calculatorul executa instructiunea
readln(x, y); adica va astepta introducerea unor valori pentru x si y.
Mentionam faptul ca apelul procedurii readln fara parametri va forta calculatorul
sa astepte actionarea tastei <ENTER>. Acest apel se utilizeaza pentru
a suspenda derularea programului, oferindu-i utilizatorului posibilitatea sa
analizeze rezultatele afisate anterior pe ecran. In programul de mai jos
observam ca acesta se termina cu instructiunea readln. Ce rol are ea? Dupa ce
un program isi incheie executia, se revine in mod automat
in mediul in care se gaseste textul sursa. Rezultatele se pot vizualiza
tastand ALT+F5. Pentru ca revenirea sa nu se faca automat (sa avem timp
sa vedem rezultatul), vom utiliza instructiunea readln fara parametri. Efectul?
Se va astepta sa se tasteze <ENTER>. In acest timp, avem posibilitatea
sa vedem ce s-a tiparit.
Program exemplu;
Begin
Writeln(6);
Readln;
End.
Pentru a inlesni introducerea datelor, se recomanda ca apelurile read(…)
si readln(…) sa fie precedate de afisarea unor mesaje sugestive. Exemple:
Write('Dati doua numere:'); readln(x, y);
Write('Dati un numar intreg:'); readln(i);
Write('x='); readln(x);
Write('Raspundeti cu D sau N:'); readln(c);
Unii incepatori sau cunoscatori ai limbajului BASIC cred ca se poate
face o citire in felul urmator: readln('Dati n= ', n); iar altii nu sesizeaza
diferenta intre un sir si valoarea identificatorului: readln('n');.
In cazul in care valoarea introdusa nu corespunde tipului variabilei
declarate se va semnala o eroare de executie si astfel se va iesi automat din
program. Pentru a evita aceasta iesire se poate testa daca datele introduse
corespund tipului variabilei respective prin introducerea inaintea instructiunii
read sau readln a directivei A$i-S si dupa instructiune - A$i+S. Aceste directive
fac posibila continuarea rularii programului fara a iesi din el. Si pentru a
verifica daca valoarea introdusa este corecta, verificam prin intermediul functiei
predefinite IOResult care va returna un numar diferit in cazul unei erori,
si va returna 0 daca nu exista nici o eroare. Ca exemplificare vom prezenta
programul urmator:
Program ex;
Var a:integer;
Begin
Writeln('Dati o valoare pentru a!');
A$i-S readln(a);A$i+S if IOResult<>0 then writeln('Ati introdus gresit!') else begin a:=a+1; Amarim valoarea lui a cu o unitateS
writeln('a=', a); end; end.
Program exemplu;
Astfel daca in lipsa directivelor A$i-S si A$i+S dam lui a valoarea bicaz
care este de tipul string se va semnala o eroare si se va iesi automat din program.
Dar in prezenta lor programul va rula in continuare afisind
mesajul Ati introdus gresit. Daca valoarea introdusa e de tipul integer se va
mari valoarea variabilei cu o unitate si se va afisa noua valoare.
O larga intrebuintare o au procedurile read si readln in prelucrarea
fisierelor.
Stim ca pentru deschiderea unui fisier pentru citire se apeleaza procedura reset(f)
unde lui f ii este atribuit fisierul de tipul respectiv(text sau fisiere
cu tip).Insa citirea datelor din fisier se face printr-o apelare de forma
read(f, v), iar in cazul fisierelor de tip text se permite si apelarea
readln(f,v) , care reprezinta citirea sffarsitului de linie din fisier.
O simpla apelare de tipul readln(f) va avea ca efect trecerea in fisier
la linia urmatoare. O instructiune de forma readln(f,v1,v2,…,vn) este
echivalenta cu secventa de instructiuni read(f,v1,v2,…,vn);readln(f);
. Programul ce urmeaza afiseaza continutul fisierului FILE.TXT pe ecran.
Var f:text; c:char;
Begin
Assign(f,'FILE.TXT');
Reset(f);
While not eof(f) do
Begin
While not eoln(f) do
Begin
Read(f, c); Aciteste c din fS
Write(c);
End;
Readln(f); Atrece la linia urmatoare din fS
Writeln;
End;
Close(f);
Readln;
End.
Astfel fara de instructiunea de citire nu ne putem lipsi practic in nici
un program Pascal.