Sunteți pe pagina 1din 7

Laborator 2

STRUCTURI

1. Scrie forma generala a definirii unei structuri.

struct nume_structura {tip_1 membru_1;


tip_2 membru_2;
...
tip_n membru_n;}

2. Definiti structura pentru evidenta cartilor existente ( maxim 100) intr-o biblioteca stiind ca pentru fiecare
carte trebuie memorate urmatoarele atribute: titlul, autorul, pretul, starea cartii (deteriorate sau nu), numărul de
bucăţi, valoarea totala a cărţilor de acelaşi tip.
struct carte { char titlu[50], autor[50];
float pret;
char stare[50];
int bucati
int valoare} carti[100]

3. Folosind declaratia de la subiectul anterior completează afirmaţiile următoare:

a. pentru a memora informaţiile aferente unei anumite cărţi, declarăm o variabilă c astfel
struct carte c;

b. pentru a afişa preţul cărţii de pe poziţia 10 scriem instrucţiunea


cout<<carti[10].pret

c. pentru a citi titlul cărţii a 10-a scriem instrucţiunea


cin>>carti[10].titlu

d. pentru a calcula valoarea totala a cărţilor de acelaşi tip scriem instrucţiunea


for (i=1;i<=n;i++)
carti[i].valoare=carti[i].pret*carti[i].bucati

e. informaţiile referitoare la un număr de 50 de cărţi pot fi memorate într-un


vector ,
declarat astfel
struct carte volume[50]

1
Laborator 2

4. Definiti structura pentru evidenta produselor existente ( maxim 100) intr-un magazin, stiind ca pentru
fiecare produs trebuie memorate urmatoarele atribute: denumirea, pretul, cantitatea, valoarea totala a produselor de
acelaşi tip.
struct produs
{char denumire[60] ;
float pret, cantitate, valoare ; } p[100];

5. Folosind declaratia de la subiectul anterior completează afirmaţiile următoare:

a. pentru a memora informaţiile aferente unui anumit produs, declarăm o variabilă pr astfel
struct produs pr;

b. informaţiile referitoare la un număr de 30 de produse pot fi memorate într-un


vector,
declarat astfel
struct produs p[50];

c. pentru a citi cantitatea in care se gaseste al 10-lea prous scriem instrucţiunea


cin>>p[10].cantitate

d. pentru a calcula valoarea totala a produselor de acelaşi tip scriem instrucţiunea


for (i=1;i<=50;i++)
p[i].valaoare=p[i].cantitate*p[i].pret

e. pentru a afişa preţul produsului de pe poziţia 20 scriem instrucţiunea


cout<<p[20].pret

6. Fie următoarea secvenţă de declaraţii :

struct cetatean
{char nume[20], starea_civila[10] ;
int varsta ;
long int salariul ; } ;
cetatean a[50], b;
a. scrieti secventa de instructiuni care citeste datele despre n cetateni
cin>>n;
for (i=1;i<=n;i++){
cout<<”Numele cetateanului “<<i<<”:”; cin>>a[i].nume;
cout<<”Starea civila pentru cetateanul “<<i<<”:”; cin>>a[i].stare_civila;
cout<<”Varsta cetateanului “<<i<<”:”; cin>>a[i].varsta;
cout<<”Salariul cetateanului “<<i<<”:”; cin>>a[i].salariu;}

b. scrieti secventa de instructiuni care afiseaza cetatenii in ordine alfabetica;

2
Laborator 2

struct cetatean aux; int i,n;


for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if a[i].nume>a[j].nume{
aux=a[i];
a[i]=a[j];
a[j]=aux;}
// se interschimba acolo unde nu apar in ordine alfabetica

c. scrieti secventa de instructiuni care determina cetateanul cel mai tanar


//se afla minimul dupa valoarea membrului varsta
int min,i
min=a[1].varsta;
for (i=2;i<=n;i++)
if (min>a[i].varsta){
min=a[i].varsta; indice=i;}
cout<<”Cel mai tanar este ”<<a[indice].nume<<”, avand “<<a[indice.varsta<<” ani “

d. completati structura cetetean cu un camp data_n de tip structura care sa reprezinte data nasterii cetateanului si
scrie instructiunea prin care citesti aceasta data pentru primul cetatean.
struct data{
int zi;
int luna;
int an;};
//a fost definita o structura numita data, care retine informatia dintr-o data calendaristica
struct cetatean
{char nume[20], starea_civila[10] ;
int varsta ;
long int salariul ;
struct data data_n } ;
cetatean a[50], b;
//structura definita anterior, este folosita in structura cetatean

e. scrieti instructiunile prin care se citeste data nasterii pentru ultimul cetatean
//daca a este vectorul in care sunt memorate datele despre cetateni, iar n este numarul efectiv de elemente din a,
secventa care preia data nasterii pentru elementul n este
cin>>a[n].data_n.zi;
cin>>a[n].data_n.luna;
cin>>a[n].data_n.an;

3
Laborator 3

Probleme structuri

Intr-o zona au fost instalate n antene de telefonie mobila. Fiecare antena


este situata intr-un punct de coordonate intregi si emite pe o arie circulara de
raza data. Se considera un punct de coordonate x0, yo. Sa se scrie un program sa
afle care dintre antene asigura semnal in acel loc.

Se citesc de la tastatura:

n - numarul de antene
x1 y1 r1
x2 y2 r2 - coordonatele (abcisa, respective ordonata),raza
si
….. - perioada proprie ale fiecarei antene
xs ys rs
x0 y0 - coordonatele zonei

Se vor afisa pe ecran:


numerele de ordine ale antenelor care asigura acoperirea in zona respectiva;
sau mesajul “NU exista acoperire in aceasta zona”, in cazul ca nici una dintre
antene emite semnal in coordonate x0,y0..

Exemplu
Pentru s=4 si antenele:

X1 =2 y1 =2 r1 =3 p1 =3
X2 =3 y2 =3 r2 =4 p2 =5
X3 =0 y3 =2 r3 =5 p3 =4
X4 =0 y4 =0 r4 =3 p4 =2
Xg =0 yi =0

se afiseaza:
1 3 4

#include <iostream.h>
#include <math.h>

float distanta (int cx1,int cy1, int cx2, int cy2) ;

struct antena{
int x,y;
float raza;} antene[50];
void main(){int n,i,x0,y0, nr=0, amin, amax;
cout<<"Dati numarul antenelor";
float d[50], dmin, dmax;
cin>>n;
for (i=1;i<=n;i++){
cout<<"Coordonata in x pentru antena "<<i<<":";
cin>>antene[i].x;
cout<<"Coordonata in y pentru antena "<<i<<":";
cin>>antene[i].y;
cout<<"Raza de acoperire pentru antena "<<i<<":";

1
Laborator 3

cin>>antene[i].raza; }
cout<<"Coordonatele locatiei de control (x0,y0)";
cin>>x0>>y0;
for (i=1;i<=n;i++){
d[i]=distanta(antene[i].x,antene[i].y,x0,y0);
if (d[i]<antene[i].raza) {cout<<"antena "<<i<<endl; nr++;}; }
if (nr==0) cout<<"Nu exista acoperire in aceasta zona" ;
dmin=d[1];
dmax=d[1];
for (i=2;i<=n;i++) {
if (dmin>d[i]) {dmin=d[i]; amin=i;}
if (dmax<d[i]) {dmax=d[i]; amax=i;};};
cout<<"Cea mai aproape este antena "<<amin<<" la distanta de "<<dmin<<endl;
cout<<"Cea mai departe este antena "<<amax<<" la distanta de "<<dmax<<endl;}

float distanta (int cx1,int cy1, int cx2, int cy2)


{float dist;
dist=sqrt(pow((cx1-cx2),2)+pow((cy1-cy2),2));
return dist;
}

2
Laborator 4 - structuri

1. Sa se defineasca o structura care sa retina si sa permita prelucrarea informatiilor privind


candidatii inscrisi la un examen.
Informatia prelucrata se refera la numarul legitimatiei, nume, prenume, notele la trei probe
de examen si media acestora.
2. Sa se afiseze candidatii, impreuna cu numarul legitimatie, in ordine alfabertica
3. Sa se afiseze candidatii, cu toata informatia corespunzatoare fiecaruia, in ordine
descrescatoare a mediilor
4. Presupunand ca exista un numar limitat de locuri si ca un canmdidat poate fi admis numai
daca are media peste 7, sa se afiseze lista candidatilor admisi si a mediilor obtinute de
acestia

#include <iostream.h>
#include <conio.h>
typedef struct candidat{
int id;
char nume[20];float note[3], media;
}; //definirea tipului candidat
void cit_candidat(candidat a[], int n)
{for (int i=1; i<=n; i++){
cout<<"Nume candidat "<<i<<":"; cin>>a[i].nume;
//citirea numelui unui candidat
cout<<"Nr. legitimatie:"; cin>>a[i].id;
for (int j=1; j<=3; j++){ // citirea notelor obtinute la examen
do
{
cout<<"Nota :"<<j<<" ="; cin>>a[i].note[j];
if (a[i].note[j]<0 || a[i].note[j]>10)
//validarea notei (intre 0 si 10)
cout<<"Nota incorecta!....Repeta!"<<endl;
}
while (a[i].note[j]<0 || a[i].note[j]>10);
}
}
}

void main()
{ int nr,p,k,l=0,nrloc;
clrscr();
cout<<"Nr. candidati:";cin>>nr;

struct candidat c[100], aux; //declararea tabloului p, de tip elev


cit_candidat(c, nr); //apel functie

1
Laborator 4 - structuri

//ordonare alfabetica
for (p=1;p<=nr-1;p++)
for (k=p+1;k<=nr;k++)
if (c[p].nume>c[k].nume){
aux=c[p];
c[p]=c[k];

c[k]=aux;}

//afisare vector ordonat


for (p=1;p<=nr;p++)
cout <<c[p].nume<<" legitimatia "<<c[p].id<<endl;
//calculul mediei
for (p=1;p<=nr;p++) c[p].media=(c[p].note[1]+c[p].note[2]+c[p].note[3])/3;

//ordonare descrescatoare dupa medie


for (p=1;p<=nr-1;p++)
for (k=p+1;k<=nr;k++)
if (c[p].media<c[k].media){
aux=c[p];
c[p]=c[k];
c[k]=aux;}
//afisare, descrescator, dupa medie
for (p=1;p<=nr;p++){
cout <<c[p].nume<<" media "<<c[p].media;
cout<<" notele "<<c[p].note[1]<<" "<<c[p].note[2]<<" "<<c[p].note[3];
cout<<" legitimatia "<<c[p].id<<endl;
};

cout<<"Dati numarul locurilor"; cin>>nrloc;


cout<<”Lista admisi:”<<endl;
//afiseaza, din vectorul ordonat descrescator, dupa medii, nrloc pozitii
while (l<nrloc)
if (c[l].media>=7) {
l++;
cout <<c[l].nume<<" media "<<c[l].media;
}
cout<<”Lista respinsi:”<<endl;
//afiseaza candidatii de la valoarea lui L, la ultimul
for (p=l;p<=nr;p++){
cout <<c[p].nume<<" media "<<c[p].media;
}

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