Sunteți pe pagina 1din 10

Laboratorul nr1 Nume student: Costin Andrei Grupa 2115; ETTI

Rezolvari la teme: 1. //Created by Costin Andrei //Data 24.03.2013 #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=10; cout<<"Introduceti cele 10 ponderi:\n\n"; for(i=0;i<NRCANALE;i++) { cout<<"Ponderea cu numarul"<<i+1<<":"; cin>>pond[i]; p=p+pond[i]; } if((int)p!=1) { cout<<"\nPonderi gresite";exit(0);}; cout<<"\nIntroduceti debitul pe linia principala(2-40 mbs). Tastati valoarea 0 pentru a iesi din program"; while(n!=0) { cout<<"\nDebitul:"; 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 pentru continuare:\n"; getch(); } } } 2. //Created by Costin Andrei //Data 24.03.2013 #include<iostream> using namespace std; #include<limits.h>; int *x,n,**cost,**drum,*nr_f,*cf; void backtracking(int k); int posibil(int k); void main(void) { int fs; cout<<"Introduceti n numarul de filiale(0<n<=7):"; cin>>n; if(n<=0||n>7) { cout<<"Numarul de filiale nu respecta 0<n<=7!"<<endl; return; } if(cost=new int*[n]) { for(int i=0;i<n;i++) if(!(cost[i]=new int[n])) { cout<<"Eroare la alocarea dinamica!";

return; } } cout<<"Introduceti costurile(daca nu exista legatura directa intro duceti 0):"<<endl; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i==j) cost[i][j]=0; else { cout<<"COST intre filialele "<<i+1<<" si "< <j+1<<":"; cin>>cost[i][j]; } cout<<"Matricea costurilor arata astfel:"<<endl; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<cost[i][j]<<" "; cout<<endl; } if(!(x=new int[n])) { cout<<"Alocare nereusita!"<<endl; return; } if(drum=new int*[n]) { for(int i=0;i<n;i++) if(!(drum[i]=new int[n])) { cout<<"Eroare la alocarea din amica!"; return; } } if(!(nr_f=new int[n])) { cout<<"Alocare nereusita!"<<endl; return; } if(!(cf=new int[n])) { cout<<"Alocare nereusita!"<<endl; return; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) drum[i][j]=0; nr_f[i]=-1; cf[i]=INT_MAX; } cout<<"Introduceti filiala de la care doriti sa a flati costurile:"; cin>>fs; fs-=1; x[0]=fs; backtracking(1);

cout<<"Drumuri de cost minim!"<<endl; for(int j=0;j<n;j++) if(j!=fs) { cout<<"\nDrum intre"<<fs+1<<" si "<<j +1<<":"; if(nr_f[j]==-1) cout<<"Nu se poate ajunge!"; else { cout<<"\tCOST:"<<cf[j]<<"DRUM:"; for(int i=0;i<=nr_f[j];i++) cout<<drum[i][j]+1<<" " ; } } cout<<endl; } void backtracking(int k) { for(int i=0;i<n;i++) { x[k]=i; if(posibil(k)) backtracking(k+1); } } int posibil(int k) { int S=0; if(cost[x[k-1]][x[k]]==0) return 0; for(int i=0;i<k;i++) if(x[k]==x[i]) return 0; for(int i=0;i<k;i++) S+=cost[x[i]][x[i+1]]; { nr_f[x[k]]=k; cf[x[k]]=S; for(int j=0;j<=k;j++) drum[j][x[k]]=x[j]; } } 3. //Problema investirii optime de capital: pentru un investitor cu un ca pital C si n oferte la care trebuie avansate fondurile fi si care a duc beneficiile bi, se cere selectarea acelor oferte care ii aduc ben eficiul maxim //Created by Costin Andrei //Data 24.03.2013 #include<stdio.h> #include<iostream> using namespace std; void citire(); void back(int k,int fp,int bp); void save(int k,int max); void afis();

/*n-numarul de oferte c-capitalul de care dispunem f-sirul fondurilor pentru ofertele existentiale b-sirul beneficiilor corespunzatoare ofertelor bm-beneficiul maxim m-sirul ofertelor care aduc beneficiul maxim*/ int n,c,bm,f[20],b[20],m[20],x[20]; void main() { citire(); bm=0; back(1,0,0); afis(); } void afis() { if(bm!=0) { cout<<"\nBeneficiul maxim este:"<<bm<<" obtinut investind i n ofertele:"; for(int i=1;i<=m[0];i++) { cout<<m[i]<<","; } cout<<"\b\b\n"; } else cout<<"\nNu se poate investi in nici o oferta, capitalul este prea mic!"; } void save(int k,int max) { if(max>bm) { m[0]=k; for(int i=1;i<=k;i++) m[i]=x[i]; bm=max; } } void back(int k,int fp,int bp) { int u[20];if(fp>c) save(k-2,bp-b[x[k-1]]); else for(int i=1;i<=n;i++) if(!u[i]) { x[k]=i; u[i]=1; back(k+1,fp+f[i],bp+b[i]); u[i]=0; } } void citire() { cout<<"Introduceti valoarea capitalului:"; cin>>c; cout<<"Introduceti numarul de oferte:"; cin>>n;

for(int i=1;i<=n;i++) { cout<<"\nIntroduceti fondurile necesare si beneficiile adus e pentru oferta "<<i; cout<<"\nFondul f["<<i<<"]="; cin>>f[i]; cout<<"beneficiul b["<<i<<"]="; cin>>b[i]; } } 4. //Sa se scrie o aplicatie C/C++ care sa genereze aleator 10 valori i ntregi, ce vor fi memorate intr-un vector. Sa se verifice daca o alt a valoare generata aleator apartine acestui vector, utilizand functia _ lsearch(). //Created by Costin Andrei //Data 24.03.2013 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<time.h> #include<search.h> int compare(int *,int *); int cautare_adaugare(int *,int *,int ); void main(void) { int *p=NULL,*key=NULL,k,n=10,i; p=(int*)malloc(11*sizeof(int)); if(p!=NULL) { srand((unsigned)time(NULL)); for(i=0;i<n;i++) *(p+i)=(int) rand(); printf("Tabloul obtinut este:\n"); for(i=0;i<10;i++) printf("%d ",*(p+i)); k=(int) rand(); key=&k; printf("\n\nNumarul generat ce trebuie cautat in vector e ste %d\n",k); if(cautare_adaugare(key,p,n)) printf("\nNumarul %d exista deja\n",*key); else { printf("\nNumarul %d a fost adaugat in vector pe ultima pozitie\n",*key); printf("\nVectorul nou obtinut este:\n"); for(i=0;i<n;i++) printf("%d ",*(p+i)); printf("\n"); } } else { printf("\nAlocare nereusita\n"); return; } if(p)

free(p); } int cautare_adaugare(int *key,int *p,int n) { int m=n; _lsearch(key,p,(size_t*)&n,sizeof(int),(int(*)(const void*,const void* ))compare); return(n==m); } int compare(int *a,int *b) { return(*a-*b); } 5. //Scrieti o aplicatie C/C++ care sa gaseasca imaginile cele mai apropi ate folosind pe rand o cheie de cautare din antetul imaginii. Antetul este reprezentat printr-o structura ce contine un nume de fisier (St ring), o cale (String), o rezolutie de intensitate (intreg), o dimensi une in octeti (intreg). Pentru fiecare cheie folositi o metoda diferit a de cautare. Antetul imaginilor se afla stocat intr-un fisier sau se citeste intr-un tablou de structuri de la tastatura. //Created by Costin Andrei //Data 24.03.2013 #include<stdio.h> #include<malloc.h> #include<string.h> #include<search.h> struct imagine { char nume[20],cale[20]; int rezolutie,dimensiune; }; void citire(struct imagine *); void afisare(imagine *p); void meniul(); int cmp(imagine *a,imagine *b); int cmp1(imagine *a,imagine *b); int cmp2(imagine *a,imagine *b); int cmp4(imagine *a,imagine *b); void main(void) { struct imagine *p=NULL,*p1=NULL,*p2=NULL,*p3=NULL,*p4=NULL,*b,c; int n,i,x; char num[20],calea[20]; printf("Introduceti numarul de imagini:"); scanf("%d",&n); b=&c; p=(imagine*)malloc(n*sizeof(imagine)); if(p==NULL) printf("\nEroare la alocare\n"); else { printf("\nIntroduceti datele imaginilor:"); for(i=0;i<n;i++) { printf("\n\tImaginea %d:",i+1); citire(p+i); }

while(1) { printf("\nTastati cifra corespunzatoare:\n-cautare du pa nume 1"); printf("\n-cautare printf("\n-cautare printf("\n-cautare printf("\n-iesire stra:"); scanf("%d",&x); if(x==1) { printf("Introduceti numele imaginii pe care doriti sa o cautati:"); scanf("%s",num); p1=(struct imagine*)_lfind(&num,p,(size_t*)&n,s izeof(imagine),(int(*)(const void*,const void*))cmp); if(p1) { printf("\nImaginea cu numele %s s-a gasit\n",num); afisare(p1); } else printf("\nImaginea cu numele %s nu s-a gasit\n",num); } else if(x==2) { printf("\nIntroduceti calea imaginii pe care doriti sa o cautati:"); scanf("%s",calea); p2=(struct imagine*)lfind(&calea,p,(siz e_t*)&n,sizeof(imagine),(int(*)(const void*,const void*))cmp2); if(p2) { printf("\nImaginea avand calea %s sa gasit\n",calea); afisare(p2); } else printf("\nImaginea avand calea %s nu s-a gasit\n",calea); } else if(x==3) { printf("\nIntroduceti rezolutia imagin ii pe care doriti sa o cautati:"); scanf("%d",&b->rezolutie); p3=(struct imagine*)_lfind(&b,p,(size_t *)&n,sizeof(imagine),(int(*)(const void*,const void*))cmp1); if(p3) { printf("\nImaginea cu rezolutia %d s -a gasit\n",b->rezolutie); afisare(p3); } else dupa cale 2"); dupa rezolutie 3"); dupa dimensiune 4"); din program 0\n Alegera dumneavoa

printf("\nImaginea cu rezolutia %d n u s-a gasit\n",b->rezolutie); } else if(x==4) { printf("\nIntroduceti dimensiunea imag inii pe care doriti sa o cautati:"); scanf("%s",b->dimensiune); p4=(struct imagine*)bsearch(&b,p,(size_ t)&n,sizeof(imagine),(int(*)(const void*,const void*))cmp4); if(p4) { printf("\nImaginea cu dimensiunea %d s-a gasit\n",b->dimensiune); afisare(p4); } else printf("\nImaginea cu dimensiunea %d nu s-a gasit\n",b->dimensiune); } else if(x==0) return; else printf("\ns-a tastat altceva"); } if(p) free(p); } } void citire(imagine *p) { printf("\nNume:"); scanf("%s",p->nume); printf("\nCale:"); scanf("%s",p->cale); printf("\nDimensiune:"); scanf("%s",p->dimensiune); printf("\nRezolutie:"); scanf("%s",p->rezolutie); } void afisare(imagine *p) { printf("\nNume:%s",p->nume); printf("\nCale:%s",p->cale); printf("\nDimensiune:%d",p->dimensiune); printf("\nRezolutie:%d",p->rezolutie); } void meniul() { int x; printf("\nPentru cautarea dupa nume introduceti 1"); printf("\nPentru cautarea dupa cale introduceti 2"); printf("\nPentru cautarea dupa rezolutie introduceti 3"); printf("\nPentru cautarea dupa dimensiune introduceti 4"); printf("\nPentru iesire introduceti 0"); while(1) { printf("\nIntroduceti cheia de cautare a imaginilor

:"); scanf("%d",&x); if(x==1) { printf("\ns-a tastat } else if(x==2) { printf("\ns-a tastat } else if(x==3) { printf("\ns-a tastat } else if(x==4) { printf("\ns-a tastat } else if(x==0) return; else printf("\ns-a tastat }

1");

2");

3");

4");

altceva");

} int cmp1(imagine *a,imagine *b) { return((a->rezolutie)-(b->rezolutie)); } int cmp(imagine *a,imagine *b) { return(stricmp(a->nume,b->nume)); } int cmp2(imagine *a,imagine *b) { return(stricmp(a->cale,b->cale)); } int cmp4(imagine *a,imagine *b) { return((a->dimensiune)-(b->dimensiune)); }

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