Documente Academic
Documente Profesional
Documente Cultură
Algoritmi și tehnici de
programare
Cursul 2
+
Cuprins
Tipul Struct
Articolul:
Structură statică
Structură compusă, ierarhică
Membri = câmpuri
Nume și tip
Structură neomogenă
Câmpurile/membrii de tipuri diferite de date
struct StructureName
{
dataType field1;
dataType field2;
.
.
.
dataType fieldn;
};
+
Tipul Struct
struct Student
{
int id;
char nume[20];
char prenume[20];
int grupa;
int note[10];
};
+
Tipul Struct
bytes 4 20 20 4 4*10
+
Tipul Struct
Există două posibilități de declarare a variabilelor care alcătuiesc
structura:
struct Student
{
int id;
char nume[20];
char prenume[20];
int grupa;
int note[10];
};
Student s;
} stud;
stud s;
+
Tipul Struct
Atunci:
s.nume – reprezintă şirul nume al variabilei s;
s.nume[0] - reprezintă primul caracter al şirului nume;
s.nota[0] – reprezintă prima nota a variabilei s.
+
Tipul Struct
Definirea variabilelor
Student s1, studenti[20];
Inițializare
La definire
Student s2 = {2120, "Ionut", "Popa", 1043, {10, 8, 9}};
Referirea cîmpurilor
strcpy(s1.nume, “Ionut");
s1.id = 2121;
studenti[0].nota[2] = 10;
+
Tipul Struct
{
int an, luna, zi;
{
char nume[20];
char adresa[30];
data datan;
int cod;
} pers;
+
Tipul Struct
typedef struct persoana
{
char nume[20];
char adresa[30];
} pers;
+
Tipuri de fişiere în C/C++
Fișiere utilizator
Text
Binare
Fișiere standard
stdout
stdin
stderr
stdprn
stdaux
+
Fişiere text şi binare
Fişierele text:
stochează datele ca o secvenţă de caractere alfanumerice şi
conţinutul acestor fişiere poate fi vizualizat şi poate fi editat direct
cu ajutorul unui editor de texte.
Fişierele binare:
stochează informația fără prelucrări exact așa cum apare ea în
memorie
+
Moduri de deschidere a fişierelor
Mod Scop
Creare w wb
Consultare r rb
Actualizare r+b
Creare şi actualizare w+ rwb, w+b
Extindere a
+
Organizarea externă a datelor în fișiere
Caracteristici:
Externe: nume, extensie, atribute
Interne
Abordare:
Nivel logic
Nivel fizic
+
Organizarea externă a datelor în fișiere
A1 A2 … Ak … An eof
marcator sfârşit
de fişier
început de fişier separatori de articole
Înregistrare logică
C1 C2 ... Cm
separatori de câmpuri
Ak
• Articole cu lungime:
• fixă
• variabilă Lk Ak
+
Fişiere: Abordare la nivel fizic
Zona tampon
(buffer)
• Blocul (înregistrare fizică)
Ai+1 Ai+2 ... Ai+k
I/
Ai+j
MP
/O
Zona articol
+
Moduri de acces la articole
Acces secvențial
Acces direct
Acces dinamic
+
Moduri de acces la articole
A1 A2 … Ak-1 Ak … An eof
D(Ak)
Pointer
(poziția curentă în fișier)
+
Moduri de acces la articole
Acces secvenţial
A1 A2 … Ak-1 Ak … An eof
D(Ak)
• Pentru articole cu lungime fixă:
D(A1) = 0
D(Ak) = D(Ak-1) + Lart; k=2,3,…,n
+
Moduri de acces la articole
P(Ak)
A1 A2 … Ak … An
Organizare Secvenţială
Organizare Relativă
Organizare Indexată
+
Operaţii de intrare/ieşire
la nivel de fişier
Deschiderea fișierului
fişier nou
fişier existent
Prelucrarea conținutului acestuia (citiri, scrieri)
Închiderea fișierului
+
Nivelul superior de prelucrare a fişierelor
FILE* fis;
FILE * - un tip structură definită în stdio.h
+
Operaţii la nivel de fişier
Deschiderea fişierelor
Asignarea fişierelor
exemplu:
1. FILE* f;
f= fopen(“lista.txt”,"r");
2. FILE* f;
fopen_s(&f, nume,"r");
+
Operaţii la nivel de fişier
Închiderea fişierelor
if (fopen(numeFisier, “rb") !=
if (fis != NULL) NULL)
{ {
//… //…
fclose(fis);
fclose(fis);
}
}
+
Operaţii la nivel de fişier
Scriere
Citire
Poziţionare
Rescriere
Ştergere
+
Operaţii de citire/scriere cu conversie
Scrierea pe bază de format
int fprintf(FILE *fis, const char *spec, …)
Citirea de la tastatură
citirea din fișiere text (stdin)
fscanf( stdin, "%d", &x );
sau scanf( "%d", &x );
Scrierea pe ecran
Scrierea în fișiere text (stdout)
fprintf( stdout, "%d", x);
sau printf("%d", x);
+
Operaţii de citire/scriere fără conversie
Poziţionarea în fişier
int fsetpos(FILE* f, const fpos_t poziţie);
int fseek(FILE* f, long deplasare, int origine);
Originea poate fi:
SEEK_SET (0)
SEEK_CUR (1)
SEEK_END (2)
+
Exemplu
fseek(fis, 0, SEEK_END);
+
Fișiere text ca surse de date
float a[10];
int i, l = 0;
preluare_vector_1("test.txt", a, &l);
Vectorul preluat are 6 elemente:
1.11 2.22 3.33 4.44 5.55 23.12
if(!l)
printf("\n\nNu s-a putut deschide fisierul sau nu sint elemente");
else
{
printf("\n\nVectorul preluat are %d elemente: \n",l);
for(i=0;i<l;i++)
printf("%5.2f ",a[i]);
}
+
Fișiere text ca surse de date
void preluare_vector_1(char * nume, float v[], int* n)
{
float x;
FILE *f ;
f= fopen(nume,"r");
*n=0;
if(f)
{
while(fscanf(f, "%f", &x) > 0)
{
v[(*n)++]=x;
}
fclose(f);
}
}
+
Fișiere text ca surse de date
void preluare_vector_2(char * nume, float v[], int* n)
{
float x;
FILE* f;
f= fopen(nume,"r");
*n=0;
if(f)
{
fscanf_s(f, "%f", &x);
while(!feof(f))
{
v[*n]=x;(*n)++;
fscanf_s(f, "%f", &x);
}
fclose(f);
}
}
+
Bibliografie
C. Uscatu, C. Cocianu, M. Mircea, L. Pocatilu, Algoritmi
si tehnici de programare. Aplicații, Editura ASE București
2015
C. Uscatu, M. Popa, L. Bătăgan, C. Silvestru,
Programarea Calculatoarelor. Aplicații, Ed. ASE, 2012
I.Gh. Roşca, B. Ghilic-Micu, C. Cocianu, M. Stoica, C.
Uscatu, M. Mircea, Programarea calculatoarelor.
Algoritmi în programare, Ed. ASE Bucureşti, 2007
I. Gh. Roşca, B. Ghilic-Micu, C. Cocianu, M. Stoica, C.
Uscatu, Programarea calculatoarelor. Ştiinţa învăţării unui
limbaj de programare, Teorie şi aplicaţii, Ed. ASE, 2003