This shows you the differences between two versions of the page.
|
programare-cc:laboratoare:03 [2025/10/18 10:52] carmen.odubasteanu [Problema 2] |
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. | ||
| **Exemplu** | **Exemplu** | ||
| Line 238: | 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 265: | 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: | ||
| - | * ex= 1 + x/1! + x2/2! + x3/3! + ... + xn/n! + ... | + | * e^x= 1 + x/1! + x^2/2! + x^3/3! + … + x^n/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[k] este termenul k din sumă. | + | t(0) = 1, unde t(k) este 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 301: | 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 331: | 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 prime, dintre primii n termeni ai şirului Fibonacci. El se construieşte după următoarele reguli: |
| F(0)=0 | F(0)=0 | ||
| Line 345: | 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 357: | Line 372: | ||
| ---- | ---- | ||
| ^ Intrare ^ Ieşire ^ | ^ Intrare ^ Ieşire ^ | ||
| - | | 5 | 2 \\ 3 | | + | | 8 | 2 \\ 3 \\ 5 \\ 13| |
| ===== Problema 10 ===== | ===== Problema 10 ===== | ||
| Line 369: | 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** | ||