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:03]
mihai.nan
programare-cc:laboratoare:02 [2024/10/16 10:02] (current)
mihai.nan [Probleme propuse]
Line 188: Line 188:
 Mai găsiţi detalii şi pe: [[http://​www.cplusplus.com/​reference/​cstdio/​printf/​]] Mai găsiţi detalii şi pe: [[http://​www.cplusplus.com/​reference/​cstdio/​printf/​]]
  
-===== Problema 1 =====+==== Probleme propuse ​====
  
-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.+=== Problema ​1 ===
  
-Utilizând funcţia **rand()** veţ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**. +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.
- +
-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 ş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:
Line 227: 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/10.**
Line 254: Line 235:
  
  
-===== 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 278: Line 259:
 | 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 305: Line 286:
 | 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 332: Line 313:
 | 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 354: Line 335:
 | 23 5321 331245 2000000000 ​  | 23 2000000000| | 23 5321 331245 2000000000 ​  | 23 2000000000|
  
-===== 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 375: Line 356:
 | 123109 2342 12   | 12 2342 123109 | | 123109 2342 12   | 12 2342 123109 |
  
-===== 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 397: Line 378:
 | 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 417: Line 398:
 | 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 439: 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 ?
 +
 +
programare-cc/laboratoare/02.1695737017.txt.gz · Last modified: 2023/09/26 17:03 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