Sunteți pe pagina 1din 25

//Zinveliu Ioana,lab4

/*1. Implementaţi metoda bulelor (Bubble-Sort) care foloseşte un indicator flagşi optimizează ciclul
interior.

Se cere atât scrierea funcţiei, cât şi partea de program care face citirea şi afişarea şirului iniţial şi a

celui ordonat.*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <conio.h>

#include <cstdio>

#include <time.h>

#include <stdlib.h>

void bubble_sort(int v[], int n);

int main()

int n, v[100];

printf("Dati n:");

scanf("%d", &n);

printf("Introduceti elementele vectorului:");

for (int i = 0; i < n; i++)

scanf("%d", &v[i]);

printf("Vectorul inainte de sortare:");

for (int i = 0; i < n; i++)

printf(" %d", v[i]);


}

bubble_sort(v, n);

printf("\nVectorul dupa de sortare:");

for (int i = 0; i < n; i++)

printf(" %d", v[i]);

void bubble_sort(int v[], int n)

int ok;

do {

ok = 1;

for (int i = 0; i < n - 1; i++)

if (v[i] > v[i + 1]) {

int aux = v[i];

v[i] = v[i + 1];

v[i + 1] = aux;

ok = 0;

} while (ok == 0);

}
/*2. Modificaţi programul care exemplifică metoda de sortare rapidă (Quick-Sort) aşa încât să
ordoneze şirul iniţial

în ordine descrescătoare.*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

void quickSort(int* p, int prim, int ultim);//prototip functie Quick-Sort

int main()

int n, v[200];

printf("Dati n:");

scanf("%d", &n);

printf("Introduceti elementele vectorului:");

for (int i = 0; i < n; i++)

scanf("%d", &v[i]);

printf("Vectorul inainte de sortare:");

for (int i = 0; i < n; i++)

printf(" %d", v[i]);

}
quickSort(v, 0, n - 1);//apel functie

printf("\nVectorul sortat:");

for (int i = 0; i < n; i++)

printf(" %d", v[i]);

//Sortare prin metoda quickSort

void quickSort(int* p, int prim, int ultim) {

int i, j, pivot, temp;

i = prim;

j = ultim;

pivot = p[ultim];

// partitionare

do {

while (p[i] > pivot)

i++;

while (p[j] < pivot)

j--;

if (i < j) {

temp = p[i];

p[i] = p[j];

p[j] = temp;

}//end if

if (i <= j) {

j--;

i++;

}//end if

} while (i < j);//end do-while


// apel recursiv

if (prim < j)

quickSort(p, prim, j);

if (i < ultim)

quickSort(p, i, ultim);

}//end quickSort

/*3. Folosiţi funcţiile de bibliotecă pentru sortări (qsort( )) pentru a aranja un şir de înregistrări cu
nume, prenume,

cod numeric personal, data angajării după două câmpuri la alegere (un exemplu ar fi: crescător după
nume şi

descrescător după data angajării).*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>

#include <stdlib.h>

#include<string.h>

struct Angajat{

char nume[25];

char prenume[25];

int cnp;

struct data_angajarii

int zi;

int luna;

int an;
}d;

};

void citire(struct Angajat* p, int n);//prototip functie citire

int comparare(const struct Angajat* x, const Angajat* y);//prototip functie comparare

void afisare(struct Angajat* p, int n);//prototip functie afisare

int main()

int n;

printf("Dati dimensiunea sirului:");

scanf("%d",&n);

Angajat* ang = new Angajat[n];

citire(ang, n);

qsort((Angajat*)ang, n, sizeof(ang[0]), (int(*)(const void*, const void*))comparare);

afisare(ang, n);

void citire(struct Angajat* p, int n)

for (int i = 0; i < n; i++)

printf("\nIntroduceti numele:");

scanf("%s", &p[i].nume);

printf("\nIntroduceti prenumele:");

scanf("%s", &p[i].prenume);
printf("\nIntroduceti cnp-ul:");

scanf("%d", &p[i].cnp);

printf("\nIntroduceti data nasterii:");

printf("\nIntroduceti ziua:");

scanf("%d", &p[i].d.zi);

printf("\nIntroduceti luna:");

scanf("%d", &p[i].d.luna);

printf("\nIntroduceti anul:");

scanf("%d", &p[i].d.an);

void afisare(struct Angajat* p, int n)

for (int i = 0; i < n; i++)

printf("\nNumele:%s", p[i].nume);

printf("\nPrenumele:%s", p[i].nume);

printf("\nData nasterii:");

printf("\nZiua: %d", p[i].d.zi);

printf("\nLuna: %d", p[i].d.luna);

printf("\nAnul: %d", p[i].d.an);

}
int comparare(const struct Angajat* x, const Angajat* y)

if (x->d.an > y->d.an)return 1;

else

if (x->d.an < y->d.an)return -1;

else

if (x->d.luna > y->d.luna)return 1;

else

if (x->d.luna < y->d.luna)return -1;

else

if (x->d.zi > y->d.zi)return 1;

else

if (x->d.zi < y->d.zi)return -1;

else

if ((strcmp(x->nume, y->nume) > 0)) return 1;

else

if ((strcmp(x->nume, y->nume) < 0)) return -1;

return 0;

}
/*4. Scrieţi o aplicaţie C/C++ in care plecând de la două tablouri (unidimensionale) de numere
naturale să se obţină

un al treilea tablou care să conţină toate elementele tablourilor sursă fără a se repeta, aranjate în
ordine

crescătoare.*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>

void interclasare(int , int , int , int , int , int );//prototip functie interclasare

void sortare(int , int );//prototip functie sortare

void eliminare(int , int );//prototip functie pt eliminarea elementelor la fel

int main()

int n, m, v1[100], v2[100], v3[200];

printf("Dati dimensiunea primului tablou:");

scanf("%d", &n);

printf("Dati dimensiunea primului tablou:");

scanf("%d", &m);

printf("Introduceti elementele primului tablou:");

for (int i = 0; i < n; i++)

scanf("%d", &v1[i]);

}
printf("Introduceti elementele celui de-al doilea tablou:");

for (int i = 0; i < m; i++)

scanf("%d", &v2[i]);

interclasare(v1, v2, v3, n, m, n+m);//apel functie

printf("\nAl treilea tabou este: ");

for (int i = 0; i < n + m; i++)

printf(" %d", v3[i]);

sortare(n + m, v3);//apel functie

printf("\nTabloul sortat: ");

for (int i = 0; i < n + m; i++)

printf(" %d", v3[i]);

eliminare(n + m, v3);//apel functie

void interclasare(int v1[], int v2[], int v3[], int n, int m, int k)

int i = 0, j = 0;

k = 0;

while (i < n && j < m)


{

if (v1[i] < v2[j])

v3[k++] = v1[i++];

else

v3[k++] = v2[j++];

if (i < n)

for (int l = i; l < n; l++)

v3[k++] = v1[l];

if (j < m)

for (int l = j; l < m; l++)

v3[k++] = v2[l];

void sortare(int n, int v[])

for (int i = 0; i < n - 1; i++)

for (int j = i + 1; j < n; j++)

if (v[i] > v[j])

int aux = v[i];

v[i] = v[j];

v[j] = aux;

}
}

void eliminare(int n, int v[])

for (int i = 0; i < n - 1; i++)

for (int j = i + 1; j < n; j++)

if (v[i] == v[j])

for (int l = j; l < n - 1; l++)

v[l] = v[l + 1];

n--;

j--;

printf("\nTabloul in urma eliminarii elementelor la fel: ");

for (int i = 0; i < n ;i++)

printf(" %d", v[i]);

/*5. Completati codul problemei date ca exemplu (2) cu alte metode de sortare (sortarea prin
selectie, sortarea

shell, etc.). Cititi de la tastatura numarul de elemente al sirurilor de valori si apoi trimiteţi-l ca
parametru la

fiecare functie. Comparati timpii de lucru ai fiecarui algoritm.

*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>

#include <time.h>

#include <iostream>

#include <cstdio>

#include <conio.h>

using namespace std;

void init(int numere[], int);

void afis(int numere[], int);

void bubble(int numere[], int);

void quick(int numere[], int);

int comparare(const void* arg1, const void* arg2);

void sortSel(int* p, int n);

int main()

int numere[400], dim;

printf("Dati n= ");

scanf("%d", &dim);

init(numere, dim);

//afis(numere, dim);

bubble(numere, dim);

//afis(numere, dim);

init(numere, dim);

//afis(numere, dim);

quick(numere, dim);

//afis(numere, dim);

sortSel(numere, dim);
delete[]numere;

void init(int numere[], int dim)

clock_t start, end;

double dif;

start = clock();

srand((unsigned)time(NULL));

for (int i = 0; i < dim; i++) {

numere[i] = rand();

end = clock();

dif = (double)(end - start);

cout << "\nGenerarea numerelor a durat (clicks) " << dif << " si (seconds) " << ((float)dif) /

CLOCKS_PER_SEC << endl;

void afis(int numere[], int dim)

clock_t start, end;

double dif;

start = clock();

for (int i = 0; i < dim; i++)

cout << " " << numere[i];

end = clock();

dif = (double)(end - start);

cout << "\nAfisarea numerelor a durat (clicks) " << dif << " si (seconds) " << ((float)dif) /

CLOCKS_PER_SEC << endl;

void bubble(int numere[], int dim)

clock_t start, end;


double dif;

int aux, ok;

start = clock();

do {

ok = 1;

for (int i = 0; i < dim - 1; i++) {

if (numere[i] > numere[i + 1]) {

aux = numere[i];

numere[i] = numere[i + 1];

numere[i + 1] = aux;

ok = 0;

} while (ok == 0);

end = clock();

dif = (double)(end - start);

cout << "\nOrdonarea cu \"bubble sort\" a numerelor a durat (clicks) " << dif << " si (seconds)
" <<

((float)dif) / CLOCKS_PER_SEC << endl;

void quick(int numere[], int dim) {

clock_t start, end;

double dif;

start = clock();

qsort((int*)numere, dim, sizeof(int), comparare);

end = clock();

dif = (double)(end - start);

cout << "\nOrdonarea cu \"quick sort\" a numerelor a durat (clicks) " << dif << " si (seconds) "
<<

((float)dif) / CLOCKS_PER_SEC << endl;

//Sortarea prin selectie


void sortSel(int* p, int n)

clock_t start, end;

double dif;

start = clock();

int i, j, pozmin, temp;

for (i = 0; i < n; i++) {

// cautare pozitie cel mai mic element din sirul curent

pozmin = i;

for (j = i + 1; j < n; j++) {

if (p[pozmin] > p[j])

pozmin = j;

}//end for

// interschimbare cu elementul de pe prima pozitie

temp = p[pozmin];

p[pozmin] = p[i];

p[i] = temp;

}//end for

end = clock();

dif = (double)(end - start);

cout << "\nOrdonarea cu \"quick sort\" a numerelor a durat (clicks) " << dif << " si (seconds) "
<<

((float)dif) / CLOCKS_PER_SEC << endl;

}//end sortSel

int comparare(const void* arg1, const void* arg2)

if (*(int*)arg1 < *(int*)arg2)

return -1;

if (*(int*)arg1 == *(int*)arg2)
return 0;

if (*(int*)arg1 > *(int*)arg2)

return 1;

/*7. Să se scrie un program care permite sortarea unui stoc de calculatoare. Acestea să se reprezinte
în program ca

o structură formată din caracteristicile calculatoarelor (nume (sir caractere), tip de procesor (sir
caractere),

frecventa de tact (long int), dimensiunea memoriei RAM (int), preț (float). Sortarea se va face, la
alegerea

utilizatorului, după: pret, memorie, tact sau tip de procesor. Folosiți, de preferință, funcția de
bibliotecă pentru

sortări qsort( ) sau o altă metodă la alegere. Sortați apoi considerând un câmp sir de caractere si unul
numeric.

Afișați rezultatele*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>

#include <stdlib.h>

#include<string.h>

struct Stoc {

char nume[25];

char procesor[25];

long int fr_tact;

int mem;

float pret;
};

void citire(struct Stoc* p, int n);

void afisare(struct Stoc* p, int n);

int cmpp(const struct Stoc* a, const struct Stoc* b);

int cmpm(const struct Stoc* a, const struct Stoc* b);

int cmppr(const struct Stoc* a, const struct Stoc* b);

int cmpf(const struct Stoc* a, const struct Stoc* b);

int main()

struct Stoc* s;

int n, nr;

printf("Introduceti numarul de calculatoare:");

scanf("%d", &n);

s = new struct Stoc[n];

citire(s, n);

printf("Pentru a sorta dupa pret, introduceti 1");

printf("\nPentru a sorta dupa memorie, introduceti 2");

printf("\nPentru a sorta dupa procesor ,introduceti 3");

printf("\nPentru a sorta dupa frecenta, introduceti 4");

printf("\nIntroduceti numarul: ");

scanf("%d", &nr);

if (nr== 1) qsort((void*)s, n, sizeof(struct Stoc), (int (*)(const void*, const void*))cmpp);//


apel functie sortare in functie de pret

if (nr == 2) qsort((void*)s, n, sizeof(struct Stoc), (int (*)(const void*, const void*))cmpm);//


apel functie sortare in functie de memorie

if (nr == 3) qsort((void*)s, n, sizeof(struct Stoc), (int (*)(const void*, const void*))cmppr);//


apel functie sortare in functie de procesor
if (nr == 4) qsort((void*)s, n, sizeof(struct Stoc), (int (*)(const void*, const void*))cmpf);//
apel functie sortare in functie de frecventa

afisare(s,n);

void citire(struct Stoc* p,int n )

for (int i = 0; i < n; i++)

printf("\nIntroduceti numele:");

scanf("%s", &p[i].nume);

printf("\nIntroduceti numele procesorul:");

scanf("%s", &p[i].procesor);

printf("\nIntroduceti frecventa:");

scanf("%ld", &p[i].fr_tact);

printf("\nIntroduceti memoria:");

scanf("%d", &p[i].mem);

printf("\nIntroduceti pretul:");

scanf("%f", &p[i].pret);

}
void afisare(struct Stoc* p, int n)

for (int i = 0; i < n; i++)

printf("\nNumele:%s", p[i].nume);

printf("\nProcesorul :%s", p[i].procesor);

printf("\nFrecventa: %ld", p[i].fr_tact);

printf("\nMemoria: %d", p[i].mem);

printf("\nPretul: %f", p[i].pret);

int cmpp(const struct Stoc* a, const struct Stoc* b)

if (a->pret < b->pret)return -1;

else if (a->pret > b->pret)return 1;

return 0;

int cmpm(const struct Stoc* a, const struct Stoc* b)

if (a->mem < b->mem)return -1;

else if (a->mem > b->mem)return 1;

return 0;

int cmpf(const struct Stoc* a, const struct Stoc* b)

if (a->fr_tact < b->fr_tact)return -1;

else return 1;

return 0;
}

int cmppr(const struct Stoc* a, const struct Stoc* b)

int p;

p = _stricmp(a->procesor, b->procesor);

if (p < 0)return -1;

else return 1;

return 0;

/*9. Generati in mod aleatoriu un tablou de maxim 200 valori intregi, valori nu mai mari de 100.
Determinati si

afisati valoarea minima, mediana si maxima generata, sortand elementele printr-o metoda la
alegere.

Determinati valoarea medie si comparati aceasta valoare cu cea mediana (afisati diferenta). Verificati
daca

valoarea medie este in tabloul initial generat.

*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <conio.h>

#include <cstdio>

#include <time.h>

#include <stdlib.h>

void sortare(int n, int v[]);

int main()

{
srand(time(NULL));

int n , v[200],s=0;

printf("Introduceti n");

scanf("%d", &n);

for (int i = 0; i < n; i++)

v[i] = rand() % 100;

printf("Tabloul este:");

for (int i = 0; i < n; i++)

printf("% d"), v[i];

sortare(n, v);

printf("\nTabloul sortat este:");

for (int i = 0; i < n; i++)

printf(" %d"), v[i];

for (int i = 0; i < n; i++)

printf("\nValoarea minima este : %d", v[0]);


printf("\nValoarea maxima este : %d", v[n]);

printf("\nValoarea mediana este : %d", v[n/2]);

for (int i = 0; i < n; i++)

s = s + v[i];

printf("\nValoarea medie este : %d",s/n);

printf("\nDiferenta dintre valoarea mediana si cea medie este : %d", (s/n)-v[n/2]);

void sortare(int n, int v[])

for (int i = 0; i < n - 1; i++)

for (int j = i + 1; j < n; j++)

if (v[i] > v[j])

int aux = v[i];

v[i] = v[j];

v[j] = aux;

}
/*10. Generati printr-un mecanism aleatoriu un tablou de maxim 200 de valori reale (prin doua
tablouri de aceiaşi

dimensiune, primul fiind partea intreaga (nu mai mare de 100), al doilea partea fractionara (limitata
la 20 ca

intreg ce devine .20 fractionar), tabloul real fiind obtinut prin combinarea partii intregi şi fractionare.
Afişati

tablourile generate, cel real obtinut.

Sortati folosind functia qsort( ) tabloul real si afisati rezultatul obtinut

*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <stdlib.h>

#include <time.h>

#include <iostream>

#include <cstdio>

#include <conio.h>

int comparare(const void* arg1, const void* arg2);

int main()

int v1[100], v2[100], n;

float v3[100];

srand(time(NULL));

printf("Introduceti n:");

scanf("%d", &n);

for (int i = 0; i < n; i++)

v1[i] = rand() % 100;

v2[i] = rand() % 20;


v3[i] = v1[i] + float(100./ v2[i]);

printf("Al treilea tablou este:");

for (int i = 0; i < n; i++)

printf("%f"), v3[i];

qsort((float*)v3, n, sizeof(float), comparare);

printf("\nAl treilea tablou sortat este:");

for (int i = 0; i < n; i++)

printf("%f"), v3[i];

int comparare(const void* arg1, const void* arg2)

if (*(float*)arg1 < *(float*)arg2)

return -1;

if (*(float*)arg1 == *(float*)arg2)

return 0;

if (*(float*)arg1 > *(float*)arg2)

return 1;

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