Programarea Calculatoarelor, seria CC

Laborator 3

Instrucţiunile limbajului C

În acest laborator veţi învăţa să:



Sintaxa instrucţiunilor limbajului C

Instrucţiunea if:

if (expresie)
   instructiune1;
[else
   instructiune2;]

Ramura else poate lipsi. De asemenea, instrucţiunea se poate formula şi ca expresie astfel:

expresie?instructiune1:instructiune2;

Instrucţiunea switch:

switch (valoare)
{
   case valoare1:
            instructiune1;
            break;
   case valoare2:
            instructiune2;
            break;
   ....................
   case valoareN:
            instructiuneN;
            break;
   [default:
            instructiuneDefault;
            break;]
}

Ramura default poate lipsi. De asemenea, nu este obligatoriu să puneţi break; după fiecare caz din switch, dar dacă nu puneţi, se vor evalua toate condiţiile în ordine.

Instrucţiunea while:

while (expresie)
   instructiune;

Instrucţiunea do-while:

do
{
instructiune;
}
while (expresie);

Instrucţiunea for:

for (variabila = expresie1; expresie2; expresie3)
   instructiune;


Problema 1.

Scrieţi un program pentru afişarea codurilor tuturor caracterelor cu coduri între 32 şi 127, folosind funcţia printf într-un ciclu, câte zece caractere pe o linie. Puteţi folosi urmatorul apel al funcţiei printf:

printf("%c = %d ", ch, ch);


Problema 2.

Scrieţi un program pentru afişarea primelor n (n<=30000) numere naturale, câte m (m<=13) pe o linie. După fiecare 24 de linii afișate, programul va trebui să aștepte apăsarea unei taste pentru a continua. Pentru a aștepta apăsarea unei taste, folosiţi:

getchar();


Problema 3.

Scrieţi un program pentru adunarea de N ori a lui x şi adunarea de N ori a lui Y şi afişează sumele SX şi SY. X şi suma SX sunt de tip float, iar Y şi suma SY sunt de tip double.

Se vor afişa sumele parţiale la fiecare N/10 termeni calculaţi. Aveți grijă să folosiți formatele de citire și afișare corespunzătoare. Folosiţi următoarele seturi de date de intrare:

x=0.1
y=0.1
n=10

x=0.01
y=0.01
n=100

x=0.001
y=0.001
n=1000

Problema 4.

Se citesc numere naturale până la întâlnirea numărului 0. Să se afişeze toate perechile de numere citite consecutiv cu proprietatea că al doilea număr reprezintă restul împărţirii primului număr la suma cifrelor sale.


Problema 5.

Se citeşte de la tastatură un număr natural p. Să se determine toate perechile distincte de numere întregi (i, j, k) cu proprietatea că ele pot reprezenta laturile unui triunghi de perimetru p. Folosiţi maxim două instrucţiuni for.


Problema 6.

Să se scrie un program pentru calculul combinărilor de n luate câte m, pentru n=10 şi m între 1 şi 10, 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 calcul:
    C(n, m) = n! / (m! * (n - m)!)


Problema 7.

Scrieţi un program pentru calculul valorii funcţiei exponenţiale într-un punct x prin dezvoltare după formula de mai jos (dezvoltarea în serie Taylor):

ex= 1 + x/1! + x2/2! + x3/3! + ... + xn/n! + ...

Calculaţi această valoare în două variante:

  • Ca sumă a unui număr dat de termeni
  • Ca sumă a termenilor mai mari decât un epsilon dat (de exemplu, EPS=0.001)

Se va folosi relaţia de recurenţă:

tk = tk - 1 * x / k
t0 = 1

unde tk este termenul k din sumă.

Comparaţi rezultatul obţinut cu rezultatul funcţiei exp(x) şi cu rezultatul funcţiei pow(2.718, x). Folosiţi alternativ tipurile float şi double şi comparaţi rezultatele.


Problema 8.

Scrieţi un program pentru calculul şi afişarea rădăcinii pătrate a unor numere folosind următoarea relaţie de recurenţă între două aproximaţii succesive r1 şi r2 ale rădăcinii lui x:

r2 = (r1 + x / r1) / 2;

Aproximaţia iniţială r1 poate fi orice număr (se va lua r1 = x / 2). Relaţia de recurenţă se aplică atâta timp cât r1 este diferit de r2.

ATENŢIE! În problemele care folosesc numere reale nu se face niciodată comparaţia exactă între acestea, datorită erorilor de precizie care intervin în calcule. Astfel, în loc de testul a == b se va verifica dacă |a - b| < EPS:

fabs(a - b) < EPS

unde EPS este precizia dorită (de exemplu, pentru trei zecimale exacte, vom folosi EPS == 0.001. Se va afişa, pentru verificare, şi rezultatul funcţiei sqrt(x) pentru primele 20 de numere pare.


Problema 9.

Şirul lui Fibonacci este următorul: 0, 1, 1, 2, 3, 5, 8, 13, 21, ... . El se construieşte după următoarele reguli:

F(0) = 0
F(1) = 1
F(k) = F(k - 1) + F(k - 2), pentru orice k > 1

Dându-se un număr natural n (n<=100), se cere să se afişeze toate numerele prime din primii n termeni ai şirului Fibonacci.


Problema 10.

Dându-se un număr natural n (1<=n<=100000), să se afişeze numărul de cifre obţinut prin alipirea numerelor 1, 2, 3, ... n (adică numărul 12345678910111213...).

Exemplu:

Intrare Ieşire
n=100 192