You are on page 1of 8

2.

#include <stdio.h>
#include <iostream>
using namespace std;
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#define NRCANALE 10
void afis_sol(void);
int x[NRCANALE],n=1,cont;
float pond[10];
int nmin=2, nmax=40;
void main(void)
{
int k,i;
float p=0;
cout << "Introdu cele 10 ponderi: \n\n";
for(i=0;i<NRCANALE;i++)
{
cout<<"Ponderea nr"<<i+1<<" : ";
cin>>pond[i];
p=p+pond[i];
}
if((int)p!= 1)
{
cout <<"\nPonderi gresite";exit(0);} ;
cout <<"\nIntrodu debitul pe linia principala(2-40 mbps).Debitul
=0 te scoate din ciclu.";
while(n!=0)
{
cout << "Debitul: ";
cin >> n;
cout<<"\nSolutiile sunt:\n";
if (n <=nmax)
{
cont=0;
k=0;
x[k]=0;
do
{
while(x[k]<nmax)
{
x[k]=x[k]+1;
if(x[k] > nmin-1)
if(k==(NRCANALE-1))afis_sol();
else
{
k++; x[k
]=0;
}
}
k--;
}
while(!(k<0));
}
else cout <<"\nDebit invalid!";
}
}
void afis_sol(void)
{
int l,i;
double fraction, integer;
double number=0;
for(i=0;i<10;i++)
number=(double)(number+pond[i]*x[i]);
l=(int)number;
if (l==n)
{
for (i=0;i<NRCANALE;i++)
cout<<x[i]*pond[i]<<" ";
cout<<endl;
cont++;
if(cont >20)
{
cont=0;cout <<"\nIntrodu un caracter pen
tru continuare\n";
getch();
}
}
}
3.
#include <stdio.h>
#include <conio.h>
#define MAX 7
int x[MAX],Y[MAX];
int COST[MAX][MAX];
void cit(int [][MAX],int &);
void afis(int [][MAX],int &);
int max_cost(int [][MAX],int &);
void afis_sol(long &);
int posibil(int);
int n;
void main(void)
{
int k;
long cost_M,C;
printf("Introdu dim matrice costuri(nr.orase <=7):\n");
scanf("%d",&n);
printf("Introdu si afis matricea costurilor C:\n");
cit(COST,n);
afis(COST,n);
cost_M=(n+1)*(long)max_cost(COST,n)+1;
k=0;
printf("Introdu orasul initial (0 ~ n-1):");
scanf("%d",&x[k]);
k=1;
x[k]=-1;
do
{
while(x[k] < n) //mai sunt valori posibile pentru componenta k
{
x[k]++; //trec la urmatoarea valoare
if(posibil(k)) if(k==(n-1))
{
C=0;
for(int i=0;i<
n-1;i++)
C+=COST[
x[i]][x[i+1]];
if(C<cost_M)
for(int
i=0;i<n;i++)
{
Y[i]=x[i]; cost_M=C;
}
}
else
{
k++;x[k]=-1;
} //trec la urmatoarea component
a cu valori de la zero
}// sfarsit de while
k--; //nu mai sunt valori pentru componenta k. Revin la componen
ta k-1
}
while(!(k<1));//m-am intors mai mult decit se putea
afis_sol(cost_M); //solutie
}

int posibil(int k)
{
if(k==0)return 1;
if(COST[x[k-1]][x[k]]!=0)
{
for(int i=0;i<k;i++)
if(x[k]==x[i]) return 0;
return 1;
}
return 0;
}
void afis_sol(long &CF)
{
for(int i=0;i<n;i++)
printf("%d ",Y[i]);
printf("\nCostul este %ld",CF);
printf("\n");
}
void cit(int a[][MAX],int &n)
{
for(int i=0;i<n-1;i++)
{
a[i][i]=0;
for(int j=i+1;j<n;j++)
{
printf("Introdu Elem[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);
a[j][i]=a[i][j];
}
}
}
void afis(int a[][MAX], int &n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%4d ",a[i][j]);
printf("\n");
}
}
int max_cost(int a[][MAX],int &n)
{
int max=a[0][0];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(a[i][j] > max)
max=a[i][j];
return max;
}
4.

#include <stdio.h>
#include <iostream>
using namespace std;
void Back_SubSet(int);
int Posibil(int, int&);
int ben(int k);
struct oferta
{
int f,b;
};

struct oferta v[20];
int x[20],y[20],c,n,maxim=0,nr;

void main(void)
{ int i;
printf("Introduceti capitalul care urmeaza sa fie investit: ");
scanf("%d",&c);
printf("\nIntroduceti numarul de oferte diferite (<=20): ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\nOferta %d:",i+1);
scanf("%d",&v[i].f);
printf("Beneficiul %d:",i+1);
scanf("%d",&v[i].b);
}; //citirea ofertelor si a beneficiilor

Back_SubSet(0);

cout<<"\nBeneficiul maxim este: "<<maxim;
cout<<"\nEl se obtine pentru ofertele: \n";
for (i=0;i<nr;i++)
cout<<v[y[i]].f<<" ";
cout<<"\nCare adc beneficiile: \n";
for (i=0;i<nr;i++)
cout<<v[y[i]].b<<" ";
cout<<endl;
}

void Back_SubSet(int k)
{
int sum,j,t;
for(j=0;j<n;j++)
{
x[k]=j;
if(Posibil(k, sum))
{
if(sum==c)
{
if (ben(k)>maxim)
{
maxim=ben(k);
for(t=0;t<k+1;t++)
y[t]=x[t];
nr=k+1;
}
}
else
Back_SubSet(k+1);
}
}
}

int Posibil(int k, int &s)
{ int ok=1,i;
s=0;
if(k==0)
return 1;
for (i=0;i<k;i++)
if (x[i]==x[k])
ok=0;
if (x[0]==x[1])
ok =0;

if(ok==1)
{
for( int i=0;i<=k;i++)
s += v[x[i]].f;
if(s <= c) return 1;
}
return 0;
}
int ben(int k)
{
int i,benef=0;
for(int i=0;i<=k;i++)
benef=benef+v[x[i]].b;
return benef;
}
6.
#include <iostream>
using namespace std;
#include <string.h>
struct imag{
char name[20],path[20];
int res,dim;
};
void SortBubble(struct imag *p,int n);
void SortIns(struct imag *p, int n);
void SortSel(struct imag *p, int n);
void QuickSort(struct imag *p, int prim, int ultim);
void main (void)
{
int i,n;
struct imag v[20];
cout<<"Dati numarul de imagini (<20): ";
cin>>n;
cout<<"\nCitirea datelor:\n";
for (i=0;i<n;i++)
{
cout<<"\nImaginea "<<i+1;
cout<<"\nDati numele:";
cin>>v[i].name;
cout<<"Dati calea:";
cin>>v[i].path;
cout<<"Dati rezolutia:";
cin>>v[i].res;
cout<<"Dati dimensiunea in biti:";
cin>>v[i].dim;
}
SortBubble(v,n);//- cheia de sortare este numele imaginii
SortIns(v,n);//-cheia de sortare este calea imaginii
SortSel(v,n);//-cheia de sortare este rezolutia imaginii
QuickSort(v,0,n-1);//-cheia de sortare este dimensiunea imaginii
cout<<"\n\nVectorul sortat cu cheia dimensiunea imaginii este:\n";
for (i=0;i<n;i++)
cout<<"\n"<<v[i].name<<" "<<v[i].path<<" "<<v[i].res<<" "<<v[i].
dim;
cout<<endl;
}
void SortBubble(struct imag *p,int n)
{
int i,j,flag,x[20],temp;
for(i=0;i<n;i++)
x[i]=i;
for(i=0;i<n-1;i++){
for (j=i+1;j<n;j++)
if (stricmp(p[i].name,p[j].name)>0)
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
};
cout<<"\n\nVectorul sortat cu cheia numele imaginii este:\n";
for (i=0;i<n;i++)
cout<<"\n"<<p[x[i]].name<<" "<<p[x[i]].path<<" "<<p[x[i]].res<<"
"<<p[x[i]].dim;
}
void SortIns(struct imag *p, int n)
{
int i, j;
struct imag temp;
for(i=1; i<n; i++) {
temp = p[i];
for(j=i-1; j>=0; j--) {
if(stricmp(p[j].path,temp.path)>0)
p[j+1] = p[j];
else
break;
}
p[j+1] = temp;
}
cout<<"\n\nVectorul sortat cu cheia calea imaginii este:\n";
for (i=0;i<n;i++)
cout<<"\n"<<p[i].name<<" "<<p[i].path<<" "<<p[i].res<<" "<<p[i].
dim;
}
void SortSel(struct imag *p, int n)
{
int i, j, pozmin;
struct imag temp;
for(i=0; i<n; i++)
{

pozmin = i;
for(j=i; j<n; j++) {
if(p[pozmin].res > p[j].res)
pozmin = j;
}
temp = p[pozmin];
p[pozmin] = p[i];
p[i] = temp;
}
cout<<"\n\nVectorul sortat cu cheia rezolutia imaginii este:\n";
for (i=0;i<n;i++)
cout<<"\n"<<p[i].name<<" "<<p[i].path<<" "<<p[i].res<<" "<<p[i].
dim;//afisarea vectorului sortat
}
void QuickSort(imag *p, int prim, int ultim)
{
int i, j, pivot;
struct imag temp;

i = prim;
j = ultim;
pivot = p[ultim].dim;

do {
while(p[i].dim < pivot)
i++;
while(p[j].dim > pivot)
j--;
if(i < j) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
if(i <= j) {
j--;
i++;
}
}while(i < j);


if(prim < j)
QuickSort(p, prim, j);
if(i < ultim)
QuickSort(p, i, ultim);
}

You might also like