functii

Prezentare generala ||
 * || Unitatea de invatare Subprograme[[file:Unitate de invatare Subprograme.doc]]

A. **Functii simple**  220=1+2+3+5+10+11+20+22+44+55+110=284 si  284=1+2+3+71+142=220  Sa se scrie o functie care verifica daca doua numere sunt prietene.(returneaza 0 sau 1) 10. Sa se scrie o functie care primeste ca parametru un numar natural n si returneaza cel mai apropiat numar prim strict mai mare decat acesta. Se va folosi o functie care verifica daca un numar este prim.  11.Un numar care este divizibil cu suma cifrelor lui, este numar Niven. Verificati care dintre numerele citite dintr-un fisier text sunt numere Niven.  12. Sa se scrie o functie care are 2 param: un numar natural n si o cifra c. Functia returneaza un numar obtinut prin eliminarea cifrei c din numarul n.  13. Sa se scrie o functie care are 3 param: un numar natural n si 2 cifre a si b. Functia returneaza un numar obtinut prin eliminarea cifrelor situate in intervalul [a,b] din numarul n.  14.Sa se scrie o functie care primeste ca param. 2 numere natural e a si b si verifica daca ele sunt “aproape identice”. 2 numere sunt aproape identice daca au acelasi numar de cifre si difera prin exact o cifra. Ex: 21345 si 22345 sunt aproape identice.  15. Sa se scrie o functie care primeste ca parametru un numar n si returneaza un numar obtinut din cifrele lui n in ordine descrescatoare si fara sa se repete. Ex: n=2331556 se returneaza 65321 16. Numerele triangulare se calculeaza ca suma a primelor numere naturale. Exemplu: 10 este un numar triangular: 10=1+2+3+4. Sa se genereze primele n numere triangulare. Ex pt n=4 se vor genera 1,3,6,10. 17. Sa se scrie o functie care returneaza cel mai mic numar prim strict mai mare decat un numar dat. 18. Sa se scrie o functie care returneaza cel mai mic numar palindrom strict mai mare decat un numar dat.
 * 1) Sa se scrie un subprogram care sa returneze numarul de cifre ale unui numar natural n, dat ca parametru.
 * 2) Sa se scrie un subprogram care verifica daca un numar natural este prim.
 * 3) <span style="font-family: 'Calibri','sans-serif';">Sa se scrie un subprogram care verifica daca un numar natural este deosebit.
 * 4) <span style="font-family: 'Calibri','sans-serif';">Sa se scrie un subprogram care returneaza cmmdc a doua numere intregi a si b.
 * 5) <span style="font-family: 'Calibri','sans-serif';">Sa se scrie un subprogram care sa afiseze toti divizorii comuni a doua numere naturale a si b.
 * 6) <span style="font-family: 'Calibri','sans-serif';">Sa se scrie un subprogram care returneaza cel mai mare divizor comun a doua numere naturale.
 * 7) <span style="font-family: 'Calibri','sans-serif';">Scrieţi o funcţie găseşte_cifra care returnează valoarea cifrei aflate pe poziţia k în numărul n, începând de la dreapta (n şi k vor fi argumentele funcţiei).
 * 8) <span style="font-family: 'Calibri','sans-serif';">Sa se afiseze toate numerele prime din intervalul [a,b]. Se va folosi o functie care verifica daca un numar este prim.
 * 9) <span style="font-family: 'Calibri','sans-serif';">Numerele 220 si 284 sunt numere prietene deoarece:


 * <span style="font-family: 'Calibri','sans-serif';">B. Prelucrari cu vectori **

<span style="font-family: 'Calibri','sans-serif';">1 a)Sa se scrie o functie care returneaza prima cifra a unui numar natural. <span style="font-family: 'Calibri','sans-serif';"> b)Sa se scrie o functie care returneaza numarul de cifre ale unui numar natural <span style="font-family: 'Calibri','sans-serif';"> c)Sa se scrie o functie care returneaza cifra maxima dintr-un numar. <span style="font-family: 'Calibri','sans-serif';"> d)Sa se scrie o functie care returneaza numarul de aparitii ale cifrei maxime intr-un numar natural n.

<span style="font-family: 'Calibri','sans-serif';">Folosind functiile de mai sus si cunoscand cele n elemente ale unui vector de numere naturale, determinati:

<span style="font-family: 'Calibri','sans-serif';">A) sa se afiseze perechile de elemente cu acelasi numar de cifre <span style="font-family: 'Calibri','sans-serif';">B) sa se afiseze perechile de elemente alaturate care au prima cifra-aceeasi <span style="font-family: 'Calibri','sans-serif';">C) sa se afiseze elementele in care cifra maxima se repeta de exact k ori Se vor scrie 2 functii pentru citire si respectiv afisare vector.

<span style="font-family: 'Calibri','sans-serif';">2.Se citeste din fisierul DATE.IN un vector cu n numere intregi. (intr-o functie) <span style="font-family: 'Calibri','sans-serif';">Sa se realizeze subprograme pentru realizarea urmatoarelor cerinte: <span style="font-family: 'Calibri','sans-serif';">1) Afisarea vectorului <span style="font-family: 'Calibri','sans-serif';">2) Calcularea sumei valorilor vectorului <span style="font-family: 'Calibri','sans-serif';">3) Afisarea numarului de valori prime din vector <span style="font-family: 'Calibri','sans-serif';">4) Afisarea numarului de elemente palindroame din vector (1234321 este palindrom) <span style="font-family: 'Calibri','sans-serif';">5) Afisarea urmatorului triunghi cu valorile din tablou:

<span style="font-family: 'Calibri','sans-serif';">a[1] a[2]........ .............a[n-1] a[n] <span style="font-family: 'Calibri','sans-serif';">a[1] a[2]........ ......a[n-2] a[n-1] <span style="font-family: 'Calibri','sans-serif';">a[1] a[2]........ ...a[n-3]a[n-2] <span style="font-family: 'Calibri','sans-serif';"> .....

<span style="font-family: 'Calibri','sans-serif';">a[1]

3. Sa se scrie o functie care inverseaza elementele unui vector. 4. Sa se scrie o functie care rearanjeaza elementele unui vector, astfel incat cele pozitive sa fie asezate la inceput iar cele negative la sfarsit. (se va folosi o singura str. repetitiva.) 5. Sa se scrie o functie care afiseaza pentru fiecare element al unui vector, descompunerea sa in factori primi. Se va folosi o functie auxiliara pentru descompunere. 6. Sa se scrie o functie care muta ultimul element al unui vector pe prima pozitie, iar restul elementelor le deplaseaza la dreapta cu o pozitie. (permutare circulara la dreapta) 7. a) Sa se scrie o functie care verifica daca un numar n este prim. b) Sa se scrie o functie care calculeaza numarul de cifre ale unui numar natural. c) Sa se scrie o functie care calculeaza suma cifrelor unui numar natural. d) Sa se scrie o functie care returneaza numarul de aparitii ale unei cifre c intr-un numar n. e) Sa se scrie o functie care verifica daca o cifra c apare intr-un numar natural n. f) Sa se scrie o functie care returneaza suma cifrelor impare dintr-un numar natural n. 1. Functie care citeste un vector din fisier. 2. Functie care afiseaza un vector. 3. Functie care afiseaza numerele prime dintr-un vector. 4. Functie care afiseaza fiecare element al vectorului urmat de numarul de cifre ale lui. 5. Functie care afiseaza fiecare element al vectorului urmat de suma de cifre ale lui. 6.Functie care afiseaza de cate ori o cifra cif apare in fiecare element al vectorului. 7.Functie care afiseaza de cate ori apare in fiecare element al vectorului ultima cifra a acestuia. 8.Functie care afiseaza fiecare element al vectorului urmat de suma cifrelor impare. 9.Functie care afiseaza perechile de elemente **alaturate** care au aceeasi suma a cifrelor. 10. Functie care afiseaza **toate** perechile de elemente care au aceeasi suma a cifrelor. 11. Functie care afiseaza **toate** perechile de elemente care au aceeasi suma a cifrelor impare. 12. Functie care afiseaza perechile de elemente **alaturate** care sunt prime. 13. Functie care afiseaza **toate** perechile de elemente care sunt prime. 14.Functie care returneaza valoarea maxima dintr-un vector. 15.Functie care returneaza de cate ori o cifra cif apare in toate elementele vectorului.
 * Folosind functiile de mai sus scrieti urmatoarele functii:**

8. Scrieti subprograme care rezolva urmatoarele cerinte: a. O functie care verifica daca un numar intreg transmis ca parametru se gaseste intr-un vector sau nu. b. O functie care verifica daca elementele unui vector sunt sau nu distincte. Folosind subprogramele de mai sus si altele daca sunt necesare, rezolvati urmatoarele probleme: 1. Se citesc doi vectori a si b cu na respectiv nb nalori intregi. Determinati daca fiecare vector contine elemente distincte, iar daca nu eliminati valorile multiple astfel incat sa ramana in vector fiecare valoare o singura data (devin multimi). 2. Afisati elementele comune celor doi vectori (intersectia celor doua multimi). 3. Afisati elementele multimii reuniune a celor doi vectori. 4. Afisati diferenta multimii a-b.

9. .Scrieti subprograme care rezolva urmatoarele cerinte: a. Determina cel mai mare divizor comun a 2 numere naturale b. Determina cel mai mare divizor al unui numar natural, divizor mai mic decat numarul parametru c. Determina suma divizorilor proprii unui numar dat. Folosind subprogramele de mai sus si altele daca sunt necesare, rezolvati urmatoarele probleme: 1. Pentru numerele unui vector afisati cel mai mare divizor comun al tuturor perechilor de valori. 2. Calculati si afisati cel mai mare divizor comun al tuturor numerelor din vector. 3. Afisati numerele prime din vector. 4. Afisati perechile de numere vecine din vector care sunt prime intre ele. 5. Afisati numerele din vector care sunt formate din produsul a doua numere prime. 6. Afisati perechile de numere din vector care au aceeasi suma a divizorilor. 7. Afisati numerele perfecte din vector (un numar este perfect daca este egal cu suma divizorilor sai mai mici decat el).

10. 1. Se citeste un numar natural n. Afisati numerele obtinute prin permutarea circulara a cifrelor lui n. 2. Se citeste un vector cu n elemente numere naturale. Afisati toate perechile de elemente din vector care sunt formate din elemente prime intre ele. 3. Se citeste un vector a cu n elemente naturale. Afisati pentru fiecare element din vector suma divizorilor sai proprii. 4. Se numeste cifra de control cifra obtinuta prin calculul repetat al sumei cifrelor unui numar natural pana cand suma este formata dintr-o singura cifra. De exemplu 67 are suma de control 4 (6+7=13, 1+3=4). Afisati pentru fiecare cifra de control posibila toate valorile din vector care au acea cifra de control. 5. Se citeste un vector cu n elemente numere naturale. Calculati suma cifrelor din care sunt compuse elementele vectorului. 6. Sa se scrie o functie ordonare care primeste 3 parametri: un vector a cu maxim 100 de elemente numere intregi, un numar natural n reprezentand numarul efectiv de elemente din vectorul a si un numar natural k mai mic decat n. Functia ordoneaza crescator primele k elemente ale vectorului a si descrescator celelalte n-k. 7. In fisierul date.in se gasesc cifre separate prin cate un spatiu. Sa se afiseze cifrele in ordinea descrescatoare a numarului de aparitii.

11. Se citeste un vector cu n elemente numere intregi cu ajutorul unei functii. Scrieti functi care realizaeaza urmatoarele prelucrari: a) Afiseaza vectorul citit. b) Afiseaza cele mai mici trei valori din vector. (valori distincte). Nu se va ordona vectorul. c) Elimina elementele negative din vector. Afisati vectorul. d) Afiseaza cele mai mici trei valori din vectorul modificat. Afiseaza cele mai mici trei valori din vector. (valori distincte). Nu se va ordona vectorul. e) Inserati dupa cea mai mare valoare din vector (prima, in cazul in care exista mai multe valori egale cu maxim) valorile gasite la d). Afisati vectorul.

12. a) Sa se scrie o functie care verifica daca un numar are toate cifrele distincte. b) Sa se scrie o functie f1 care returneaza cifra minima a unui numar. c) Sa se scrie functia f2 care primeste ca parametri 2 numere a si b si returneaza valoarea 1 daca numerele au aceeasi cifra minima si 0 altfel. Functia f2 va folosi apeluri ale functiei f1.

13. Sa se scrie o functie cu 4 parametri: a,b,ab si ba. A si b sunt 2 numere naturale, ab se formeaza prin lipirea cifrelor lui b la finalul numarului a, ba se formeaza prin lipirea cifrelor lui a la finalul numarului b. Se pot folosi functii ajutatoare.

14. Sa se scrie o functie care primeste ca parametru un numar natural n si verifica urmatoarele: n – prim/patrat perfect/cub perfect/palindrom. Functia are 5 parametri: n, cod1,cod2,cod3,cod4. cod1=1(prim) sau 0 (nu e prim) etc. In main se afiseaza mesaje.

15. Sa se scrie o functie care insereaza intr-un numar N, un alt numar M, ca in exemplu. Inserarea se face inaintea ultimei cifre pare din numarul N. Exemplu: N= 12345 M=987, N devine 123**987**45.

16. Sa se scrie subprogramele care: a. Verifica daca un numar (transmis ca parametru) are sau nu toate cifrele distincte. b. Determina numarul de divizori ai unui numar transmis ca parametru.

17. Folosind subprogramele proiectate si alte subprograme, rezolvati: 1. Citeste din fisier valorile unui vector cu numere naturale 2. Elimina din vector toate numerele ce nu au cifre distincte. 3. Adauga in vector, dupa elementul cu cei mai multi divizori, divizorii acestuia. 4. Elimina din vector toate numerele ce nu contin cifre mai mari decat o valoare k data. 5. Elimina elementele x[i], x[i+1], …, x[j] din vector, cu i si j parametri in subprogram. 6. Calculeaza cmmdc valorilor din vector. 7.Interschimba elementul maxim cu elementul minim. 8.Ordoneaza crescator doar valorile impare din vector. 9.Inverseaza elementele vectorului. 10.Afiseaza toate perechile de elemente care sunt prime intre ele. Dupa rezolvarea fiecarei cerinte, afisati vectorul obtinut.


 * C. Functii numere reale**


 * double x = 3.14; **

//** sau int y = x; **//**//y=3//**
 * Partea intreaga: (int )x //3// **

//** Partea fractionara: **// //** Double a = x - (int)x; **////**0.14**

1. Scrieţi definiţa completă a subprogramului nreal cu doi parametri x şi y, numere naturale din intervalul [1;1000] ce returnează un număr real cu proprietatea că partea sa întreagă este egală cu x, iar numărul format din zecimalele sale, în aceeaşi ordine, este egal cu y. Exemplu: pentru x=12 şi y=543, subprogramul returnează valoarea 12.543. indicatie: se determina numarul de cifre ale lui y (nr) si se imparte acesta la 10^nr

2. Scrieţi definiţia completă a subprogramului count care are doi parametri, a şi n, prin care primeşte un tablou unidimensional cu maximum 100 de numere reale şi respectiv numărul efectiv de elemente din tablou. Subprogramul returnează numărul de elemente din tabloul a care sunt mai mari sau cel puţin egale cu media aritmetică a tuturor elementelor din tablou. Exemplu: dacă tabloul are 6 elemente şi este de forma (12, 7.5, 6.5, 3, 8.5, 7.5), subprogramul va returna valoarea 4 (deoarece media tuturor elementelor este 7.5 şi numerele subliniate sunt cel puţin egale cu această medie).

3. Subprogramul aranjare are doi parametri: a prin care primeşte un tablou unidimensional cu maximum 100 de numere reale nenule şi n, numărul de elemente din tablou. Subprogramul rearanjează elementele tabloului unidimensional astfel încât toate valorile negative să se afle pe primele poziţii, iar valorile pozitive în continuarea celor negative.Ordinea în cadrul secvenţei de elemente pozitive, respectiv în cadrul secvenţei de elemente negative, poate fi oricare. Tabloul modificat va fi furnizat tot prin intermediul parametrului a. Exemplu: dacă tabloul are 6 elemente şi este de forma (12, -7.5, 6.5, -3, -8,7.5), după apel, acesta ar putea fi: (-7.5, -3, -8, 12, 6.5, 7.5). Scrieţi definiţia completă a subprogramului aranjare.

4.Subprogramul cifra primeşte prin parametrul x un număr real nenul pozitiv şi furnizează prin parametrul y valoarea cifrei unităţilor părţii întregi a lui x.Exemplu: dacă x=34.567, după apel y=4. a) Scrieţi definiţia completă a subprogramului cifra. b) Scrieţi un program C/C++ care citeşte de la tastatură două numere reale cu cel mult două zecimale, numere reprezentând mediile semestriale obţinute de un elev. Programul stabileşte, folosind apeluri utile ale subprogramului cifra, dacă cele două medii citite se află în aceeaşi categorie de medii sau nu. Precizăm că orice medie, în funcţie de intervalul în care se încadrează, face parte din una dintre categoriile: [3,3.99], [4,4.99], [5,5.99], [6,6.99], [7,7.99], [8,8.99] sau [9,10]. În cazul în care ambele medii fac parte din aceeaşi categorie, programul va afişa mesajul Da, altfel va afişa mesajul Nu

5.Scrieţi definiţia completă a subprogram max, cu trei parametri, a, b, c, care primeşte prin intermediul parametrilor a şi b două numere reale cu exact două cifre la partea întreagă şi exact două zecimale fiecare. Subprogramul determină cel mai mare număr real dintre următoarele patru valori: a, b şi numerele reale obţinute din a şi b prin interschimbarea părţii întregi cu partea fracţionară în cadrul aceluiaşi număr. Această valoare este furnizată prin intermediul parametrului real c. Exemplu: dacă a=33.17 şi b=15.40, c va avea valoarea 40.15 (cea mai mare valoare dintre 33.17, 15.40, 17.33 şi 40.15)

6. Subprogramul ordonare primeşte prin parametrul x un tablou unidimensional cu cel mult 100 de elemente numere reale, iar prin parametrul n un număr întreg ce reprezintă numărul efectiv de elemente ale tabloului x. Subprogramul ordonează crescător elementele tabloului şi furnizează, tot prin intermediul parametrului x, tabloul ordonat. a) Scrieţi subprogramul. b) Scrieţi un program C/C++ care citeşte de la tastatură două numere naturale, n şi m (1n100 şi mn), şi apoi un şir de n numere reale distincte. Folosind apeluri utile ale subprogramului ordonare, programul afişează pe prima linie a ecranului, cele mai mari m elemente din şirul citit (în ordine crescătoare a valorilor lor), iar pe a doua linie de ecran, cele mai mici m elemente din şir (în ordine descrescătoare a valorilor lor). Numerele afişate pe aceeaşi linie vor fi separate prin câte un spaţiu. Exemplu : dacă n=9, m=3, iar şirul este (14.2, 60, -7.5, -22, 33.8, 80, 4, 10, 3) se va afişa pe ecran: 33.8 60 80 3 -7.5 -22

7. Sa se scrie o functie care are ca parametri 2 numere reale a si b cu cel mult 4 zecimale fiecare. Functia va calcula valoarea maxima intre a,b,c,d unde c se obtine prin selectarea partii intregi din a si a partii fractionare din b iar d prin selectarea partii intregi din b cu partea fractionara din a.

8. Se citeste un vector A cu n elemente numere reale strict pozitive. (functie de citire, afisare) a) construiti un vector B de numere reale care sa contina doar partile fractionare ale elementelor vectorului initial. b) construiti un vector C de numere intregi care sa contina doar partile intregi ale elementelor vectorului initial. c) construiti un vector D de numere intregi care sa contina doar acele elemente din C care sunt patrate perfecte. (se vor folosi functii pentru fiecare prelucrare si in care vectorii si numarul lor de elemente se vor transmite ca parametri )

9. Se citesc n triplete de numere reale. Sa se verifice care dintre triplete poate forma un triunghi si daca este posibil, sa se verifice daca triunghiul este echilateral, dreptunghic, isoscel sau oarecare..

1. Sa se "simplifice" elementele unui vector. (Elementele egale alaturate se elimina) Procesul se reia pana cand valorile alaturate sunt toate diferite. 2.
 * D. Diverse**


 * Recursivitate**



rezolvare problema 23. 04. 2015


 * Matrici**

Sa se scrie functii pentru urm. prelucrari: a) afisarea elementelor unei linii data ca parametru b) determinarea elementului maxim din matrice c) determinarea numarului de elemente prime de pe o coloana data ca parametru d) ordonarea diagonalei secundare e) inlocuirea fiecarui element de pe diag principala cu cel mai mic numar prim mai mare decat elementul f) interschimbarea liniei L cu coloana C g) afisarea liniilor care au toate valorile numere pare h)verificarea simetriei fata de diagonala principala i) Afisarea triunghiului superior (deasupra diag principale) j)Afisarea elem. de deasupra diagonalei secundare
 * 1.** Dintr-un fisier se citeste un numar n si o matrice patratica nxn.

2. Dintr-un fisier se citeste un numar n si o matrice patratica nxn. Sa se scrie functii pentru urm. prelucrari: c) afisarea liniilor in care toate elementele au cel putin o cifra comuna d) afisarea coloanelor care sunt "asemenea" cu prima coloana e) afisarea cmmdc-ului elementelor fiecarei linii f) suma elementelor din V g) produsul elementelor din S h) afisarea perechilor de linii care au aceeasi suma a elementelor Se vor scrie functii ajutatoare.

1.Functie citire (din fisier) 2.Functie afisare 3.Functie afisare rama 4.Functie afisare elemente diagonala secundara 5.Functie afisare elemente diagonala principala 6.Functie calcul suma a 2 matrici 7.Functie calcul produsul a 2 matrici 8. Functie ordonare diagonala principala 9.Functie afisare numar linii "palindrom" (primul element de pe linie egal cu ultimul, al doilea cu penultimul etc) 10.Functie eliminare linia l. 11.Functie eliminare coloana c.


 * Progresii aritmetice**

1. Se citesc primul termen al unei progresii aritmetice si ratia acesteia (numere intregi). Afisati: a) termenul n b) suma primilor n termeni c) verificati daca un numar m face parte din progresie.

2. Fisierul Date.in contine numere intregi. (minim 3) Sa se verifice daca aceste numere sunt elementele CONSECUTIVE ale unei progresii aritmetice cu ratia numar intreg. (mesaj da,nu)

3. Fisierul Date.in contine linii de numere intregi terminate cu valoarea 0. (restul valorilor sunt nenule si pe o linie exista cel putin 3 numere). Afisati: a) numarul de linii in care valorile sunt progresii aritmetice b) cea mai lunga linie care formeaza progresie. (de preferat fara vectori)


 * Fibonacci**

(fara vectori) 1. Verificati daca 2 numere a si b reprezinta elemente consecutive in sirul lui Fibonaci. 2. Afisati al n-lea element din sirul F. 3. Afisati elementele din sirul F intre al n-lea si al m-lea. (n<m) 4. Afisati primele n numere pare din sirul F. 5. Se citeste un numar n. Construiti cea mai mica matrice patratica ce sa contina primele n elemente din sirul F. Elementele matricii care nu s-au completat, se fac 0.

(cu vectori) 1. Construiti un vector cu primele n elemente din sirul lui Fibonacci. 2.Construiti un vector cu primele n elemente pare din sirul lui Fibonacci. 3.Se da un vector X cu n elemente. Verificati daca elementele acestuia sunt termeni consecutivi in sirul F. Ex: X=(3,5,8,13,21) DA X=(2,4,6,10,16) NU X=(3,4) NU