Documente Academic
Documente Profesional
Documente Cultură
Vectori Xemplepdf PDF
Vectori Xemplepdf PDF
Clasa a V-a
Sortarea vectorilor.
Prin sortare se înţelege aranjarea elementelor unui vector în ordine crescătoare sau descrescătoare.
Pentru rezolvarea acestei probleme au fost concepuţi diverşi algoritmi, mai mult sau mai puţin rapizi, mai simpli sau extrem de
complicaţi.
Conform acestei metode primul element (a[1]) se compară pe rând cu toate elementele de după el şi dacă ordinea de sortare nu
este respectată, cele două elemente se interschimbă. După efectuarea tuturor comparaţiilor, în prima poziţie ajunge cel mai mic
element din vector (în cazul ordonării crescătoare). Se compară apoi al doilea element cu toate elementele de după el etc.
La ultimul pas se compară numai ultimele două elemente. Secvenţa corespunzătoare de program este :
Metoda de sortare prin selectie are complexitate O(n2). Pentru cei care cunoașteți și algoritmul de sortare bubble sort, care
este un algoritm tot cu complexitate O(n2), este recomandabil a nu-l folosi. În practică este de circa zece ori mai lent decît select
sort.
Există un algoritm Quicksort care este O(n log n) pe cazul mediu. Sortarea optimală este O(n log n), deci nu se poate mai bine.
Permutari circulare
În multe probleme apare necesitatea deplasării elementelor unui vector cu o poziție spre stânga sau cu o poziție spre dreapta.
Bineînțeles că deplasarea elementelor vectorului se poate face și cu k pozitii spre stânga sau k pozitii spre dreapta.
permutarea circulara spre stânga, cu o poziție permutarea ciculara spre dreapta cu o poziție
x=v[1]; x=v[n];
for(i=2;i<=n;i++) for(i=n-1;i>=1;i++)
v[i-1]=v[i]; v[i+1]=v[i];
v[n]=x; v[1]=x;
1
Lecţia 10 Sortarea tablourilor unidimensionale in C++. Permutari circulare.
Clasa a V-a
Afișarea tuturor permutărilor spre stânga Afișarea tuturor permutărilor spre dreapta,
ale unui vector cu n elemente ale unui vector cu n elemente
for(k=1;k<=n;k++) for(k=1;k<=n;k++)
{ x=v[1]; { x=v[n];
for(i=2;i<=n;i++) for(i=n-1;i>=1;i--)
v[i-1]=v[i]; v[i+1]=v[i];
v[n]=x; v[1]=x;
for(i=1;i<=n;i++) for(i=1;i<=n;i++)
fout<<v[i]<<' '; fout<<v[i]<<' ';
} }
Problemă rezolvată
Se citeste din fisierul de intrare cifre.in un numar natural n, cu cel mult 9 cifre. Sa se afiseze numerele obtinute prin permutarea
circulara a cifrelor lui n in fisierul de iesire cifre.out.
#include <fstream>
using namespace std;
ifstream fin("cifre.in");
ofstream fout("cifre.out");
int n,x,p,nrcif,i;
int main()
{ fin >> n;x=n;
//determin numarul de cifre ale lui n
while ( x )
{ nrcif++;
x/=10;
}
//determin putera lui 10
x=n;p=1;
while ( x > 9 )
{ x = x/10;
p = p * 10;
}
//construiesc permutarile lui n
for (i = 1; i <= nrcif;i++)
{ x=n;
while ( x > 9 )
x = x/10;
n = n%p*10 + x;
fout << n;
fout << '\n';
}
return 0;
}
Se recomanda rezolvarea problemei cu vectori, ca exercitiu
2
Lecţia 10 Sortarea tablourilor unidimensionale in C++. Permutari circulare.
Clasa a V-a
1.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)
for(i=1;i<=n/2;i++)
{
aux = v[n-i+1];
v[n-i+1] = v[i];
v[i] = aux;
}
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)
aux = v[n];
for(i=n;i>0;i–)
v[i]=v[i-1];
v[1] = aux;
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)
aux = v[1];
for(i=1;i<n;i++)
v[i]=v[i+1];
v[n] = aux;
d.Șterge valoarea de pe poziția p din vector și afișează vectorul rezultat(Ex. n=4, p=2, v=( 11,22,33,44) — după ștergere
v=(11, 33, 44) ;n=3
cin >> p;
for(i=p;i<n;i++)
v[i] = v[i+1];
n–-;
e.Inserează pe poziția p valoarea x și afișează vectorul rezultat (Ex. n=4, p=2, x=100,v=( 11,22,33,44) — după inserare
v=(11,100,22, 33, 44); n=5
cin >> p;
cout << „v[p] = „; cin >> x;
for(i=n;i>=p;i–)
v[i+1]=v[i];
n++;
v[p] = x;
3
Lecţia 10 Sortarea tablourilor unidimensionale in C++. Permutari circulare.
Clasa a V-a
4.Bitonă: verificare secvență bitonă prin rotație. O secvență este bitonă dacă mai întîi crește și apoi, eventual, descrește.
O secvență bitonă prin rotație este o secvență care fie este bitonă, fie poate fi făcută bitonă prin rotații succesive.
Încercați să o rezolvați fără a folosi vectori, similar cu problema secvenței crescătoare prin rotație.
5.Majoritar: dat un vector cu n elemente să se spună dacă conține un element majoritar. Un element majoritar este un element
care apare de cel puțin n/2 + 1 ori. Încercați să dați o soluție mai bună decît sortarea.
6.Selecție: dat un șir de n numere și o poziție k în acel șir să se spună ce element s-ar afla pe acea poziție dacă șirul ar fi sortat.
7.Secvență crescătoare prin rotație
Verificare secvență crescătoare prin rotație. O secvență este crescătoare prin rotație dacă fie este crescătoare
(nedescrescătoare, include mai mic sau egal), fie poate fi făcută crescătoare prin rotații succesive
(permutări circulare).
Tema
Trimiteţi soluţiile pe adresa maftei03@gmail.com sub forma unei arhive denumită cu numele vostru.
Creaţi arhiva urmând paşii:
1. Creaţi un folder cu numelevostru_tema5
2. Copiati una câte una sursele main.cpp în acest folder şi redenumiţi-le cu numele problemei
3. Arhivaţi acest folder pastrand numele arhivei identic cu al folderului
4. Ataşaţi arhiva la email-ul pe care îl trimiteţi la adresa maftei03@gmail.com
SUCCES!