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


Setul 1



1. Sa se realizeze un editor de texte. Textul initial este încarcat dintr-un fisier, iar textul modificat este salvat într-un fisier nou. Editarea se face prin urmatoarele comenzi:

I, m - insereaza o linie dupa linia m;

D, m, n - sterge liniile între liniile m si n;

R, m, n - înlocuieste liniile între m si n cu linii noi;

E - termina procesul de editare.



2. Sa se genereze toate posibilitatile de planificare a unui turneu la care participa n concurenti, stiind ca doi concurenti se întâlnesc o singura data si un concurent disputa un singur joc pe zi.



3. Pentru elaborarea unui test de aptitudini se dispune de un set de n întrebari. Fiecare întrebare este cotata cu un numar de puncte. Sa se elaboreze toate chestionarele posibile care au un numar de întrebari cuprins între a si b (a si b se citesc de la tastatura), astfel încât numarul total de puncte pe chestionar sa fie cuprins între p si q (p si q se citesc de la tastatura).



4. Într-un grup de persoane, fiecare persoana cunoaste eventual alte persoane din grup. Sa se formeze toate echipele posibile, astfel încât pentru o echipa, fiecare persoana este cunoscuta de cel putin un membru al acelei echipe.



5. Se da un grup de orase si conexiunile între ele. Sa se gaseasca toate drumurile care trec prin toate orasele parcurgându-le o singura data.



6. Pozitiile oraselor unei tari sunt date prin coordonatele lor carteziene. Sa se gaseasca configuratia retelei telefonice care îndeplineste conditiile:

- orice oras este conectat la reteaua telefonica;

- costul retelei (proportional cu lungimea liniilor telefonice) este minim.



7. O harta cuprinde n tari. Sa se gaseasca numarul minim de culori cu care pot fi colorate tarile, astfel încât doua tari vecine sa nu fie colorate cu aceeasi culoare.



8. Se considera o cale ferata de forma celei din Figura 11.1. Pe linia de intrare se afla n vagoane numerotate de la 1 la n. Notam cu I operatia de introducere a vagoanelor de pe prima pozitie pe linia de intrare în stiva, si cu S cea de extragere din vârful stivei catre iesire. Alte operatii nu sunt permise.

Figura 11.1:
\begin{figure}\begin{center}
\epsfig{file=stiva.eps, height=6cm}\end{center}\end{figure}

Pentru un anumit numar de vagoane dat, programul va realiza urmatoarele:

a) Dându-se la intrare o secventa de forma : ISSI... sa se raspunda daca secventa respectiva de operatii poate fi executata.

b) Dându-se o permutare oarecare a numerelor 1...n, sa se spuna daca ea poate fi obtinuta pe linia de iesire, pornind de la n vagoane aflate în ordine pe linia de intrare. În caz afirmativ, sa se dea succesiunea de operatii I si S care duce la configuratia respectiva.

c) Sa se tipareasca toate secventele de vagoane, care pot fi obtinute pe linia de iesire, pentru n dat initial.



9. Problema "Descendentilor dupa parinte":

Petre stie ca este fiul lui Ion si mai stie ca este frate cu Virgil si Matei. Copiii lui Petre sunt Ilie si Marcu, iar ai lui Virgil sunt: Ionel si Petrica. Filip stie ca este fiul lui Matei si frate cu Ioana. Sabin este fiul lui Ionel.

Ion doreste sa stie numele tuturor nepotilor sai.

Filip vrea sa stie daca pe bunicul lui îl cheama Ilie.

Ionel vrea sa stie daca este var cu Alexandru.

Sa se scrie programul, care pe baza unor informatii de acest tip, este în masura sa raspunda la urmatoarele genuri de întrebari:

1) Care sunt nepotii bunicului "nume"?

2) "nume1" este bunicul lui "nume2"?

3) "nume1" este var primar cu "nume2"?

Se va verifica daca datele de intrare sunt consistente. Se considera ca doua persoane sunt diferite daca au nume diferite.

Datele de intrare se citesc dintr-un fisier cu numele REGULI.DAT, având câte o regula pe fiecare linie. Regulile sunt de forma: "nume1"=FIU("nume2") sau "nume1"=FRATE("nume2") unde "nume1" si "nume2" sunt siruri de maxim 20 de litere (literele mici si cele mari se considera identice). Este permisa folosirea unor separatori de forma spatiu si tab. Detectarea caracterului $ la începutul unei linii reprezinta sfârsitul sirului de reguli. Dupa ce s-au citit toate regulile, de pe liniile urmatoare se citesc tipul întrebarii (1, 2 sau 3) si informatiile aferente acestuia, separate prin virgula. Fiecare întrebare se citeste de pe o linie.

Datele de iesire se vor scrie sub forma: "nume1"=BUNIC("nume2",...,"numep") pentru primul tip de întrebare, sau ESTE, NU ESTE sau EROARE pentru celalalte doua tipuri de întrebari. Raspunsurile sunt scrise pe linii distincte.



10. Un dictionar este scris într-un alfabet pentru care nu se stie daca exista sau nu o ordine între litere. Sa se stabileasca pe baza ordinii în care apar cuvintele în dictionar, daca exista sau nu ordine între literele alfabetului.



11. Un dreptunghi D, cu laturile paralele cu axele de coordonate este precizat prin coordonatele (întregi) a doua vârfuri opuse. Sa se scrie un program care calculeaza si afiseaza aria si perimetrul conturului reuniunii D1 U D2 U ...de dreptunghiuri. Datele de test se citesc dintr-un fisier text, ce contine pe linii coordonatele vârfurilor unui dreptunghi în ordinea x1, y1, x2, y2.



12. Un numar de 2n + 1 persoane participa la discutii ce dureaza K zile. Sa se gaseasca toate variantele de asezare a persoanelor la masa de discutii, astfel încât o persoana sa nu aiba în 2 zile diferite aceiasi vecini.



13. Sa se scrie un program care citeste de la tastatura în mod repetat expresii cu doi operanzi întregi si un operator (+, -, *, /). Operanzii sunt exprimati în cifre romane, iar numerele negative sunt precedate de caracterul minus. Programul afiseaza rezultatele exprimate tot în cifre romane.



14. Se da o expresie în notatie poloneza, care contine operatorii $+, -, *, /, <, <=, >, >=, =, <>$, AND si OR. Sa se verifice daca expresia furnizata este corecta:

a) Fiecarui operator sa-i corespunda doi operanzi.

b) Sa nu existe operanzi carora sa nu le corespunda operatori.

c) Sa fie respectate urmatoarele restrictii legate de tip:

Pentru $+, -, *, /$ ambii operanzi trebuie sa fie numere. Rezultatul este tot un numar.

Pentru $<, <=, >, >=, =, <>$ operanzii sunt numere, iar rezultatul este boolean.

Pentru AND si OR operanzii sunt de tipul boolean, iar rezultatul este tot boolean.



15. Se da în plan un poligon oarecare P cu vârfurile P1, P2, P3, P4, ...Pn ale caror coordonate (numere întregi) sunt citite dintr-un fisier. Sa se determine daca un punct dat A(p,q) este în interiorul, pe laturile, sau în exteriorul poligonului P.



16. Se da o succesiune de mase, fiecare sub forma a doua numere întregi, ce reprezinta numarul de kilograme, respectiv de grame. Sa se tipareasca masele în cifre si cuvinte ca în exemplul de mai jos:
871 25 opt sute saptezeci si unu kilograme si douazeci si cinci grame
0 0 nimic
0 35 treizeci si cinci grame
113 0 o suta treisprezece kilograme



17. Studentii unui an pot alege 10 cursuri facultative: muzica, literatura, pictura, sanscrita, arheologie, canto, poetica, gastronomie, albaneza si puericultura. Optiunile fiecarui student se citesc de pe o linie cu urmatoarea structura: numele studentului (ca o succesiune de caractere care se încheie cu un punct) si în continuare, pe zece pozitii, sunt spatii sau X. Fiecare pozitie se asociaza unui curs, în ordinea enumerarii de mai sus, iar X pe pozitia respectiva înseamna ca studentul a ales cursul respectiv. Un student poate alege oricâte cursuri. De exemplu:

Dumitrescu Dumitru. X  XX

Studentul Dumitrescu Dumitru a ales pictura, canto si poetica. La începutul dialogului se afla numarul studentilor, care nu depaseste 100. Sa se tiparesca, pentru fiecare curs, lista studentilor înscrisi. Cursurile vor aparea în ordinea descrescatoare a numarului de studenti înscrisi, iar listele de studenti sunt afisate în ordine alfabetica.



18. Dintr-o bara de lungime L se taie m repere de lungime l1, l2, ..., lm. Sa se gaseasca toate variantele de debitare a barei astfel încât pierderile de material sa fie minime. Se impune ca printr-o debitare sa se obtina cel putin câte un exemplar din fiecare reper. Valorile lui L si l1, l2, ..., lm sunt întregi si sunt citite de la tastatura.



19. Un nume de fisier poate contine si caracterele ? si *. Sa se scrie un program care citeste o descriere pentru numele de fisiere si listeaza toate fisierele care corespund descrierii. Daca astfel de fisiere nu exista atunci se afiseaza numele cele mai apropiate de descrierea citita. Apropierea (distanta) între doua nume de fisiere este stabilita de numarul minim de operatii de stergere/ inserare/ înlocuire de caractere, necesare pentru a transforma primul cuvânt în al doilea.
Exemplu:
Pentru numele de fisiere:
DIST.BAK
DIST.EXE
DIST.PAS
RANDUL.1
RANDUL.2
RANDUL.3
C
FLORINLL
PAS
PLANIFIC

si descrierea *L*I*.*?* se va afisa (între paranteze este specificata distanta):
DIST.BAK (1)
DIST.EXE (1)
DIST.PAS (1)
RANDUL.1 (1)
RANDUL.2 (1)
RANDUL.3 (1)
FLORINLL (1)
PLANIFIC (1)



20. Un automat finit consta dintr-o multime de stari (care sunt numere întregi în intervalul 1...n) si o matrice de tranzitie. Matricea de tranzitie precizeaza, pentru fiecare stare si fiecare caracter de intrare, starea urmatoare. Presupunem ca intrarile pot lua doua valori 0 sau 1. Anumite stari sunt stari finale. Presupunem ca în cazul nostru, starile finale sunt cele al caror numar este divizibil cu 7. Doua stari x si y sunt echivalente daca ele sunt identice sau daca îndeplinesc simultan conditiile:

(1) Ambele sunt finale sau nefinale.

(2) Pentru o intrare 0, ambele trec în stari echivalente.

(3) Pentru o intrare 1, ambele trec în stari echivalente.

Programul calculeaza multimea starilor echivalente, pentru un automat finit dat.


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