Sunteți pe pagina 1din 3

Introducere n algoritmic

Tipuri structurate de date n C++.


Structuri de date pentru memorarea irurilor de numere (VECTORI)

Ce este un vector i cnd este necesar reprezentarea datelor cu


ajutorul lui?
n foarte multe probleme apare necesitatea de a prelucra repetat un ir cu multe
valori de acelai tip, care nu pot fi denumite prin variabile obinuite (simple),
datorit numrului prea mare de elemente.
Exemplu:
1) La supermarket, trebuie analizate un ir de n preuri de produse (n<10000)
codificate cu numere de la 1 la n. Produselor cu preul maxim trebuie s li
se aplice o reducere de 50%. Se va afia preul final i codul produselor
pentru care a fost aplicat reducerea.
2) Rezultatele celor n candidai la un concurs (n<300) trebuie afiate n
ordinea descresctoare a punctajelor obinute.
VECTOR = ansamblu de valori de acelai tip, depuse n memorie pe poziii
consecutive i recunoscute sub nume unic.
Poziiile pe care sunt memorate valorile sunt distincte i numerotate cresctor de
la 0 la n-1 i nu pot fi modificate de ctre utilizator. Aceste poziii se numesc
indici.
Valorile componentelor din vector nu coincid obligatoriu cu poziiile pe care se
situeaz i pot fi modificate prin program.
De exemplu, acceleratul A106 este un tren cu vagoane de cltori (componentele
vectorului, toate la fel), numerotate de la 1 la 10 (indicii vagoanelor). n fiecare
vagon se afl un numr de cltori la un moment dat. Trenul nu-i modific
structura dar numrul de cltori din fiecare vagon se schimb n fiecare staie n
care urc i coboar cltori.
Declararea unui vector. Referirea unei componente.
tip_valori nume_structura[nr_max_elemente+1];
ex: int a[101];
//declararea unui vector a cu cel mult 101 numere intregi, numerotate de la 0 la
100

75

22

24

1234

.....

a[i]

a[100]

100

0,1, 2,...i se numesc indici (indica pozitia valorii in sir)


75, 22, 1,24,1234,...., a[i] sunt valorile efective de pe pozitiile date (ex:
numrul de cuvinte de pe pagina de carte numarul i, numrul de cltori
din vagonul i, preul produsului cu codul i etc.)
a[i] = valoarea de pe pozitia i (referirea componentei i)

Introducere n algoritmic

Operaii specifice

1. Citire (doar prin parcurgerea component cu component)


int a[101], n, i;
fin>>n;
for (i=1; i<=n; i++)
fin>>a[i];
2. Scriere (doar prin parcurgerea component cu component)
- de la stnga la dreapta
for (i=1; i<=n; i++)
fout<<a[i]<< ;
ex: pe sirul de mai sus, pentru n=5 se va afia
75 22 1 24 1234
- de la dreapta la stnga
for (i=n; i>=1; i--)
fout<<a[i]<< ;
ex: pe sirul de mai sus, pentru n=5 se va afia
1234 24 1 22 7
3. Parcurgere (n scopul prelucrrii valorilor din vector)
for (i=1; i<=n; i++)
prelucrare (a[i]);
ex: determinarea minimului unui ir de numere
int mini;
....
mini=a[1];
for (i=2; i<=n; i++)
if (a[i]<mini) mini=a[i];
....
Vectori APLICAII
1. Se citesc cele n numere naturale (n<100). Afiai cte numere din ir sunt divizibile cu
ultimul element al irului.
2. Gigel s-a documentat i a fcut o list cu preturile ultimelor n smartphone-uri aprute i alt
list cu preurile celor mai vandute m gadgeturi. Ajutai-l s determine cel mai scump
smartphone i cel mai ieftin gadget. Dac sunt mai multe, sa afieze toate poziiile din listele
corespunztoare.
3. Date fiind un ir cu n numere naturale (n<1000) i un 0<k<n, calculai i afiai produsul
ultimelor k numere diferite de 0, dac exist. Dac nu sunt k astfel de numere n ir, afiai
mesajul IMPOSIBIL.

Introducere n algoritmic

4. Dudua are 2 albume cu poze pe Facebook. In primul album are n poze, n cel de al doilea
are m poze. Fiecare poz are un anumit numar de like-uri. Calculai cte poze din primul
album au mai puine like-uri dect fiecare poz din cel de-al doilea i care sunt acestea.
Pozele sunt numerotate cu numere de la 1 la n respectiv de la 1 la m (1<n,m<50) .
Exemplu:
primul album:
5
//5 poze in primul album (de la 1 la 5)
3 6 18 5 9
//numarul de like-uri pentru fiecare
al doilea album:
7
//5 poze in primul album (de la 1 la 7)
13 9 10 22 8 7 12
// numarul de like-uri pentru fiecare
Se va afia:
3
1 2 4
adica: sunt 3 poze in primul album care au mai putine like-uri dect orice poz din al doilea
iar pozele cutate sunt prima (3 like-uri), a doua (6 like-uri) i a patra (5 like-uri).
Scriei cte un program C++ pentru fiecare dintre cerinele de mai jos.
5. Se citete de la tastatur n, un numr natural nenul, n<100, apoi se citesc cele n elemente
ale vectorului a. S se afieze pe ecran:
a. Poziiile din vector pe care se afl numere divizibile cu 5
b. Elementele vectorului care au ultimele dou cifre egale, n ordinea invers apariiei
n vector
c. Numrul de valori egale cu 0 din vectorul dat
d. Suma numerelor de exact 3 cifre din vectorul dat
e. Numerele care sunt egale cu media aritmetic a elementelor din vector
f. Perechile de numere alturate din vector care au aceeai paritate (sunt ambele
pare sau ambele impare)
6. Se citete de la tastatur n, un numr natural nenul, n<100, apoi se citesc cele n elemente
ale vectorului a. S se afieze pe ecran:
a. produsul numerelor mai mari dect 100
b. numrul de valori negative
c. numerele care sunt egale cu media aritmetic a vecinilor lor (numrul din
stnga+numrul din dreapta lui)/2
d. mesajul DA, dac toate valorile sunt n ordine cresctoare i NU altfel
7. Se citesc din fiierul text medii.in n, numrul de elemente (n<40) apoi cele n medii la
informatic ale unei clase de elevi a1, a2, ....an. S se scrie n fiierul medii.out:
a. Indicii elevilor cu media 10
b. Numrul de elevi corigeni (cu media<5)
c. Media clasei
d. Media cea mai mic i media cea mai mare din clas
8. Se citesc din fiierul text produse.in, S, o sum de bani disponibil, n, numrul de produse
(n<1000) apoi cele n preuri ale unor produse p1,p2, ....pn i cantitile n care sunt
disponibile c1,c2, ....cn S se scrie n fiierul produse.out:
a. Mesajul DA, dac toate produsele pot fi cumprate cu suma S i NU, altfel
b. Cel mai mare numr de produse la fel care pot fi cumprate cu suma dat
c. Cele mai ieftine produse i numrul lor
d. Lista produselor n ordinea cresctoare a preurilor i, la acelai pre, n ordinea
descresctoare a cantitilor
3