You are on page 1of 10

TEMA LARORATOR 11

1. //*Sa se scrie un program, care folosind o structura de tip student sa determin numarul de studenti straini dintr-o grupa si sa afiseze toate datele acestora (nume, prenume, tara de origine, grupa, anul nasterii). Datele pentru studentii din grupa se citesc de la intrarea standard, pana la intalnirea numelui AAA*// #include <iostream> #include <stdlib.h> #include <string.h> using namespace std; #define end "AAA" struct student { char nume[50]; char prenume[50]; char tara[50]; int grupa; int an; }; struct list { struct student *p; struct list *next; }; list* aloc_list(void); student* aloc_student(void); void dealocare(struct list *p); void main(void) { struct list *start,*p; char nume[50],tara[50]; int grupa; start = aloc_list(); p = start; cout<<"Introduceti datele studentilor:\n"; cout<<"\tNume: "; cin>>nume; while(strcmp(nume,end)!=0) { p->p = aloc_student(); strcpy(p->p->nume,nume); cout<<"\tPrenume: "; cin>>p->p->prenume; cout<<"\tTara: "; cin>>p->p->tara; cout<<"\tGrupa: "; cin>>p->p->grupa; cout<<"\tAnul nasterii: "; cin>>p->p->an; p->next = aloc_list(); p = p->next; cout<<"\n\tNume: "; cin>>nume; } cout<<"\nSfarsit lista student\n";

p->next = NULL; cout<<"Introduceti numarul grupei: "; cin>>grupa; cout<<"Introduceti tara de referinta: "; cin>>tara; p = start; cout<<"\n\nStudentii din grupa "<<grupa<<" care nu sunt din tara "<<tara<<": \n"; while(p->next) { if(p->p->grupa == grupa) if(strcmp(p->p->tara,tara)==0) cout<<"\t"<<p->p->nume<<" "<<p->p->prenume<<"\tan:"<<p->p->an<<endl; p = p->next; } dealocare(start); } struct list* aloc_list(void) { struct list *p; if(!(p = new struct list)) { cout<<"\n\nEroare la alocare!\n"; exit(1); } return p; } student* aloc_student(void) { struct student *p; if(!(p = new struct student)) { cout<<"\n\nEroare la alocare!\n"; exit(1); } return p; } void dealocare(struct list *p) { if(p->next) dealocare(p->next); delete p->p; delete p->next; } 2. //*Sa se scrie un program, in care folosind cate o functie se transfera ca parametru o variabila de tip structura de date, ca valoare si, respectiv, prin adresa folosind pointeri. In functia main initializati campurile structurii cu date citit de la tastatura. In ambele functii afisati datele din structura folosind un mesaj adecvat*// #include <iostream> using namespace std; struct student { char nume[50]; char prenume[50]; };

void afisNuPointer(struct student p); void afisPointer(struct student *p); void main(void) { struct student p,*pp; pp = &p; cout<<"Introduceti date pentru structura student cu campurile nume si prenume: \n"; cout<<"\tNume: "; cin>>p.nume; cout<<"\tPrenume: "; cin>>p.prenume; cout<<"\nAfisare prin functie cu parametru o variabila de tip structura: "; afisNuPointer(p); cout<<"\nAfisare prin functie cu parametru pointer la o variabila de tip structura: "; afisPointer(pp); } void afisNuPointer(struct student p) { cout<<"\nNume: "<<p.nume<<"\t\tPrenume: "<<p.prenume; } void afisPointer(struct student *p) { cout<<"\nNume: "<<p->nume<<"\t\tPrenume: "<<p->prenume; } 3. //*Sa se scrie un program, in care o functie returneaza o structura de date adecvata. In acest fel vor fi returnate mai multe valori. Afisati rezultatul, valorile initiale transferate functie (puteti realiza orice operatie in cadrul acelei functii), cu mesaje adecvate*// #include <iostream> #include <string.h> using namespace std; struct siruri { char sir1[50]; char sir2[50]; char sir3[100]; int xerox; }; siruri operatie(struct siruri p); void main(void) { struct siruri p; cout<<"Introduceti doua siruri de caractere: "; cin>>p.sir1>>p.sir2; p = operatie(p); if(p.xerox) cout<<"\nSirurile sunt identice"; else cout<<"\nCele doua siruri sunt diferite"; cout<<"\nSirul rezultat prin concantenarea celor doua siruri: "<<p.sir3<<endl; } siruri operatie(struct siruri p) { if(strcmp(p.sir1,p.sir2)==0)

p.xerox = 1; else p.xerox = 0; strcpy(p.sir3,p.sir1); strcat(p.sir3,p.sir2); return p; } 4. //*Sa se scrie un program care utilizand o structura de tip angajat sa afiseze toate datele persoanelor cu ocupatia inginer, intr-o intreprindere (nume, prenume, ocupatia, data nasterii, sectia in care lucreaza)*// #include <iostream> #include <stdlib.h> using namespace std; struct data{ int zi; int luna; int an; }; struct angajat { char nume[50]; char prenume[50]; char ocupatie[50]; struct data *d; char sectie[50]; }; data* readDate(struct data *d); void main(void) { int n; struct angajat *p; cout<<"Introduceti numarul de angajati: "; cin>>n; if(!(p = new struct angajat[n])) { cout<<"\nEroare la alocare!\n"; return; } for(int i=0;i<n;i++) { cout<<"\n\n\tNume: "; cin>>(p+i)->nume; cout<<"\tPrenume: "; cin>>(p+i)->prenume; cout<<"\tOcupatie: "; cin>>(p+i)->ocupatie; cout<<"\tData nastere: "; (p+i)->d = readDate((p+i)->d); cout<<"\tSectia: "; cin>>(p+i)->sectie; } cout<<"\nAngajatii care sunt de profesie ingineri: \n"; for(int i=0;i<n;i++) {

if(strcmp((p+i)->ocupatie,"inginer")==0) { cout<<"\t"<<(p+i)->nume<<" "<<(p+i)->prenume<<"\t\t"<<(p+i)->d->zi<<"."<<(p+i)->d>luna<<"."<<(p+i)->d->an<<"\t"<<(p+i)->sectie<<endl; } } for(int i=0;i<n;i++) delete (p+i)->d; delete []p; } data* readDate(struct data *d) { if(!(d = new struct data)) { cout<<"\nEroare la alocare!\n"; exit(1); } cout<<"\n\t\tZi: "; cin>>d->zi; cout<<"\t\tLuna: "; cin>>d->luna; cout<<"\t\tAn: "; cin>>d->an; return d; } 5. //*Sa se scrie un program care citeste datele personale pentru n persoane (nume, prenume, data nasterii codul numeric personal, data angajarii) si apoi le afiseaza in ordinea datei angajariii*// #include <iostream> #include <stdlib.h> using namespace std; struct data { int zi; int luna; int an; }; struct persoana{ char nume[50]; char prenume[50]; struct data *dn; char codnumeric[13]; struct data *da; }; void sort(struct persoana *p,int *v,int n); void afis(struct persoana *p,int *v,int n); data* readDate(void); int compareDate(struct data *p1,struct data *p2); void dealocare(struct persoana *p,int *v,int n); void main(void) { int n,*v; struct persoana *p; cout<<"Introduceti numarul de persoane: ";

cin>>n; if(!(p = new struct persoana[n])) { cout<<"\n\nEroare la alocare!\n"; exit(1); } if(!(v = new int[n])) { cout<<"\n\nEroare la alocare!\n"; exit(1); } cout<<"Introduceti datele celor "<<n<<" persoane:\n"; for(int i=0;i<n;i++) { cout<<"\n\tNume: "; cin>>(p+i)->nume; cout<<"\tPrenume: "; cin>>(p+i)->prenume; cout<<"\tData nasterii: "; (p+i)->dn = readDate(); cout<<"\tCNP: "; cin>>(p+i)->codnumeric; cout<<"\tData angajarii: "; (p+i)->da = readDate(); } for(int i=0;i<n;i++) *(v+i) = i; sort(p,v,n); afis(p,v,n); dealocare(p,v,n); cout<<endl<<endl; } void sort(struct persoana *p,int *v,int n) { int res,aux; for(int i=0;i<n-1;i++) { for(int j=i+1;j<n;j++) { res = compareDate((p+*(v+i))->da,(p+*(v+j))->da); if(res>0) { aux = *(v+i); *(v+i) = *(v+j); *(v+j) = aux; } } } } void afis(struct persoana *p,int *v,int n) { cout<<"Personalul aranjat dupa data angajarii:"; for(int i=0;i<n;i++) {

cout<<"\n\t"<<(p+*(v+i))->nume<<" "<<*(p+*(v+i))->prenume<<"\n\t\tcnp:"<<(p+*(v+i))>codnumeric <<"\n\t\t d.nas: "<<(p+*(v+i))->dn->zi<<"."<<(p+*(v+i))->dn->luna<<"."<<(p+*(v+i))->dn->an <<"\n\t\t d.angj: "<<(p+*(v+i))->da->zi<<"."<<(p+*(v+i))->da->luna<<"."<<(p+*(v+i))->da->an; } } data* readDate(void) { struct data *p; if(!(p = new struct data)) { cout<<"\n\nEroare la alocare!\n"; exit(1); } cout<<"\n\t\tZi: "; cin>>p->zi; cout<<"\t\tLuna: "; cin>>p->luna; cout<<"\t\tAn: "; cin>>p->an; return p; } int compareDate(struct data *p1,struct data *p2) { if(p1->an < p2->an) return -1; if(p1->an == p2->an) { if(p1->luna < p2->luna) return -1; if(p1->luna == p2->luna) { if(p1->zi < p2->zi) return -1; if(p1->zi == p2->zi) return 0; } } return 1; } void dealocare(struct persoana *p,int *v,int n) { for(int i=0;i<n;i++) { delete (p+i)->da; delete (p+i)->dn; } delete []p; delete []v; } 6. //*Sa se scrie un program care afiseaza numele, prenumele si media studentului cu cele mai bune rezultate din grupa in urma sesiunii de iarna. Folositi pentru aceasta o structura student, alocarea dinamica, si o functie de care returneaza inregistrarea student care are media cea mai mare*//

#include <iostream> using namespace std; struct student { char nume[50]; char prenume[50]; float medie; }; void afis(struct student *p,int n); void main(void) { int n; struct student *p; cout<<"Introduceti numarul de studenti din grupa: "; cin>>n; if(!(p = new struct student[n])) { cout<<"\n\nEroare la alocare\n"; return; } cout<<"\nIntroduceti datele studentilor:"; for(int i=0;i<n;i++) { cout<<"\n\tNume: "; cin>>(p+i)->nume; cout<<"\tPrenume: "; cin>>(p+i)->prenume; cout<<"\tMedia: "; cin>>(p+i)->medie; } cout<<"Studentul cu media cea mai mare este: "; afis(p,n); delete []p; } void afis(struct student *p,int n) { float max = p->medie; int loc = 0; for(int i=1;i<n;i++) { if((p+i)->medie > max) { loc = i; max = (p+i)->medie; } } cout<<"\n\t"<<(p+loc)->nume<<" "<<(p+loc)->prenume<<"\tmedie: "<<(p+loc)->medie<<endl; } 7. //*Sa se scrie o plicatie care aloca dinamic memorie pentru memorarea datelor a nstudenti, si dupa ce citeste datele pentru fiecare din acestia, afiseaza numarul studentelelor. In final se va elibera memoria alocata*// #include <iostream> using namespace std;

struct student { char nume[50]; char prenume[50]; char sex; }; void main(void) { int n,cate=0; struct student *p; cout<<"Introduceti numarul de studenti: "; cin>>n; if(!(p = new struct student[n])) { cout<<"\n\nEroare la alocare!\n"; exit(1); } cout<<"Introduceti datele studentilor: "; for(int i=0;i<n;i++) { cout<<"\n\tNume: "; cin>>(p+i)->nume; cout<<"\tPrenume: "; cin>>(p+i)->prenume; cout<<"\tSex(m/f): "; cin>>(p+i)->sex; } for(int i=0;i<n;i++) { if((p+i)->sex == 'f') cate++; } if(cate>0) cout<<"\n"<<cate<<" dintre studenti sunt studente\n"; else cout<<"Nu exista nici o studenta, ce trist :(\n\n"; delete []p; } 8. //*Declarati o structura de date de tip struct, o_struct, care sa contina o variabila de tip intreg, una de tip caracter si un sir de 256 caractere. In programul principal definiti o variabila statica de tip o_struct, careia sa-i initializati variabilele cu date citite de la intrarea standard. Declarati apoi un pointer de tip o_struct, po_struct, pe care sa-l definiti folosind alocarea dinamica cu o zona de memorie care sa contina un articol de tip o_struct. Initializati campurile structurii de date folosind pointer, po_struct. Eliberati in final zona de memorie alocata*// #include <iostream> #include <string.h> using namespace std; struct o_struct { int nr; char caracter; char sir[255]; }; void main(void)

{ struct o_struct str,*po_struct; cout<<"Introduceti un numar intreg: "; cin>>str.nr; cout<<"Introduceti un caracter: "; cin>>str.caracter; cout<<"Introduceti un sir de caractere: "; cin>>str.sir; if(!(po_struct = new struct o_struct)) { cout<<"\n\nEroare la alocare!\n"; exit(1); } po_struct->nr = str.nr; po_struct->caracter = str.caracter; strcpy(po_struct->sir,str.sir); delete po_struct; } Nume student: Nagy Alisa Anul I; T2; Seria B; Grupa 9

You might also like