This shows you the differences between two versions of the page.
|
programare-cc:laboratoare:02 [2023/09/26 17:05] mihai.nan |
programare-cc:laboratoare:02 [2025/10/15 11:38] (current) carmen.odubasteanu |
||
|---|---|---|---|
| Line 192: | Line 192: | ||
| === Problema 1 === | === Problema 1 === | ||
| - | Problema generării unor numere aleatoare poate fi considerată iniţial una complicată, dar limbajul C ne pune la dispoziţie biblioteca **stdlib**, cu ajutorul căreia lucrurile vor deveni foarte simple. Funcţiile şi constantele acestei biblioteci sunt declarate în header-ul **stdlib.h** pe care va trebui să-l includeţi la începutul programului pe care îl scrieţi. | + | Scrieți un program care citește două numere naturale (de tip **int**) pe aceeași linie, separate prin câte un spațiu. Calculați suma și produsul pentru aceste numere și afișați rezultatele obținute. |
| - | + | ||
| - | Utilizând funcţia **rand()** veţi genera numere aleatoare cu valori cuprinse între **0** si **RAND_MAX**, unde **RAND_MAX** este o constanta definită în **stdlib.h**, având în general valoarea maximă a tipului **int**. | + | |
| - | + | ||
| - | Valorile returnate de această funcţie sunt de fapt termenii unui şir de numere generat după o anumită formula ce foloseşte ca punct de plecare o valoare dată. Din cauza acestui aspect, pentru aceeasi valoare iniţială fixată, programul va genera la fiecare rulare aceleaţi numere aleatoare. Pentru a evita acest lucru, biblioteca pune la dispozitie funcţia **srand()** care primeşte ca parametru un număr întreg reprezentând valoarea iniţiala utilizată în calcularea şirului de numere aleatoare. | + | |
| - | + | ||
| - | Astfel, paşii pentru rezolvarea problemei noastre sunt următorii : | + | |
| - | + | ||
| - | <code c> | + | |
| - | + | ||
| - | // fixarea valorii utilizate în generarea numerelor: | + | |
| - | srand( seed ); // unde seed este o valoare de tip intreg; | + | |
| - | // obţinerea unui număr pseudoaleator: | + | |
| - | n = rand(); // unde n este numarul intreg generat aleator; | + | |
| - | + | ||
| - | </code> | + | |
| - | + | ||
| - | <note important>Pentru a garanta că la fiecare rulare a programului valoarea seed este unică, recomandăm apelarea funcţiei srand cu ora locală a calculatorului în secunde. (Acest lucru va fi prezentat în laboratoarele următoare)</note> | + | |
| - | + | ||
| - | Afişati pe ecran o linie conţinând 3 numere întregi, separate prin spaţiu, generate în mod aleator. | + | |
| - | Rulaţi programul de mai multe ori cu aceeasi valoare seed. Ce observaţi ? | + | |
| - | Schimbaţi valoarea seed şi rulaţi din nou. Ce observaţi ? | + | |
| === Problema 2 === | === Problema 2 === | ||
| - | Scrieţi un program care citeşte şi apoi afişează 3 numere de tip **float** pe aceeaşi linie, separate prin câte un spaţiu, folosind, succesiv, descriptorii **%f**, **%e** şi **%g** pentru cele 3 valori. Folosiţi, pe rând, următoarele date de intrare: | + | Scrieţi un program care citeşte 3 numere de tip **float** pe aceeaşi linie, separate prin câte un spaţiu, şi apoi afişeaza pe trei linii, toate cele 3 valori pe cate o linie, folosind, succesiv, descriptorii **%f**, **%e** şi **%g**. Folosiţi, pe rând, următoarele date de intrare: |
| * 1e2 1e2 1e2 | * 1e2 1e2 1e2 | ||
| * 23.22e+03 23.22e+3 23.22e+03 | * 23.22e+03 23.22e+3 23.22e+03 | ||
| - | * 21 1201 122234215001 | + | * 21 1201 12223333444 |
| Line 231: | Line 210: | ||
| === Problema 3 === | === Problema 3 === | ||
| - | Programul următor afişează valorile funcţiei **sin(x)** pentru valori ale lui x între **0** şi **2*PI**, cu pasul **PI/10.** | + | Programul următor afişează valorile funcţiei **sin(x)** pentru valori ale lui x între **0** şi **2*PI**, cu pasul **PI/20.** |
| <code c> | <code c> | ||
| Line 240: | Line 219: | ||
| { | { | ||
| double x, PI = M_PI; | double x, PI = M_PI; | ||
| - | for (x = 0; x <= 2 * PI; x = x + PI / 10) { | + | for (x = 0; x <= 2 * PI; x = x + PI / 20) { |
| printf("%lf \n", sin(x)); | printf("%lf \n", sin(x)); | ||
| } | } | ||
| - | getchar(); | ||
| return 0; | return 0; | ||
| } | } | ||
| Line 253: | Line 231: | ||
| ^ Intrare ^ Ieşire ^ | ^ Intrare ^ Ieşire ^ | ||
| - | | Programul nu are date de intrare. \\ Observaţie: punctele mediane din exemplul \\ alăturat sunt doar pentru a vă ajuta să \\ număraţi spaţierea! \\ Ele nu trebuie afişate! | ¦·······x¦··sin(x)¦··cos(x)¦ \\ ¦==================¦ \\ ¦··+0.000¦··+0.000¦··+1.000¦ \\ .......................................... | | + | | Programul nu are date de intrare. \\ Observaţie: punctele mediane din exemplul \\ alăturat sunt doar pentru a vă ajuta să \\ număraţi spaţierea! \\ Ele nu trebuie afişate! | ¦·······x¦··sin(x)¦··cos(x)¦ \\ ¦==================¦ \\ ¦··+0.000¦··+0.000¦··+1.000¦ \\ samd... | |
| Line 295: | Line 273: | ||
| **Restricţii şi Precizări** | **Restricţii şi Precizări** | ||
| ---- | ---- | ||
| - | * -1.000.000.000 ≤ a, b, c ≤ +1.000.000.000 | + | * -1.000.000 ≤ a, b, c ≤ +1.000.000 |
| * a + b + c ≠ 0 | * a + b + c ≠ 0 | ||
| * Se consideră triunghi şi un triunghi cu un unghi de 180 de grade şi două unghiuri de 0 grade. | * Se consideră triunghi şi un triunghi cu un unghi de 180 de grade şi două unghiuri de 0 grade. | ||
| Line 349: | Line 327: | ||
| **Restricţii şi Precizări** | **Restricţii şi Precizări** | ||
| ---- | ---- | ||
| - | * 1 ≤ A, B, C, D ≤ 2.000.000.000 | + | * 1 ≤ A, B, C, D ≤ 2.000.000 |
| **Exemplu** | **Exemplu** | ||
| ---- | ---- | ||
| ^ Intrare ^ Ieşire ^ | ^ Intrare ^ Ieşire ^ | ||
| - | | 23 5321 331245 2000000000 | 23 2000000000| | + | | 23 5321 31245 32000 | 23 32000| |
| === Problema 8 === | === Problema 8 === | ||
| Line 367: | Line 345: | ||
| ---- | ---- | ||
| O singură **linie** care va conţine numerele în ordine crescătoare, separate printr-un singur spaţiu. | O singură **linie** care va conţine numerele în ordine crescătoare, separate printr-un singur spaţiu. | ||
| - | |||
| - | **Restricţii şi Precizări** | ||
| - | ---- | ||
| - | * 1 ≤ A, B, C ≤ 2.000.000.000 | ||
| **Exemplu** | **Exemplu** | ||
| ---- | ---- | ||
| ^ Intrare ^ Ieşire ^ | ^ Intrare ^ Ieşire ^ | ||
| - | | 123109 2342 12 | 12 2342 123109 | | + | | 12109 2342 12 | 12 2342 12109 | |
| === Problema 9 === | === Problema 9 === | ||
| Line 411: | Line 385: | ||
| ---- | ---- | ||
| O singură linie care va conţine momentul zilei exprimat în format de ceas digital **HH:MM:SS** sau mesajul Date incorect introduse! | O singură linie care va conţine momentul zilei exprimat în format de ceas digital **HH:MM:SS** sau mesajul Date incorect introduse! | ||
| - | |||
| **Exemplu** | **Exemplu** | ||
| Line 441: | Line 414: | ||
| | 1 1 1 | Nu exista solutii | | | 1 1 1 | Nu exista solutii | | ||
| | 1 -3 2 | 1.00 2.00 | | | 1 -3 2 | 1.00 2.00 | | ||
| + | |||
| + | === Problema 12 === | ||
| + | |||
| + | Problema generării unor numere aleatoare poate fi considerată iniţial una complicată, dar limbajul C ne pune la dispoziţie biblioteca **stdlib**, cu ajutorul căreia lucrurile vor deveni foarte simple. Funcţiile şi constantele acestei biblioteci sunt declarate în header-ul **stdlib.h** pe care va trebui să-l includeţi la începutul programului pe care îl scrieţi. | ||
| + | |||
| + | Utilizând funcţia **rand()** veţi genera numere aleatoare cu valori cuprinse între **0** si **RAND_MAX**, unde **RAND_MAX** este o constanta definită în **stdlib.h**, având în general valoarea maximă a tipului **int**. | ||
| + | |||
| + | Valorile returnate de această funcţie sunt de fapt termenii unui şir de numere generat după o anumită formula ce foloseşte ca punct de plecare o valoare dată. Din cauza acestui aspect, pentru aceeasi valoare iniţială fixată, programul va genera la fiecare rulare aceleaţi numere aleatoare. Pentru a evita acest lucru, biblioteca pune la dispozitie funcţia **srand()** care primeşte ca parametru un număr întreg reprezentând valoarea iniţiala utilizată în calcularea şirului de numere aleatoare. | ||
| + | |||
| + | Astfel, paşii pentru rezolvarea problemei noastre sunt următorii : | ||
| + | |||
| + | <code c> | ||
| + | |||
| + | // fixarea valorii utilizate în generarea numerelor: | ||
| + | srand( seed ); // unde seed este o valoare de tip intreg; | ||
| + | // obţinerea unui număr pseudoaleator: | ||
| + | n = rand(); // unde n este numarul intreg generat aleator; | ||
| + | |||
| + | </code> | ||
| + | |||
| + | <note important>Pentru a garanta că la fiecare rulare a programului valoarea seed este unică, recomandăm apelarea funcţiei srand cu ora locală a calculatorului în secunde. (Acest lucru va fi prezentat în laboratoarele următoare)</note> | ||
| + | |||
| + | Afişati pe ecran o linie conţinând 3 numere întregi, separate prin spaţiu, generate în mod aleator. | ||
| + | Rulaţi programul de mai multe ori cu aceeasi valoare seed. Ce observaţi ? | ||
| + | Schimbaţi valoarea seed şi rulaţi din nou. Ce observaţi ? | ||
| + | |||
| + | |||