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: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 ş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 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 ?
 +
 +
programare-cc/laboratoare/02.1695737052.txt.gz · Last modified: 2023/09/26 17:04 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