Differences

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

Link to this comparison view

programare-cc:laboratoare:02 [2020/10/13 02:25]
viorel.mocanu
programare-cc:laboratoare:02 [2024/10/16 10:02] (current)
mihai.nan [Probleme propuse]
Line 1: Line 1:
-===== Laboratorul ​02=====+===== Laborator ​02 - Funcții de citire și scriere  ​===== 
 + 
 +==== Breviar ​====
  
 **În acest laborator veţi învăţa să:** **În acest laborator veţi învăţa să:**
Line 186: 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 225: 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 252: Line 235:
  
  
-===== Problema 4 ===== +=== Problema 4 === 
-===== Problema 5 ===== + 
-===== Problema 6 ===== +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**. 
-===== Problema 7 ===== + 
-===== Problema 8 ===== +**Date de Intrare** 
-===== Problema 9 ===== +---- 
-===== Problema 10 ===== +O singură linie pe care se află două numere reale, **X** şi **Y**, reprezentând coordonatele punctului pe axa **Ox**, respectiv **Oy**. 
-===== Problema 11 =====+ 
 +**Date de Ieşire** 
 +---- 
 +O singură linie care va conţine numărul cadranului în care se află punctul, sau mesajul "punct pe axe"​. 
 + 
 +**Restricţii şi Precizări** 
 +---- 
 +  * -1000 ≤ X, Y ≤ +1000 
 + 
 + 
 +**Exemplu** 
 +---- 
 +^ Intrare ​     ^ Ieşire ​      ^ 
 +| -23.15 1.2    | 2 | 
 +| 19.2 1    | 1 | 
 +| 0 0    | punct pe axe |  
 + 
 +=== Problema 5 === 
 + 
 +Scrieţi un program care să verifice dacă 3 numere întregi date **a, b, c** pot forma lungimile laturilor unui triunghi. 
 + 
 +**Date de Intrare** 
 +---- 
 +O singură linie care va conţine trei numere întregi: **a, b şi c** separate prin spaţii. 
 + 
 +**Date de Ieşire** 
 +---- 
 +O singură linie care va contine un mesaj din mulţimea { **DA**, **NU** }. Nu afişaţi spaţii sau alte caractere suplimentare. 
 + 
 + 
 +**Restricţii şi Precizări** 
 +---- 
 +  * -1.000.000.000 ≤ a, b, c ≤ +1.000.000.000 
 +  * a + b + c ≠ 0 
 +  * Se consideră triunghi şi un triunghi cu un unghi de 180 de grade şi două unghiuri de 0 grade. 
 + 
 + 
 +**Exemplu** 
 +---- 
 +^ Intrare ​     ^ Ieşire ​      ^ 
 +| 5 4 3    | DA | 
 +| -1 2 0     | NU | 
 +| 6 6 0     | DA |  
 + 
 +=== 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//​. 
 + 
 +**Date de Intrare** 
 +---- 
 +Trei numere reale: **a, b şi c.** 
 + 
 + 
 +**Date de Ieşire** 
 +---- 
 +O singură **linie** care va contine un mesaj din mulţimea { **oarecare, echilateral,​ dreptunghic,​ isoscel, dreptunghic isoscel** }, în funcţie de tipul de triunghi. 
 +Nu afişaţi spaţii sau alte caractere suplimentare. 
 + 
 +**Restricţii şi Precizări** 
 +---- 
 +  * Cele trei numere pot forma întotdeauna laturile unui triunghi. 
 +  * Două numere reale se vor considera egale dacă diferenţa lor în modul este mai mică decât 0.001. 
 + 
 +**Exemplu** 
 +---- 
 +^ Intrare ​     ^ Ieşire ​      ^ 
 +| 10 10 10  | echilateral| 
 +| 4 5 3     | dreptunghic| 
 +| 5 10 10   | isoscel |  
 +| 2.8284 2 2| dreptunghic isoscel|  
 + 
 +=== Problema 7 === 
 + 
 +Scrieţi un program care determină minimul şi maximul dintre 4 numere, folosind doar instructiunea **if**. 
 + 
 +**Date de Intrare** 
 +---- 
 +O singură linie care va conţine patru numere întregi, **A, B, C şi D** separate prin spaţii. 
 + 
 +**Date de Ieşire** 
 +---- 
 +O singură **linie** care va conţine două numere întregi, separate printr-un singur spaţiu, reprezentând în ordine minimul şi maximul dintre cele patru numere. 
 + 
 + 
 +**Restricţii şi Precizări** 
 +---- 
 +  * 1 ≤ A, B, C, D ≤ 2.000.000.000 
 + 
 +**Exemplu** 
 +---- 
 +^ Intrare ​     ^ Ieşire ​      ^ 
 +| 23 5321 331245 2000000000 ​  | 23 2000000000| 
 + 
 +=== Problema 8 === 
 + 
 +Afişaţi trei numere în ordine crescătoare,​ folosind doar instrucţiunea **if**. 
 + 
 +**Date de Intrare** 
 +---- 
 +O singură linie care va conţine trei numere întregi, **A, B, şi C** separate prin spaţii. 
 + 
 +**Date de Ieşire** 
 +---- 
 +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** 
 +---- 
 +^ Intrare ​     ^ Ieşire ​      ^ 
 +| 123109 2342 12   | 12 2342 123109 | 
 + 
 +=== 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. 
 + 
 +**Date de Intrare** 
 +---- 
 +O singură linie pe care se află trei numere întregi **H, M şi S**. 
 + 
 +**Date de Ieşire** 
 +---- 
 +O singură linie care va conţine momentul zilei exprimat în format de ceas digital **HH:​MM:​SS**. 
 + 
 +**Restricţii şi Precizări** 
 +---- 
 +  * 0 ≤ H ≤ 23 
 +  * 0 ≤ M, S ≤ 59 
 + 
 +**Exemplu** 
 +---- 
 +^ Intrare ​     ^ Ieşire ​      ^ 
 +| 15 42 3   | 15:42:03 | 
 + 
 +=== 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. 
 +<note tip>//​**Scanf** returnează numărul de argumente citite, care se potrivesc cu formatul căutat. Astfel, scanf("​%d",&​a) va returna 1 dacă a citit un întreg sau 0 altfel.//</​note>​ 
 + 
 +**Date de Intrare** 
 +---- 
 +O singură linie pe care se află trei numere întregi **H, M şi S** sau alte caractere eronate. 
 + 
 +**Date de Ieşire** 
 +---- 
 +O singură linie care va conţine momentul zilei exprimat în format de ceas digital **HH:​MM:​SS** sau mesajul Date incorect introduse! 
 + 
 + 
 +**Exemplu** 
 +---- 
 +^ Intrare ​     ^ Ieşire ​      ^ 
 +| 1a 42 3   | Date incorect introduse! | 
 +| 11 4.2 3   | Date incorect introduse! | 
 + 
 +=== Problema 11 === 
 + 
 +Scrieţi un program pentru rezolvarea ecuaţiei de gradul 2. 
 + 
 +**Date de Intrare** 
 +---- 
 +Trei numere reale a, b, c ce reprezintă coeficienţii ecuaţiei de gradul 2 în ordine descrescătoare după puterile lui x. 
 + 
 + 
 +**Date de Ieşire** 
 +---- 
 +Soluţiile reale ale ecuaţiei în ordine crescătoare,​ cu 2 zecimale. 
 +În caz că ecuaţia nu are soluţie se va afişa mesajul "Nu exista solutii"​. 
 +În caz că ecuaţia are o infinitate de soluţii se va afişa mesajul "​Infinit"​. 
 + 
 + 
 +**Exemplu** 
 +---- 
 +^ Intrare ​     ^ Ieşire ​      ^ 
 +| 1 -2 1   | 1.00 | 
 +| 1 1 1   | Nu exista solutii | 
 +| 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.1602545118.txt.gz · Last modified: 2020/10/13 02:25 by viorel.mocanu
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