Programarea Calculatoarelor, seria CC

Laborator 4

Tablouri

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



Problema 1 - problemă rezolvată.

Program care citește un număr N și N note (între 1 și 10) și afișează procentul notelor sub 5.

Rezolvare:

Să incepem prin identificarea pașilor ce îi avem de parcurs pentru a rezolva problemei:

Fie V vectorul în care sunt stocate notele. Pseudocodul care calculează procentul de note sub 5 va fi:

n5 = 0
pentru i de la 1 la N cu pasul 1
     dacă (V[i] < 5) atunci
          n5 = n5 + 1
procent = n5 * 100 / N
afișează procent

Programul C care implementează algoritmul descris mai sus va fi:

 1 #include <stdio.h>
 2
 3 int main(void)
 4 {
 5     int N, v[100], i, n5;
 6     float procent;
 7
 8     printf("N = ");     /* afisam un mesaj pentru utilizator */
 9     scanf("%d", &N);    /* citim numarul de note ce vor fi introduse de la
10                       tastatura */
11     for (i = 0; i < N; i++) {
12        printf("v[%d] = ", i);
13        scanf("%d", &v[i]);     /* citim a i-a nota */  
14     }
15
16     /* in n5 vom numara cate note mai mici ca 5 au fost citite */
17     n5 = 0; /* initializam n5 */
18     for (i = 0; i < N; i++)     /* parcurgem vectorul de note */
19        if (v[i] < 5)           /* si daca gasim o nota mai mica decat 5 */
20           n5++;               /* vom incrementa n5 */
21
22     /* aplicam formula de calculare a procentului: cum n5, 100 si N sunt de tip
23      * int, daca nu am converti una din ele la float, s-ar face impartire
24      * intreaga */ 
25     procent = (float)n5 * 100 / N;
26
27     printf("procent = %.3f\n", procent);
28
29     return 0;
30 }


Problema 2.

Program care citește un șir de numere (pozitive și negative) și afișează media aritmetică a numerelor pozitive și media aritmetică a numerelor negative. (Atenție la situația când toate numerele au același semn!).

Exemplu:

Intrare Ieşire
5
-2 3 5 -7 11
MP = 6.33
MN = -4.5
5
2 3 5 7 11
MP = 5.6
MN = nu se poate calcula

Problema 3.

Program pentru determinarea valorii minime dintre toate valorile maxime pe liniile unei matrice de numere reale (punct in "șa").

Exemplu:

Intrare Ieşire
4 4
2 17 1 4
9 2 11 3
1 8 5 6
8 9 3 4
8

Problema 4.

Se citesc 2 matrice A (m x n) și B (p x q) de la tastatură. Afișați matricea C = A * B sau mesajul "nu se poate efectua A * B".

Ci, j = ∑ Ai, k * Bk, j, 1 ≤ i ≤ m, 1 ≤ k ≤ n = p, 1 ≤ j ≤ q

Exemplu:

Intrare Ieşire
2 1
1
2

1 3
1 2 3
2 3
1 2 3
2 4 6

Problema 5.

Program pentru interclasarea a doi vectori ordonați într-un singur vector ordonat.

Hint: Veți parcurge cei 2 vectori in paralel și veți construi un nou vector, la care veți adăuga, pe rând, câte un element din primul sau din al doilea vector (în funcție de care dintre ele este mai mic).

Exemplu:

Intrare Ieşire
5 6
2 4 9 12 14
1 3 5 8 9 11
1 2 3 4 5 8 9 9 11 12 14

Problema 6.

Se citește o matrice pătratică A de la tastatură. Afișati toate elementele de sub diagonala secundară, pe coloane.

Exemplu:

Intrare Ieşire
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
14 11 15 8 12 16

Problema 7.

Program pentru afișarea celei mai lungi secvențe de elemente consecutive ordonate crescător dintr-un vector dat.

Exemplu:

Intrare Ieşire
9
5 3 6 2 4 6 8 4 1
2 4 6 8

Problema 8.

Program pentru afișarea secvenței de elemente consecutive de sumă maximă dintr-un vector.

Exemplu:

Intrare Ieşire
12
5 0 -1 -4 2 8 3 -1 2 -5 -8 4
2 8 3 -1 2

Probleme suplimentare

Problema 1.

Program care citește un șir de numere și verifică dacă acest șir este ordonat crescator sau ordonat descrescator sau nu este ordonat sau este un șir constant. Se afișează un mesaj: "crescator" , "descrescator",...

Exemplu:

Intrare Ieşire
5
2 3 5 7 11
crescator
4
11 2 2 5
neordonat
3
3 3 3
constant

Problema 2.

Program care citește n numere reale X și m + 1 numere întregi A și afișează numărul de valori din X situat în fiecare din cele m intervale deschise delimitate de valorile din A.

Se verifică dacă valorile A sunt introduse în ordine crescatoare și în caz contrar programul se oprește.

Exemplu:

Intrare Ieşire Explicație
7
5.2 4.1 1.1 5 5.9 6.7 3.14

4
2 3 5 7
0 1 3 Nu sunt numere incluse în intervalul (2, 3).
În (3, 4) este inclus 3.14.
În (4, 5) sunt incluse 5.2, 4.1, 5.9.

Problema 3.

Program pentru calculul valorii unui polinom cu coeficienți dați, prin mai multe metode cu următoarea numerotare a coeficienților: P(x) = c0 * xn + c1 * xn - 1 + ... + cn - 1 * x + cn

Se citesc de la tastatură: x, n, c[0], ... , c[n]

  • Ca suma de termeni calculați separat (cu funcția pow, din math.h)
  • Printr-o relație de recurență de forma: P(x, k) = P(x, k - 1) * x + c[k] și P(x, 0) = c[0].
    De exemplu: pentru n = 3 și c = { 1, 2, 3, 4 }, corespunzătoare polinomului P(x) = x3 + 2 * x2 + 3 * x + 4, se poate scrie P(x) = x * (x * (x * 1 + 2) + 3) + 4

Exemplu:

Intrare Ieşire
0.5 3
1 2 3 4
6.12500

Problema 4.

Fie un vector de numere întregi (inițial toate având valoarea 0) de lungime N. Se citesc de la tastatură un set de M tripleți de forma B E V fiecare având urmatoarea semnificație : toate elementele din vector ale căror poziții (indexate de la 0) sunt cuprinse între B și E inclusiv vor fi modificate prin adunare cu V.

Afișati vectorul obținut în urma aplicării celor M operații.

Exemplu:

Intrare Ieşire Explicație
5 3
1 2 3
2 4 -1
0 1 2
2 5 2 -1 -1 Inițial: 0 0 0 0 0
După (1 2 3): 0 3 3 0 0
După (2 4 -1): 0 3 2 -1 -1
După (0 1 2): 2 5 2 -1 -1