Prin validare intelegem operatia de verificare a corectitudinii datelor. O data 
  se considera corecta daca respecta o serie de conditii aritmetice sau logice 
  prestabilite. Validarea datelor presupune precizarea urmatoarelor elemente: g7o21oq
  Ø Conditiile de verificare
  Ø Actiunile care trebuie executate cand data este corecta sau incorecta
  Ø Modul de semnalare a erorilor si structura mesajelor
  Ø Modul de corectie a erorilor
  Ø Modul de reintroducere a articolelor dupa corectia acestora
  Validarea se poate face la nivel de camp (un camp respecta propriile sale conditii), 
  la nivel de articol (respectarea unor relatii intre campurile aceluiasi articol), 
  la nivelul mai multor articole (respectarea unor relatii intre campurile unor 
  articole diferite, completitudinea pe pachete de documente, corectitudinea unor 
  totaluri pe pachete) sau la nivel de fisier (completitudine, corectitudinea 
  unor totaluri pe fisier).
  Cele mai importante validari la nivel de campuri si la nivel de articol se refera 
  la:
  Ø Existenta 
  Ø Natura
  Ø Lungime
  Ø Semn
  Ø Apartenenta la o multime sau lista de valori
  Ø Respectarea unor corelatii aritmetice sau logice intre campuri
  Daca o data nu indeplineste toate conditiile stabilite, se considera eroare 
  si se solicita reintroducerea ei. Introducerea se poate repeta, fie pana se 
  obtine o data corecta, fie pana cand se depaseste un numar prestabilit de reintroduceri.
  Cand un camp este corect, se trece la inroducerea si validarea urmatorului camp. 
  Cand articolul este corect, se scrie in suportul extern si se trece la urmatorul 
  articol.
  Figura urmatoare prezinta o secventa de principiu de validare a unui camp dupa 
  mai multe conditii:
  ----------------------------------------------   Pentru a construi structura repetitiva, necesara reluarii introducerii campului, 
  se utilizeaza o variabila semafor (booleana) ER, care ia valoarea 1, daca a 
  fost eroare (nu s-a indeplinit un criteriu de validare din multimea C1, C2, 
  …, Cn), sau 0, in caz contrar. 
1.VALIDAREA EXISTENTEI
O data se considera existenta daca in campul corespunzator ei nu se introduce 
  doar <ENTER >. Verificarea existentei se realizeaza in functie de in functie 
  de semnificatia tastei ENTER la citirea diverselor tipuri de date: 
  Ø Pentru date numerice- rol de separator,fiind ignorata la citire
  Ø Pentru date de tip caracter- furnizeaza codul ASCII al caracterului 
  CR (#13)
  Ø Pentru date de tip STRING- rol de terminator
  Analiza presupune ca datele sunt introduse camp cu camp, cu procedura READLN. 
  Avand in vedere ca la citirea datelor numerice, <ENTER> este ignorat si 
  ca la citirea intr-o variabila de tip CHAR a lui <ENTER> se solicita un 
  nou <ENTER> , rezulta ca, indiferent de tipul datei, singura posibilitate 
  de verificare a existentei este citirea in variabile STRING, la care numai prin 
  apasarea tastei ENTER se genereaza transferul sirului vid. Daca LENGTH(sir)=0 
  (sau sira0i= #0), se considera ca data nu a fost introdusa. Daca valoarea introdusa 
  este diferita de sirul vid se va proceda astfel:
  · Pentru date numerice, valoarea STRING va fi convertita cu procedura 
  VAL, definita in unit-ul SYSTEM, care se apeleaza astfel:VAL(s,n,cod_er)
  S este variabila STRING care va fi convertita, n este variabila numerica in 
  care s va depune rezultatul conversiei, iar cod_er e o variabila de tip INTEGER 
  care va contine valoarea 0, daca conversia sin ASCII in binar s-a realizat fara 
  eroare, sau pozitia in cadrul sirului a caracterului care nu a putut fi convertit 
  (caz in care valoarea lui n nu se modifica).
  Exemplu:
  VAR
  Cod: WORD; cods: STRINGa5i; cod_er: INTEGER; er: BOOLEAN;
  BEGIN
  REPEAT 
  Er:=false; Writea`Cod: `i; Readln (cods);
  IF cods a0i= #0 THEN 
  BEGIN er:=true;Writeln (`>>Nu ati inrodus valoare!`) End
  ELSE Val (cods,cod,cod_er);
  UNTIL NOT er;
  END
  · Penru date de tip caracter, valoare STRINGa1i citita va fi atribuita 
  variabilei de tip CHAR.
  Exemplu:
  VAR
  Sex:CHAR; sexs:STRINGa1i; er:BOOLEAN;
  BEGIN
  REPEAT 
  Er:=false; Write(`sex:`);Readln(sexs)
  IF sexsa0i=#0 THEN
  BEGIN er:=true; Writeln(`<<Nu ati introdus valoarea!`) END
  ELSE sex:=sexsa1i; 
  UNTIL NOT er; 
  END
  · Pentru date de tip sir de caractere nu este necesara alta prelucrare.
  Exemplu:
  VAR
  Nume:STRINGa30i;er:BOOLEAN;
  BEGIN
  REPEAT
  Er:=false; Write (`Nume:`); Readln (nume); 
  IF Length (nume)=0 THEN 
  BEGIN er:=true; Writeln(`Nu ati introdus valoarea!`) END
  UNTIL NOT er;
  END.
  2.VALIDAREA LUNGIMII
  Lungimea sirului extern introdus de la tastatura se poate determina numai daca 
  citire se face in variabile STRING. Dupa introducere, se testeaza lungimea sirului 
  efectiv, determinata prin functia LENGTH sau preluata din octetul 0. Daca lungimea 
  nu indeplineste conditia impusa (de regule,sa fie egala cu o valoare prestabilita) 
  data se considera eronata. Daca data este corecta, se va proceda similar validarii 
  de existenta. De fapt, acesta este un caz particular al validarii de lungime: 
  lungimea datei sa fie diferita de 0.
  · Pentru date numerice :
  VAR
  Cod:WORD; cods:STRINGa5i; cod_er:INTEGER; er:BOOLEAN;
  CONST
  I_corecta=5;
  BEGIN
  REPEAT 
  Er:=false;Write(`cod:`);Readln (cods);
  IF Ord (codsa0i)<>I_corecta THEN 
  BEGIN er:=true; Writeln(`Lungime eronata!`)
  END
  ELSE Val (cods,cod,cod_er);
  UNTIL NOT er
  END.
  · Pentru date de tip caracter:
  VAR
  Sex:CHAR; sexs:SRINGa1i;er:BOOLEAN
  BEGIN
  REPEAT 
  Er:=false; Write(`sex:`);Readln(sexs)
  IF sexsa0i<>#1 THEN
  BEGIN er:=true; Writeln(`Lungime eronata!`) END
  ELSE sex:=sexsa1i; 
  UNTIL NOT er; 
  END
  · Pentru date de tip sir de caractere:
VAR
  Nume:STRINGa30i;er:BOOLEAN;
  CONST
  I_corecta:=15
  BEGIN
  REPEAT
  Er:=false; Write (`Nume:`); Readln (nume); 
  IF Length (nume)<>I_corecta THEN 
  BEGIN er:=true; Writeln(`Lungime eronata!`) 
  END
  UNTIL NOT er;
  END.
  3.VALIDAREA NATURII
 
Datele pot avea urmatoarele naturi:
  Ø Numerica
  Ø Alfanumerica
  Ø Alfabetica
  In campul extern al datei numerice pot aparea semnul, cifrele 0…9, punctul 
  zecimal si caracterele cu rol de spatiu. In campul extern al datei alfabetice 
  pot aparea caracterele A-Z,a-z, spatiul si, eventual, alte caractere (de exemplu 
  `-`). Pentru datele numerice si alfabetice se pot construi proceduri de validare 
  a naturii, cu toate ca limbajul PASCAL nu poseda instructiuni dedicate unei 
  astfel de operatii.
  1.Validarea de numericitete se realizeaza fie direct, prin procedurile de citire, 
  fie utilizand procedura de conversie VAL. a)Validarea directa prin citire se bazeaza pe faptul ca procedurile Read/Readln 
  genereaza eroare si intrerup executia programului, daca in timpul conversiei 
  sirului, introdus de la terminal se depisteaza un caracter care nu face parte 
  din multimea admisa pentru tipurile numerice.
  VAR
  Cod:WORD; er:BOOLEAN;
  BEGIN
  REPEAT 
  Er:=false;Write(`cod:`);A$I-SReadln (cod); A$I+S
  IF IOResult<>0 THEN 
  BEGIN er:=true; Writeln(`>>Cod numeric!`)
  END
  UNTIL NOT er;
  END. b)Validarea prin conversii proprii presupune introducerea datei numerice intr-o 
  variabila de tip STRING, urmata de conversia cu procedura VAL. Dupa executie 
  se testeaza parametrul cod_er al acesteia.
VAR
  Cod:WORD; cods:STRINGa5i; cod_er:INTEGER; er:BOOLEAN;
  BEGIN
  REPEAT 
  Er:=false;Write(`cod:`);Readln (cods);Val(cods,cod,cod_er);
  IF cod_er<>0 THEN 
  BEGIN er:=true; Writeln(`>>Cod numeric!`)
  END
  UNTIL NOT er
  END.
2.Validarea naturii alfabetice se realizeaza prin verificarea naturii fiecarui 
  caracter din sirul citit (prin expresii relationale sau prin expresii cu multimi).
  VAR
  Nume:STRINGa30i; er:BOOLEAN;
  CONST
  Alfabet:=a`A`..`Z`, `a`..`z`,` `,`-`i;
  BEGIN
  REPEAT
  Er:=false; Write(`Nume: `); Readln(nume);
  FOR i:=1 TO Length(nume) DO
  IF NOT (numeaii IN alfabet) THEN er:=true;
  IF er THEN Writeln(`>>Data nealfabetica!`)
  UNTIL NOT er;
  END.
  4.VALIDAREA APARTENENTEI LA O MULTIME
Verificarea apartenentei unei date numerice la o multime prestabilita de valori 
  se realizeaza fie prin expresii cu multimi ( utilizand operatorul IN), daca 
  multimea este ordinala si se poate defini un literal de tip SET, fie prin expresii 
  relationale, daca multimea este reala sau nu se poate defini o constanta SET.
  VAR
  Cod_grupa:WORD; vb,er:BOOLEAN;
  CONST catalog=a201..250i;
  BEGIN
  REPEAT
  Er:=false; Write(`cod grupa:`);Readln(cod_grupa);
  IF NOT (cod_grupa IN catalog) THEN 
  BEGIN er:=true;Writeln(`>>Cod grupa eronat!`) END
  UNTIL NOT er;
  END.
  Pentru date de tip STRING, verificarea se poate realiza prin cautarea intr-o 
  tabela generata prin program (de exemplu, o constanta de tip vectori de siruri).
  VAR sectie:STRINGa15i; i:BYTE; vb,er:BOOLEAN;
  CONST nomenclator:ARRAYa1..4i OF STRINGa15i=(`Informatica`, `Statistica`, `Cibernetica`,`Matematica`);
  BEGIN
  REPEAT
  Er:=false; vb:=false; Write(`Sectia:`);Readln(sectie)
  FOR i=1 TO Length(sectie) DO sectieaii:=UpCase(sectieaii); i:=1;
  WHILE (i<=4) AND NOT vb DO
  IF sectie=nomenclatoraii THEN vb:=true ELSE i:=i+1;
  IF NOT vb THEN
  BEGIN er:=true;Writeln(`>>Sectie inexistenta !`) END
  UNTIL NOT er;
  END.
Pentru date de tip CHAR pot fi folosite expresii cu multimi (operatorul IN).
VAR tip_bursa:CHAR;vb,er:BOOLEAN;
  BEGIN 
  REPEAT
  Er:=false;
  Write (`Tipul bursei (1/2/S/M):`);
  Readln(tip_bursa):
  IF NOT(tip_bursa IN a`1`,`2`,`S`,`M`i) THEN
  BEGIN
  Er:=true;
  Writeln (`>>Tip bursa eronat!`)
  END
  UNTIL NOT er;
  END.