0% au considerat acest document util (0 voturi)
6 vizualizări30 pagini

Sarcini Practice

Documentul conține sarcini practice pentru studenți, incluzând exerciții de programare în C, evaluarea expresiilor, scrierea de funcții și manipularea datelor. Sarcinile acoperă subiecte precum declarații corecte, funcții matematice, gestionarea input-ului utilizatorului și utilizarea pointerilor. De asemenea, sunt incluse cerințe pentru a calcula sume, a determina numere prime și a analiza structuri de control.
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
6 vizualizări30 pagini

Sarcini Practice

Documentul conține sarcini practice pentru studenți, incluzând exerciții de programare în C, evaluarea expresiilor, scrierea de funcții și manipularea datelor. Sarcinile acoperă subiecte precum declarații corecte, funcții matematice, gestionarea input-ului utilizatorului și utilizarea pointerilor. De asemenea, sunt incluse cerințe pentru a calcula sume, a determina numere prime și a analiza structuri de control.
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

Sarcina practica Nr 2

1. Incercuiți doar acele nume din șirul de mai jos care sunt corecte:
A, b_1, count, _functie, f_x3
2. Care din următoarele declarații sunt corecte:
 double f,g;
 float x; unsigned a;
3. Fie declarațiile: int a=5, b=17;
Scrieți rezultatele următoarelor expresii:
2 * a + (b % 3) = 2 *5 + ( 17 % 3) = 12;
++a + b-- = 23;
a / b = 0;
(float) a / b = 0.294118;
(float) a / (float) b = 0.294118;
a << 4 = 5 << 4 = 80;
b >> 2 = 17 >> 2 = 68;
(a < b) && (a % 2) = ( 5 < 17 ) && ( 5 % 2) = 1 && 1 = 1;
(a > b) || !(a % 5) = ( 5 > 17 ) || ! ( 5 & 5 ) = 0 || ! 0 = || 1 = 1;
a | b = 21;
a & b = 1;
a ^ b = 20;
4. Fie următorul program C:
1. #include<stdio.h>
2.
3.
4. void sum (int n, int m) {
5. printf ("%d + %d = %d",n,m,n+m);
6. printf ("\n");
7. }
8.
9. void reduct (int n, int m){
10. printf ("%d - %d = %d",n,m,n-m);
11. printf ("\n");
12. }
13.
14.
15. void product(int n, int m){
16. printf("%d * %d = %d",n,m,n*m);
17. printf("\n");
18. }
19.
20. void divid (int n, int m){
21. printf ("%d : %d = %.2f",n,m,(float)n/m);
22. printf("\n");
23. }
24.
25. int main(void){
26. int m,n,op;
27. char r;
28.
29. printf("Introduceti doua numere intregi\n");
30. printf("n=");
31. scanf("%d",&n);
32. printf("m=");
33. scanf("%d",&m);
34.
35. printf("Ce operatie doriti sa se efectueze cu aceste numere?");
36. printf("\n");
37. printf("\n1-adunare\n2-scadere\n3-inmultire\n4-impartire\n");
38. scanf("%d",&op);
39.
40. r='y';
41. while(r=='y'){
42. switch(op){
43. case 1:
44. sum(n,m);
45. break;
46. case 2:
47. reduct(n,m);
48. break;
49. case 3:
50. product(n,m);
51. break;
52. case 4:
53. divid (m,n);
54. break;
55.
56. default:
57. printf("Ati introdus gresit operatia!\n");
58. }
59.
60. printf("\nDoriti sa continuati? y/n ");
61. r = qetchar ();
62. if(r=='y'){
63. printf("\nCe operatie doriti sa se efectueze cu aceste
numere?\n");
64. printf("\n1-adunare\n2-scadere\n3-inmultire\n4-impartire\
n");
65. scanf("%d",&op);
66. }
67. }
68. }
a) Determinați principalele componente ale lui, după cum urmează:
Constante - 'y', 'n', 1, 2, 3, 4;
Variabile - m, n, op, r;
Funcții - summ(), reduct(), product(), divid(), main(), printf(), scanf(), getchar();
Tipuri de date - int, char, float, void;
Operatori - +, -, *, /, %, =, ==, ++, --, &.
b) Determinați ce vor afișa următoarele funcții printf():
printf("%d + %d = %d",n,m,n+m) = n + m = (n+m);
printf("%d - %d = %d",n,m,n-m) = n - m = (n-m);
printf("%d * %d = %d",n,m,n*m) = n * m = (n*m);
printf("%d : %d = %.2f",n,m,(float)n/m) = n : m = (n/m(float));

5. Un student a fost admis la facultatea de Fizică, Matematică și Tehnologii Informaționale.


El vrea să elaboreze un program care citește denumirea facultății și afișează acronimul ei
- FMTI, utilizând câte o variabilă de exemplu n1, n2, n3, n4.
1. #include <stdio.h>
2.
3. int main() {
4. char n1[20];
5. char n2[20];
6. char n3[20];
7. char n4[20];
8.
9. printf("Prima facultate: ");
10. scanf("%s", n1);
11.
12. printf("A doua facultate: ");
13. scanf("%s", n2);
14.
15. printf("A treia facultate: ");
16. scanf("%s", n3);
17.
18. printf("A patra facultate: ");
19. scanf("%s", n4);
20.
21. printf("Acronimul este: %c%c%c%c\n", n1[0], n2[0], n3[0], n4[0]);
22. }
23.
6. Folosiți exemplul 1.4 și ajustați programul, pentru a citi informația despre un telefon: ma
rcă, model, memorie de stocare, culoare, preț. Informația citită să se afișeze într-o linie s
eparate prin tabulare, ca în exemplul următor:
Apple iPhone 7 32GB Gold 24500
1. #include <stdio.h>
2.
3. int main() {
4. char marca[20];
5. char model[20];
6. char memorie[10];
7. char culoare[15];
8. float pret;
9.
10. printf("Introduceti datele telefonului:\n");
11.
12. printf("Marca: ");
13. scanf("%s", marca);
14.
15. printf("Model: ");
16. scanf("%s", model);
17.
18. printf("Memorie: ");
19. scanf("%s", memorie);
20.
21. printf("Culoare: ");
22. scanf("%s", culoare);
23.
24. printf("Pret: ");
25. scanf("%f", &pret);
26.
27. printf("\n%s\t\t%s\t\t%s\t\t%s\t\t%.0f\n", marca, model, memorie,
culoare, pret);
28. }
7. Un student vrea să plece la New York și pentru a-și face bagajele, a trebuit să afle că
temperatura de acolo este în jur de 460F (Fahrenheit). Ajutați-l să convertească orice
temperatură citită de la tastatură din 0F în 0C, cunoscând că formula este:
0
C = (0F - 32) / 1.8.
1. #include <stdio.h>
2.
3. int main() {
4. float fahrenheit;
5. float celsius;
6.
7. printf("Introduceti temperatura in grade Fahrenheit: ");
8. scanf("%f", &fahrenheit);
9.
10. celsius = (fahrenheit - 32) / 1.8;
11.
12. printf("%.1f°F = %.1f°C\n", fahrenheit, celsius);
13. }

8. Modificați programul din exemplul 1.7 pentru celelalte operații aritmetice: mai întâi
diferența, apoi produsul și câtul.
1. #include <stdio.h>
2.
3. int main() {
4. int a, b;
5.
6. printf("Introduceti doua numere intregi:\n");
7. printf("a = ");
8. scanf("%d", &a);
9. printf("b = ");
10. scanf("%d", &b);
11.
12. printf("\n%d + %d = %d\n", a, b, a + b);
13.
14. printf("%d - %d = %d\n", a, b, a - b);
15.
16. printf("%d * %d = %d\n", a, b, a * b);
17.
18. printf("%d / %d = %.2f\n", a, b, (float)a / b);
19. }

Sarcina practica Nr 3

1. Ce este greșit în acest fragment de program? Explicați.

...
double k;
scanf(“%lf”,&k); Nu se folosesc valori reale double sau float in switch
switch (k){
case 21.6: …
2. Transformați această serie de if-uri într-o instrucțiune switch echivalentă.

1. switch(c) {
2.
3. case 'P': pornire();
4. break;
5.
6. case 'S': salvare();
7. break;
8.
9. case 'I': introducere();
10. break;
11.
12. case 'A': afisare();
13. break;
14.
15. case 'Q': iesire();
16. break;
17. }

3. Explicați în cuvinte, ce se va realiza în următoarea secvență de program, exemplificând


cu valori pentru a și b.

Programul compară vârsta a doi copii și afișează care este mai mare și cu câți ani.

1. printf("Introdu virsta copilului al doilea: ");


2.
3. scanf("%d",&a);
4. printf("Introdu virsta copilului al doilea: ");
5. scanf("%d",&b);
6. if(a>b) printf("primul copil este mai mare cu %d ani.\n",a-b);
7. else printf("al doilea copil este mai mare cu %d
ani.\n",b
8.
4. Completați următoarea secvență de program cu expresiile lipsă, dacă se dorește să se
determine toate numerele de forma |abab|, care se divid la 7. Declarați variabilele a și b.

1. for(a = 1; a < 10; a++)


2.
3. for(b = 0; b < 10; b++) {
4. n = 1000*a + b*100 + a*10 + b;
5. if(n % 7 == 0) printf("n = %d \n", n);
6. }

5. Să se calculeze suma cifrelor unui număr întreg, utilizând ciclurile while și do / while (ve
zi exemplu 2.8, pag. 61).

1. #include <stdio.h>
2.
3. int main() {
4. int n, sum = 0;
5.
6. printf("Introduceti un numar intreg: ");
7. scanf("%d", &n);
8.
9. while (n != 0) {
10. sum += n % 10;
11. n /= 10;
12. }
13.
14. printf("Suma cifrelor este: %d\n", sum);
15.
16. }

6. Să se determine câte cifre are și câte din ele sunt pare în înscrierea zecimală a numărului
dat n.

1. #include <stdio.h>
2.
3. int main() {
4. int n;
5. int total = 0;
6. int pare = 0;
7.
8. printf("Introduceti un numar intreg pozitiv: ");
9. scanf("%d", &n);
10.
11. int x = n;
12.
13. while (x > 0) {
14. int cifra = x % 10;
15. total++;
16.
17. if (cifra % 2 == 0)
18. pare++;
19.
20. x = x / 10;
21. }
22.
23. printf("Numarul are %d cifre.\n", total);
24. printf("Din ele %d sunt pare.\n", pare);
25. }

7. Să se modifice exemplul 2.3, pag. 56, astfel încât să se calculeze care va fi cea mai mică
medie din grupa de n studenți.
8. Să se tipărească toată tabla înmulțirii de la 1 la 10, așteptând tastarea lui Enter, pentru a
putea trece de la un număr la altul. Folosiți pe rând toate structurile ciclice studiate.

1. #include <stdio.h>
2.
3. int main() {
4. int i, j;
5. for(i = 1; i <= 10; i++) {
6. printf("Tabla inmultirii cu %d:\n", i);
7. for(j = 1; j <= 10; j++) {
8. printf("%d x %d = %d\n", i, j, i*j);
9. }
10. printf("Apasa Enter pentru continuare...");
11. getchar();
12. }
13. }
9. Să se calculeze suma s = 1*2 + 2*3 + 3*4 + … + (n - 1)*n, pentru un n dat de la tastatură.

1. #include <stdio.h>
2.
3. int main() {
4. int n, i;
5. long suma = 0;
6. printf("Introduceti n: ");
7. scanf("%d", &n);
8.
9. for(i = 1; i < n; i++) {
10. suma += i * (i + 1);
11. }
12. printf("Suma este: %ld\n", suma);
13.
14. }

10. Să se elaboreze un program care afișează toate numerele prime de la 100 la 300.

1. #include <stdio.h>
2.
3. int main() {
4. int a, i, prim;
5. printf("Numere prime intre 100 si 300:\n");
6.
7. for(a = 100; a <= 300; a++) {
8. prim = 1;
9. for(i = 2; i <= a/2; i++) {
10. if(a % i == 0) {
11. prim = 0;
12. break;
13. }
14. }
15. if(prim == 1) printf("%d ", a);
16. }
17. printf("\n");
18. }

Sarcina practica Nr 4

1. Fie declarația double m,*p; Asignați indirect variabilei m valoarea 5,14 prin intermediul
pointerului p.

1. double m, *p;
2. p = &m;
3. *p = 5.14;

2. Fie declarația void*p; float s; p=&s; Încercuiți expresia corectă:


*(float*)p=s+2.0;
3. Fie declarația double x,y,*p; int a,b; Care din următoarele expresii sunt corecte:
 p=&x;
 p=&y;
4. Să se introducă două variabile de tip float și să se calculeze media lor aritmetică,
operându-se indirect cu valorile lor prin intermediul pointerilor.

1. #include <stdio.h>
2.
3. int main() {
4. float a, b, medie;
5.
6. printf("Introduceti doua valori: ");
7. scanf("%f %f", &a, &b);
8.
9. float *p1 = &a, *p2 = &b, *pm = &medie;
10. *pm = (*p1 + *p2) / 2.0;
11.
12. printf("Media: %.2f\n", *pm);
13. return 0;
14. }

Sarcina practica Nr 5

1. Declarați un tablou de 15 elemente flotante.

1. #include <stdio.h>
2.
3. int main() {
4. float tablou[15];
5. int i;
6.
7. printf("Introduceti 15 numere:\n");
8. for(i = 0; i < 15; i++) {
9. printf("Elementul %d: ", i + 1);
10. scanf("%f", &tablou[i]);
11. }
12.
13. printf("Tabloul introdus:\n");
14. for(i = 0; i < 15; i++) {
15. printf("%.2f ", tablou[i]);
16. }
17. printf("\n");
18. }

2. Depistați erorile din acest program:

1. #include<conio.h>
2. #include<stdio.h>
3.
4. main(){
5. int tab[]={6, 2, 7, -3, 0};
6. int vector[5];
7. tab = vector;
8. getch();
9. }
10.
Nu se poate face atribuire directa intre tablouri in C

3. Fie declarația: float matrice[3][2]={4.5, 0.7, -1.2, 6.4, -5.9, 11.5}.


Calculați: matrice[2][1] + matrice[1][1] =
matrice[2][1] + matrice[1][1] = 11.5 + 6.4 = 17.9

4. Ce se va tipări în urma executării instrucțiunii:


printf(“%d”, strcmp(“onne”, ”one”))
5. Fie declaraţia: int q,r; double m,n,*p; Care din următoarele expresii sunt corecte
 p = &m;
 p = &n;
6. Dacă vectorul x este declarat astfel: int x[15]; atunci elementul al șaselea este accesat prin
pointer astfel:
 *(x+5)
7. Fie declarația: int m; void*p; şi p=&m; Încercuiți expresia corectă:
 *(int*)p = m++;
8. Să se sorteze descrescător elementele unui tablou unidimensional de k numere flotante și
să se afișeze într-un singur rând.

1. #include <stdio.h>
2.
3. int main() {
4. int k, i, j;
5. float temp;
6.
7. printf("Introduceti numarul de elemente: ");
8. scanf("%d", &k);
9.
10. float tablou[k];
11.
12. printf("Introduceti %d numere:\n", k);
13. for(i = 0; i < k; i++) {
14. printf("Elementul %d: ", i + 1);
15. scanf("%f", &tablou[i]);
16. }
17.
18. for(i = 0; i < k - 1; i++) {
19. for(j = 0; j < k - i - 1; j++) {
20. if(tablou[j] < tablou[j + 1]) {
21. temp = tablou[j];
22. tablou[j] = tablou[j + 1];
23. tablou[j + 1] = temp;
24. }
25. }
26. }
27.
28. printf("Tabloul sortat descrescator: ");
29. for(i = 0; i < k; i++) {
30. printf("%.2f ", tablou[i]);
31. }
32. printf("\n");
33. }

9. Să se elaboreze un program care citește două matrice de elemente double și apoi


calculează suma și diferența lor. Să se afișeze elementele matricelor sub formă de rânduri
și coloane.

1. #include <stdio.h>
2.
3. int main() {
4. int linii, coloane, i, j;
5.
6. printf("Introduceti numarul de linii: ");
7. scanf("%d", &linii);
8. printf("Introduceti numarul de coloane: ");
9. scanf("%d", &coloane);
10.
11. double matrice1[linii][coloane], matrice2[linii][coloane];
12. double suma[linii][coloane], diferenta[linii][coloane];
13.
14. printf("\nIntroduceti elementele primei matrice:\n");
15. for(i = 0; i < linii; i++) {
16. for(j = 0; j < coloane; j++) {
17. printf("matrice1[%d][%d] = ", i, j);
18. scanf("%lf", &matrice1[i][j]);
19. }
20. }
21.
22. printf("\nIntroduceti elementele celei de-a doua matrice:\n");
23. for(i = 0; i < linii; i++) {
24. for(j = 0; j < coloane; j++) {
25. printf("matrice2[%d][%d] = ", i, j);
26. scanf("%lf", &matrice2[i][j]);
27. }
28. }
29.
30. for(i = 0; i < linii; i++) {
31. for(j = 0; j < coloane; j++) {
32. suma[i][j] = matrice1[i][j] + matrice2[i][j];
33. diferenta[i][j] = matrice1[i][j] - matrice2[i][j];
34. }
35. }
36.
37. printf("\nMatricea 1:\n");
38. for(i = 0; i < linii; i++) {
39. for(j = 0; j < coloane; j++) {
40. printf("%8.2lf ", matrice1[i][j]);
41. }
42. printf("\n");
43. }
44.
45. printf("\nMatricea 2:\n");
46. for(i = 0; i < linii; i++) {
47. for(j = 0; j < coloane; j++) {
48. printf("%8.2lf ", matrice2[i][j]);
49. }
50. printf("\n");
51. }
52.
53. printf("\nSuma matricelor:\n");
54. for(i = 0; i < linii; i++) {
55. for(j = 0; j < coloane; j++) {
56. printf("%8.2lf ", suma[i][j]);
57. }
58. printf("\n");
59. }
60.
61. printf("\nDiferenta matricelor:\n");
62. for(i = 0; i < linii; i++) {
63. for(j = 0; j < coloane; j++) {
64. printf("%8.2lf ", diferenta[i][j]);
65. }
66. printf("\n");
67. }
68. }

10. Să se calculeze media aritmetică a elementelor fiecărei coloane a unei matrice


bidimensionale de elemente întregi și să se afișeze rezultatul sub fiecare coloană.

1. #include <stdio.h>
2.
3. int main() {
4. int linii, coloane, i, j;
5. float suma;
6.
7. printf("Introduceti numarul de linii: ");
8. scanf("%d", &linii);
9. printf("Introduceti numarul de coloane: ");
10. scanf("%d", &coloane);
11.
12. int matrice[linii][coloane];
13.
14. printf("Introduceti elementele matricei:\n");
15. for(i = 0; i < linii; i++) {
16. for(j = 0; j < coloane; j++) {
17. printf("matrice[%d][%d] = ", i, j);
18. scanf("%d", &matrice[i][j]);
19. }
20. }
21.
22. printf("\nMatricea:\n");
23. for(i = 0; i < linii; i++) {
24. for(j = 0; j < coloane; j++) {
25. printf("%6d ", matrice[i][j]);
26. }
27. printf("\n");
28. }
29.
30. printf("\nMediile coloanelor:\n");
31. for(j = 0; j < coloane; j++) {
32. suma = 0;
33. for(i = 0; i < linii; i++) {
34. suma = suma + matrice[i][j];
35. }
36. printf("%6.2f ", suma / linii);
37. }
38. printf("\n");
39. }
11. Elaborați un program care cere să se introducă o propoziție ce se termină cu punct și apoi
afișează numărul de cuvinte pe care le conține.

1. #include <stdio.h>
2.
3. int main() {
4. char propozitie[1000];
5. int i, numarCuvinte = 0;
6.
7. printf("Introduceti o propozitie (se termina cu punct): ");
8. scanf(" %[^\n]", propozitie);
9.
10. for(i = 0; propozitie[i] != '\0'; i++) {
11. if(propozitie[i] == ' ' || propozitie[i] == '.') {
12. numarCuvinte++;
13. }
14. }
15.
16. printf("Propozitia contine %d cuvinte.\n", numarCuvinte);
17. }

12. Să se înlocuiască o literă citită de la tastatură cu o altă literă citită de la tastatură, într-un
șir de caractere dat.

1. #include <stdio.h>
2.
3. int main() {
4. char sir[1000];
5. char literaVeche, literaNoua;
6. int i;
7.
8. printf("Introduceti un sir de caractere: ");
9. scanf(" %[^\n]", sir);
10.
11. printf("Introduceti litera de inlocuit: ");
12. scanf(" %c", &literaVeche);
13.
14. printf("Introduceti litera cu care se inlocuieste: ");
15. scanf(" %c", &literaNoua);
16.
17. for(i = 0; sir[i] != '\0'; i++) {
18. if(sir[i] == literaVeche) {
19. sir[i] = literaNoua;
20. }
21. }
22.
23. printf("Sirul dupa inlocuire: %s\n", sir);
24. }

13. Să se introducă un număr întreg pozitiv. Să se verifice dacă s-a introdus corect. Dacă nu,
atunci să se afișeze mesajul corespunzător și să se repete introducerea, până când se va
realiza citirea corectă. Să se afișeze toți divizorii proprii numărului introdus.

1. #include <stdio.h>
2.
3. int main() {
4. int numar, i, corect = 0;
5.
6. while(corect == 0) {
7. printf("Introduceti un numar intreg pozitiv: ");
8.
9. if(scanf("%d", &numar) != 1) {
10. printf("EROARE: Nu ati introdus un numar!\n");
11.
12. while(getchar() != '\n');
13. } else if(numar <= 0) {
14. printf("EROARE: Numai numere pozitive sunt acceptate!\n");
15. } else {
16. corect = 1;
17. }
18. }
19.
20.
21. printf("Divizorii proprii ai numarului %d sunt: ", numar);
22.
23. int areDivizori = 0;
24.
25. for(i = 2; i <= numar / 2; i++) {
26. if(numar % i == 0) {
27. printf("%d ", i);
28. areDivizori = 1;
29. }
30. }
31.
32. if(areDivizori == 0) {
33. printf("Acest numar nu are divizori proprii");
34. }
35.
36. printf("\n");
37. }

14. Să se numere câte cifre (de la 0 la 9) sunt în șirul de caractere dat, utilizându-se un
pointer către șir. Să se utilizeze funcția isdigit(ch) din fișierul ctype.h, care întoarce un
rezultat diferit de 0 dacă simbolul parametru ch este o cifră și 0 în caz contrar.

1. #include <stdio.h>
2. #include <ctype.h>
3.
4. int main() {
5. char sir[1000];
6. char *pointer;
7. int numarCifre = 0, i;
8.
9. printf("Introduceti un sir de caractere: ");
10. scanf(" %[^\n]", sir);
11.
12. pointer = sir;
13.
14.
15. while(*pointer != '\0') {
16. if(isdigit(*pointer)) {
17. numarCifre++;
18. }
19. pointer++;
20. }
21.
22. printf("In sir sunt %d cifre.\n", numarCifre);
23.
24. }

15. Utilizându-se un pointer către un șir de caractere să se afișeze toate sufixele lui, în ordine
descrescătoare. Prin sufix vom conveni a înțelege sfârșitul cuvântului, de la o literă la tot
cuvântul. De exemplu: Date de intrare: point. Date de ieșire:

point
oint
int
nt
t
1. #include <stdio.h>
2.
3. int main() {
4. char sir[100];
5. char *pointer;
6. int i, j;
7.
8. printf("Introduceti un cuvant: ");
9. scanf("%s", sir);
10.
11. printf("Sufixele cuvantului '%s':\n", sir);
12.
13.
14. pointer = sir;
15.
16.
17. for(i = 0; sir[i] != '\0'; i++) {
18. for(j = i; sir[j] != '\0'; j++) {
19. printf("%c", sir[j]);
20. }
21. printf("\n");
22. }
23. }

Sarcina practica Nr 7

1. Fie funcția:
double v_p (double a, double b, double c)
{return a*b*c;}
a) numele funcției este v_p
b) tipul funcției este double
c) cantitatea de parametri este 3
d) tipul parametrilor formali este double
e) rezultatul întors este produsul a × b × c
f) exemplu de apel al funcției v_p(), cu parametri efectivi de tip constantă v_p(2.5, 3.0, 4.0)
g) exemplu de apel al funcției v_p(), cu parametri efectivi de tip variabilă v_p(x, y, z)
h) prototipul funcției v_p() este double v_p(double a, double b, double c);

2. Elaborați o funcție suma_frac() care va primi ca parametri formali numărătoarele și


numitoarele a două fracții m1 / n1 și m2 / n2, și care va tipări suma acestor două fracții
m1 / n1 + m2 / n2.

1. #include <stdio.h>
2.
3. int main() {
4. int m1, n1, m2, n2;
5. int numarator, numitor;
6.
7. printf("Introduceti prima fractie (m1 n1): ");
8. scanf("%d %d", &m1, &n1);
9.
10. printf("Introduceti a doua fractie (m2 n2): ");
11. scanf("%d %d", &m2, &n2);
12.
13. numarator = m1 * n2 + m2 * n1;
14. numitor = n1 * n2;
15.
16. printf("Suma fractiilor este: %d/%d\n", numarator, numitor);
17.
18. }

3. Redactați funcția suma_frac(), astfel încât să utilizați în cadrul ei funcția cmmdc() din
exemplul 6.8, pentru a simplifica fracția sumă obținută, înainte de a fi tipărit rezultatul.
1. #include <stdio.h>
2.
3. int main() {
4. int m1, n1, m2, n2, a, b, rest;
5.
6. printf("Introduceti prima fractie (m1 n1): ");
7. scanf("%d %d", &m1, &n1);
8. printf("Introduceti a doua fractie (m2 n2): ");
9. scanf("%d %d", &m2, &n2);
10.
11. a = m1 * n2 + m2 * n1;
12. b = n1 * n2;
13.
14. int temp_a = a, temp_b = b;
15. while (temp_b != 0) {
16. rest = temp_a % temp_b;
17. temp_a = temp_b;
18. temp_b = rest;
19. }
20.
21. printf("Suma fractiilor este: %d/%d\n", a/temp_a, b/temp_a);
22.
23. }
4. Redactați funcția suma_frac(), astfel încât fracția sumă să nu fie tipărită direct din funcție,
dar să întoarcă acest rezultat în funcția apelantă prin adresă.
1. #include <stdio.h>
2.
3.
4. int main() {
5. int m1, n1, m2, n2;
6. int numarator, numitor;
7.
8. printf("Introduceti prima fractie (m1 n1): ");
9. scanf("%d %d", &m1, &n1);
10.
11.
12. printf("Introduceti a doua fractie (m2 n2): ");
13. scanf("%d %d", &m2, &n2);
14.
15. numarator = m1 * n2 + m2 * n1;
16. numitor = n1 * n2;
17.
18.
19. printf("Suma fractiilor este: %d/%d\n", numarator, numitor);
20.
21. return 0;
22. }

5. Elaborați un program care va cere introducerea a două fracții prin numărătoarele și


numitoarele lor, apoi să afișeze suma acestor fracții, diferența, produsul și câtul lor.
Fiecare operație asupra fracțiilor să fie efectuate de funcții analoage funcției suma_frac()
din punctul 4.
1. #include <stdio.h>
2.
3. int main() {
4. int m1, n1, m2, n2;
5. int numarator, numitor;
6.
7. printf("Introduceti prima fractie (m1 n1): ");
8. scanf("%d %d", &m1, &n1);
9.
10. printf("Introduceti a doua fractie (m2 n2): ");
11. scanf("%d %d", &m2, &n2);
12.
13. numarator = m1 * n2 + m2 * n1;
14. numitor = n1 * n2;
15. printf("Adunare: %d/%d + %d/%d = %d/%d\n", m1, n1, m2, n2,
numarator, numitor);
16.
17. numarator = m1 * n2 - m2 * n1;
18. numitor = n1 * n2;
19. printf("Scadere: %d/%d - %d/%d = %d/%d\n", m1, n1, m2, n2,
numarator, numitor);
20.
21. numarator = m1 * m2;
22. numitor = n1 * n2;
23. printf("Inmultire: %d/%d * %d/%d = %d/%d\n", m1, n1, m2, n2,
numarator, numitor);
24.
25. numarator = m1 * n2;
26. numitor = n1 * m2;
27. printf("Impartire: %d/%d : %d/%d = %d/%d\n", m1, n1, m2, n2,
numarator, numitor);
28.
29. return 0;
30. }

6. Elaborați o funcție care ar calcula media elementelor unui tablou unidimensional.


Utilizați această funcție pentru a calcula media tabloului dat, de n elemente flotante.
1. #include <stdio.h>
2.
3. int main() {
4. int n, i;
5. float suma = 0, media;
6.
7. printf("Cate elemente are tabloul? ");
8. scanf("%d", &n);
9.
10. float tablou[n];
11. printf("Introduceti %d numere:\n", n);
12. for(i = 0; i < n; i++) {
13. printf("Elementul %d: ", i + 1);
14. scanf("%f", &tablou[i]);
15. }
16.
17. for(i = 0; i < n; i++) {
18. suma = suma + tablou[i];
19. }
20.
21.
22. media = suma / n;
23. printf("Media elementelor este: %.2f\n", media);
24. }

7. Elaborați un program care ar calcula prin intermediul a două funcții, elementele maxim și
minim ale unui tablou unidimensional.
1. #include <stdio.h>
2.
3. int main() {
4. int n, i;
5.
6. printf("Cate elemente are tabloul? ");
7. scanf("%d", &n);
8.
9. float tablou[n];
10. printf("Introduceti %d numere:\n", n);
11. for(i = 0; i < n; i++) {
12. printf("Elementul %d: ", i + 1);
13. scanf("%f", &tablou[i]);
14. }
15.
16. float maxim = tablou[0];
17. for(i = 1; i < n; i++) {
18. if(tablou[i] > maxim) {
19. maxim = tablou[i];
20. }
21. }
22.
23. float minim = tablou[0];
24. for(i = 1; i < n; i++) {
25. if(tablou[i] < minim) {
26. minim = tablou[i];
27. }
28. }
29.
30. printf("Elementul maxim este: %.2f\n", maxim);
31. printf("Elementul minim este: %.2f\n", minim);
32. }

8. Elaborați o funcție dif_max_tab(), care ar modifica valorile elementelor unui tablou


bidimensional a[10][10], astfel: max-a[i][j], unde max este cel mai mare element din
tabloul dat. Funcția dif_max_tab() trebuie să aibă ca parametru un pointer spre funcția de
calculare a maximului din punctul 7.
1. #include <stdio.h>
2.
3. int main() {
4. int i, j, n, m;
5. float a[10][10];
6. float maxim;
7.
8. printf("Introduceti numarul de linii (maxim 10): ");
9. scanf("%d", &n);
10. printf("Introduceti numarul de coloane (maxim 10): ");
11. scanf("%d", &m);
12.
13. printf("Introduceti elementele tabloului:\n");
14. for(i = 0; i < n; i++) {
15. for(j = 0; j < m; j++) {
16. printf("a[%d][%d] = ", i, j);
17. scanf("%f", &a[i][j]);
18. }
19. }
20.
21. maxim = a[0][0];
22. for(i = 0; i < n; i++) {
23. for(j = 0; j < m; j++) {
24. if(a[i][j] > maxim) {
25. maxim = a[i][j];
26. }
27. }
28. }
29.
30. printf("Elementul maxim este: %.2f\n", maxim);
31.
32. printf("Tabloul modificat (max - a[i][j]):\n");
33. for(i = 0; i < n; i++) {
34. for(j = 0; j < m; j++) {
35. a[i][j] = maxim - a[i][j];
36. printf("%.2f ", a[i][j]);
37. }
38. printf("\n");
39. }
40. }
9. Elaborați o funcție care ar aloca dinamic memorie pentru un tablou de structuri carte de
tipul: autor, titlu, an_editie, pret. Utilizați această funcție într-un program care ar citi
elemente acestui tablou, apoi ar elibera memoria prin intermediul unei funcții
asemănătoare cu cea din exemplul 6.11.
10. #include <stdio.h>
11. #include <stdlib.h>
12.
13. struct Carte {
14. char autor[50];
15. char titlu[50];
16. int an_editie;
17. float pret;
18. };
19.
20. int main() {
21. int n, i;
22. struct Carte *carti;
23.
24. printf("Cate carti doriti sa introduceti? ");
25. scanf("%d", &n);
26.
27. carti = (struct Carte*)malloc(n * sizeof(struct Carte));
28.
29. printf("Introduceti datele cartilor:\n");
30. for(i = 0; i < n; i++) {
31. printf("\nCartea%d\n", i + 1);
32.
33. printf("Autor: ");
34. scanf(" %[^\n]", carti[i].autor);
35.
36. printf("Titlu: ");
37. scanf(" %[^\n]", carti[i].titlu);
38.
39. printf("An editie: ");
40. scanf("%d", &carti[i].an_editie);
41.
42. printf("Pret: ");
43. scanf("%f", &carti[i].pret);
44. }
45.
46. printf("\nCartile introduse:\n");
47. for(i = 0; i < n; i++) {
48. printf("\nCartea %d:\n", i + 1);
49. printf("Autor: %s\n", carti[i].autor);
50. printf("Titlu: %s\n", carti[i].titlu);
51. printf("An editie: %d\n", carti[i].an_editie);
52. printf("Pret: %.2f\n", carti[i].pret);
53. }
54.
55. free(carti);
56. printf("\nMemoria a fost eliberata!\n");
57.
58. }

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