Orice program trebuie realizat in asa fel incat el sa poata fi utilizat nu
numai de catre proiectant(i), ci si de catre orice alta persoana, nu neaparat
cu cunostinte de informatica, dupa un instructaj sumar.
De asemenea, dialogul cu utilizatorul trebuie proiectat de asa maniera
incat sa sugereze cat mai bine operatiile care trebuie executate de catre
operator. De aceea, o prima cerinta este ca la citirea datelor de intrare sa
se afiseze in clar numele lor, astfel incat utilizatorului sa-i fie foarte
limpede ce are de tastat. De exemplu, instructiunea:
va fi in mod obligatoriu precedata de:
Secventa de citire a elementelor unei matrici poate arata in felul
urmator:
for i:=1 to nrLinii do
for j:=1 to nrColoane do
begin
write('A[', i:1, ',', j:1, ']');
readln(A[i,j])
end;
|
sau, daca spatiul ocupat pe ecran este considerat prea mare, se pot citi
elementele matricei pe linii:
writeln('Dati elementele matricei A pe linii,');
writeln('separate prin spatii:');
for i:=1 to nrLinii do
begin
for j:=1 to nrColoane do
read(A[i,j]);
readln {citeste sfarsitul de linie}
end;
|
Acest mod este mai apropiat de modul "natural" e scriere a unei matrici.
De asemenea, revenind la problema consignatiei, de la lucrarea 1, este
evident ca selectarea uneia dintre optiunile Achizitionare, Vanzare, Inventar,
sau Inchidere, ar fi fost mult mai comoda daca s-ar fi pus la dispozitia
utilizatorului un meniu, in genul celor oferite de mediul TurboPASCAL, sarcina
utilizatorului fiind sa tasteze prima litera din denumirea optiunii, fie sa
deplaseze banda alba de selectie pe optiunea dorita, cu ajutorul tastelor
"sageti", dupa care apasa tasta
.
Scopul acestei lucrari este scrierea de programe care folosesc facilitatile
oferite de tastatura si de lucrul in mod ecran prin unit-ul Crt.
Pentru a intelege cum se pot utiliza toate tastele existente, inclusiv
cele netiparibile, se recomanda rularea urmatorului program:
uses Crt;
var ch: char
begin
repeat
writeln('Apasati o tasta:');
ch:=ReadKey;
write('-ati apasat tasta');
if ord(ch)=0 then
begin
ch:=ReadKey;
write('speciala ')
end;
writeln('cu codul ',ord(ch):3)
until ord(ch)=27
end.
|
Programul exploateaza modul de lucru cu tastatura al sistemului de
operare: la apasarea unei taste alfanumerice se transmite programului apelant
codul ASCII tastei respective. Daca se apasa una din tastele speciale
(netiparibile), se transmit doua caractere, primul continand caracterul 0
("Nul"), urmat de "codul de scanare" al tastei respective.
Se recomanda sa se noteze codurile tastelor "sageti", F1..F10, apasate
singure sau in combinatie cu <Shift>, <Ctrl> sau <Alt>.
-
Pe baza datelor culese cu programul de mai sus, sa se rescrie interfata
pentru programul de consignatie. Se va construi un meniu orizontal continand
cele patru optiuni, care se va afisa pe ecran in prima linie (dupa ce s-a
sters ecranul cu ClrScr). Initial, banda de selectie se va muta pe optiunea
vecina, daca aceasta exista, restectiv pe cea din capatul opus, daca de
exemplu fiind pe prima optiune, se apasa sageata-stanga. Pentru "acivare" se
apasa tasta <ENTER> (banda de selectie fiind pe optiunea dorita) sau se
apasa prima litera oricarei optiuni.
Se recomanda ca in structura de meniu, pentru fiecare optiune sa se memoreza
pozitia de afisare, textul de afisat si, intr-un camp de tip procedural,
rutina care efectueaza actiunea corespunzatoare.
-
Sa se realizeze o unitate care exporta rutine de lucru cu meniuri
orizontale:
-
definire meniu - creeaza o noua variabila de tip "meniu", careia i se
precizeaza linia in care va fi afisat;
-
definire optiune - pentru precizarea datelor referitoare la o optiune:
numarul de ordine, coloana in care se afiseaza, procedura de apelat in az
de selectare;
-
activare meniu - o bucla de repartitie care afiseaza meniul si permite
selectarea uneia din optiuni. Din bucla se iese fie la apasarea taastei
, fie datorita unei optiuni care dezactiveaza meniul respectiv;
-
dezactivare meniu.
-
Similar cu problema 2, dar se vor realiza meniuri verticale. Acestea vor
fi incadrate intr-un chenar, construit din caracterele:
chr(179)
|
linie verticala
|
chr(196)
|
linie orizontala
|
chr(218)
|
colt stanga-sus
|
chr(191)
|
colt dreapta-sus
|
chr(217)
|
colt dreapta-jos
|
chr(192)
|
colt stanga-jos
|
In plus, sa se stabileasca o conventie prin care poate fi folosit pentru
selectie oricare caracter din string-ul Oprtiune, nu neaparat primul. Acest
caracter va fi afisat cu alta culoare, pentru a-l scoate in evidenta.
-
* Sa se studieze rutinele puse la dispozitie de unit-ul Graph si sa se
realizeze un program simplu de desenare. Se traseaza pe ecran un indicator
in forma de cruce, care poate fi deplasat cu tastele sageti. Apasarea tastei
"J" simuleaza coborarea penitei, si din acel moment deplasarea indicatorului
va lasa o "urma" pe ecran. Pentru a ridica "penita" se apasa tasta "S", iar
indicatorul poate fi deplasat in ecran fara a trasa vreo linie. Sa se
gaseasca o posibilitate ca indicatorul sa poata fi deplasat pe ecran si cu
un numar mai mare de pixeli.