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

Similar Posts