This shows you the differences between two versions of the page.
programare-cc:laboratoare:02 [2023/09/26 17:04] 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 229: | Line 208: | ||
</note> | </note> | ||
- | ===== 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... | |
- | ===== Problema 4 ===== | + | === Problema 4 === |
Scrieţi un program care să determine cadranul în care se află un punct dat prin coordonatele sale reale. Se va afişa un număr între **1** şi **4** sau mesajul **punct pe axe**. | Scrieţi un program care să determine cadranul în care se află un punct dat prin coordonatele sale reale. Se va afişa un număr între **1** şi **4** sau mesajul **punct pe axe**. | ||
Line 280: | Line 258: | ||
| 0 0 | punct pe axe | | | 0 0 | punct pe axe | | ||
- | ===== Problema 5 ===== | + | === Problema 5 === |
Scrieţi un program care să verifice dacă 3 numere întregi date **a, b, c** pot forma lungimile laturilor unui triunghi. | Scrieţi un program care să verifice dacă 3 numere întregi date **a, b, c** pot forma lungimile laturilor unui triunghi. | ||
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 307: | Line 285: | ||
| 6 6 0 | DA | | | 6 6 0 | DA | | ||
- | ===== Problema 6 ===== | + | === Problema 6 === |
Scrieţi un program care citeşte 3 numere reale reprezentând lungimile laturilor unui triunghi şi care afişează tipul de triunghi cu aceste laturi: //oarecare, isoscel, echilateral, dreptunghic sau dreptunghic isoscel//. | Scrieţi un program care citeşte 3 numere reale reprezentând lungimile laturilor unui triunghi şi care afişează tipul de triunghi cu aceste laturi: //oarecare, isoscel, echilateral, dreptunghic sau dreptunghic isoscel//. | ||
Line 334: | Line 312: | ||
| 2.8284 2 2| dreptunghic isoscel| | | 2.8284 2 2| dreptunghic isoscel| | ||
- | ===== Problema 7 ===== | + | === Problema 7 === |
Scrieţi un program care determină minimul şi maximul dintre 4 numere, folosind doar instructiunea **if**. | Scrieţi un program care determină minimul şi maximul dintre 4 numere, folosind doar instructiunea **if**. | ||
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 === |
Afişaţi trei numere în ordine crescătoare, folosind doar instrucţiunea **if**. | Afişaţi trei numere în ordine crescătoare, folosind doar instrucţiunea **if**. | ||
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 === |
Scrieţi un program care citeşte trei numere întregi, **H, M şi S** reprezentând ora, minutul şi secunda dintr-un anumit moment al zilei, şi le afişează în format de ceas digital. | Scrieţi un program care citeşte trei numere întregi, **H, M şi S** reprezentând ora, minutul şi secunda dintr-un anumit moment al zilei, şi le afişează în format de ceas digital. | ||
Line 399: | Line 373: | ||
| 15 42 3 | 15:42:03 | | | 15 42 3 | 15:42:03 | | ||
- | ===== Problema 10 ===== | + | === Problema 10 === |
În programul anterior observaţi că dacă în loc de a introduce o valoare numerică tastaţi altceva (o literă, de exemplu) programul se va comporta anormal. Încercati să modificaţi programul astfel încat să aveţi protecţie la datele eronate. | În programul anterior observaţi că dacă în loc de a introduce o valoare numerică tastaţi altceva (o literă, de exemplu) programul se va comporta anormal. Încercati să modificaţi programul astfel încat să aveţi protecţie la datele eronate. | ||
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 419: | Line 392: | ||
| 11 4.2 3 | Date incorect introduse! | | | 11 4.2 3 | Date incorect introduse! | | ||
- | ===== Problema 11 ===== | + | === Problema 11 === |
Scrieţi un program pentru rezolvarea ecuaţiei de gradul 2. | Scrieţi un program pentru rezolvarea ecuaţiei de gradul 2. | ||
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 ? | ||
+ | |||
+ |