Documente Academic
Documente Profesional
Documente Cultură
Catedra:Informatica Aplicata
RAPORT
Lucrarea de laborator Nr.7
La Programarea Calculatoarelor
A efectuat:
A verificat:
dr., conf.univ.
M. Kulev
Chiinu 2016
Structura este o mulime de date grupate, conform unei ierarhii, de obicei de tipuri diferite.
Structura poate fi comparat cu tabloul, ns tabloul conine date de un acelai tip, iar elementele
tabloului se acceseaz cu ajutorul indicilor, pe cnd accesarea componentelor structurii are o
form specific. Structura reprezint un tip de date definit de utilizator prin utilizarea tipurilor
deja existente.
Ex.: Utilizind instructiunea typedef si specificator de structura struct putem defeni structura si un
nou tip de date student:
typedef struct student
{ // definirea cimpurilor (membrilor) structurii
char nume[50];
int nr;
float nm;
} student;
Elementele structurii pot fi de tip predefinit sau definit de utilizator, excepie fiind tipul structurii
date. Pentru definirea variabilelor este suficient utilizarea numelui de structur la fel ca tipurile
predefinite: student s1, s2, s[10], *p;
n acest caz s-au definit dou variabile de tip carte, un tablou din 10 cri i un pointer spre
student.
Referirea la componentele unei structuri se face utiliznd att numele structurii ct i a
componentei respective. Aceasta se realizeaz printr-o construcie de forma:
s1.nm = 9.5;
s[i].nm = 8.5;
n cazul pointerilor:
p = &s1;
p->nm = 9.5;
O variabil structur poate fi iniializat la declarare prin precizarea ntre {} a valorilor
cmpurilor; cele neprecizate sunt implicit 0.De asemenea,o varibila structura poate fi transmisa
ca argument efectiv la apelarea unei funcii sau poate fi primita ca rezultat al unei funcii, ntr-o
instruciune return.
Un avantaj important al utilizrii structurilor este c atunci cnd atribuim o variabil de tip
structur unei alte variabile de acelai tip, se copiaz automat toate cmpurile structurii.
n limbajul C putem specifica pentru cmpurile de tip int sau char dimensiunea n bii pe care
s o ocupe. Dimensiunea n bii se specific plasnd imediat dup definirea cmpului
caracterul : urmat de numrul de bii pe care dorim s l ocupe cmpul.
Exemplu:
struct data_biti
{
unsigned int zi : 5;
unsigned int luna : 4;
int an : 15;
};
Dac urmrim (cu ajutorul operatorului sizeof) dimensiunea ocupat de structura redefinit astfel,
vom vedea c este ntradevr de 3 octei.
Principalele avantaje ale utilizrii unor tipuri structur sunt:
Programele devin mai explicite dac se folosesc structuri n locul unor variabile separate.
Se pot defini tipuri de date specifice aplicaiei iar programul reflect mai bine universul
aplicaiei.
Se poate reduce numrul de parametri al unor funcii prin gruparea lor n parametri de
tipuri structur i deci se simplific utilizarea acelor funcii.
Se pot utiliza structuri de date extensibile, formate din variabile structur alocate dinamic
i legate ntre ele prin pointeri (liste nlnuite, arbori .a).
Uniuni:
O uniune este o variabil ce poate stoca la momente diferite obiecte de tipuri i dimensiuni
diferite. Mai explicit, la un moment dat poate fi utilizat (citit, scris, copiat) doar unul din
cmpurile uniunii.
union tip_var{
int i;
float f;
char *s;
} valoare;
Variabilei var_u i se va aloca suficient memorie pentru a putea stoca cel mai voluminos cmp
al su. Este responsabilitatea programatorului s urmreasc ce cmp este stocat n uniune la
momentul curent. Acest lucru se face prin intermediul unei variabile auxiliare, care de regul
formeaz o structur mpreun cu uniunea.
Accesul la cmpurile unei uniuni (citire, atribuire, etc) se face la fel ca i n cazul
structurilor: var_u.f sau ptr_u->f n cazul unui pointer la uniune.
Asupra unei uniuni se pot efectua aceleai operaii ca i asupra unei structuri.
Iniializarea uniunii se va face ntotdeauna cu o valoare de tipul primului su membru.
Fisiere:
Un fiier este o structur dinamic, situat n memoria secundar (pe disk-uri). Limbajul C
permite operarea cu fiiere:
de tip text - un astfel de fiier conine o succesiune de linii, separate prin NL ('\n')
de tip binar - un astfel de fiier conine o succesiune de octeti, fr nici o structur.
Prelucrarea unui fiier presupune asocierea acestuia cu un canal de I/E (numit flux sau stream).
Exist trei canale predefinite, care se deschid automat la lansarea unui program:
stdin - fiier de intrare, text, este intrarea standard - tastatura
stdout - fiier de iesire, text, este ieirea standard - ecranul monitorului.
stderr fiier de iesire, text, este ieirea standard unde sunt scris mesajele de eroare
ecran.
Pentru a prelucra un fiier, trebuie parcurse urmtoarele etape:
se definete o variabil de tip FILE * pentru accesarea fiierului; FILE * este un tip
Returneaz pointer la fiier sau NULL dac fiierul nu poate fi deschis; valoarea returnat
este memorat n variabila fiier, care a fost declarat pentru accesarea lui.
+ - permite scrierea i citirea - actualizare (ex: r+, w+, a+). O citire nu poate fi
direct urmat
de o scriere i reciproc. nti trebuie repoziionat cursorul de acces printr-un apel la fseek.
Analiza functiilor:
void addrecord(FILE *f):
a)Parametrii de apel :
f-pointer la fisier;
b)Valoarea returnata:
Nu este returnata nici o valoare.
Functia adauga o inregistrare noua dupa idul dorit la sfirsitul fisierului.In cazul in care idul
exista,ne afiseaza avertizare.
}
}
int main()
{
FILE *f;
int nm=10;
f=fopen(bd,"rb+");
if(f==NULL){
printf("Fisierul nu poate fi deschis...");
return 1;
}
while(nm!=0)
{
afisaremmenu();
scanf("%d",&nm);
switch(nm){
case 1:
afisarebd(f);
f=saveData(f);
break;
case 2:
addrecord(f);
f=saveData(f);
break;
case 3:
deleterecord(f);
f=saveData(f);
break;
case 4:
exportbd(f);
break;
case 0:
puts("va multumim ca ati folosit aplicatia noastra!");
}
}
}
DEZAVANTAJE:
Bibliografie:
1. Culegerea de probleme pentru laborator.
2 The C Programming Language, Brian Kernighan and Dennis R ;
3. Conspectul prelegerilor cursului Programarea Calculatoarelor pentru studeni gr.,
SI-162. Lector: dr., conf. univ. M.Kulev. Chiinu, UTM,2016