program are

74
1.Intr-o sala, intr-o zi, trebuie planificate n spectacole. Pentru fiecare spectacol se cunoaste intervalul in care se desfasoara [st,sf]. Se cere sa se planifice un numar maxim de spectacole astfel incat sa nu se suprapuna. #include<iostream> using namespace std; int s[2][10],o[10],n,i,h1,m1,h2,m2,ora; void sortare() { int gata,m,i; do { gata=1; for(i=1;i<=n-1;i++) if(s[1][o[i]]>s[1][o[i+1]]) { m=o[i]; o[i]=o[i+1]; o[i+1]=m; gata=0; } } while(!gata); } main() { cout<<"n=";cin>>n; for(i=1;i<=n;i++) {

Upload: radu-alex

Post on 16-Sep-2015

227 views

Category:

Documents


1 download

DESCRIPTION

2

TRANSCRIPT

1.Intr-o sala, intr-o zi, trebuie planificate n spectacole. Pentru fiecare spectacol se cunoaste intervalul in care se desfasoara [st,sf]. Se cere sa se planifice un numar maxim de spectacole astfel incat sa nu se suprapuna.#includeusing namespace std;int s[2][10],o[10],n,i,h1,m1,h2,m2,ora;void sortare(){ int gata,m,i; do { gata=1; for(i=1;is[1][o[i+1]]) { m=o[i]; o[i]=o[i+1]; o[i+1]=m; gata=0; } } while(!gata);}main(){ coutn; for(i=1;inext=c;c->inf="C/C++!";c->next=NULL; //sau c->next=0;

while(a) //a!=NULL sau a!=0{printf("%s ",a->inf);a=a->next;}getch();}9. Arbore, construit recursiv, ce contine cuvinte, si numarulde aparitie a acestora, citite de la tastatura (cate un cuvant pe linie)introducerea cuvintelor se termina cu un cuvant vid (Enter la inceputulliniei), si apoi sunt afisate cuvintele in ordine alfabetica.#include #include #include #include #define LUNGMAX 20struct st_arbore{char *cuvant; /* pointer la cuvantul citit */int nrap; /* numarul de aparitii */struct st_arbore *st, *dr;};int nle=0;

void actualizare (struct st_arbore * arb , char *cuv){/* Functia actualizeaza arborele binar. Daca cuvantul nu a mai fost citit se creaza un nou nod, altfel se incrementeaza contorul de aparitii al nodului corespunzator cuvantului citit anterior. Se determina pe care ramura a arborelui se va inseracuvantul, sau daca exista deja*/if (strcmp(cuv, arb->cuvant) < 0)if (arb->st)actualizare (arb->st, cuv);else{arb->st=(struct st_arbore *) malloc (sizeof(struct st_arbore)) ;arb=arb->st;arb->cuvant=cuv;arb->nrap=1;arb->st=NULL;arb->dr=NULL;}else if (strcmp(cuv, arb->cuvant) >0 )if(arb->dr)actualizare (arb->dr, cuv);else{arb->dr=(struct st_arbore *) malloc (sizeof(struct st_arbore)) ;arb=arb->dr;arb->cuvant=cuv;arb->nrap=1;arb->st=NULL;arb->dr=NULL;}elsearb->nrap=arb->nrap + 1;}

void tiparire_arbore (struct st_arbore *arbo)/* functia afiseaza arborele de cautare ce contine cuvinte si numarul lor de aparitii */{if (arbo!=NULL){tiparire_arbore (arbo->st) ; /* tiparire arbore stanga */printf ("%s (ap: %d)\n", arbo -> cuvant, arbo -> nrap ) ;nle++;if (nle%24==0){printf("Apasati o tasta pentru a continua afisarea!\n");getch();}tiparire_arbore (arbo->dr) ; /* tiparire arbore dreapta */}}void main (){struct st_arbore *arb;char cuvant[LUNGMAX] ;clrscr();printf("Introduceti cuvinte, care vor fi apoi tiparite in ordine"" alfabetica:\n");gets(cuvant) ;arb=(struct st_arbore *) malloc (sizeof(struct st_arbore)) ;/* am presupus ca nu se returneaza de catre mallocvaloarea NULL */arb->cuvant=strdup(cuvant);arb->nrap=1;arb->st=NULL;arb->dr=NULL;gets(cuvant) ;while (strcmp(cuvant, "")){actualizare (arb, strdup(cuvant));gets(cuvant);}printf("Lista ordonata a cuvintelor (numar aparitii):\n");tiparire_arbore (arb);}10. Se construieste un Arbore de cuvinte cu retinerea nr de aparitiipt fiecare cuvant introdusla constructie se va apasa enter daca nu se doreste a se introduceinformatie in nod

#include #include #include #include int ok;struct arbore{ char info[30]; int nr_ap, niv; struct arbore *st, *dr;};

struct arbore *tata_lor;

void parcurge(struct arbore *p, char s[30] ){ if (p) { if (!strcmp(p->info,s)) { p->nr_ap++; ok=1; }

parcurge(p->st,s); parcurge(p->dr,s); }}

void creare(struct arbore *&p){ char s[30]; printf("Dati info nodului: "); gets(s);if (strlen(s)) { ok=0; parcurge(tata_lor,s); if(ok==0) { p=new arbore; strcpy(p->info,s); p->st=NULL; p->dr=NULL; p->nr_ap=1; creare(p->st); creare(p->dr); }

}}

void afis(struct arbore *p){ if (p) { afis(p->st); printf("Nodul cu info %s apare de %d ori.\n",p->info,p->nr_ap); afis(p->dr); }}

void main(){ clrscr(); creare(tata_lor); afis(tata_lor); getch();}11. Arbore de nr in care cautam o valoare si returnam pointer la valoarearespectiva daca a fost gasita. Programul mai verifica daca arboreleeste echilibrat. La constructie se va introduce 0 pt back

#include #include #include

struct arbore{ int info; struct arbore *st,*dr;};

void creare(struct arbore *&p){ int n; printf("Dati info nodului: "); scanf("%d",&n); if (n) { p=new arbore; p->info=n; p->st=NULL; p->dr=NULL; creare(p->st); creare(p->dr); }}

arbore* cauta_val(struct arbore *p, int val){ if (p) { if (p->info==val) return p; cauta_val(p->st,val); cauta_val(p->dr,val); }}

void echilibrat(struct arbore *p, int n, int *nr){ if (p) { if (n>*nr) *nr=n; echilibrat(p->st,n+1,nr); echilibrat(p->dr,n+1,nr); }}

void main(){ struct arbore *tata_lor, *q=NULL; int x, niv_dr=0, niv_st=0; clrscr(); creare(tata_lor); printf("Dati valoarea care trebuie cautata: "); scanf("%d",&x); q=cauta_val(tata_lor,x); if (q) printf("Valoarea a fost gasita la adresa %p\n",q); else printf("Valoarea nu a fost gasita.\n");

echilibrat(tata_lor->st,1,&niv_st); echilibrat(tata_lor->dr,1,&niv_dr); if (abs(niv_st-niv_dr)info=n; p->st=NULL; p->dr=NULL; creare(p->st); creare(p->dr); }}

void numara(struct arbore *p, int *noduri, int *frunze){ if (p) { *noduri+=1; if (!p->st && !p->dr) *frunze+=1; numara(p->st,noduri,frunze); numara(p->dr,noduri,frunze); }}int NNN (arbore *r, int n) /* numar noduri de pe nivelul n */{ if (!r)return 0;if (n == 0)return 1;return NNN(r->st, n-1) + NNN(r->dr, n-1);}

void main(){int x[100],max,i; int nr_noduri=0, nr_frunze=0; struct arbore *tata_lor; clrscr(); creare(tata_lor); numara(tata_lor,&nr_noduri,&nr_frunze); for(i=1;imax) { printf("La coada nu mai pot fi adaugate containere!"); getch(); return(0); }else { p=new container; if(p==NULL) { printf("\nAlocare esuata!\n");return(0); } printf("Introduceti datele pt container : "); printf("\nCod container: "); scanf("%d",&p->cod); printf("\nContinut container: "); fflush(stdin); gets(p->continut); printf("\nData ambalarii: "); scanf("%d/%d/%d",&p->datta.zi,&p->datta.luna,&p->datta.an); printf("\nGreutate :"); scanf("%d",&p->greutate); p->leg=varf; varf=p; return(1); }}int pop (container *&varf, int codd){ container *p,*q;p=varf;while(p) { if(p->leg->cod==codd) { q=p->leg;printf("\nContainerul cu codul %d, ce continea %s, ambalat la %d/%d/%d cu greutate de %d kg a parasit coada!",q->cod,q->continut,q->datta.zi,q->datta.luna,q->datta.an,q->greutate);p->leg=q->leg;free(q);getch();return(0); } p=p->leg; }if(varf==NULL) { printf("\nCoada este goala!"); getch(); }return(1);

}void afisare(container *varf){container *p;clrscr();p=varf;if(p==NULL) printf("Coada este nula!\n");else { printf("\nComponenta cozii :"); while(p) { printf("\nContainerul cu codul %d, contine %s, ambalat la %d/%d/%d cu greutate de %d",p->cod,p->continut,p->datta.zi,p->datta.luna,p->datta.an,p->greutate); p=p->leg; } }getch();}

void main (void){int codd,ok;char c;container *varf=NULL;clrscr(); printf("Apasati tasta s pt adaugarea unui container in coada.\n"); printf("Apasati tasta l pt extragerea unui container din coada.\n"); printf("Apasati tasta a pt afisarea cozii.\n"); printf("Apasati tasta q pt iesire din program.\n"); printf("Dati optiunea dvs:"); while ((c=getch())!='q') { if (c=='s' || c=='S') { ok=push(varf); if(ok==0) printf("Containerul nu a putut fi adaugat");} else if (c=='l' || c== 'L') { codd=-1; while(pop(varf,codd)) { clrscr(); printf("Introduceti codul containerul ce doriti a fi extras: "); scanf("%d",&codd); } } else if(c=='a'|| c=='A') afisare(varf); clrscr(); printf("Apasati tasta s pt adaugarea unui container in coada.\n"); printf("Apasati tasta l pt extragerea unui container din coada.\n"); printf("Apasati tasta a pt afisarea cozii.\n"); printf("Apasati tasta q pt iesire din program.\n"); printf("Dati optiunea dvs:"); }}14. Prog. construieste o stiva de numere intregi, distincte,pe care o afiseaza, utilizand functiile: adauga_stiva si afisare_stiva

#include #include #include

structs_stiva{intvaloare;int nr_aparitii; /* numarul de aparitii ale numarului in stiva */struct s_stiva *urmator;};

struct s_stiva *adauga_stiva (struct s_stiva *ultimul, int val){/*Functia returneaza un pointer la ultimul element din stiva daca s-a putut adauga un nou element, sau NULL daca nu s-a adaugat ("Memorie plina!") */structs_stiva*ptr_stiva;if (ultimul==NULL){ultimul=(struct s_stiva *) malloc(sizeof(struct s_stiva));if (ultimul==NULL){printf("Memorie plina!\n");return(NULL);}else{ultimul->valoare=val;ultimul->nr_aparitii=1;ultimul->urmator=NULL;return(ultimul);}}else{ptr_stiva=ultimul;/* se cauta daca exista valoarea */while(ptr_stiva->valoare!=val && ptr_stiva->urmator!=NULL)ptr_stiva=ptr_stiva->urmator;if(ptr_stiva->valoare==val){ptr_stiva->nr_aparitii++;return(ultimul);}else{ptr_stiva=(struct s_stiva *)malloc(sizeof(struct s_stiva));if (ptr_stiva==NULL){printf("Mmeorie plina!\n");return(NULL);}else{ptr_stiva->valoare=val;ptr_stiva->nr_aparitii=1;ptr_stiva->urmator=ultimul;return(ptr_stiva);}}}}

void afisare_stiva(struct s_stiva *ultim){int nr_val_linie = 0;while (ultim!=NULL){printf("%2d(%d)-> ", ultim->valoare, ultim->nr_aparitii);ultim=ultim->urmator;nr_val_linie++; /* contor pentru nr. de valori afisate pe linie */if (nr_val_linie%8==0)printf("\n");}printf ("\n");}

void eliberare_spatiu (struct s_stiva *ptrs){struct s_stiva *p=ptrs;while(p){ptrs=p;p=p->urmator;free(ptrs);}}

void main(){struct s_stiva *ultim=NULL;int numar;clrscr();printf("Prg. construieste si afiseaza o stiva de nr. intregi, distincte.\n");printf("Introducerea se termina cu EOF(CTRL-Z, ENTER.\n");printf("Introduceti numar: ");while(scanf("%d", &numar)!=EOF){if((ultim=adauga_stiva(ultim, numar))==NULL)break;printf("Introduceti numar: ");}afisare_stiva(ultim);eliberare_spatiu(ultim);}15. Programul construieste o stiva de caractere, pe care apoi o tipareste.

#include struct st_lista{charcar;struct st_lista *urmator;};void main(){struct st_lista *vr, *primul;char c;primul = NULL;printf("\nProgramul construieste si afiseaza o stiva de caractere.\n");printf("Introduceti caractere (CTRL-Z, Enter-pentru sfarsit):\n");fflush(stdin);while ((c=getchar()) != EOF) if (c!='\n'){vr=(struct st_lista *) malloc(sizeof(struct st_lista));if (vr == NULL){ /* daca pointerul returnat de functia malloc() esteNULL */printf("Memorie plina !!!!!!\n");/* se tipareste un mesaj de eroare */break;/* si se termina executia ciclului de citire caractere */}vr->car=c;vr->urmator=primul;primul=vr;}vr=primul;/* initializare pointer curent, vr, pentru a referiprimul caracter */while (vr != NULL){printf("%c -> ", vr->car);vr=vr->urmator;}printf(" NULL");/* tiparire sfarsit lista caractere sau lista vida daca primul era NULL */}16. Programul construieste o stiva de caractere distincte, pe care apoi o tipareste.

#include struct st_lista{charcar;struct st_lista *urmator;};void main(){struct st_lista *vr, *primul;char c;int distinct (struct st_lista *prim, char ch);primul = NULL;printf("\nProgramul construieste si afiseaza o stiva de caractere.\n");printf("Introduceti caractere (CTRL-Z, Enter-pentru sfarsit):\n");fflush(stdin);while ((c=getchar()) != EOF)if (c != '\n' && (distinct(primul, c))){vr=(struct st_lista *) malloc(sizeof(struct st_lista));if (vr == NULL){/* daca pointerul returnat de functiamalloc() este NULL */printf("Memorie plina !!!!!!\n");/* mesaj de eroare */break;/* si se termina executia ciclului de citirecaractere */}vr->car=c;vr->urmator=primul;primul=vr;}vr=primul;/* initializare pointer curent, vr, pentru a referiprimul caracter */while (vr != NULL){printf("%c -> ", vr->car);vr=vr->urmator;}printf(" NULL");/* tiparire sfarsit lista caractere sau lista vida dacaprimul era NULL */}int distinct (struct st_lista *prim, char ch){struct st_lista *ptr;int gasit;ptr=prim;/* initializare pointer curent cu primul din lista */gasit=0;/* presupunem ca nu l-am gasit inca */while (ptr != NULL && !gasit)/* cat timp nu s-a terminat lista si nul-am gasit */{/* se continua parcurgerea listei */gasit=(ptr->car == ch);ptr=ptr->urmator;}return (!gasit);}17. Programul permuta liniile dintr-o matrice pentru a ordonacrescator valorile de pe diagonala principala a matricei.

#include #include #define NR_MAX 3int a[NR_MAX][NR_MAX];int nl, nc, l, c;int ntotsol=0; // numarul total de solutii

void main (void){int lin, col, il, ic, aux;int incearca (int);clrscr();printf("Programul ordoneaza valorile de pe diagonala unei matrici.\n");printf("Numar de linii/coloane: ");scanf("%d%d", &nl, &nc);printf("\n");for (l=0; lsel += (1 rest -= a->val[iv]; /* si micsoreaza rest de completat */Cauta (a, iv+1); /* continua cautarea */a->sel -= (1 rest += a->val[iv]; /* si reface rest de completat */}}

void main (){int i;long Suma;TDate x;clrscr();printf ("Introduceti valori, terminand cu 0 sau caracter nenumeric:\n");for (i = 0; i < MAXV; i++)if (scanf("%i", &(x.val[i])) < 1 || x.val[i] == 0)break;if (!i){ printf ("Lipsa date!!!\n"); exit(1); }x.nval = i;printf("\nAti introdus %u valori:\n", x.nval);for (i = 0; i < x.nval; i++)printf ("%5i", x.val[i]);printf ("\n");for (;;){printf ("\nSuma dorita de construit (calculat) cu valori ""din vector\n\t(oprire program orice caracter nenumeric): ");fflush(stdin);if (!scanf ("%ld", &Suma))break;x.sel = 0; x.rest = Suma; x.nrsol = 0;Cauta (&x, 0); /* Cauta solutii */if (! x.nrsol)printf ("Nu exista solutie !\n");}}19. "acoperirea" unei table de sahprin mutarile unui cal, astfel incat fiecare casuta a tablei sa fieparcursa (atinsa) o singura data; se afiseaza prima solutie gasita

#include #include #define N 5#define NSQ N*N#define NrMaxMutCal 8// N - dimensiunea tablei de sah; NSQ=N^2;// NrMaxMutCal=8, nr. maxim mutari posibile ale calului, pt. o pozitie data

int i, j, q;long int nr_incercari;int h[N+1][N+1];int a[NrMaxMutCal+1]={0, 1, 1, 2, 2, -1, -1, -2, -2};// poz. relative pe cele douaint b[NrMaxMutCal+1]={0, 2, -2, 1, -1, 2, -2, 1, -1};// doua coordonate,// ale celor 8 mutari posibilevoid muta (int i, int x, int y, int *pq){// determina mutarea urmatoareint k, u, v, l, c, q1;k = 0;do {k = k + 1;// selectie urmatoarea mutareu = x + a[k];// noile coordonatev = y + b[k];q1 = 0;// initializare indicator 'succes mutare'if ((u >= 1 && u = 1 && v tipareste solutia} // se continua daca nu s-a gasit o solutie (q1=0) si daca} while (!q1 && k < NrMaxMutCal); // mai sunt mutari posibile (ka[i]; cout y) x=x-y; else y=y-x; return x; } }

int main(){ int a[100],n,i; cin>>n; for(i=1;i>a[i]; cout