Sunteți pe pagina 1din 4

1.

Algoritmi de sortare a unui vector

Prin sortarea unui vector se înţelege aranjarea elementelor în ordine crescătoare sau
descrescătoare!

Enunț: Sortarea crescătoare a unui vector


Se citeşte un număr natural nenul n(1<=n<=50) de la tastatură. Scrieţi un program C/C++ care
citeşte un şir de n elemente numere întregi, apoi sortează și afișează elementele şirului citit iniţial, în
ordine crescătoare.

Rezolvare problemei

1) sortare a unui vector prin metoda interschimbării directe


Funcţionalitate: Fiecare element al vectorului va juca pe rând rolul unui pivot. Se parcurg pivoţii
folosind structura repetitivă for şi la fiecare pas al structurii comparăm pivotul de pe poziţia i cu
toate elementele aflate după el. Compararea se va face într-o altă structură for şi pentru fiecare
element găsit care e mai mic decât pivotul se realizează interschimbarea. După ce toate elementele
au fost pivoţi, vectorul este în întregime sortat.

Soluție:
#include <iostream>
using namespace std;
int main(){
int n,a[51],i,j,aux;
cout<<"n= ";cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
if(a[j]<a[i]){
aux=a[i];
a[i]=a[j];
a[j]=aux;}
cout<<"Vectorul sortat crescator este: ";
for(i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;}

2) sortare a unui vector prin metoda bulelor


Funcţionalitate: Ideea care stă la baza metodei constă în formarea de perechi de elemente
succesive. Elementele fiecărei perechi vor fi ordonate crescător, iar prin mai multe parcurgeri ale
vectorului se va obţine un şir sortat. După prima parcurgere a vectorului pe ultima poziţie va ajunge
elementul care este cel mai mare din tot vectorul. După a două parcurgere pe penultima poziţie va
ajunge al doilea cel mai mare element al vectorului, ş.a.m.d. La final vectorul va fi sortat.

Soluție:
#include <iostream>
using namespace std;
int main(){
int n,a[51],i,j,aux,ok;
cout<<"n= ";cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
do{
ok=1;
for(i=1;i<n;i++)
if(a[i]>a[i+1]){
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
ok=0;}
}while(!ok);
cout<<"Vectorul sortat crescator este: ";
for(i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}

2. Algoritmi de căutare a unei valori într-un vector

Căutarea secvențială
Fie un vector a cu n componente numere întregi(neordonate), se pune problema de a stabili
dacă o valoare dată x se găseşte sau nu printre elementele vectorului. Căutarea secvențială
presupune parcurgerea vectorului element cu element, cu condiția că în momentul în care elementul
căutat s-a găsit, căutarea de oprește. Pentru acesta se folosește variabila ok, care se inițializează cu
0(cu semnificația că la început presupunem că elementul căutat nu există în vector), iar la o
comparare dacă elementul căutat există ok=1(adică presupunerea a fost falsă, deci elementul există).

Soluție:
#include <iostream>
using namespace std;
int main(){
int n,a[51],i,ok=0,x;
cout<<"n= ";cin>>n;
cout<<"x= ";cin>>x;
for(i=1;i<=n;i++) cin>>a[i];
i=1;
while(i<=n&&!ok)
if(a[i]==x) ok=1;
else i++;
if(ok) cout<<x<<" gasit";
else cout<<"NU";
return 0;
}

Căutare binară
Fie un vector a cu n componente numere întregi SORTATE CRESCĂTOR, se pune
problema de a stabili dacă o valoare dată x se găseşte sau nu printre elementele vectorului.
Ideea de la care se porneşte este următoarea: căutarea se efectuează într-un interval [li,ls],
unde li este limita inferioară a intervalului, mai exact indicele primului element din vector iar ls este
limita superioară, mai exact indicele ultimului element din vector. La modul general intervalul
iniţial de căutare este [1,n].
În continuare procedăm astfel :
⇒ calculăm indicele componentei din mijloc :
k: = (li+ls ) div 2;
⇒ pot exista 3 situaţii :
o dacă a[k]=x atunci se afişează un mesaj corespunzător şi căutarea se încheie cu
succes
o dacă a[k]<x atunci se reiniţializează intervalul de căutare: li:= k+1 şi ls
o dc a[k]>x atunci intervalul de căutare va fi: li şi ls:=k-1
⇒ căutarea se încheie când x a fost găsit sau când li>ls . Când li>ls atunci înseamnă că x nu se
găseşte în vector.
Soluție:
#include <iostream>
using namespace std;
int main(){
int n,a[51],i,li=1,ls,ok=0,k,x;
cout<<"n= ";cin>>n;
cout<<"x= ";cin>>x;
for(i=1;i<=n;i++) cin>>a[i];
ls=n;
do{
k=(li+ls)/2;
if(a[k]==x){
cout<<x<<" gasit pe pozitia "<<k<<endl;
ok=1;
}
else
if(a[k]<x)
li=k+1;
else ls=k-1;
}while((li<=ls)&&(!ok));
if (li>ls) cout<<"Numarul cautat nu se gaseste in vector"<<endl;
return 0;}

Exemplu :
n=7
x = 13

-1 3 5 6 9 13 18

li=1 ls=7
k=4 => v[k]=6 , 6 < 13 => li=5 si ls =7
k = 6 => v[k]=13 13 = 13 => Valoare gasita.

1. Sortarea unei tablou unidimensional pentru elementele de pe pozițiile p până la q


Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2<n<50), cele n
elemente ale unui tablou unidimensional, numere întregi cu cel mult patru cifre, apoi două numere
naturale p și q (1<=p<q<=n). Programul va realiza sortarea descrescătoare a elementelor care încep
de pe poziția p și până pe poziția q. La final, se afișează vectorul sortat conform cerinței.
Exemplu: pentru n=5, tabloul (1,2,4,3,6), p=2 și q=5, elementele asupra cărora se aplică sortarea
sunt (2,4,3); rezultă vectorul (1,4,3,2,6)

2. Bacalaureat – Sesiunea August–Septembrie 2016


Scrieţi un program C/C++ care citeşte de la tastatură un număr natural, n (n Є [2,102]), și numere
naturale din intervalul [0,1000], în această ordine: cele n elemente ale unui tablou unidimensional și
un număr x. Prima poziție a tabloului este 0.
Programul afişează pe ecran mesajul DA, dacă există cel puțin un element egal cu x aflat pe
pozițiile impare ale tabloului sau mesajul NU în caz contrar.
Exemplu: pentru n=5, tabloul (1,3,4,2,6) şi x=2, se afişează pe ecran mesajul DA, iar pentru n=5,
tabloul (1,12,2,4,6) sau tabloul (1,3,12,4,6) şi x=2, se afişează pe ecran mesajul NU.

3. Bacalaureat – Sesiunea August–Septembrie 2015


Scrieţi un program C/C++ care citeşte de la tastatură un număr natural, n (n Є [2,20]), apoi cele n
elemente ale unui tablou unidimensional, numere naturale din intervalul [0,109]. Programul afișează
pe ecran mesajul DA în cazul în care tabloul conține doar numere pare şi, eventual numărul 2015,
sau mesajul NU în caz contrar.
Exemplu: pentru n=5 și tabloul (32,2015,8,16,2015) sau tabloul (32,20,8,16,20) se afişează mesajul
DA, iar pentru n=6 și tabloul (32,17,2015,8,16,2015) sau tabloul (2015,2015,2015,2015,2015,2015)
se afişează mesajul NU

4. Bacalaureat – Model 2013


Scrieți un program C/C++ care citește de la tastatură un număr natural n (2<n<50) și cele n
elemente ale unui tablou unidimensional, numere întregi cu cel mult 4 cifre. Programul înlocuiește
cu 0 fiecare valoare mai mică sau egală cu prima valoare din tablou, apoi afișează pe ecran
elementele tabloului modificat, separate prin câte un spațiu.
Exemplu: pentru n=7 și tabloul (4, 5, 0, 9, 3, 4, -2), se obține tabloul (0, 5, 0, 9, 0, 0, 0).

5. Bacalaureat – Sesiunea Iunie-Iulie 2014


Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2<n<50), cele n
elemente ale unui tablou unidimensional, numere întregi cu cel mult patru cifre, apoi un număr
natural x (0<x<10). Cel puţin un element al tabloului este par. Programul modifică tabloul în
memorie scăzând valoarea x din fiecare element par al tabloului, apoi afişează pe ecran elementele
tabloului obținut, separate prin câte un spațiu.
Exemplu: pentru n=7, tabloul (2, 15, 70, 4, 0, 5, 3) și x=3, se obține tabloul (-1, 15, 67, 1, -3, 5,
3).

6. Bacalaureat – Simulare 2013


Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2<n<100) şi cele n
elemente ale unui tablou unidimensional, numere naturale cu cel mult 4 cifre. Programul înlocuieşte
fiecare apariţie a valorii celui mai mic element din tablou cu dublul acestuia şi apoi afişează pe
ecran elementele tabloului astfel modificat, separate prin câte un spaţiu.
Exemplu: pentru n=10 şi tabloul (3,5,2,7,9,4,2,9,53,2), se afişează pe ecran valorile 3 5 4 7 9 4
4 9 53 4.

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