Sunteți pe pagina 1din 15

//Zinveliu Ioana,lab3

/*1. Testați aplicațiile privind metodele de programare oferite în cadrul laboratorului. Folosiți aceste
aplicații

pentru a implementa problemele 2 și 3 propuse, considerând în acest sens aplicațiile adiționale din
laborator

note.cpp și bakopti.cpp.*/

//pb2

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#define DIM 20

void back_SubSet(int);

int posibil(int, int&);

void afis_sol(int);

int x[DIM], n;

int main()

printf("\nIntroduceti numarul care urmeaza sa fie descompus( <=DIM=20) : ");

scanf("%d", &n);

printf("\n\tSolutii posibile :\n");

back_SubSet(0);

}//end main

void back_SubSet(int k)

int sum;

x[k] = 0;

while (x[k] < n)

x[k]++;

if (posibil(k, sum))
{

if (sum == n)

afis_sol(k);

else

back_SubSet(k + 1);

}//end else

}//end while

}//end back_SubSet

int posibil(int k, int& s)

s = 0;

if (k == 0)return 1;//initial e posibil orice

if (x[k] >= x[k - 1])

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

s += x[i];

if (s <= n) return 1;

}//end if

return 0;

}//end posibil

void afis_sol(int k)

printf("\n\t");

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

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

}//end afis_sol
/*1. Testați aplicațiile privind metodele de programare oferite în cadrul laboratorului. Folosiți aceste
aplicații

pentru a implementa problemele 2 și 3 propuse, considerând în acest sens aplicațiile adiționale din
laborator

note.cpp și bakopti.cpp.*/

//pb3

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

double mutari; // numar de mutari

void hanoi(int n, char a, char b, char c);

int main()

int n;

printf("Numarul de discuri este = ");

scanf("%d", &n);

mutari = 0;

hanoi(n, 'A', 'B', 'C');

printf("Numarul de mutari este = %lf\n", mutari);

} //main

void hanoi(int n, char a, char b, char c)

//n-nr. discuri, a-sursa, b-destinatia, c-manevra

if (n == 1)// n=1

printf("Se muta discul 1 de pe tija %c pe tija %c\n", a, b);

mutari++;

return;

}
// n>1, Etapa 1, Problema pt.n-1 discuri a-sursa, c-destinatia, b-manevra

hanoi(n - 1, a, c, b);

// Etapa 2, Discul n de pe tija a se muta pe b

printf("Discul %d de pe tija %c se muta pe tija %c\n", n, a, b);

mutari++;

//Etapa 3, Problema pt. n-1 discuri c-sursa, b-destinatia, a-manevra

hanoi(n - 1, c, b, a);

} // hanoi

/*5. Creaţi un fişier în care stocaţi un şir de numere întregi, generate in mod aleator. Preluaţi prin
program aceste

valori. Folosiţi metoda divide et impera pentru a determina minimul şi maximul din şir şi afisaţi
rezultatele pe

ecran. Actualizaţi fişierul iniţial adăugând aceste două valori.*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<conio.h>

#include <stdlib.h>

#include <time.h>

#include <search.h>

int v[100];

int min(int , int );

int max(int , int );

void sortare(int n);

int main()

{
srand(time(NULL));

int n, nr;

printf("Dati n:");

scanf("%d", &n);

char nume[] = "pb5.txt";

FILE* f;

f = fopen(nume, "w");

if (f == 0) {

printf("Eroare la deschiderea fisierului!reincercati");

_getch();

printf("Introduceti limita superioara de generare: ");

scanf("%d", &nr);

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

fprintf(f, " %d", rand() % nr);

fclose(f);

f = fopen(nume, "r");

if (f == 0) {

printf("Eroare la deschiderea fisierului!reincercati");

_getch();

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


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

sortare(n);

printf("Nr minim din fisier este: %d ", min(0, n - 1));

printf("Nr maxim din fisier este: %d ", max(0, n - 1));

fprintf(f, "%d %d", min(0, n - 1), max(0, n - 1));

fclose(f);

f = fopen(nume, "r");

if (f == 0) {

printf("Eroare la deschiderea fisierului!reincercati");

_getch();

fprintf(f, "%d %d", max(0, n - 1), min(0, n - 1));

printf("\nValorile au fost adaugate in fisier.");

_getch();

void sortare(int n)

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;
}

int min(int x, int y)

int a, b, m;

if (x == y)return v[x];

else

m = (x + y) / 2;

a = min(x, m);

b = min(m + 1, y);

if (a < b)return a;

else return b;

int max(int x, int y)

int a, b, m;

if (x == y)return v[x];

else

m = (x + y) / 2;

a = min(x, m);

b = min(m + 1, y);

if (a > b)return a;

else return b;

/*Daca in fisier se genereaza numerele: 403 126 401 605 687 rezultatul in urma compilarii este
Dati n:5

Introduceti limita superioara de generare: 900

Nr minim din fisier este: 126 Nr minim din fisier este: 605

Valorile au fost adaugate in fisier.

*/

/*6. Scrieţi o aplicaţie care determină c.m.m.d.c. dintr-un tablou unidimensional de numere întregi
(max. 2000 de

valori), utilizând metoda divide et impera. Elementele tabloului se pot citi de la tastatură sau dintr-un
fisier.*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

int cmmdc(int , int );//prototip functie cmmdc pt 2 nr

int cmmdcimp(int , int );//prototip functie cmmdc pt n numere folosind divide et impera

int v[2000];

int main()

int n;

printf("Dati n: ");

scanf("%d", &n);

printf("Introduceti elementele tabloului: ");

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


{

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

int cmmdc1 = cmmdcimp(0, n - 1);//apel functie

printf("\nCmmdc este: %d", cmmdc1);

//functie cmmdc pt 2 nr

int cmmdc(int a, int b)

if (a == b) return a;

else if (a > b)return cmmdc(a - b, b);

else return cmmdc(a, b - a);

//prototip functie cmmdc pt n numere folosind divide et impera

int cmmdcimp(int n, int x)

int a;

if (x - n == 1)cmmdc(v[n], v[x]);

else if (n == x)return v[n];

else {

a = (n + x) / 2;

return cmmdc(cmmdcimp(n, a), cmmdcimp(a + 1, x));

/*reultat in urma compilarii


Dati n: 3

Introduceti elementele tabloului: 6 9 27

Cmmdc este: 3

C:\Users\ioana\source\repos\ConsoleApplication10\Debug\ConsoleApplication10.exe (process
23460) exited with code 0.

Press any key to close this window . . .

*/

/*8. Să se scrie o aplicație C/C++ care să genereze aleator maxim 10 valori întregi, ce vor fi memorate
într-un

tablou unidimensional. Să se verifice dacă o altă valoare generată aleator aparține acestui tablou,
utilizând

funcția _lsearch().*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include <stdlib.h>

#include <time.h>

#include <search.h>

int comparare(int* a, int* b)

return (*a - *b);

int main()

{
int v[10];

size_t n = 10;

srand(time(NULL));

printf("Numerele generate aleatoriu sunt : ");

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

v[i] = rand() % 200;

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

int random = rand()% 200;

printf("\nO alta valoare generata : %d", random);

int* p;

p = (int*)_lfind(&random, &v, &n, sizeof(int), (int(*)(const void*, const void*))comparare);

if (p)

printf("\nNumarul a fost gasit in sir ", random);

else

printf("\nNumarul nu a fost gasit in sir ", random);

/*Rezultat in urma compilarii

Numerele generate aleatoriu sunt : 23 6 21 189 44 64 47 45 79 171

O alta valoare generata : 132

Numarul nu a fost gasit in sir


C:\Users\ioana\source\repos\ConsoleApplication10\Debug\ConsoleApplication10.exe (process
26088) exited with code 0.

Press any key to close this window . . .

*/

/*10. Citiți de la intrarea standard un tablou unidimensional de maxim 20 de valori întregi. Folosind
mecanismul de

căutare binară, determinați dacă o nouă valoare, a, introdusă de la tastatură există în șir. Dacă da,
determinați

toți factorii primi ai acestei valori pe care îi veți afișa pe ecran.*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

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

int cautarebin(int v[], int a, int stg, int dr);

void factoriprimi(int n);

int main()

int v[20], n,a;

printf("Dati n :");

scanf("%d", &n);

printf("Introduceti valorile din tablou:");

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

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

}
printf("Introduceti valoarea a:");

scanf("%d", &a);

sortare(v, n);

if (cautarebin(v, a, 0, n - 1) != -1)

printf("\nValoarea se afla in tablou\nDescompunerea valorii in factori primi:");

factoriprimi(a);

else printf("\nValoarea nu se afla in tablou");

void sortare(int v[], int n)

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

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

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

int aux = v[i];

v[i] = v[j];

v[j] = aux;

int cautarebin(int v[],int a,int stg, int dr)

int m;

if (stg > dr)

return -1;

else {
m = (stg + dr) / 2;

if (a == v[m])

return m;

if (a < v[m])

return cautarebin( v, a,stg, m - 1);

else return cautarebin( v, a,m + 1, dr);

void factoriprimi(int n)

int f = 2, p;

while (n > 1)

p = 0;

while (n % f == 0)

p++;

n = n / f;

if (p > 0)

printf("\n%d", f);

printf(" la puterea %d ",p);

f++;

/*rezultat in urma rularii:

Dati n :5

Introduceti valorile din tablou:5 6 8 12 5


Introduceti valoarea a:12

Valoarea se afla in tablou

Descompunerea valorii in factori primi:

2 la puterea 2

3 la puterea 1

C:\Users\ioana\source\repos\ConsoleApplication9\Debug\ConsoleApplication9.exe (process 6948)


exited with code 0.

Press any key to close this window . . .*/

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