Sunteți pe pagina 1din 4

1.

Funcții recursive
a. Prelucrarea cifrelor unui număr (suma cifrelor, numărul de cifre, cifre care îndeplinesc o
anumită condiție etc).
b. Divizori. Numere prime. Descompunerea în factori primi (abordări recursive). Cmmdc.
c. Parcurgerea recursivă a unui interval.
d. Funcții recursive pentru prelucrarea tablourilor unidimensionale.
e. Funcții recursive pentru prelucrarea tablourilor bidimensionale.
f. Funcții recursive pentru prelucrarea șirurilor de caractere.

1. Să se scrie o funcţie recursivă care primeşte 3 parametri: NR - număr natural, c1,c2 cifre şi
returnează numărul obţinut din NR prin înlocuirea tuturor apariţiilor cifrei c1 cu c2.
Ex. din NR=2324, c1=2 şi c2=5 returnează 5354. Să se utilizeze funcţia pentru a modifica cele n
elemente (numere naturale) ale unui tablou unidimensional. Datele de intrare se citesc din fişierul text
Zece.D iar elementele tabloului obţinute după modificare se vor afişa în fişierul Modif.D .
2. Să se scrie o funcţie recursivă care primeşte un parametru n număr natural şi returnează numărul
obţinut din n prin scăderea cu 1 a cifrelor impare şi mărirea cu 1 a celor pare.
Ex. din n=2324 returnează 3235. Folosiţi funcţia pentru a modifica valorile citite din fişierul text
modif.in. Afişaţi valorile modificate în fişierul text modif.out.
3. Să se scrie o funcţie recursivă care primeşte un parametru n număr natural şi returnează numărul
obţinut din n prin eliminarea cifrelor pare.
Ex. din n=23524 returnează 35. Folosiţi funcţia pentru a modifica valorile citite din fişierul text
modif.in. Afişaţi valorile modificate în fişierul text modif.out.
4. Din fişierul text cuvinte.in se citeşte un text format din litere mici şi spaţii. Două cuvinte sunt
separate prin unul sau mai multe spaţii. Să se scrie o funcţie recursivă cu 2 parametri şiruri de
caractere care să determine dacă acestea sunt anagrame (sunt compuse din aceleasi litere, în altă
ordine). Folosiţi funcţia pentru a afişa perechile de anagrame, cîte o pereche pe o linie. Datele de
ieşire se vor afişa în fişierul cuvinte.out.
5. Să se scrie o funcţie recursivă care calculeaza şi returnează suma cifrelor unui număr natural primit
ca parametru. Folosiţi funcţia pentru a ordona crescător valorile citite din fişierul text f.in după
criteriul suma cifrelor. Afişaţi valorile ordonate în fişierul text f.out.
6. Să se scrie o funcţie recursivă care primeşte ca parametru un caracter C, literă mare a alfabetului
englez şi afişează în ordine toate literele mari care urmează în alfabet, literei C. Apelaţi funcţia
creată pentru a modifica un text citit din fişierul f.in, astfel încât fiecare literă mare să fie înlocuită în
text cu toate literele mari din alfabet care se succed literei date.
Ex:
Textul acesta are 3 Randuri
va fi modificat :
UVWXZextul acesta are 3 STUVWXZanduri
7. Să se afişeze descompunerea în factori primi a n numere naturale nenule citite din fişierul text f.in.
Scrieţi o funcţie recursivă care să afişeze descompunerea în factori primi a unui număr natural.
8. Să se scrie o funcţie recursivă F care primeşte ca parametru un şir de caractere format din cel mult
100 de caractere litere mici şi elimină toate vocalele din şir. Prin apeluri utile ale funcţiei F , eliminaţi
toate vocalele dintr-un un text citit de la tastatură.
9. Se citeşte un vector a cu n elemente numere naturale. Să se calculeze elementul maxim din vector. Se
va folosi o funcţie recursivă pentru citire şi una recursivă pentru determinarea elementului maxim.
10. Să se calculeze CMMDC al doua numele naturale folosind o funcţie recursivă. Prin apeluri utile ale
acestei funcţii, determinaţi cel mai mare divizor comun al celor n numere naturale nenule citite de la
tastatură.
11. Screţi o funcţie recursivă care să determine cifra maximă a unui număr natural. Folosind apeluri
utile ale acestei funcţii afişaţi cel mai mic număr natural care se poate forma cu cifrele maxime a n
numere naturale citite din fişierul text REC.in.
12. Să se calculeze recursiv de câte ori apare o valoare întreagă x într-un vector a cu n elemente întregi.

1
13. Să se scrie o funcţie recursivă care numără câte vocale mici are un cuvânt transmis ca parametru.
Prin apeluri utile ale funcţiei afişaţi numărul de vocale, litere mici, ale unui text citit de la tastatură.
14. Se citeşte un vector cu n elemente numere naturale. Afişaţi elementele care sunt numere factoriale.
Se vor folosi funcţii recursive pentru toate prelucrarile necesare.
Ex: 6
1 3 7 6 24 100
se vor afişa numerele 1 6 24.
15. Se citeşte un vector a cu n elemente numere întregi. Construiti un vector b care să conţină elementele
distincte din vectorul a. Toate prelucrările vor fi realizate folosind funcţii recursive.
16. Se dau n bombe, numerotate de la 1 la n, pentru fiecare cunoscându-se coordonatele (x,y) unde sunt
plasate şi raza de distrugere r. La explozia unei bombe se va distruge totul în interiorul şi pe cercul de
centru (x,y) şi raza r, iar dacă exista alte bombe în aceasta zonă, acestea vor exploda la rândul lor. Se
dă indicele k al primei bombe care explodează şi se cere să se calculeze câte bombe rămân
neexplodate.
Datele se citesc din fişierul bombe.in şi rezultatele se vor afişa în fişierul bombe.out.
In fişierul bombe.in pe prima linie se afla numerele n şi k, iar pe urmatoarele n linii coordonatele şi
razele de distrugere ale celor n bombe. n şi k sunt numere naturale, coordonatele numere întregi, iar
razele numere naturale.
Exemplu:
bombe.in
85
454
-3 -4 1
411
213
222
112
-1 1 2
-3 3 3
bombe.out
3
Explicaţie: Prima explodează bomba roşie (a 5-a), ea declanşează cele două bombe verzi, iar fiecare
dintre cele verzi declanşează câte una albastră. Bombele negre rămân neexplodate.
17. O hartă este dată într-o matrice n*m în care valorile 1 reprezintă uscatul, iar valorile 0 reprezintă
apa. Doua zone de uscat se consideră că fac parte din acelaşi conţinent dacă sunt vecine pe linie sau
pe coloană. Determinaţi numărul de continente de pe hartă şi care este aria (numărul de valori de 1)
maximă dintre ariile continentelor.
Exemplu:
harta.in
66
111010
001011
111000
010111
000111
110000
harta.out
4 (numărul de continente)
8 (aria continentului din stânga-sus)

2
2. Liste
a. LLSÎ
b. LLDÎ
c. LCSÎ
d. LCDÎ

1. Scrieţi o funcţie care să inverseze legăturile într-o listă liniară simplu înlănţuită specificată ca
parametru. Funcţia va returna adresa primului nod din lista obţinută după inversarea legăturilor. Folosiţi
funcţia pentru a citi din fişierul text legaturi.in numere reale şi a le afişa apoi în fişierul text legaturi.out în
ordinea inversă citirii lor.
2. Scrieţi o funcţie cu un singur parametru (adresa primului nod al unei liste liniare simplu înlănţuită)
care să returneze adresa unui nod situat la mijlocul listei. Funcţia va parcurge lista o singură dată. Dacă
numărul de elemente al listei este par, funcţia va returna valoarea NULL.
3. Din fişierele text f1.in ţi f2.in se citesc elementele a două mulţimi A şi respectiv B, cu elemente
numere naturale.
a) Să se creeze câte o listă liniară simplu inlantuiţă pentru memorarea elementelor din fiecare dintre cele 2
mulţimi.
b) Să se creeze o listă liniară simplu inlantuită care să memoreze reuniunea celor 2 mulţimi .
c) Să se creeze o listă liniară simplu inlantuită care să memoreze intersecţia celor 2 mulţimi.
d)Să se creeze o listă liniară simplu inlantuită care să memoreze mulţimea A-B.
4. Din fişierul text Elevi.10D se citesc următoarele informaţii:
Prima linie a fişierului conţine un număr natural n, cu cel mult 3 cifre. De pe fiecare dintre următoarele n
linii se citesc, în ordine: numele, prenumele şi 3 numere naturale nenule mai mici sau egale cu 10,
reprezentînd notele la informatică.
a) Să se creeze o listă liniară simplu înlănţuită care să memoreze urmatoarele informaţii despre cei
n elevi ai clasei 10D:
- numele (şir de maxim 20 de caractere);
- prenumele (şir de maxim 20 de caractere) ;
- 3 note memorate într-un tablou unidimensional cu 3 componente reale .
b) Să se afişeze numele, prenumele şi media fiecărui elev.
c) Să se scrie o funcţie recursivă care calculează şi returnează media clasei.
Datele vor fi afişate în fişierul text Informatii.10D
5. Scrieţi o funcţie care primeşte ca parametru primul nod al unei liste liniare simplu înlănţuite şi
inversează primul nod al listei cu ultimul, fără a folosi variabile auxiliare. Primul nod al listei
rezultate va fi returnat ca rezultat al funcţiei. Datele de intrare se citesc din fişierul text Lista.nod.
Rezultatele se vor afişa în fişierul text Lista.inv. Elementele listei sunt numere naturale cu cel mult
18 cifre fiecare.
6. Să se construiască o listă liniară simplu înlănţuită care să conţină numere naturale. Să se scrie o
funcţie care să separe elementele pare de cele impare în 2 liste separate. Datele de intrare se citesc
din fişierul text Liste.unu. Datele de ieşire se vor scrie în fişierul text Liste.doi. Elementele primei
liste se vor scrie pe prima linie a fişierului iar elementele celei de a doua liste pe a doua linie a
fişierului.
7. Să se scrie o funcţie care primeşte ca parametru adresa primului nod al unei LLSI cu cel putin 3
noduri şi mută primul nod al listei după ultimul nod al listei, fără a folosi variabile auxiliare. Datele
de intrare se citesc din fişierul text Lista.in. Datele de ieşire se afişează în fişierul text Lista.out.
8. Să se creeze o listă liniară dublu înlănţuită cu noduri care să conţină:
-câmpul info, număr întreg de maxim 4 cifre;
- câmpurile prec şi urm care să conţină informaţii de legatură spre nodul anterior, respectiv urmator
din listă.
a) să se afişeze listă în ambele sensuri
b) să se şteargă toate nodurile din listă cu excepţia primului şi a ultimului nod.
9. Se consideră o listă liniară dublu înlănţuită ale cărei noduri memorează cifre. Să se scrie o funcţie
care primeşte ca parametru adresa primului nod al listei şi verifică dacă numărul care se compune din

3
cifrele memorate în listă în ordine este sau nu palindrom. Funcţia va returna 1 dacă este palindrom şi
0 în caz contrar.
10. Se consideră o listă liniară dublu înlănţuită. Să se scrie o funcţie care primeşte ca parametru adresa
primului nod al listei şi mută ultimul nod în faţa primului. Nu se vor folosi variabile auxiliare.
11. Se citesc din fişierul text f1.in elementele unei liste liniare simplu înlănţuite. Elementele listei sunt
numere naturale nenule. Să se scrie o funcţie care returnează elementul din mijlocul listei dacă lista
are un număr impar de elemente sau ultimul element al listei dacă lista are un număr par de elemente.
Funcţia va parcurge lista O SINGURĂ DATĂ!.
12. Să se creeze o LLDI care să memoreze numere întregi citite dintr-un fişier text.
a) să se scrie o funcţie care primeşte ca parametru adresa primului nod al listei şi o afişează în ambele
sensuri.
c) să se scrie o funcţie care primeşte ca parametru adresa p a unui nod şi un număr natural x şi adaugă
după nodul indicat de p un nod care să conţină valoarea x.
d) să se scrie o funcţie care primeşte ca parametru adresa c a unui nod şi şterge nodul indicat de c.
e) folosind funcţiile de punctele b), c) şi d) să se adauge după nodul al doilea un nod cu informaţia
10, să se şteargă al treilea nod şi apoi primul nod şi să se afişeze lista în ambele sensuri după fiecare
dintre aceste operaţii.
13. a) Să se creeze o listă liniară dublu înlănţuită care să memoreze valori întregi, prin adaugare la
sfarşitul listei.
b) Să se scrie o funcţie care primeşte ca parametru adresa primului nod al listei şi mută primul nod
după ultimul.
c) Folosind funcţia de la b) să se afişeze permutările circulare ale şirului de numere memorat în listă.
14. Se consideră o listă liniară simplu înlănţuită care memorează valori întregi. Să se scrie o funcţie care
primeşte ca parametru adresa primului nod al listei şi inserează în faţa fiecărui nod care memorează o
valoare negativă un nod care să memoreze opusul acesteia.
15. Să se creeze o listă liniară simplu înlănţuită care conţine elemente întregi citite dintr-ul fişier text. Se
citesc apoi două valori întregi v şi x. Să se adauge după primul nod care conţine valoarea v un nod
care să conţină valoarea x.
16. Să se creeze o listă liniară simplu înlănţuită care conţine elemente numere reale citite dintr-ul fişier
text. Să se insereze între oricare 2 noduri din listă un nod care să conţină media celor 2 valori ale
celor 2 noduri.
17. Să se creeze o listă liniară simplu înlănţuită care conţine elemente întregi citite dintr-ul fişier text. Se
citeşte apoi o valoare intreaga x. Să se şteargă primul nod care conţine valoarea x.
18. Se citesc numere întregi dintr-un fişier text. Să se creeze 2 liste care să conţină în ordine elementele
din fişier, una elementele pare, iar cealalta pe cele impare. Să se adauge la sfarşitul listei cu elemente
pare lista cu elemente impare. Să se afişeze pe rînd cele 3 liste.
19. Se consideră o listă liniară simplu înlănţuită cu nodurile definite astfel:
struct Node { int key; Node* next; };
Scrieţi o funcţie care să ordoneze crescator informaţiile din listă. Funcţia va primi ca paramentru
adresa primului nod al listei.
20. Din fişierul date.in se citeşte un număr natural k şi apoi de pe a doua linie numere întregi. Contruiţi o
listă liniară simplu înlănţuită care să conţină numerele întregi citite în ordinea din fişier.
Permutaţi lista cu k poziţii spre stanga şi afişati valorile din listă.
Indicaţie: se vor scrie şi folosi funcţii pentru adăugarea unei valori la sfarşitul listei şi pentru
ştergerea primului nod al listei şi vor fi folosite pentru permutarea cerută.
Exemplu:
date.in
3
1234
date.out
4123

S-ar putea să vă placă și