Sunteți pe pagina 1din 4

Prof.

Mihaela Corina ILDEGEZ


Centru pentru pregătire pentru Performanță ”Hai la Olimpiadă

Obiective:
Prelucrarea elementelor
Verificări de proprietăți
Ștergerea de elemente
Ștergeri și inserari Inserarea de elemente

Cuprins
Deplasări de elemente spre stânga/dreapta cu o poziție ....................................................................... 1
Aplicații propuse:................................................................................................................................. 3
Ștergerea tuturor elementelor care îndeplinesc o proprietate .............................................................. 3
Inserarea lui x după fiecare element care îndeplinește o proprietate.................................................... 4
Aplicații propuse:................................................................................................................................. 4
#1452, #163, #1453, #158, #159, #160, #1365, #162, #596 ................................ 4

Deplasări de elemente spre stânga/dreapta cu o poziție


Fie un vector a cu n elemente notate a[1], a[2], a[3],…a[n-1], a[n]. Există numeroase aplicații care
necesită deplasarea elementelor vectorului:
 Cu o poziție la stânga
 Cu o poziție la dreapta

Vom exemplifica cele două operații pe o secvență de vector cuprinsă între pozițiile s și d:

OBS: se observă că se poate folosi cu succes pentru a șterge elementul a[s-1] din vector

Pseudocod C++
pentru i=s până la d cu pasul +1 for(int i=s; i<=d; i++)
a[i-1]=a[i] a[i-1]=a[i];
sfarsit_pentru
Prof. Mihaela Corina ILDEGEZ
Centru pentru pregătire pentru Performanță ”Hai la Olimpiadă

Pseudocod C++
pentru i=d până la s cu pasul -1 for(int i=d; i>=s; i--)
a[i+1]=a[i] a[i+1]=a[i];
sfarsit_pentru

OBS: se observă că se poate folosi cu succes pentru a șterge elementul a[s-1] din vector

Pseudocod C++
aux= a[1] aux= a[1]
pentru i=2 până la d cu pasul +1 for(int i=2;i<=d; i++)
a[i-1]=a[i] a[i-1]=a[i];
sfarsit_pentru a[n]=aux
a[n]=aux

Pseudocod C++
aux= a[n] aux= a[n]
pentru i=n-1 până la 1 cu pasul -1 for(int i=n-1;i<=1; i--)
a[i+1]=a[i] a[i+1]=a[i];
sfarsit_pentru a[1]=aux
a[1]=aux
Prof. Mihaela Corina ILDEGEZ
Centru pentru pregătire pentru Performanță ”Hai la Olimpiadă

Aplicații propuse:
1. Se citește din fișierul de intrare cifre.in un număr natural n, cu cel mult 9 cifre. Să se afișeze numerele
obținute prin permutarea circulara a cifrelor lui n in fișierul de ieșire cifre.out

2. Fie v un vector cu n elemente întregi, date de la tastatură. Realizați programe C++ care:
a. Inversează valorile din vector și afișează vectorul inversat (Ex. n=4, v=( 11,22,33,44) — după
inversare v=(44, 33,22,11)
b. Realizează o permutare circulară la dreapta cu o poziție și afișează vectorul rezultat (Ex. n=4, v=(
11,22,33,44) — după permutare v=(44, 11,22, 33)
c. Realizează o permutare circulară la stânga cu o poziție și afișează vectorul rezultat (Ex. n=4, v=(
11,22,33,44) —după permutare v=(22, 33, 44, 11)

3. Se dă un vector cu n elemente numere naturale. Determinați toate permutările circulare spre stânga
ale vectorului.
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații,
reprezentând elementele vectorului.
Programul afișează pe ecran, fiecare pe câte o linie, permutările circulare spre stânga ale
vectorului, elementele fiecărei permutări fiind separate printr-un spațiu
Exemplu: Dacă n=5 si vectorul a=(20, 30, 5, 50, 40) atunci se va afișa
20, 30, 5, 50, 40
30, 5, 50, 40, 20
5, 50, 40, 20, 30
50, 40, 20, 30, 5
40, 20, 30, 5, 50
4. Fie S și T două mulțimi de numere naturale, distincte, ordonate crescător, ambele având același număr
de elemente n, unde n este un număr natural impar. Se cere să se afișeze toate perechile de elemente
(s[i],t[i]), care se pot forma dacă vectorul S se permute circular spre dreapta de n ori, respective vectorul
T se permute circular spre stânga de n ori.
Exemplu:
Dacă n=3 și vectorul S=(1, 2, 3) iar vectorul T=(6, 7, 8) atunci pe ecran se va afișa:
(1,6) (2,7) (3,8)
(3,7) (1,8) (2,6)
(2,8) (3,6) (1,7)
5. Se citește un vector a cu n elemente numere naturale. Construiți permutările circulare ale vectorului a
si afișați permutarea circulara care conține o secvență de lungime maxima formată din elemente ordonate
strict crescător.
Exemplu: n=6 a=(3 6 7 5 1 2)
Permutarea care conține secvență maximă este (5 1 2 3 6 7) sau (1 2 3 6 7 5)

Ștergerea tuturor elementelor care îndeplinesc o proprietate


Fie un vector a cu n elemente notate a[1], a[2], a[3],…a[n-1], a[n]. Să se șteargă din vector toate
elementele care îndeplinesc o proprietate data.

Pseudocod C++
pentru i=n până la 1 cu pasul -1 for(int i=n;i>=1;i--)
daca a[i] tb.șters atunci if(a[i]tb șters)
-deplasare spre stanga de la { for(int j=n;j>=i+1;j--)
pozitia i+1, pana la n a[j+1]=a[j];
n=n-1 n--;
sfarsit_daca }
sfârșit pentru
Prof. Mihaela Corina ILDEGEZ
Centru pentru pregătire pentru Performanță ”Hai la Olimpiadă

Sau mai eficient, fără a realiza deplasări:

Pseudocod C++
k=0 k=0
pentru i=1 până la n cu pasul 1 for(int i=1;i<=n; i++)
daca a[i] nu tb.șters atunci if(a[i] nu tb șters)
k++ {k++;
a[k]=a[i] a[k]=a[i];
sfarsit_daca }
sfârșit pentru n=k;
n=k;

Inserarea lui x după fiecare element care îndeplinește o proprietate


Fie un vector a cu n elemente notate a[1], a[2], a[3],…a[n-1], a[n]. Să se insereze valoarea x în vector după
toate elementele care îndeplinesc o proprietate data.

Pseudocod C++
i=1; i=1;
cât timp i<=n executa while(i<=n)
daca după a[i] tb inserat x atunci { if(după a[i] tb inserat x)
deplasează spre dreapta cu 1 poz {for(int j=n;j>=i+1;j--)
elementele a[i+1], a[i+2],…a[n] a[j+1]=a[j];
pentru a elibera poziția i+1 a[i+1]=x;
a[i+1]=x n=n+1;
n=n+1 i=i+2;
i=i+2 }
altfel else
i=i+1 i++;
sfarsit_daca }
sfarsit_cat_timp
Aplicații propuse:
#1452, #163, #1453, #158, #159, #160, #1365, #162, #596

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