Documente Academic
Documente Profesional
Documente Cultură
Algoritmi i tehnici de
programare
Cursul 5
+
Cuprins
Validarea datelor
Fiierele text:
Fiierele binare:
00110111
00100000
00110001
00110000
00100000
00111000
00101110
9
01100001
10
11
01101110
0110001
8
12
00001010
\n
7
00110101
8
00110111
0
00000111
1
00000000
2
00001010
(short int) 7
00000000
4
01000001
(short int) 10
8
01100001
9
01101110
00001000
6
00000000
(float) 8.5
10
0110001
11 ..17
00000000
\0
xxxxxxx
7
00000000
Validarea datelor
Niveluri de validare
cmp ndeplinirea condiiilor proprii
articol corelaii ntre cmpuri, alte condiii
Ex: CNP, Nume, Vrsta etc.
grup de articole relaii ntre articole, completitudine
pachet, totaluri etc.
fiier completitudine, totaluri etc.
Validarea datelor
nr. = 0
Mesaj, dac e
citire de la
tastatur
er = 0
-> cmp
NU
condiie 1
=11
erer=
<- mesaj
eroare 1
DA
condiie 2
NU
DA
=1 2
erer=
<- mesaj
eroare 2
NU
=1 n
erer =
Ecran e/ citire
Dac
fiier
de la tastatur
jurnal
<- mesaj
eroare n
nr. = 0
er > 0 i
nr < max
== 10
erer>
NU
DA
condiie n
DA
Validarea datelor
Tipuri de validri la nivel de cmp / articol
Existen
Natur
Lungime
Ex: CNP
Semn
Ex: Pret
apartenen la o mulime / interval
Ex: Sex: {m, f/}
corelaii ntre cmpuri (aritmetice, logice etc.)
Validarea datelor
Natur
numeric
alfabetic
alfanumeric
Validarea datelor
Validarea datelor
er = 1;
while( er )
{
printf("\nVarsta = ");
fflush( stdin );
if( scanf("%d", &x) == 1 )
er = 0;
}
Validarea datelor
Pentru conversia datelor din format numeric n format
ir de caractere i invers se folosesc dou seturi de
funcii:
Validarea datelor
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void main()
{
char *s[]={"12345","12345.67","123456.78","123a45.67","a12345.67",
"12345.a67"};
int j, n, er, i, nr, k=0,v[5];
for(j=0; j<6; j++)
{ n=strlen(s[j]);er=1;
for(i=0;i<n;i++)
if((s[j][i]<'0')|| (s[j][i]>'9')) er=0;
if (er==1) {
v[k]=atoi(s[j]);
k++;
}
}
for(i=0;i<k;i++)
printf("v[%d]=%d\n",i,v[i]);
}
Validarea datelor
Lungime
existen (diferit de zero)
lungime propriu-zis
Fiier conductor
Fiier de intrare
Parcurs secvenial
Operaii standard
Operaii specifice
NCEPUT
! (sfrit prelucrare)
Nu
Operaii standard
Operaii specifice
SFRIT
STOP
Da
Prelucrare articol
Iniializare variabile
Deschiderea fiierului
nchiderea fiierului
+
Varianta 1
START
Operaii iniiale
Citete
articol
!feof(f)
Nu
Operaii finale
STOP
Da
Prelucrare articol
Citete
articol
+
Varianta 2
START
Operaii iniiale
SF = fread ()
SF != 0
Da
Prelucrare articol
Nu
Operaii finale
STOP
SF = fread ()
+
Varianta 3
START
Operaii iniiale
!fread ()
Nu
Operaii finale
STOP
Da
Prelucrare articol
+
Varianta 4
START
Operaii iniiale
Calculare numr
articole (nr)
i=1
i nr
Da
Citete
articol
Nu
Prelucrare articol
Operaii finale
STOP
i = i+1
Scop:
Problema
principal:
determinarea poziiei unui anumit element din
masiv n cadrul fiierului.
Prelucrarea
depinde de:
nedens
n ordine lexicografic
invers lexicografic.
dens
n ordine lexicografic
invers lexicografic.
ftell(fisier) - sizeof(nr_linii)
nr_coloane
sizeof(articol) * nr_linii
ftell(fisier) - sizeof(nr_coloane)
nr_linii
sizeof(articol) * nr_coloane
rang(aij)=j*nr_linii+i+1,
n
cazul
memorrii
invers
lexicografice, unde nr_linii este fie numrul liniilor efective
(populare dens), fie numrul liniilor rezervate (populare
nedens).