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 [2024/10/16 10:02] (current) mihai.nan [Probleme propuse] |
||
---|---|---|---|
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 === | ||
Line 441: | Line 420: | ||
| 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 10 === | ||
+ | |||
+ | 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 ? | ||
+ | |||
+ |