Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 ş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țun program ​care citește două numere naturale ​(de tip **int**) pe aceeași ​linie, separate prin câte un spațiu. Calculațsuma șprodusul pentru aceste numere șafișaț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ţprogramul de mai multe ori cu aceeasi valoare seed. Ce observaţ+
-Schimbaţvaloarea seed şrulaţi din nouCe 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 ?
 +
 +
programare-cc/laboratoare/02.1695737141.txt.gz · Last modified: 2023/09/26 17:05 by mihai.nan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0