Sunteți pe pagina 1din 25

Bazele programarii

calculatoarelor
Seminar 4
Vectori
(partea I-a)

Lect. univ. Radu Mogos

2021
Cuprins

Aspecte teoretice vectori


Exercitii si probleme

2
Vector – aspecte teoretice
 Vectorul (masiv unidimensional) – ?
 R: colecţie de date de acelaşi tip, memorate într-o zonă de
memorie contiguă, reunite sub un nume comun.
 Exemplu: intreg v(6); //sau intreg v[6];

Valori
elemente 4 10 12 3 100 50

Pozitii 0 1 2 3 4 5

Valoare element

v[0] = 4
Denumire variabila
de tip vector
3
Pozitie element
Vector – aspecte teoretice
 Declararea unei variabile de tip vector:

tip_dată nume (nr_elemente);


//sau tip_dată nume [nr_elemente]; in C

unde nr_elemente - constantă întreagă ce specifică numărul de elemente ale


vectorului;

 Exemplu de declarare:
 INTREG a(10);
 REAL b(20);
 CARACTER c(5);

4
Vector – aspecte teoretice Schema logica - ?
Start

Citire si afisare vector Citeste n

i=0

Pseudocod
Da

 INTREG i, n; i<n

 REAL v(100); READ v(i)

 READ (n);

Nu
i= i +1

i=0
 DO-FOR i = 0,n-1,1 //vi, vf, vr
 READ (v(i)); Da
 ENDDO; i<n

WRITE v(i)

Nu
i = i+1
 DO-FOR i = 0,n-1,1
 WRITE (v(i));
 ENDDO; STOP

5
 STOP.
Probleme

6
Probleme
1. Scrieti programul care calculeaza suma elementelor unui vector. Elementele sunt
reale si se introduc de la tastatura.

2. Sa se scrie programul pentru calculul sumei elementelor de rang impar ale unui
vector de dimensiune n.

3. Sa se scrie programul pentru calculul sumei elementelor strict pozitive ale unui
vector de dimensiune n.

4. Scrieti programul care determina prima aparitie a unei valori date intr-un vector
neordonat, de dimensiune n.

5. Scrieti programul care face interschimbarea elementelor egal departate de capetele


unui vector si afisarea vectorului obtinut.

6. Sa se scrie programul care calculeaza produsul scalar dintre 2 vectori de


dimensiune n

7. Sa se scrie programul care calculeaza produsul vectorial dintre 2 vectori de


dimensiune n

8. Sa se scrie un program pentru determinarea elementului maxim dintr-un vector de


dimensiune n si memorarea tuturor aparitiilor sale.

7
Problema 1 - enunt
Scrieti programul care calculeaza suma elementelor unui vector. Elementele sunt
reale si se introduc de la tastatura.
Indicatii:
 X= (x1,x2,...,xn). // se pleaca de la pozitia 1
 Suma elementelor: S = x1 + x2 + ... + xn =

 Algoritm:
 S0=0;
 ....
 S1 = S0 + x1 = 0 + x1 = x1;
 S2 = S1 +x2 = x1 +x2;
 .......
 Sn=Sn-1 +xn = x1 +x2 +... +xn;
 S=Sn.
 S0....Sn nu ne intereseaza, insumarea se va realiza in aceeasi locatie de memorie, cu adresa
simbolica S. Aici se vor depune sumele partiale (se va cumula cate un element).

 S = 0; //se refoloseste variabila S


 .....
 S = S + x1 = 0+x1 = x1;
 S = S +x2 = x1 +x2;
 .....
 S = S + xn = x1 +x2 +.... +xn;

 Algoritmul recursiv poate folosi 2 formule:


 - formula de start: S = 0;
 - formula recursiva: S = S + x(i), i=1,n.
 Elementele vectorului sunt reale si se introduc de la tastatura.
Problema 1 - rezolvare Start

PSEUDOCOD SL Citeste n

 INTREG i, n; i=0

 REAL v(100),s;
Da
i<=n-1

 READ (n); Citeste v(i)

Nu
 DO-FOR i = 0,n-1,1 //vi, vf, vr i= i +1

 READ (v(i)); s=0

 ENDDO; i=0

 s = 0; Da
i<=n-1
 DO-FOR i = 0,n-1,1 s = s +v(i)

 s = s + v(i);

Nu
i = i+1
 ENDDO; Tipareste s

 WRITE (s);
STOP
 STOP
Problema 2 - enunt
Sa se scrie programul pentru calculul sumei elementelor de rang
impar ale unui vector de dimensiune n.

 Indicatie:
 X = (x0,x1...,xn-1) //se pleaca de la pozitia 0
 S = x1 + x3 + x5 +….

 Exemplu:
 vector x=(3,2,6,4,10) // v(0)=3
 S= x(1) +x(3) = 2 + 4 = 6

 Sugestii pentru solutie?

 a) se parcurge vectorul cu indicele pornind de la valoarea initiala 1 si crescand cu


pasul 2. Se foloseste WHILE - DO.

 b) se parcurge vectorul cu indicele pornind de la valoarea initiala 1 si crescand cu


pasul 2. Se foloseste DO-FOR

 TEMA - c) se parcurge vectorul intergral si se selecteza elementele de rang impar


(pozitie impara), testand indicele prin verificarea restului impartirii lui i la 2 (i%2).

 OBS: / - pentru cat, % - pentru restul


START
Problema 2 – rezolvare a)
READ n
Pseudocod SL

 REAL v(100),s ; i=0


 INTREG n,i;
Da
da
i<n
 READ (n); C

S
READ v(i);
 DO-FOR i=0,n-1,1 nu

 READ (v(i));
Nu
 ENDDO; i=i+1
WHILE-DO
WHILE C DO S
 s = 0; ENDWHILE;
s=0

 i = 1; i=1
 WHILE (i<n)
 DO { s = s + v(i);
Da
 i = i + 2; i<n
 } s=s+v(i)
 ENDWHILE; Nu

WRITE s i=i+2
 WRITE (“Suma este:”, s);
 STOP
STOP
START

Problema 2 – rezolvare b)
READ n

Pseudocod SL
i=0
 REAL v(100),s ;
 INTREG n,i; Da
i<n

 READ (n); READ v(i)

 DO-FOR i=0,n-1,1 Nu
 READ (v(i)); i=i+1

 ENDDO; s=0

i=1
 s = 0;
 DO-FOR i = 1,n-1,2 Da
 s = s + v(i) i<n

 ENDDO; s = s + v(i)

Nu
 WRITE (“Suma este:”, s);
 STOP WRITE s
i=i+2

STOP
Problema 3 - enunt

Sa se scrie programul pentru calculul sumei elementelor strict pozitive ale


unui vector de dimensiune n.

Indicatii:
 X= (x0,x1,...,xn-1).
 Suma elementelor: S = x(i), daca x(i)>0, i=0,n-1,

 Algoritm:
 S = 0; // initializare suma
 .....
 Daca x0>0, atunci S = S + x0;
 Daca x1>0, atunci S = S +x1;
 .....
 Daca xn-1>0, atunci S = S + xn-1;

 Daca S>0 afiseaza S
 Altfel afiseaza “ Nu exista elemente pozitive”
Problema 3 - rezolvare
PSEUDOCOD SCHEMA LOGICA - ?
 REAL v(100),s ;
 INTREG n,i;

 READ (n);

 DO-FOR i=0,n-1,1
 READ (v(i));
 ENDDO;

 s = 0;
 DO-FOR i = 0,n-1,1
 IF (v(i) >0) THEN s = s + v(i);
 ENDIF;
 ENDDO;

 IF (s>0) THEN WRITE (“Suma este:”, s)


 ELSE WRITE (“Vectorul nu are elemente pozitive”)
 ENDIF;

 STOP
Problema 4 - enunt
Scrieti programul care determina prima aparitie a - instr. conditionata anterior
unei valori date intr-un vector neordonat, de WHILE C DO S
ENDWHILE;
dimensiune n.

Indicatie:
 vectorul se parcurge secvential de la primul
element, cu ajutorul instructiunii WHILE – DO,
da
C

pana cand:
S
 - se regaseste valoarea cautata nu

 sau
 - pana la ultimul element, caz in care
valoarea cautata nu se afla in vector, afisandu-
se un mesaj corespunzator

Se poate utiliza si instructiunea DO-FOR ?


Care este mai eficienta in acest caz ?
Problema 4 - rezolvare
PSEUDOCOD
SCHEMA LOGICA - ?
 REAL v(100), a ; /*a – val. cautata*/
 INTREG n,i;

 READ (n);

 DO-FOR i=0,n-1,1
 READ (v(i));
 ENDDO;

 READ (a);

 i = 0;
 WHILE ((i<n) && (v[i] != a))
 DO i=i+1; /* && = Si */
 ENDWHILE;

 IF (i == n) THEN WRITE (“Val. cautata nu exista in vector”)


 ELSE WRITE (“ Prima aparitie a lui „a‟ e pe pozitia:”, i)
 ENDIF;

 STOP
Problema 5 - enunt
Scrieti programul care face interschimbarea elementelor egal departate
de capetele unui vector si afisarea vectorului obtinut.
Exemplu:
Indicatie:
n=6
i=0,n/2-1,1
v = [4,10,12,3,10,50]
aux=x[i];
x[i]=x[n-i-1];
Se interschimba valorile de pe pozitiile:
0 cu 5 x[n-i-1]=aux;
1 cu 4
2 cu 3

0 1 2 3 4 5

4 10 12 3 100 50

Rezultat 50 100 3 12 10 4
Problema 5 - rezolvare
PSEUDOCOD SCHEMA LOGICA - ?
 INTREG x(50), i, aux, n;
 READ (n);

 DO-FOR i=0,n-1,1
 READ (x(i));
 ENDDO;

 /*interschimbare elemente vector*/


 DO-FOR i=0,(n/2)-1,1
 {
 aux = x(i);
 x(i) = x(n-i-1);
 x(n-i-1) = aux;
 }
 ENDDO;

 /*afisare vector*/
 DO-FOR i=0,n-1,1
 WRITE (x(i));
 ENDDO;

 STOP.
Problema 6 - enunt
Sa se scrie programul care calculeaza produsul scalar dintre 2 vectori
de dimensiune n

Exemplu:
 x=(1,2,3)
 y=(4,5,6)
 ps= 1*4 + 2*5 + 3*6 => rezultatul este un singur element

Indicatie:
 X=(x1,x2,x3)
 Y=(y1,y2,y3)
 ps = x1*y1 + x2*y2 + x3*y3 => 1 element
Problema 6 - rezolvare
PSEUDOCOD SCHEMA LOGICA - ?

 REAL x(100), y(100), ps;


 INTREG i,n;

 READ (n);

 DO-FOR i=0,n-1,1
 READ (x(i));
 ENDDO;
Ce caz nu e tratat ?
R: cel al dimensiunilor diferite pentru vectori
 DO-FOR i=0,n-1,1
 READ (y(i));
 ENDDO;

 ps=0;
 DO-FOR i=0,n-1,1
 ps = ps + x(i) * y(i)
 ENDDO;

 WRITE (ps);
 STOP
Problema 7 - enunt
Sa se scrie programul care calculeaza produsul vectorial dintre 2 vectori de
dimensiune n.

Exemplu:
 x=(1,2,3)
 y=(4,5,6)
 pv= (1*4, 2*5, 3*6) => rezultatul este un vector

Indicatie:
 X=(x1,x2,x3)
 Y=(y1,y2,y3)
 Z=(x1*y1, x2*y2, x3*y3) – vector cu 3 elemente
Problema 7 - rezolvare
PSEUDOCOD SCHEMA LOGICA - ?
 REAL x(100), y(100), z(100);
 INTREG i,n;

 READ (n);
 DO-FOR i=0,n-1,1
 READ (x(i));
 ENDDO; Ce caz nu e tratat ?
R: cel al dimensiunilor diferite pentru vectori
 DO-FOR i=0,n-1,1
 READ (y(i));
 ENDDO;

 DO-FOR i=0,n-1,1
 z(i) = x(i) * y(i)
 ENDDO;

 DO-FOR i=0,n-1,1
 WRITE (z(i));
 ENDDO;

 STOP
Problema 8 - enunt
Sa se scrie un program pentru determinarea elementului maxim dintr-un vector de
dimensiune n si memorarea tuturor aparitiilor sale.

Exemplu:
IN: 0 1 2 3 4 5
n=6
x = (7,3,7,2,7,7) 7 3 7 2 7 7

OUT:
max = 7 Rezultat • max = 7
poz= (0,2,4,5) • vectorul de pozitii poz
0 1 2 3
0 2 4 5

Indicatii:
 se determina maximul din vector
 se construieste vectorul poz cu pozitiile maximului
Problema 8 - rezolvare
REAL x(100), max; //determinare maxim
INTREG poz(100), n,i,k; max = x(0);
DO-FOR i = 1, n-1, 1
READ (n); IF (x(i) > max) THEN max =x(i);
ENDIF;
ENDDO;
DO-FOR i=0,n-1,1
READ (v(i)); //construire vector cu pozitiile pe care se afla maximul
ENDDO; k = 0;
DO-FOR i=0,n-1,1
IF (x(i) = = max) THEN {
poz[k] = i;
k = k+1;
}
ENDIF;
ENDDO;

WRITE(“Maximul este:”, max, “pe pozitiile”);


DO-FOR i=0,k-1,1
WRITE (poz(i));
ENDDO;
STOP.
TEMA

Se vor rezolva problemele din fisierul cu


exercitii si probleme aferent seminarului 4

25

S-ar putea să vă placă și