Differences

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

Link to this comparison view

programare-cc:laboratoare:03 [2020/10/13 03:32]
viorel.mocanu
programare-cc:laboratoare:03 [2025/10/19 21:09] (current)
carmen.odubasteanu [Problema 2]
Line 7: Line 7:
  
 **Sintaxa instrucţiunilor limbajului C** **Sintaxa instrucţiunilor limbajului C**
 +
 +Observatie: peste tot pe unde apare //​instructiune//,​ aceasta poate fi inlocuita cu mai multe instructiuni folosind instructiunea bloc:
 +<code c>
 +{
 +   ​instructiune1.1;​
 +   ​instructiune1.2;​
 +   ...
 +}
 +</code c>
  
 Instrucţiunile condiţionale Instrucţiunile condiţionale
Line 12: Line 21:
 Instrucţiunea **if**: Instrucţiunea **if**:
  
 +<code c>
 +if (expresie) ​
 +   ​instructiune1;​
 +else 
 +   ​instructiune2;​
 +</​code>​
 +
 +sau varianta cu instructiune compusa:
 <code c> <code c>
 if (expresie) { if (expresie) {
Line 64: Line 81:
  
 <code c> <code c>
-while (expresie) ​{+while (expresie) ​
    ​instructiune;​    ​instructiune;​
-} 
 </​code>​ </​code>​
  
Line 97: Line 113:
 neformatatprint?​ neformatatprint?​
 <code c> <code c>
-for (variabila = expresie1; condiţie-terminare;​ expresie3) ​{+for (variabila = expresie1; condiţie-terminare;​ expresie3) ​
    ​instructiune;​    ​instructiune;​
-} 
 </​code>​ </​code>​
  
Line 105: Line 120:
 <code c> <code c>
 int n; int n;
-for (n = 0; n < 10; n++) {+for (n = 0; n < 10; n++)
    ​instructiune;​    ​instructiune;​
-} 
 </​code>​ </​code>​
  
Line 129: Line 143:
 ===== Problema 2 ===== ===== Problema 2 =====
  
-Scrieţi un program pentru afişarea primelor n numere naturale nenule, câte m pe o linie. După fiecare 24 de linii complete afişate, programul va trebui să afişeze un rând liber. Pentru a afişa un rând liber, folosiţi:+Scrieţi un program pentru afişarea primelor n numere naturale nenule, câte m pe o linie. După fiecare 24 de linii complete afişate, programul va trebui să afişeze un rând liber si sa opreasca afisarea pana la apasarea unei taste. Pentru a afişa un rând liber, folosiţi:
 <code c> <code c>
 printf("​\n"​);​ printf("​\n"​);​
Line 136: Line 150:
 Pentru a opri programul, folosiţi secvenţa: Pentru a opri programul, folosiţi secvenţa:
 <code c> <code c>
-fflush(stdin);​+fflush(stdin); ​// posibil sa nu fie neaparat nevoie ​
 getchar(); getchar();
 </​code>​ </​code>​
Line 152: Line 166:
   * 1 ≤ n ≤ 30000   * 1 ≤ n ≤ 30000
   * 1 ≤ m ≤ 13   * 1 ≤ m ≤ 13
-  * După ultimul număr afişat urmează obligatoriu caracterul **'​\n'​**,​ indiferent dacă el este sau nu ultimul de pe linia sa. 
-  * **Atenţie!** Pentru a folosi monitorul de evaluare stergeţi din program liniile ce conţin apelurile funcţiilor fflush şi getch. 
  
 **Exemplu** **Exemplu**
Line 239: Line 251:
  
 Să se scrie un program pentru calculul numărului combinărilor de n luate câte m. Calculul se va efectua prin două metode: Să se scrie un program pentru calculul numărului combinărilor de n luate câte m. Calculul se va efectua prin două metode:
-  * Folosind relaţia de recurenţă:​ C(n,​k)=C(n,​k-1)*(n-k+1)/​k pentru k=1,m şi C(n,0)=1+  * Folosind relaţia de recurenţă ​de calcul a unui termen din cel precedent (atentie! NU functie recursiva!!): C(n,​k)=C(n,​k-1)*(n-k+1)/​k pentru k=1,m şi C(n,0)=1
   * Folosind definiţia combinărilor:​ C(n,​m)=n!/​(m!*(n-m)!)   * Folosind definiţia combinărilor:​ C(n,​m)=n!/​(m!*(n-m)!)
  
Line 266: Line 278:
 Scrieţi un program pentru calculul valorii funcţiei exponenţiale într-un punct x dat, prin dezvoltare după formula: Scrieţi un program pentru calculul valorii funcţiei exponenţiale într-un punct x dat, prin dezvoltare după formula:
  
-O singură linie pe care se află două numere naturale, ​**n** şi **m**. +  ​e^x= 1 + x/1! + x^2/2! + x^3/3! + … x^n/n! + 
-  * ex= 1 + x/1! + x2/2! + x3/3! + ... xn/n! + ...+
 Calculaţi această valoare în două variante: Calculaţi această valoare în două variante:
   * Ca sumă a unui număr dat de termeni   * Ca sumă a unui număr dat de termeni
   * Ca sumă a termenilor mai mari decât un epsilon dat.   * Ca sumă a termenilor mai mari decât un epsilon dat.
  
-Se va folosi relaţia de recurenţă:​ +Se va folosi relaţia de recurenţă ​de calcul a unui termen din cel precedent (atentie! NU functie recursiva!!)
-t[k= t[k-1* x / k +t(k= t(k-1* x / k 
-t0 = 1, unde t[keste termenul k din sumă.+t(0) = 1, unde t(keste termenul k din sumă.
  
 Comparaţi rezultatul obţinut cu rezultatul funcţiei exp(x) şi rezultatul funcţiei pow(2.718, x). Comparaţi rezultatul obţinut cu rezultatul funcţiei exp(x) şi rezultatul funcţiei pow(2.718, x).
Line 280: Line 291:
 **Date de Intrare** **Date de Intrare**
 ---- ----
-Din fişierul lab-03-07.in se află numerele ​**x**, **n** si **EPS** pe o singură linie, separate prin spaţiu.+Numerele ​**x**, **n** si **EPS** pe o singură linie, separate prin spaţiu.
  
  
 **Date de Ieşire** **Date de Ieşire**
 ---- ----
-În fişierul lab-03-07.out se vor afişa pe aceeasi linie, separate printr-un spaţiu cele patru valori calculate în ordinea: rezultatul sumei unui număr dat de termeni din dezvoltare, rezultatul sumei termenilor mai mari decât **EPS**, rezultatul funcţiei exp(x) şi cu rezultatul funcţiei pow(2.718, x). +Se vor afişa pe aceeasi linie, separate printr-un spaţiu cele patru valori calculate în ordinea: rezultatul sumei unui număr dat de termeni din dezvoltare, rezultatul sumei termenilor mai mari decât **EPS**, rezultatul funcţiei exp(x) şi cu rezultatul funcţiei pow(2.718, x). 
  
  
Line 303: Line 314:
 Scrieţi un program pentru calculul rădăcinii pătrate a unui număr (**x**), folosind relaţia de recurenţă între două aproximări succesive ( **r1 şi r2**) ale rădăcinii pătrate a lui **x**: Scrieţi un program pentru calculul rădăcinii pătrate a unui număr (**x**), folosind relaţia de recurenţă între două aproximări succesive ( **r1 şi r2**) ale rădăcinii pătrate a lui **x**:
 r2 = (r1 + x/r1) / 2 r2 = (r1 + x/r1) / 2
 +
 +Atentie! NU se foloseste functie recursiva!
  
 Aproximaţia iniţială (**r1**) este **x/2**. Calculul continuă atât timp cât **r1** este diferit de **r2**. Aproximaţia iniţială (**r1**) este **x/2**. Calculul continuă atât timp cât **r1** este diferit de **r2**.
Line 333: Line 346:
 ===== Problema 9 ===== ===== Problema 9 =====
  
-Scrieţi un program care afişează toate numerele prime dintre primii n termeni ai şirului Fibonacci. El se construieşte după următoarele reguli:+Scrieţi un program care afişează toate numerele ​care sunt si numere ​primedintre primii n termeni ai şirului Fibonacci. El se construieşte după următoarele reguli:
  
 F(0)=0 F(0)=0
Line 347: Line 360:
 **Date de Ieşire** **Date de Ieşire**
 ---- ----
-Numerele prime dintre primii **n** termeni ai şirului Fibonacci, câte unul pe linie.+Numerele ​care sunt si prime dintre primii **n** termeni ai şirului Fibonacci, câte unul pe linie.
  
  
Line 359: Line 372:
 ---- ----
 ^ Intrare ​     ^ Ieşire ​      ^ ^ Intrare ​     ^ Ieşire ​      ^
-| 2 \\ 3 |+| 2 \\ 3 \\ 5 \\ 13|
  
 ===== Problema 10 ===== ===== Problema 10 =====
Line 371: Line 384:
 **Date de Ieşire** **Date de Ieşire**
 ---- ----
-Numărul cifrelor obţinute prin alipirea numerelor până la **n**, inclusiv.+Numărul cifrelor ​numarului ​obţinut prin alipirea numerelor până la **n**, inclusiv.
  
 **Restricţii şi Precizări** **Restricţii şi Precizări**
programare-cc/laboratoare/03.1602549124.txt.gz · Last modified: 2020/10/13 03:32 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