Documente Academic
Documente Profesional
Documente Cultură
Algoritmi și tehnici de
programare
Cursul 3
+
Cuprins
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șier conducător
Fișier de intrare
Parcurs secvențial
! (sfîrşit prelucrare) Da
Prelucrare articol
Nu
STOP
+
Schema logică generală
Operaţii iniţiale
Citeşte
articol
!feof(f) Da
Prelucrare articol
Nu
STOP
+
Varianta 2
START
Operaţii iniţiale
SF = fread (…)
SF != 0 Da
Prelucrare articol
Nu
STOP
+
Varianta 3
START
Operaţii iniţiale
!fread (…) Da
Nu Prelucrare articol
Operaţii finale
STOP
+
Varianta 4
START
Operaţii iniţiale
Calculare număr
articole (nr)
i=1
i ≤ nr Da
Citeşte
articol
Nu
Prelucrare articol
Operaţii finale
i = i+1
STOP
+
Operaţii de gestiune a fişierelor
Creare/Populare
Consultare
Actualizare:
Adăugare
Modificare
Ştergere
+
Algoritmi de prelucrare a fișierelor
binare organizate secvențial
Populare (creare)
Consultare (căutare)
Un articol (căutare)
Mai multe articole (selecție)
Toate articolele (integrală)
Actualizare:
Adăugare
Modificare (articol unic / selecție / integrală)
Ștergerea nu este definită (simulare)
+
Determinarea încheierii prelucrărilor
Convențional
CREARE Vanzari.dat
+
Populare (creare) fișier
Deschidere
S-a tastat fișier
CTRL-Z?
Cod
!feof(stdin) Da
Citire câmpuri
Nu
Închidere Articol
fișier
Cod
Stop
+
Populare (creare) fișier
La adaugare
difera modul de
deschidere
La adaugare se face
pozitionare la
sfârșitul fișierului
binar organizat
secvențial
+
Consultare, un articol
1 2
AFIŞARE vanzari.dat
3
+
Consultare, un articol
Schema logică structurată
Start
Deschidere
fișier
Cod căutat
!feof(stdin) Da
Nu Prelucrare articol
după Cod căutat
Închidere
fișier
Cod căutat
Stop
+
Consultare, un articol
Schema logică structurată
Articol x
vb = 0
!feof(f) și vb==0 Da
Prelucrare
Nu articol
Nu vb==0 Da Articol x
Nu a fost găsit
codul căutat!
Ieșire
+
Consultare, un articol
Schema logică structurată
Prelucrare articol
vb = 1
Ieșire
+
Consultare, un articol
+
Consultare, cu selecție
Să se listeze într-un fișier text numele staţiilor din judeţele ale căror
denumiri se introduc de la tastatură. Sfârșitul introducerii datelor este
marcat standard.
1 2
Listare vanzari.dat
3
+
Consultare, cu selecție
Schema logică structurată
Start
Deschidere
fișier
den_jud
!feof(stdin) Da
Nu Prelucrare
după den_jud
Închidere
fișier
den_jud
Stop
+
Consultare, cu selecție
Schema logică structurată
Deschide lista
Articol x
vb = 0
!feof(f) Da
Nu
Prelucrare
articol
Închide lista
Nu vb==0 Da
Articol x
mesaj succes mesaj eroare
Șterge lista
Ieșire
+
Consultare, cu selecție
Schema logică structurată
Condiția de
selecție
Prelucrare articol
Nu jud == den_jud Da
denum, m
vb = 1
Ieșire
+
Consultare, cu selecție
+
Consultarea integrală
Scop: Obţinerea unor situaţii cu elemente grupate
după anumite caracteristici comune, pe mai
multe niveluri.
Consultare_GT
1 3
2
Imprimant
a
+
Exemple
Caracteristică de grupare Valoare a caracteristicii
Sursa: Institutul National de Statistica
Salariile medii pe departamente dintr-o lună Analiză pentru investiţie potenţială – miliarde
RON
- mii RON -analiză pe anul 2020-
Departamentul Contabilitate Regiune Sud- Vest
Salariat Popescu I. 2.000 Judeţul Dolj 13,53
Salariat Ionescu M. 1.500 Judeţul Gorj 9,64
………………………………....................... Judeţul Vâlcea 7,37
Total contabilitate 10.000 ……………………………….........................
Departamentul Financiar PIB la nivelul regiuni sud-vest 42,26
Salariat Mihailă P.
2.000
Total
………………………………...................................
Salariat Petrescu D. 2.500 Regiune Sud- Est
………………………………....................... Judeţul Constanţa
Total financiar 17.000 21,73
……………………………………………………….. ……………………………….........................
x>y
STOP x[i]>x[j] Da Nu Da
?
Poziționare nr. rel. i
Nu x[i] <->x[j] (x.loc > y.loc) sau Articol y
Nu ((x.loc== y.loc) și
Poziționare nr. rel. j
(x.companie >
j=j+1 y.companie)) Articol x
i=i+1 j=j+1
+
Sortare fisier
+
Sortare fisier
+
Algoritmul general
Respectă cerinţele problemei
Start
Operații inițiale
Articol x
!feof(f) Da
Prelucrare
articol
Nu
Articol x
Operații finale
Stop
+
Algoritmul general - nivelul 1
Ce rezultă din examinarea listei şi
cum vrem să apară?
- se iniţializează variabila de total
specifică nivelului;
- se salvează valoarea
caracteristicii primului articol al
Prelucrare grup de nivel 1
grupei;
- alte operaţii iniţiale specifice Operații inițiale
primului nivel de grupare.
la nivelul 1
Nu s-a terminat
- conţine condiţia de prelucrare Da
specifică nivelului ; grupul
- şi nu este sfârșitul fișierului. Prelucrare grup
Nu
de nivel 2
-se afişează totalul calculat pentru
caracteristica ce se schimbă; Operații finale
- se cumulează totalul nivelului
curent la totalul nivelului ierarhic la nivelul 1
superior
→
- alte operaţii finale specifice
nivelului Ieșire
+
Algoritm general
Operații inițiale
la nivelul 2 Prelucrare conținut
grup de nivel n
Nu s-a terminat
Da Prelucrare
grupul →…→
Prelucrare grup articol
Nu
de nivel 3
Articol x
Operații finale Ieșire
la nivelul 2
Ieșire
Algoritmul
+
Start
Articol x
Algoritm general
pentru două !feof(f) Da
niveluri de Operații inițiale
grupare la nivelul 1
v1, v2 –
caracteristicile !feof(f) și v1==c1 Da
de nivel 1 si 2 Operații inițiale
Nu
la nivelul 2
c1, c2 – valorile Nu
curente pentru
caracteristicile Operații finale !feof(f)
v1 si v2 la nivelul 1 și v1==c1 și Da
v2==c2 Prelucrare
articol
Operații finale Nu
generale Articol x
Operații finale
Stop la nivelul 2
+
Grade de total
+
Lista vânzărilor
+
Prelucrarea fișierelor secvențiale
Actualizare:
Adăugare (populare, diferă poziția inițială)
Modificare (articol unic/selecție/integrală)
necesită regăsirea articolului de modificat consultare
după regăsire: confirmare (dacă e cazul), modificare în memorie,
rescriere
Ștergere (nu este definită – simulare)
copierea tuturor articolelor care nu trebuie șterse în alt fișier
ștergerea fișierului inițial și redenumirea celui nou
+
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