Documente Academic
Documente Profesional
Documente Cultură
calculatoarelor
Seminar 4
Vectori
(partea I-a)
2021
Cuprins
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:
Exemplu de declarare:
INTREG a(10);
REAL b(20);
CARACTER c(5);
4
Vector – aspecte teoretice Schema logica - ?
Start
i=0
Pseudocod
Da
INTREG i, n; i<n
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.
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).
PSEUDOCOD SL Citeste n
INTREG i, n; i=0
REAL v(100),s;
Da
i<=n-1
Nu
DO-FOR i = 0,n-1,1 //vi, vf, vr i= i +1
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
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
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
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;
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
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;
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;
/*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 - ?
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;
25