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
◼ Access direct la membri
+
Tipul Struct
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;
typedef struct {
int id;
char nume[20];
char prenume[20];
int grupa;
int note[10];
} stud;
O variabilă de acest tip se declară astfel:
◼ stud s;
#include <stdio.h>
typedef struct {
float im;
float re;
} complex1;
void main()
{
complex1 nr1;
nr1.re = 3;
nr1.im = 4;
printf("nr=%.2f+%.2f * i",nr1.re, nr1.im);
}
+
Tipul Struct
#include <stdio.h>
struct complex
{
float im;
float re;
};
void main()
{
complex nr;
nr.re = 3;
nr.im = 4;
printf("nr=%.2f+%.2f * i",nr.re, nr.im);
}
◼ 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
+
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
+
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
+
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
+
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);
+
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
int preluare_vector_1(float v[], int* n)
{
float x;
int er;
FILE *f ;
f= fopen(“fis1.txt”,"r");
*n=0;
if(f!=NULL)
{
while(fscanf(f, "%f", &x) > 0)
{
v[(*n)++]=x;
}
fclose(f);
er=1;
}
else er=0;
return er;
}
+
Fișiere text ca surse de date
int preluare_vector_2(float v[], int* n)
{
float x;
int er;
FILE* f;
f= fopen(“vector1.txt”,"r");
*n=0;
if(f!=NULL)
{
fscanf_s(f, "%f", &x);
while(!feof(f))
{
v[*n]=x;(*n)++;
fscanf_s(f, "%f", &x);
}
fclose(f);
er=1;
}
else er=0;
return er;
}
+
Fișiere text ca surse de date