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.
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.