Program Dictionar
Cuprins
Bibliografie
28 pagini
+ executabilul
Limbajul Pascal
Pascal este un limbaj de programare a calculatoarelor. A fost dezvoltat de elvețianul Niklaus Wirth în 1970. Unul din marile sale avantaje este asemănarea cu limbajul natural (limba engleză), ceea ce îl face limbajul ideal pentru cei care sunt la primul contact cu programarea.
Limbajul a fost numit în onoarea matematicianului și filozofului Blaise Pascal, creditat pentru construirea primelor mașini de calcul numeric.
În dezvoltarea limbajului, autorul a urmărit doua principale idei. Una a fost aceea de a pune la dispoziția programatorilor un limbaj care să permită învățarea programării ca o disciplină sistematică bazată pe anumite concepte fundamentale reflectate cât se poate de simplu, logic si natural de către limbaj. A doua a fost aceea de a implementa fără dificultate pe calculatoarele existente un limbaj eficient și caracterizat printr-o siguranță sporită.
Principalele structuri ale limbajului au fost preluate de Algol 60. Extensiile față de Algol 60 se referă în primul rând la facilitățile de structurare a datelor, lărgindu-i in acest fel domeniul de aplicabilitate. Introducerea structurilor de articol și fișier a condus la posibilitatea utilizării limbajului Pascal și în rezolvarea problemelor având un caracter pronunțat comercial.
Un program Pascal constă dintr-un antet și un corp al programului numit bloc. Prin intremediul antetului se dă programului un nume și i se specifică parametrii. Acești parametrii reprezintă de regulă fișierele externe folosite de program. Blocul este alcătuit din șase secțiuni, care trebuie să apară într-o ordine prestabilită, și anume:
bloc = declarația etichetelor
definiția constantelor
definiția tipurilor
declarația variabilelor
declarații de funcții și proceduri ( subprograme )
partea de instrucțiuni
Cu excepția ultimei secțiuni, oricare din celelalte poate lipsi. Redactarea unui program se face folosind simboluri și separatori de simboluri.
Simbolurile Pascal sunt constituite din simboluri speciale, simboluri cuvânt (cuvinte rezervate), identificatori, numere, șiruri de caractere, etichete și directive.
Separatorii de simboluri folosiți în limbajul Pascal sunt blancul, sfârșitul de linie ( separatorul de linii) și comentariul. Acești separatori pot să apară într două simboluri adiacente sau înaintea primului simbol al programului. Între doi identificatori, două directive, cuvinte rezervate, etichete sau numere adiacente trebuie să apară cel putin un separator însă nici un separator sau o componentă de separator nu sunt admise intr-un simbol Pascal.
Identificatorii sunt simboluri ce desemnează constante, tipuri, limite, variabile, funcții sau proceduri. Un identificator începe cu o literă, aceasta putând fii urmată de orice fel de combinație de litere sau cifre. Lungimea identificatorului nu este limitată superior iar literele mari sau mici intrând în componența sa se consideră ca fiind echivalente. De altfel, literele mari sunt întotdeauna interpretate ca fiind echivalente cu corespondentele lor în litere mici, înafara construcțiilor constituin șiruri de caractere.
Unii identificatori sunt numiți identificatori predeclarați, au o semnificație predefinită ( de exemplu: sin, cos ). Spre deosebire de cuvintele rezervate, ei pot fii redefintiți în cadrul programului căci sunt presupuși a fii declarați într-un bloc ipotetic incluzând întregul bloc al programului.
Numerele desemnează valori întregi sau reale și sunt scrise folosind notația zecimală. Orice număr poate fi precedat de un semn, un număr fără semn este un număr care nu comportă un semn. Într-un număr nu poate să apară caracerul virgulă.
Un șir de caractere este o secvență de caractere încadrată între apostrofuri. Dacă dorim ca șirul însași să conțină caracterul apostrof , acest caracter trebuie sa fie dublat. Un șir de caractere trebuie să fie scris pe o singură linie a textului programului.
O etichetă este un număr întreg fără semn și se folosește pentru a marca o instrucțiune Pascal. Valoarea numerică a întregului trebuie să fie cuprinsă între 0 și 9999.
Tipuri de date de bază:
Integer (numere întregi)
Longint
Shortint
Byte
Word
Real (numere reale)
Char (caracter)
String (șir de caractere)
Boolean (logic)
Text (fișier text)
File (fișier)
Instrucțiuni de bază
Atribuire
Sintaxa: <val1:=val2>
Condiție
Sintaxa:
if condiție then
begin
{instrucțiuni}
end
else
begin
{instrucțiuni}
end;
Cicluri
a) Cu test inițial
Sintaxa:
while condiție do
begin
{instrucțiuni}
end;
b) Cu test final
Sintaxa:
repeat
{instrucțiuni}
until condiție
c) Cu număr cunoscut de pași
Sintaxa:
for x:=val1 to val2 do
begin
{instrucțiuni}
end;
Programul Dicționar
Programul este un dicționar de engleză-română. Se poate folosi pentru învățarea limbii engleze. Când învățăm un cuvânt nou, se poate introduce în dicționar, și acesta va fi salvat. La cerere programul testează cunoștințele acumulate din cuvintele existente în dicționar. Este foarte ușor de folosit, și este și util.
Programul se poate folosi prin pornirea executabilului diction.exe. După pornire, apare un text de bun venit, cu numele programului, numele programatorului și anul în care a fost creat.
După apăsarea oricărui buton, apar cuvintele existente în dicționar în ordinea alfabetică.
În partea de jos a ecranului apare un rând de comenzi, care se pot executa apăsând butoanele care sunt scrise înaintea comenzilor. Cu apăsarea tastelor săgeată jos și sus, se poate circula printre cuvinte. Apăsând tasta Insert de pe tastatură, va apărea un chenar prin care se pot adăuga cuvinte noi în dicționar.
Prin apăsarea tastei ‘s’ mic va apărea un chenar cu ajutorul căruia se pot căuta cuvinte aflate în dicționar. Dacă apăsăm tasta ‘e’ se poate modifica cuvântul pe care este staționat curzorul. Dacă am întrodus un cuvânt greșit, acesta se poate șterge cu apăsarea tastei Delete de pe tastatură.
Când simțim că am învățat toate cuvintele aflate în dicționar, putem să ne testăm cunoștințele apăsând butonul ‘t’ de pe tastatură. Ne va apărea un chenar în care va apărea cuvântul în limba română, și noi va trebui să introducem cuvântul corespunzător în engleză. Dacă acest cuvânt a fost introdus corect, atunci programul ne va felicita, iar dacă cuvântul a fost introdus greșit, programul ne va afișa cuvântul scris corect.
Pe fundalul ecranului vor apărea câteva statistici despre cât de bine am învățat cuvintele în limba engleză.
Din program se poate ieși cu ajutorul butonului ESC.
Cuvintele sunt păstrate în fișierul text numit diction.txt. Cănd ieșim din program, toate cuvintele, inclusiv cele adăugate ulterior vor fi salvate în acest fișier.
Descrierea programului
Programul principal șterge ecranul cu ajutorul funcției clrscr. Invocă funcția randomize pentru a folosi numere aleatoare. Setează ecranul să aibă 25 de linii și 80 de caractere cu ajutorul funcției textmode. Invocă procedura intro pentru a afișa mesajul de bun venit. Citește cuvintele din fișierul diction.txt cu ajutorul funcției citeste_fisier. Invocă funcția arata_cuvinte pentru a afișa cuvintele pe ecran.
Într-un ciclu while așteaptă apăsarea unui buton cu readkey, și execută ramura corespunzătoare tastei apăsate. Cănd apăsăm tasta ESC, iese din acest ciclu, și scrie cuvintele în fișierul diction.txt.
begin
clrscr;
randomize;
TextMode(CO80);
intro;
citeste_fisier;
arata_cuvinte;
ch := readkey;
while (ch <> #27) do
begin
case ch of
……
end;
ch := readkey;
end;
scrie_fisier;
end.
Cuvintele citite din fișier sunt păstrate în memorie în șirul cuvinte. Acest șir poate conține maxim 500 de perechi de cuvinte engleză-română, și este alcătuit din recorduri de tip traducere:
type cuvant = string[30];
type traducere = record
engleza:cuvant;
romana:cuvant;
end;
var cuvinte:array[1..500] of traducere;
Procedura intro desenează ecranul de bun venit pe monitor:
procedure intro;
begin
chenar(20,7,60,19,BLUE,WHITE);
gotoxy(32,12);
write('D I C T I O N A R');
gotoxy(30,16);
write('Programator: Fodor Sarolta');
gotoxy(45,18);
write('Creat in 2006');
readkey;
end;
Procedura citeste_fisier citește cuvintele din fișier și le pune în șirul cuvinte. Variabila nr_cuv conține numărul de cuvinte existente în dicționar. După ce citește toate cuvintele din fișier, le sortează cu ajutorul funcției sorteaza_cuvinte.
procedure citeste_fisier;
var f:Text;
s:string;
begin
nr_cuv:=0;
assign(f,'diction.txt');
{$I-}
reset(f);
{$I+}
if (ioresult <> 0) then
begin
rewrite(f);
end
else
while not eof(f) do
begin
readln(f,s);
nr_cuv := nr_cuv +1;
desparte(s, cuvinte[nr_cuv] );
end;
close(f);
sorteaza_cuvinte(1);
index_sus:=1;
curent:=1;
end;
Procedura sorteaza_cuvinte sortează cuvintele cu bubble sort. Se poate specifica ca parametru, după care limbă să se facă sortarea.
procedure sorteaza_cuvinte(limba:integer);
var i,j:integer;
schimb:traducere;
begin
for i:=1 to nr_cuv do
for j:=i+1 to nr_cuv do
begin
if ((limba=1) and (cuvinte[i].engleza>cuvinte[j].engleza)
or (limba=2) and cuvinte[i].romana>cuvinte[j].romana)) then
begin
schimb:=cuvinte[i];
cuvinte[i]:=cuvinte[j];
cuvinte[j]:=schimb;
end;
end;
end;
Procedura chenar desenează un chenar pe ecran. Chenarul începe de la poziția (x0, y0) și se termină pe poziția (x1,y1). Culoarea fundalului este cb, si culoarea chenarului este cc.
procedure chenar(x0, y0, x1, y1, cb, cc:integer);
var i,j:integer;
cv:integer;
begin
cv:=TextAttr;
TextBackground(cb);
TextColor(cc);
gotoxy(x0,y0);
write('╔');
for i:=x0+1 to x1-1 do
write('═');
gotoxy(x1,y0);
write('╗');
for i:=y0+1 to y1-1 do
begin
gotoxy(x0,i);
write('║');
gotoxy(x1,i);
write('║');
end;
gotoxy(x0,y1);
write('╚');
for i:=x0+1 to x1-1 do
write('═');
gotoxy(x1,y1);
write('╝');
fill(x0+1,y0+1,x1-1,y1-1,cb,cc);
end;
Procedura citeste un cuvânt de pe o poziție cu o lungime specificată ca parametru. E similar ca și readln, doar că nu permite introducerea mai multor caractere ca și lungimea dată.
function citeste(x,y,lung:integer; var cuv:cuvant):boolean;
var ch:char;
i:integer;
begin
gotoxy(x,y);
write(cuv);
ch:=readkey;
while (ch<>#13) and (ch<>#27) do
begin
if (ch >=' ') and (ch <> '=') then
begin
if (length(cuv) < lung ) then
cuv:= cuv + ch;
end
else
begin
if ch = #8 then
cuv:= copy (cuv,1,length(cuv)-1);
end;
gotoxy(x,y);
write(cuv);
for i:=1 to lung-length(cuv) do
write(' ');
gotoxy(x + length(cuv),y);
ch:=readkey;
end;
if ch = #13 then
citeste:= true
else
citeste:= false;
end;
Funcția editeaza_cuvant este apelată atunci cânde este apăsată tasta ‘e’. Desenează un chenar, apoi afișează cuvântul actual în limba engleză și română. Se poate modifica oricare dintre cele două.
function editeaza_cuvant(var cuv:traducere):boolean;
begin
chenar(20,10,60,16,GREEN,WHITE);
gotoxy(28,10);
write(' IntroduWHITE);
gotoxy(28,10);
write(' Introduceti cuvantul ');
gotoxy(22,12);
write('Engleza:');
gotoxy(22,14);
write('Romana:');
fill(32,12,55,12, BROWN, WHITE);
gotoxy(32,12);
write(cuv.engleza);
fill(32,14,55,14, BROWN, WHITE);
gotoxy(32,14);
write(cuv.romana);
gotoxy(32,12);
if not citeste(32,12, 23, cuv.engleza) then
begin
editeaza_cuvant := false;
exit;
end;
if not citeste(32,14, 23, cuv.romana) then
begin
editeaza_cuvant := false;
exit;
end;
editeaza_cuvant := true;
end;
Procedura scrie_fisier scrie cuvintele înapoi în fișier. Cuvintele scrise în fișier vor fi sortate în ordine alfabetică.
procedure scrie_fisier;
var f:Text;
i:integer;
begin
assign(f,'diction.txt');
rewrite(f);
for i:=1 to nr_cuv do
begin
writeln(f,cuvinte[i].engleza+'='+cuvinte[i].romana);
end;
close(f);
end;
Procedura arata_cuvinte afișează cuvintele din șirul cuvinte pe ecran. Doar 22 cuvinte sunt arătate consecutiv.
procedure arata_cuvinte;
var i,j,max:integer;
begin
chenar(1, 1, 80, 24, BLUE, YELLOW);
meniu_ajutor;
TextColor(WHITE);
TextBackground(BLUE);
gotoxy(2,2);
max:=index_sus+21;
if nr_cuv < max then
max:=nr_cuv;
for i:=index_sus to max do
begin
write(cuvinte[i].engleza);
for j:=1 to 24 – length(cuvinte[i].engleza) do
write(' ');
write('= ');
write(cuvinte[i].romana);
gotoxy(2,wherey+1);
end;
gotoxy(2,curent-index_sus+2);
end;
Procedura merge_pe_cuvant poziționează cursorul pe cuvântul din parametru.
procedure merge_pe_cuvant(cuv:traducere);
begin
curent:=1;
while((curent<nr_cuv)and
(cuvinte[curent].engleza<cuv.engleza)) do
begin
curent:=curent+1;
end;
if curent<index_sus then
index_sus:=curent;
if curent-index_sus>21 then
index_sus:=curent-21;
end;
Procedura cauta_cuvant caută un cuvânt în dicționar. Dacă găsește cuvântul în dicționar, poziționează cursorul pe acest cuvânt. Dacă cuvântul nu există în dicționar, poziționează cursorul pe cel mai apropiat cuvânt în alfabet.
procedure cauta_cuvant;
var tr:traducere;
begin
chenar(20,10,62,14,BROWN,YELLOW);
gotoxy(25,10);
write(' Introduceti cuvantul in engleza ');
fill(25,12,55,12, WHITE, BLACK);
tr.romana := '';
tr.engleza := '';
if citeste(25,12, 23, tr.engleza) then
begin
merge_pe_cuvant(tr);
end;
arata_cuvinte;
end;
Procedura sterge_curent șterge cuvântul pe care este poziționat cursorul. Înainte să steargă cuvântul, întreabă utilizatorul, dacă este sigur că dorește ștergera acelui cuvânt.
procedure sterge_curent;
var cuv:traducere;
ch:char;
begin
if nr_cuv >=1 then
begin
chenar(18,10,62,12,BROWN,YELLOW);
gotoxy(20,11);
write('Sunteti sigur ca doriti sa stergeti?(d/n)');
ch:=readkey;
if (ch = 'd') or ( ch = 'D') then
begin
cuv:=cuvinte[curent];
cuvinte[curent]:= cuvinte[nr_cuv];
nr_cuv := nr_cuv -1;
sorteaza_cuvinte(1);
merge_pe_cuvant(cuv);
end;
arata_cuvinte;
end;
end;
Funcția intreaba_cuvant este funcția care testează cunoștințele utilizatorului. Afișează un chenar cu titlul TEST. Citește răspunsul utilizatorului, și dacă acesta este corect, returnează valoarea 1, dacă nu, returnează valoarea 0.
function intreaba_cuvant(tr:traducere):integer;
var raspuns:cuvant;
begin
chenar(20,10,60,16,MAGENTA,WHITE);
gotoxy(35,10);
write(' T E S T ');
gotoxy(22,12);
write('Engleza:');
gotoxy(22,14);
write('Romana:');
fill(32,12,55,12, BROWN, WHITE);
fill(32,14,55,14, BROWN, WHITE);
gotoxy(32,14);
write(tr.romana);
gotoxy(32,12);
raspuns:='';
if not citeste(32,12, 23, raspuns) then
begin
intreaba_cuvant := 2;
exit;
end;
if (raspuns=tr.engleza) then
intreaba_cuvant := 1
else
intreaba_cuvant := 0;
end;
Procedura test merge în mod test. Invoacă funcția intreaba_cuvant pentru a întreba cuvintele de la utilizator. Dacă acesta returnează 1, atunci afișează că răspunsul a fost corect, iar dacă returnează 0, atunci afișează cuvântul corect. Pe fundal afișează diferite statistici.
procedure test;
var i:integer;
act:integer;
begin
for i:=1 to nr_cuv do
stie[i]:=false;
stiute:=0;
ratate:=0;
while (stiute<nr_cuv) do
begin
chenar(1, 1, 80, 24, BLUE, YELLOW);
gotoxy(2,2);
writeln('Numar de cuvinte in total: ',nr_cuv);
gotoxy(2,3);
writeln('Numar de cuvinte stiute: ',stiute);
gotoxy(2,4);
writeln('Procentaj stiute: ',
round(stiute/nr_cuv*100),' %');
gotoxy(2,5);
writeln('Cuvinte ratate: ',ratate);
gotoxy(2,6);
if ( stiute+ratate =0) then
writeln('Performanta: -')
else
writeln('Performanta: ',
round(stiute/(stiute+ratate)*100),' %');
meniu_test;
repeat
act := random(nr_cuv)+1;
until not stie[act];
case intreaba_cuvant(cuvinte[act]) of
0: {nu stie}
begin
gotoxy(22,13);
textbackground(MAGENTA);
textcolor(BLUE);
write('Corect : '+
cuvinte[act].engleza);
ratate:= ratate +1;
readkey;
end;
1: {stie}
begin
stie[act]:=true;
stiute:=stiute+1;
gotoxy(22,13);
textcolor(BLUE);
textbackground(MAGENTA);
write('Corect!');
readkey;
end;
2: {exit}
exit;
end;
end;
end;
Sursa programului
program dictionar;
uses crt;
type cuvant = string[30];
type traducere = record
engleza:cuvant;
romana:cuvant;
end;
var cuvinte:array[1..500] of traducere;
nr_cuv:integer;
index_sus:integer;
curent:integer;
procedure fill(x0, y0, x1, y1, cb, cc:integer);
var i,j:integer;
begin
TextBackground(cb);
TextColor(cc);
for i:=x0 to x1 do
for j:=y0 to y1 do
begin
gotoxy(i,j);
write(' ');
end;
end;
{Deseneaza un chenar de la pozitia (x0,y0) la pozitia
(x1,y1). Seteaza fundalul la culoarea cb, textul la cc.
}
procedure chenar(x0, y0, x1, y1, cb, cc:integer);
var i,j:integer;
cv:integer;
begin
cv:=TextAttr;
TextBackground(cb);
TextColor(cc);
gotoxy(x0,y0);
write('╔');
for i:=x0+1 to x1-1 do
write('═');
gotoxy(x1,y0);
write('╗');
for i:=y0+1 to y1-1 do
begin
gotoxy(x0,i);
write('║');
gotoxy(x1,i);
write('║');
end;
gotoxy(x0,y1);
write('╚');
for i:=x0+1 to x1-1 do
write('═');
gotoxy(x1,y1);
write('╝');
fill(x0+1,y0+1,x1-1,y1-1,cb,cc);
end;
function citeste(x,y,lung:integer; var cuv:cuvant):boolean;
var ch:char;
i:integer;
begin
gotoxy(x,y);
write(cuv);
ch:=readkey;
while (ch<>#13) and (ch<>#27) do
begin
if (ch >=' ') and (ch <> '=') then
begin
if (length(cuv) < lung ) then
cuv:= cuv + ch;
end
else
begin
if ch = #8 then
cuv:= copy (cuv,1,length(cuv)-1);
end;
gotoxy(x,y);
write(cuv);
for i:=1 to lung-length(cuv) do
write(' ');
gotoxy(x + length(cuv),y);
ch:=readkey;
end;
if ch = #13 then
citeste:= true
else
citeste:= false;
end;
function editeaza_cuvant(var cuv:traducere):boolean;
begin
chenar(20,10,60,16,GREEN,WHITE);
gotoxy(28,10);
write(' Introduceti cuvantul ');
gotoxy(22,12);
write('Engleza:');
gotoxy(22,14);
write('Romana:');
fill(32,12,55,12, BROWN, WHITE);
gotoxy(32,12);
write(cuv.engleza);
fill(32,14,55,14, BROWN, WHITE);
gotoxy(32,14);
write(cuv.romana);
gotoxy(32,12);
if not citeste(32,12, 23, cuv.engleza) then
begin
editeaza_cuvant := false;
exit;
end;
if not citeste(32,14, 23, cuv.romana) then
begin
editeaza_cuvant := false;
exit;
end;
editeaza_cuvant := true;
end;
function taie_spatiile(s:cuvant):cuvant;
var q:integer;
begin
q:=pos(' ', s);
while (q = 1) do
begin
s := copy(s, 2, length(s)-1);
q:=pos(' ', s);
end;
while ( s[length(s)]=' ' ) do
begin
s:= copy(s, 1, length(s)-1);
end;
taie_spatiile := s;
end;
procedure sorteaza_cuvinte(limba:integer);
var i,j:integer;
schimb:traducere;
begin
for i:=1 to nr_cuv do
for j:=i+1 to nr_cuv dbo
begin
if ((limba=1) and
(cuvinte[i].engleza>cuvinte[j].engleza)
or
(limba=2) and
(cuvinte[i].romana>cuvinte[j].romana)) then
begin
schimb:=cuvinte[i];
cuvinte[i]:=cuvinte[j];
cuvinte[j]:=schimb;
end;
end;
end;
procedure desparte(s:string; var t:traducere);
var q:integer;
begin
q:=pos('=',s);
t.engleza := copy(s, 1, q-1);
t.romana := copy(s, q+1, length(s));
t.engleza := taie_spatiile( t.engleza );
t.romana := taie_spatiile (t.romana);
end;
procedure citeste_fisier;
var f:Text;
s:string;
begin
nr_cuv:=0;
assign(f,'diction.txt');
{$I-}
reset(f);
{$I+}
if (ioresult <> 0) then
begin
rewrite(f);
end
else
while not eof(f) do
begin
readln(f,s);
nr_cuv := nr_cuv +1;
desparte(s, cuvinte[nr_cuv] );
end;
close(f);
sorteaza_cuvinte(1);
index_sus:=1;
curent:=1;
end;
procedure scrie_fisier;
var f:Text;
i:integer;
begin
assign(f,'diction.txt');
rewrite(f);
for i:=1 to nr_cuv do
begin
writeln(f, cuvinte[i].engleza+' = '+
cuvinte[i].romana);
end;
close(f);
end;
procedure meniu_ajutor;
var i:integer;
begin
gotoxy(1,25);
TextColor(BLACK);
TextBackground(WHITE);
for i:=1 to 79 do
write(' ');
TextColor(RED);
gotoxy(1,25);
write('↓ ');
TextColor(BLACK);
write('Jos');
TextColor(RED);
write(' ↑ ');
TextColor(BLACK);
write('Sus');
TextColor(RED);
write(' INS ');
TextColor(BLACK);
write('Adaugare');
TextColor(RED);
write(' S ');
TextColor(BLACK);
write('Cauta');
TextColor(RED);
write(' E ');
TextColor(BLACK);
write('Modifica');
TextColor(RED);
write(' DEL ');
TextColor(BLACK);
write('Sterge');
TextColor(RED);
write(' T ');
TextColor(BLACK);
write('Test');
TextColor(RED);
write(' ESC ');
TextColor(BLACK);
write('Iesire');
end;
procedure arata_cuvinte;
var i,j,max:integer;
begin
chenar(1, 1, 80, 24, BLUE, YELLOW);
meniu_ajutor;
TextColor(WHITE);
TextBackground(BLUE);
gotoxy(2,2);
max:=index_sus+21;
if nr_cuv < max then
max:=nr_cuv;
for i:=index_sus to max do
begin
write(cuvinte[i].engleza);
for j:=1 to 24 – length(cuvinte[i].engleza) do
write(' ');
write('= ');
write(cuvinte[i].romana);
gotoxy(2,wherey+1);
end;
gotoxy(2,curent-index_sus+2);
end;
procedure merge_pe_cuvant(cuv:traducere);
begin
curent:=1;
while ((curent<nr_cuv) and
(cuvinte[curent].engleza<cuv.engleza)) do
begin
curent:=curent+1;
end;
if curent<index_sus then
index_sus:=curent;
if curent-index_sus>21 then
index_sus:=curent-21;
end;
procedure cauta_cuvant;
var tr:traducere;
begin
chenar(20,10,62,14,BROWN,YELLOW);
gotoxy(25,10);
write(' Introduceti cuvantul in engleza ');
fill(25,12,55,12, WHITE, BLACK);
tr.romana := '';
tr.engleza := '';
if citeste(25,12, 23, tr.engleza) then
begin
merge_pe_cuvant(tr);
end;
arata_cuvinte;
end;
procedure sterge_curent;
var cuv:traducere;
ch:char;
begin
if nr_cuv >=1 then
begin
chenar(18,10,62,12,BROWN,YELLOW);
gotoxy(20,11);
write('Sunteti sigur ca doriti sa stergeti?(d/n)');
ch:=readkey;
if (ch = 'd') or ( ch = 'D') then
begin
cuv:=cuvinte[curent];
cuvinte[curent]:= cuvinte[nr_cuv];
nr_cuv := nr_cuv -1;
sorteaza_cuvinte(1);
merge_pe_cuvant(cuv);
end;
arata_cuvinte;
end;
end;
procedure meniu_test;
var i:integer;
begin
gotoxy(1,25);
TextColor(BLACK);
TextBackground(WHITE);
for i:=1 to 79 do
write(' ');
TextColor(RED);
gotoxy(1,25);
write('ESC ');
TextColor(BLACK);
write('Iesire din mod test');
end;
function intreaba_cuvant(tr:traducere):integer;
var raspuns:cuvant;
begin
chenar(20,10,60,16,MAGENTA,WHITE);
gotoxy(35,10);
write(' T E S T ');
gotoxy(22,12);
write('Engleza:');
gotoxy(22,14);
write('Romana:');
fill(32,12,55,12, BROWN, WHITE);
fill(32,14,55,14, BROWN, WHITE);
gotoxy(32,14);
write(tr.romana);
gotoxy(32,12);
raspuns:='';
if not citeste(32,12, 23, raspuns) then
begin
intreaba_cuvant := 2;
exit;
end;
if (raspuns=tr.engleza) then
intreaba_cuvant := 1
else
intreaba_cuvant := 0;
end;
var stie:array[1..500] of boolean;
stiute, ratate:integer;
procedure test;
var i:integer;
act:integer;
begin
for i:=1 to nr_cuv do
stie[i]:=false;
stiute:=0;
ratate:=0;
while (stiute<nr_cuv) do
begin
chenar(1, 1, 80, 24, BLUE, YELLOW);
gotoxy(2,2);
writeln('Numar de cuvinte in total: ',nr_cuv);
gotoxy(2,3);
writeln('Numar de cuvinte stiute: ',stiute);
gotoxy(2,4);
writeln('Procentaj stiute: ',
round(stiute/nr_cuv*100),' %');
gotoxy(2,5);
writeln('Cuvinte ratate: ',ratate);
gotoxy(2,6);
if ( stiute+ratate =0) then
writeln('Performanta: -')
else
writeln('Performanta: ',
round(stiute/(stiute+ratate)*100),' %');
meniu_test;
repeat
act := random(nr_cuv)+1;
until not stie[act];
case intreaba_cuvant(cuvinte[act]) of
0: {nu stie}
begin
gotoxy(22,13);
textbackground(MAGENTA);
textcolor(BLUE);
write('Corect : '+ cuvinte[act].engleza);
ratate:= ratate +1;
readkey;
end;
1: {stie}
begin
stie[act]:=true;
stiute:=stiute+1;
gotoxy(22,13);
textcolor(BLUE);
textbackground(MAGENTA);
write('Corect!');
readkey;
end;
2: {exit}
exit;
end;
end;
end;
procedure intro;
begin
chenar(20,7,60,19,BLUE,WHITE);
gotoxy(32,12);
write('D I C T I O N A R');
gotoxy(30,16);
write('Programator: Fodor Sarolta');
gotoxy(45,18);
write('Creat in 2006');
readkey;
end;
var cuv:traducere;
ch: char;
begin
clrscr;
randomize;
TextMode(CO80);
intro;
citeste_fisier;
arata_cuvinte;
ch := readkey;
while (ch <> #27) do
begin
case ch of
'e','E': {editeaza}
begin
cuv:=cuvinte[curent];
if (editeaza_cuvant(cuv)) then
begin
cuvinte[curent]:=cuv;
sorteaza_cuvinte(1);
merge_pe_cuvant(cuv);
end;
arata_cuvinte;
end;
'H': {sus}
begin
if (curent>1) then
curent:=curent-1;
if curent<index_sus then
begin
index_sus:=index_sus-1;
arata_cuvinte;
end;
end;
'P': {jos}
begin
if (curent<nr_cuv) then
curent:=curent+1;
if curent-index_sus>21 then
begin
index_sus:=index_sus+1;
arata_cuvinte;
end;
end;
'R':{insert}
begin
cuv.engleza:='';
cuv.romana:='';
if editeaza_cuvant(cuv) then
begin
nr_cuv:=nr_cuv+1;
cuvinte[nr_cuv]:=cuv;
sorteaza_cuvinte(1);
merge_pe_cuvant(cuv);
end;
arata_cuvinte;
end;
's':{cauta}
begin
cauta_cuvant;
end;
'S':{sterge}
begin
sterge_curent;
end;
't','T': {testeaza}
begin
test;
arata_cuvinte;
end;
end;
gotoxy(2,curent-index_sus+2);
ch := readkey;
end;
scrie_fisier;
end.
Bibliografie
PASCAL Programare, Dr. ing. Vasile Baltac, Cluj-Napoca 1989
Limbajul Pascal & Tehnici de Programare – Teorie si aplicatii, Eugen Popescu, 2002
Informatica pentru profilul real clasa a X-a, Mariana Milosescu
Informatica pentru gimnaziu, Cerchez Emanuela, 2002
Borland Pascal 7 help
Internet
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Program Dictionar (ID: 148827)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
