next up previous contents
Next: Bibliografie Up: Probleme propuse spre rezolvare Previous: Setul 1   Cuprins


Setul 2



1. Sa se realizeze un program pentru rezervarea locurilor la o companie de zbor. Programul are urmatoarele comenzi:

ZBOR $<$numar zbor$> <$numar total locuri$>$
adauga în evidenta cursa $<$numar zbor$>$ în cazul în care aceasta nu exista deja.

ANULARE $<$numar zbor$>$
anuleaza cursa. Pasagerii (daca vor) îsi rezerva locuri la o alta cursa.

LOC $<$numar zbor$>$ $<$nume pasager$>$
Pasagerul $<$nume pasager$>$ îsi rezerva (daca mai exista loc) un loc pentru cursa $<$numar zbor$>$. Se permit pasageri cu acelasi nume.

RENUNT $<$numar zbor$>$ $<$nume pasager$>$
Pasagerul $<$nume pasager$>$ renunta la locul sau din cursa $<$numar zbor$>$.

PRINT $<$numar zbor$>$
Afiseaza în ordine alfabetica lista pasagerilor cursei $<$numar zbor$>$.

Daca s-a introdus o comanda eronata se afiseaza "eroare" si se asteapta o noua comanda.



2. Se considera o structura de date abstracta de tip arbore binar ordonat asupra careia sunt executate urmatoarele operatii: adaugare, cautare si suprimare. Nodurile sunt ordonate functie de valoarea unui câmp cheie. Fiecarui nod îi este atasat un contor de acces la nodul respectiv. La anumite intervale de timp, structura se reorganizeaza într-o noua structura de arbore binar ordonat, în care ordinea de creare a nodurilor este corespunzatoare valorilor descrescatoare ale contoarelor de acces. Se cere:

a. Sa se precizeze structurile de date aferente structurii de arbore.

b. Sa se defineasca rutinele care gestioneaza structura de date arbore (adauga, cauta, suprima ).

c. Sa se defineasca rutina pentru reorganizarea arborelui.



3. Sa se realizeze un program pentru corectarea erorilor de ortografie dintr-un text. Cuvintele textului sunt introduse de la tastatura. Fiecare cuvânt este prelucrat astfel:

a. Daca figureaza în dictionar el este copiat în fisierul de iesire.

b. Daca nu figureaza în dictionar, atunci cuvântul este afisat la terminal si se cere utilizatorului una din urmatoarele optiuni:
- Daca cuvântul este corect, atunci el trebuie adaugat în dictionar si în fisierul de iesire.
- Daca cuvântul este incorect, atunci se introduce o noua forma corecta a cuvântului care se adauga la fisierul de iesire.
- Daca cuvântul este incorect, atunci se introduce o noua forma corecta a cuvântului care se adauga la fisierul de iesire si în plus forma incorecta este retinuta, urmând ori de câte ori este întâlnita, sa fie înlocuita automat cu forma corecta.



4. Un polinom P(x) se reprezinta ca o succesiune de tupleti (coeficient, putere), ambii întregi. Sa se realizeze un program care executa înmultiri si adunari între polinoame. Polinoamele se introduc sub forma unei succesiuni de numere întregi. Primul indica numarul termenilor, iar urmatoarele N perechi de numere reprezinta fiecare câte un tuplet. Un polinom este urmat de + sau * , functie de operatia dorita. Dupa calcularea si afisarea rezultatului se citeste o valoare reala x, pentru care se evalueaza derivata polinomului.

Observatie: La intrare, polinoamele se dau cu termenii în ordinea oarecare a puterii si pot aparea mai multi termeni pentru aceeasi putere a lui x.



5. Sa se realizeze un program care raspunde la urmatoarele comenzi:

i - Citeste o linie cu urmatoarea structura:

identificator numar

numar este de forma: secventa_de_cifre sau secventa_de_cifre.secventa_de_cifre Ca raspuns la comanda, identificatorul este introdus în evidenta împreuna cu valoarea asociata lui. Daca identificatorul apare în evidenta, se tipareste un mesaj de eroare si comanda este încheiata.

t - Tipareste în ordine alfabetica identificatorii din evidenta.

s - Preia din intrare un identificator. Daca el exista în evidenta el este sters, în caz contrar se tipareste un mesaj de eroare.

m - Preia din intrare o linie de forma:

identificator numar

Daca identificatorul apare în evidenta, valoarea lui este actualizata la noua valoare, în caz contrar, el este luat în evidenta.

v - Tipareste identificatorii în ordinea inversa a valorii asociate lor.

e - Citeste din intrare o expresie în notatie postfix. Operanzii pot fi identificatori sau numere având forma precizata, iar operatorii sunt $+ - * /$. Valoarea asociata identificatorilor este extrasa din evidenta. Daca în expresie apare un identificator neluat în evidenta, se tipareste un mesaj de eroare si se abandoneaza evaluarea expresiei. Se va calcula expresia, iar valoarea obtinuta se afiseaza.

f - Termina programul.



6. Sa se realizeze un program pentru o tabela de referinte încrucisate dupa cum urmeaza: citeste un text oarecare, ce se încheie cu EOF. Dupa receptionarea sfârsitului de text se tipareste, în ordine alfabetica, lista identificatorilor întâlniti si, pentru fiecare identificator, numerele liniilor în care apare.

Observatie: Tabela identificatorilor este organizata sub forma unei liste. Dupa fiecare 5 operatii în lista, aceasta se va reorganiza în ordinea descrescatoare a numarului de referiri ale nodurilor.



7. Sa se realizeze urmatorul program: Se citeste un text oarecare, care se încheie cu caracterul `.`. În continuare, programul raspunde la un numar de comenzi dupa cum urmeaza:

t - Tipareste în ordine alfabetica identificatorii din evidenta si pentru fiecare numarul de aparitii.

l - Tipareste, în ordinea lungimii identificatorilor, identificatorii din evidenta si pentru fiecare numarul de aparitii.

s - Citeste o valoare n întreaga. Elimina din evidenta toti identificatorii care contin n vocale.

a - Tipareste identificatorii din evidenta în ordinea descrescatoare a numarului de vocale continut.

v - Se citeste o vocala c si un numar întreg n. Se cere sa se tipareasca, în ordinea lungimii identificatorilor, acei identificatori care contin vocala c cel putin de n ori.



8. Sa se scrie un program care realizeaza urmatoarele: citeste un prim text care se încheie cu caracterul `.` si memoreaza identificatorii prezenti în acel text. În cazul în care un identificator apare de mai multe ori în acest prim text, el se retine o singura data. În continuare, se citeste un al doilea text care se încheie cu EOF. Se cere sa se tipareasca lista identificatorilor prezenti în primul text si pentru fiecare identificator sa se mentioneze liniile din cel de-al doilea text în care este prezent. Lista este tiparita în ordine alfabetica.



9. Se citeste un text format din linii de forma:

nume; loc_de_munca; adresa;

Textul se încheie cu EOF. Dupa citirea textului se cere sa se tipareasca în ordine alfabetica:

a. Lista nominala de forma: nume adresa loc_de_munca

b. Lista locurilor de munca în forma: loc_de_munca numar_angajati



10. Se citeste o succesiune de linii care se încheie cu caracterul `.`. Aceste linii au ca prim caracter fie #, fie * si în rest contin un text oarecare. Se vor construi trei evidente separate continând: identificatorii prezenti exclusiv în linii care încep cu #, cei prezenti exclusiv în linii care încep cu *, si cei prezenti în linii ce încep cu #, cât si în linii ce încep cu *. Fiecare identificator apare o singura data în evidenta. În continuare se citeste un text oarecare, format din mai multe linii, care se încheie de asemenea cu caracterul `.`. Se cere sa se tipareasca separat, în ordine alfabetica, cele trei evidente, si, pentru fiecare identificator, sa se specifice de câte ori apare în textul citit. Apoi se citeste un al doilea text care se încheie cu EOF. Se cere sa se tipareasca o lista unica cuprinzând toti identificatorii din cele trei liste, si, pentru fiecare identificator, sa se specifice de câte ori apare în ultimul text citit. Lista se va tipari în ordinea numarului de aparitii.



11. Se citesc dintr-un fisier datele corespunzatoare rezultatelor obtinute de candidatii la examenul de admitere. Datele se introduc ca o succesiune de linii de forma:

nume; sectie; medie

Succesiunea de linii se încheie cu EOF. Sectia este: "calculatoare" sau "automatica", iar media este un numar real. Daca dupa citirea liniei se constata ca sectia nu s-a dat corect, se cere rectificarea pâna când operatorul raspunde cu una din cele doua variante acceptate. Daca dupa citirea liniei se constata ca numele este deja prezent în evidenta, se actualizeaza vechea înregistrare conform noilor informatii. Dupa încheierea citirii se vor tipari:

a. Lista candidatilor admisi, în ordinea mediilor în forma:

nume sectia medie

Se stie ca numarul de locuri este 40 la calculatoare si 40 la automatica. Sunt admisi primii 80 de candidati în ordinea mediilor, indiferent de sectia pentru care au optat. Repartizarea pe sectii se face în limita locurilor, în functie de optiunea candidatului, cu prioritate pentru cei cu medie mai mare.

b. Lista candidatilor respinsi în ordine alfabetica, sub forma:

nume medie



12. Se citeste o secventa de linii de forma:

obiect atribut1 atribut2 ...

prin care se asociaza unui obiect o secventa de atribute. Acelasi obiect poate aparea pe mai multe linii. Acelasi atribut poate aparea de mai multe ori pe liniile ce caracterizeaza acelasi obiect. Atributul multiplu este retinut o singura data. Secventa de linii se încheie cu caracterul `.`. Se va scrie un program care raspunde interactiv la urmatoarele comenzi:

a - Citeste un atribut si afiseaza în ordine alfabetica toate obiectele care au acel atribut.

s - Citeste un atribut si îl elimina pentru toate obiectele din evidenta. Daca un obiect nu mai are nici un atribut, el este eliminat din evidenta.

l - Citeste o linie care contine doar atribute. Se afiseaza toate obiectele care contin atributele de pe linie. Listarea obiectelor se face astfel: întâi obiectele care contin doar atributele din secventa, apoi pe cele care au un atribut suplimentar, apoi cele care au doua atribute suplimentare, etc.

b - Afiseaza în ordine alfabetica toate atributele si, pentru fiecare, numarul obiectelor care contin acel atribut.

p - Citeste o linie ce contine doar atribute. Se elimina din evidenta obiectele ce contin atributele specificate.

e - Termina programul.



13. Se citeste un fisier care contine linii de forma:

nume prenume materia1 nota1 materia2 nota2 ...

Secventa de linii se încheie cu o linie vida. Fiecare linie contine numele, prenumele, materiile si notele obtinute de studentii unui an de studiu. Daca un student nu s-a prezentat la un examen, linia corespunzatoare va contine doar numele materiei fara a aparea si nota. De exemplu:

Mihailescu Ion proiectare 5 compilatoare algoritmi 6.

În continuare, programul raspunde interactiv la urmatoarele comenzi:

afiseaza_top - Afiseaza lista ordonata functie de medie, a studentilor care au promovat toate examenele. Studentii restantieri sunt afisati într-o lista separata, ordonata functie de nume, pentru fiecare student indicându-se numarul restantelor.

restante - Calculatorul afiseaza prompterul $>$ asteptând introducerea unui nume de materie. Dupa ce s-a citit numele materiei sunt afisati, ordonat alfabetic, toti studentii care au acea materie restanta. În continuare, este afisat prompterul $>$ si se asteapta introducerea unei noi materii. Comanda se încheie atunci când se tasteaza o linie vida.

modifica - Citeste numele si prenumele unui student. Apoi calculatorul afiseaza prompterul $>$ si asteapta introducerea unei materii si a notei. Pentru materia specificata se modifica nota studentului. Prompterul $>$ este afisat pâna la introducerea unei linii vide.

elimina - Citeste un numar. Din evidenta sunt eliminati toti studentii cu un numar de restante mai mare sau egal cu numarul din comanda.

terminare - Termina programul.



14. Se citeste o secventa de linii de forma:

id = cuvant1, cuvant2, ...

prin care unui cuvânt i se asociaza o lista de sinonime. Exista posibilitatea ca un identificator sa apara de mai multe ori în partea stânga a semnului $=$, caz în care noua lista a sinonimelor se adauga la cea veche. Secventa de linii se încheie cu caracterul `.`. În continuare, programul raspunde repetat la urmatoarele comenzi:

c - Citeste un cuvânt si afiseaza ordonat alfabetic lista sinonimelor atasate lui.

v - Afiseaza ordonat functie de numarul de consoane toti identificatorii din evidenta (cei care apar în stânga semnului $=$).

s - Citeste un cuvânt si elimina din evidenta acel cuvânt împreuna cu lista atasata de sinonime.

x - Se citeste un cuvânt si se cere afisarea tuturor cuvintelor cu care el este sinonim.

e - Termina programul.



15. Se citesc linii cu urmatoarele forme:

(1) numar: expresie în forma poloneza

(2) delete: numar

(3) afis: numar

(4) evalueaza: numar

(5) identificator: numar

Pentru o linie cu forma (1) se construieste o lista înlantuita, cu un nod pentru fiecare element (operand sau operator) astfel: pentru un operator se construieste un nod nou, iar pentru un operand se verifica daca a aparut într-o expresie anterioara. În caz afirmativ, se considera nodul deja existent, iar în caz negativ se construieste un nod nou.

Pentru o linie de forma (2), se sterge expresia cu numarul numar. Se sterg nodurile corespunzatoare operatorilor, precum si referintele spre nodurile operanzilor. Daca spre un operand nu mai indica nici o referinta atunci se sterge si nodul.

Linia (3) afiseaza expresia cu numarul numar.

Linia (4) evalueaza expresia cu numarul numar, iar linia (5) asociaza unui identificator o valoare.



16. Sa se realizeze un program pentru traducerea unui text dintr-o limba în alta. În plus, programul are facilitatea de a înlocui un cuvânt printr-un sinonim. Programul citeste dintr-un fisier linii de forma:

cuvânt, echivalent strain, sinonim, sinonim, ...

Secventa de linii se încheie cu caracterul `.`. În continuare, se citeste un text care se încheie tot cu caracterul `.`. Textul este parcurs cuvânt cu cuvânt si pentru fiecare cuvânt se afiseaza lista sinonimelor sale. Utilizatorul poate selecta sinonimul dorit, care este înlocuit automat în textul initial. Textul astfel obtinut este tradus automat. Daca nu exista un echivalent strain pentru un cuvânt atunci se afiseaza un mesaj de eroare la care utilizatorul raspunde cu:

A - cuvânt strain, daca cuvântul necunoscut este corect.

C - cuvânt corect, daca cuvântul necunoscut este incorect.

Textul tradus este afisat.



17. Dintr-un fisier se citesc linii având forma:

identificator identificator numar identificator numar ...

Secventa de linii se încheie cu o linie vida. Fiecare linie introduce o unitate de masura noua, precum si subunitatile ei si relatiile de conversie între acestea si unitatea de baza. Numerele au forma: secventa_de_cifre.secventa_de_cifre. Exemplu de linie:

m cm 0.01 mm 0.001.

Aceeasi unitate de masura poate fi definita prin mai multe linii, dar toate unitatile si subunitatile se retin o singura data. Dupa citirea liniilor, programul raspunde interactiv la urmatoarele comenzi:

(1) identificator $<=$ numar unitate_de_masura
comanda asociaza unui identificator o valoare si o unitate de masura. În cazul în care identificatorul are deja o valoare asociata si daca unitatile apartin aceleiasi unitati de baza, dupa ce s-a dat un mesaj de atentionare, se retine pentru identificator ultima valoare citita. În caz contrar, se da un mesaj de eroare si comanda se încheie.

(2) identificator conversie unitate_de_masura
converteste valoarea asociata identificatorului în unitatea specificata.

(3) identificator tiparire pi pf
pi si pf sunt doua numere întregi. Afiseaza valoarea asociata identificatorului cu pi cifre la partea întreaga si pf cifre pentru partea zecimala. De exemplu, daca a este 1305 cm, comanda:
a tiparire 1 2
va afisa: a = 1.30 E3 cm.

(4) stergere valoare unitate_de_masura
Sterge din evidenta toti identificatorii care au o valoare mai mica decât cea din linia de comanda, iar unitatile apartin aceleiasi unitati de baza.

(5) afisare
Afiseaza identificatorii din evidenta în urmatoarea forma:
unitate_de_baza : unitati de masura apartinând unitatii de baza
Identificatorii sunt afisati ordonat alfabetic.



18. Sa se scrie un program care rezolva urmatoarea problema. Se citesc dintr-un fisier linii de forma:
identificator = numar
unde numar are o parte întreaga, care este eventual urmata de o parte zecimala. Partea întreaga si cea zecimala sunt secvente de cifre care sunt separate prin punct. Secventa de linii se încheie cu caracterul `.`. Fiecare identificator este retinut într-o evidenta împreuna cu valoarea asociata lui. Daca identificatorul apare deja în evidenta, de fiecare data se retine si noua lui valoare. În continuare, programul raspunde interactiv la urmatoarele comenzi:

s numar - unde numar are forma prezentata anterior. Se elimina din evidenta toti identificatorii care au asociata valoarea din comanda.

talf - afiseaza în ordine alfabetica toti identificatorii si pentru fiecare identificator valorile asociate lui.

c identificator - cauta identificatorul si, daca îl gaseste, afiseaza toate valorile atasate lui.

tval - afiseaza, în ordinea valorii, identificatorii care au valoarea respectiva.

e - termina programul.



19. Se citeste o secventa de reguli (o regula pe linie) cu forma:
identificator = identificator; identificator; ...
Secventa de linii se încheie cu carcaterul `.`. Prin aceste reguli se asociaza fiecarui identificator din stânga semnului = o secventa de identificatori. Un identificator poate fi definit prin mai multe reguli. Regulile sunt memorate într-o evidenta. În continuare programul raspunde interactiv la urmatoarele comenzi:

a - Afiseaza ordonat, functie de identificatorul care apare în stânga lui =, toti identificatorii si secventele asociate lor.

c - Citeste un cuvânt. Pentru acest cuvânt se afiseaza toti identificatorii atasati. În cazul în care nu exista identificatori atasati, programul afiseaza un mesaj de eroare corespunzator.

s - Citeste un cuvânt, dupa care se sterg din evidenta toate regulile pentru care cuvântul citit apare în partea stânga a semnului =.

f - Citeste un cuvânt. Pentru cuvântul citit, pe baza regulilor atasate, se formeaza un grup astfel: doua reguli apartin grupului daca partea din dreapta semnului = începe cu cel putin un identificator comun. Acest grup este afisat împreuna cu partea comuna.

e - Termina programul.



20. Sa se scrie un program care implementeaza diferite operatiuni bancare. Programul citeste de la tastatura numele clientului (un singur cuvânt, doar litere mici) si o parola (parola trebuie "ascunsa" la citire). Parola este criptata (algoritmul de criptare aplica un XOR între fiecare caracter al parolei si o cheie de criptare, cheia reprezentând un numar întreg pe 8 biti (tipul char) care reprezinta media codurilor ASCII ale literelor numelui) si este confruntata cu parola criptata aflata în fisierul "passwd.txt" sub forma:
nume_client_1 parola_criptata_1
nume_client_2 parola_criptata_2
......

Daca parola e corecta, se afiseaza un prompt (: sau $>$) si se asteapta una din comenzile:

restituire suma - se restituie suma specificata (daca soldul acopera suma ceruta);

depunere suma - depunere suma în cont;

sold - afisare sold.

Informatiile bancare sunt memorate într-un fisier de conturi; la încheierea fiecarei operatii, se actualizeaza fisierul de conturi.


next up previous contents
Next: Bibliografie Up: Probleme propuse spre rezolvare Previous: Setul 1   Cuprins
Cristian Gavrila 2001-10-02