Sunteți pe pagina 1din 7

Centrul de Excelență în Informatică

și Tehnologii Informaționale
Catedra Informatică

Disciplina: Programarea procedurală


Lucrare de studiu individual nr. 1
Tema: Metode de sortare

Grupa: P-1811

A elaborat elevul: Ciobanu Stanislav

A evaluat profesorul: Botoșanu Mihail

Nota: ______________

2019
Tema: Metode de sortare

Subcompetențe:

• Aplicarea metodelor de sortare

• Elaborarea programelor destinate ordonării elementelor tabloului

I. Enunțul problemei:
Se consideră tabloul unidimensional A[n] cu elemente numere naturale din intervalul [1,40]. Să
se compună un program care va transcrie la începutul tabloului B[n] în ordine crescătoare elementele
lui mai mici ca 20, apoi, în continuare, pe celelalte elemente în ordine descrescătoare. Se va aplica
metoda distribuirii. Tabloul modificat se va afișa pe ecran.
De exemplu, având A = (27, 28, 7, 6, 10, 34, 20, 5), se va obține B = (5, 6, 7, 10, 34, 28, 27, 20).

II. Schițarea algoritmului:


1) În primul rînd, am introdus valoarea variabilei n, apoi am declarat tabloul inițial A cu n elemente:

int n; // declaram variabila n

cout<<"Introduceti numarul elementelor: ";

cin>>n; // introducem valoarea variabilei n

int A[n]; // declaram vectorul initial A cu n elemente

2) Apoi, am organizat citirea elementelor tabolului inițial A, folosind instrucțiunea repetitivă for:

for(int i=0;i<n;i++) // folosim instructiunea repetitiva for

cout<<"A["<<i<<"]=";

cin>>A[i]; // introducem pe rind fiecare element al vectorului initial A

3) Pe urmă, declaram tabloul suplimentar B cu 41 de elemente (dimensiunea domeniului de valori este


40), și îl zerografiăm, prin intermediul instrucțiunii repetitive for:

int B[41]; // declaram vectorul final B cu 41 de elemente

for(int i=1;i<=40;i++) // folosim instructiunea repetitiva for, folosind domeniul [1,40]

B[i]=0; // atribuim fiecarui element al vectorului B valoarea 0, adica il zerografiam

}
4) Parcurgem tabloul A cu ajutorul unei instrucțiuni repetitive for, care se va repeta de n ori, adică
vom parcurge toate elementele vectorului, și vom număra numerele de apariție a elementelor A[i] în
tabloul A, și vom scrie aceste numere în tabloul suplimentar B:

for(int i=0;i<n;i++) // folosim intructiunea repetitiva de n ori

B[A[i]]+=1; // la intilnirea B[A[i]] el se incrementeaza

5) Am inițializat variabila z ce ține poziția scrierii în tablou, care se va incrementa după introducerea
fiecărui element, și va rămîne salvată poziția pentru scrierea următorului element. :

int z=0; // declaram variabila z

6) Transcriem elementele din nou în tabloul A, și le sortăm pe cele de la 1 la 20, crescător, adică
domeniul de valori va fi [1,20], folosind un ciclu dublu for:

for(int i=1;i<=20;i++) // folosim instructiunea repetitiva for de 20 de ori

for(int j=0;j<B[i];j++) // folosim instructiunea repetitiva for

A[z]=i; // variabila z tine pozitia scrierii in tabloul A

z++; // variabila z se incrementeaza

7) Transcriem elementele din nou în tabloul A, și le sortăm pe cele de la 20 la 40, descrescător, adică
domeniul de valori va fi [20,40], folosind un ciclu dublu for:

for(int i=40;i>=21;i--) // folosim instructiunea repetitiva for de 20 de ori

for(int j=0;j<B[i];j++) // folosim instructiunea repetitiva for

A[z]=i; // variabila z tine pozitia scrierii in tabloul A

z++; // variabila z se incrementeaza

}
8) Afișez rezultatul, adică tabloul A modificat, folosind instrucțiunea repetitivă for și cout:

cout<<"Tabloul modificat: ";

for(int i=0;i<n;i++) // folosim instructiunea repetitiva for

cout<<A[i]<<" "; // afisarea tabloului final A modificat

III. Listingul programului C++:


#include <iostream> // introducem biblioteca de intrare/iesire a datelor

using namespace std;

int main() // declaram inceputul functiei principale a programului

int n; // declaram variabile

cout<<"Introduceti numarul elementelor: ";

cin>>n; // introducem valoarea variabilei n, care este numarul elementelor vectorului initial

int A[n]; // declaram vectorul initial A cu n elemente

cout<<"Introduceti elementele: "<<endl;

for(int i=0;i<n;i++) // folosim instructiunea repetitiva for

cout<<"A["<<i<<"]=";

cin>>A[i]; // introducem pe rind fiecare element al vectorului initial

int B[41]; // declaram vectorul final B cu 41 de elemente (dimensunea domeniului de valori este 40)

for(int i=1;i<=40;i++) // folosim instructiunea repetitiva for, folosind domeniul [1,40]

B[i]=0; // atribuim fiecarui element al vectorului B valoarea 0, adica il zerografiam

for(int i=0;i<n;i++) // folosim intructiunea repetitiva de n ori

{
B[A[i]]+=1; // la intilnirea B[A[i]] el se incrementeaza

int z=0; // declaram variabila z

for(int i=1;i<=20;i++) // folosim instructiunea repetitiva for de 20 de ori

for(int j=0;j<B[i];j++) // folosim instructiunea repetitiva for

A[z]=i; // variabila z tine pozitia scrierii in tabloul A

z++; // variabila z se incrementeaza

for(int i=40;i>=21;i--) // folosim instructiunea repetitiva for de 20 de ori

for(int j=0;j<B[i];j++) // folosim instructiunea repetitiva for

A[z]=i; // variabila z tine pozitia scrierii in tabloul A

z++; // variabila z se incrementeaza

cout<<"Tabloul modificat: ";

for(int i=0;i<n;i++) // folosim instructiunea repetitiva

cout<<A[i]<<" "; // afisarea tabloului B final modificat

return 0; // returneaza valoarea 0 si marcheaza sfirsitul programului

}
IV. Teste:
n A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7]
Test 1 4 19 4 35 37 - - - -
Test 2 5 24 6 32 12 8 - - -
Test 3 8 18 13 8 22 27 33 25 22

IV. Prezentarea soluției:


VI. Concluzii:
Am avut de realizat un program în C++, care a fost pentru mine o sarcină nu atît de grea, cît
neînțeleasă. Din toate lucrările practice individuale care le-am avut în cadrul cursului de programare,
aceasta a fost cea mai complicată după părerea mea. Însă, anume această experiență este mult mai
importantă, deoarece am fost nevoit să răscolesc în cadrul căutării soluției, multe site-uri web și să
răsfoiesc încă odată paginile materialului suplimentar. Am analizat cu atenție fiecare amănunte al
algoritmului și am putut înțelege principiul sortării prin metoda distriburii, și aplicarea acestei
metode în cadrul rezolvării problemelor C++. Chiar prin toată complexitatea sa, această lucrare
mi-a lăsat o impresie plăcută, căci victoria obținută mai greu, este mai scumpă. Am utilizat biblioteca
standart de intrare/ieșire a datelor, instrucțiuni deja cunoscute cout și cin, instrucțiunea repetitivă for,
mai pe scurt, nimic nou sau deosebit. Deci, în linii generale, am rămas satisfăcut de acestă lucrare,
chiar aș dori să avem mai des lucrări practice individuale de acest nivel de complexitate, să fie
grele, dar totuși posibile de făcut la nivelul meu de cunoștințe, astfel voi putea progresa și evolua.
Ca urmare a acestei lucrări mă simt mult mai încrezut în propriile puteri. Sunt de părere că un tînăr
specialist din domeniul IT trebuie să facă o muncă asiduă și să depună efort maxim asupra cucerii
unei ținte, pentru mine acestă țintă, la momentul dat a fost prima lucrare individuală din cadrul
cursurilor de Programare Procedurală.

VII. Bibliografie/Webografie:
1. http://software.ucv.ro/~mburicea/lab7ISP.htm

2. http://staff.cs.upt.ro/~cami/sda/sda/l4.html

3. Materiale didactice obținute la perechea de Programare Procedurală

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