duminică, 4 decembrie 2011

notiune de date in programare

2. NOŢIUNE DE DATE

Informaţia care se păstrează în calculator formează un şir de date. Prin dată se înţelege orice entitate asupra căreia poate opera calculatorul. La executarea programului datele se supun unor modificări. Majoritatea limbajelor de programare dispun de operatori de citire, care permit întroducerea datelor concrete în program şi operatori de afişare, care permit afişarea datelor-rezultat. Fiecare limbaj de programare dispune de mecanizme concrete care realizează memorizarea datelor şi accesarea lor. Orice date cu care lucrează programul se păstrează în calculator ca valori a unor variabile. Prin variabilă se înţelege o informaţie (o dată) a cărei valoare se poate modifica pe parcursul execuţiei unui program. Mulţimea de valori pe care o poate lua o variabilă reprezintă tipul acestei variabile. Un grup de variabile formează o structură de date. Orice variabilă are un nume şi poate păstra la un moment dat o singură valoare, care poate fi modificată în timpul execuţiei programului. Numele variabilei se mai numeşte şi identificator. Identificatorul se foloseşte pentru a accesa variabila în program. Datele pe care le păstrează variabila se numesc valoarea variabilei.

Majoritatea limbajelor de programare cer ca toate variabilele folosite în program să fie descrise. În multe limbaje de programare descrierea variabilelor începe cu identificatorul Var. La descrierea variabilei se indică două caracteristici:

- numele variabilei;

- tipul variabilei.

Identificatorul variabilei trebuie să fie sugestiv, să indice destinaţia ei.

Prin conceptual de tip de dată limbajele de nivel superior permit să se facă abstracţie de detaliile de reprezentare a unei date.

Un tip de dată precizează:

- mulţimea valorilor pe care le poate lua o dată;

- operaţiile care se pot efectua asupra ei.

Tipul de dată se indică cu ajutorul unui nume. De exemplu, Integer reprezintă valori de tip întreg.

De exemplu:

Var

A: integer

B: integer

Min: integer

Pentru fiecare variabilă descrisă se alocă spaţiu. După descriere variabila conţine o valoare nederminată. Pentru a atribui variabilei o valoare concretă se folosesc două metode:

- operaţii de atribuire;

- operaţii de citire.

Pentru operaţia de atribuire vom folosi următoarea sintaxă:

:=

De exemplu:

1) A:= 4

2) B:=18

3) Min:=A+B

Următoarele exemple nu sunt corecte:

100:=A

B=5

C:=76

2.1. Tipuri elementare de date

Tipurile de date folosite în limbajele de programare pot fi împărţite în două clase:

- tipuri elementare de date;

- structuri de date.

Tipurile elementare sunt tipuri atomare. Ele nu pot fi divizate în părţi mai mici.

Structurile de date, spre deosebire de cele simple, sunt combinaţii de alte tipuri, definite prin descrierea tipurilor componentelor şi prin indicarea unor metode de structurare. Componentele tipurilor structurate pot fi elementare sau structurate.

Tipurile de date elementare pot fi:

- standarde;

- definite de utilizator.

Tipurile elementare mai pot fi:

- ordinale;

- reale.

Un tip ordinal defineşte o mulţime finită şi ordonată de valori. Datorită acestui fapt, orice tip ordinal cuprinde o valoare minimă şi una maximă. Orice valoare de tip ordinal are o valoare-predecisoir (cu excepţia valorii minime) şi o valoare-succesor (cu excepţia valorii maxime). Fiecare valoare a unui tip ordinal are asociat un număr ordinal corespunzător rangului pe care îl ocupă ea în mulţimea ordonată de valori din definiţia tipului ordinal. Pentru toate tipurile ordinale, numerele ordinale ale valorilor sunt: 0,1,2, …, cu excepţia tipurilor întregi ale căror valori ordinale coincid chiar cu valorile întregi asociate tipului.

În limbajele de programare sunt realizate trei funcţii aplicabile unei valori x de tip ordinal:

- Succ(x) – furnizează succesorul lui x (dacă x este diferit de valoarea maximă a tipului său) sau generează eroare (dacă x coincide cu valoarea maximă); tipul rezultatului acestei funcţii coincide cu tipul lui x;

- Pred(x) – furnizează predecesorul lui x (dacă x este diferit de valoarea minimă) sau eroare, în caz contrar; tipul rezultatului acestei funcţii coincide cu tipul lui x;

- Ord(x) - furnizează numărul de ordine asociat lui x în mulţimea valorilor corespunzătoare tipului ordinal al lui x; rezultatul acestei funcţii este de tip intreg.

Două valori ordinale x,y se pot compara cu ajutorul operatorilor relaţionali:

=, #, <, >, <=, >=.

Comparaţia se face între numerele lor de ordine. Rezultatul comparaţiei este o valoare logică.

Orice tip de date are trei caracteristici:

- nume, care reprezintă un identificator cu ajutorul căruia tipul se indică la descrierea variabilelor;

- domeniul valorilor pe care le poate avea o variabilă de tipul respectiv;

- operaţii posibile.

Fie că pseudolimbajul posedă tipurile elementare standarde cu următorii identificatori:

Integer, Natural, Char, Boolean,Real

2.1.1. Tipul de date Integer

Se reprezintă în memoria operativă pe 2 octeţi.

Domeniul de valori posibile: [-32768 .. 32767]

Operaţiile posibile:

se pot aplica următorii operatori aritmetici:

1) + adunare;

2) scădere;

3) * înmulţire;

4) div împărţire întreagă;

5) mod restul împărţirii întregi a primului operand la al doilea.

Tipul de date Integer este un tip ordinal, deci pentru valori de acest tip pot fi aplicate operaţiile relaţionale, funcţiile ord(x), pred(x), succ(x).

Valorile de tip Integer pot fi citite de la tastatură şi afişate pe ecran. Citirea se face cu procedura ReadInt(x), unde x este o variabilă de tip Integer, declarată la descrierea variabilelor. După executarea procedurii variabila x va conţine valoarea citită de la tastatură, dacă ea aparţine domeniului de definiţie a tipului Integer sau programul va semnala o eroare de tip run-time, daca valoarea întrodusă nu aparţine domeniului de definiţie.

Afişarea valorilor de tip Integer se face cu procedura WriteInt(x), unde x este o expresie de tip Integer

2.1.2. Tipul de date Natural

Se reprezintă în memoria operativă pe 2 octeţi.

Domeniul de valori posibile: [0 .. 65535]

Operaţiile posibile:

Se pot aplica următorii operatori aritmetici:

1) + adunare;

2) scădere;

3) * înmulţire;

4) div împărţire întreagă;

5) mod restul împărţirii întregi a primului operand la al doilea.

Tipul de date Natural este un tip ordinal, deci pentru valori de acest tip pot fi aplicate operaţiile relaţionale, funcţiile ord(x), pred(x), succ(x).

Valorile de tip Natural pot fi citite de la tastatură şi afişate pe ecran. Citirea se face cu procedura ReadNat(x), unde x este o variabilă de tip Natural, declarată la descrierea variabilelor. După executarea procedurii variabila x va conţine valoarea citită de la tastatură, dacă ea aparţine domeniului de definiţie a tipului sau programul va semnala o eroare de tip run-time, daca valoarea întrodusă nu aparţine domeniului de definiţie.

2.1.3.Tipul de date Real

Datele de tip real iau valor reale aparţinând domeniului de valori corespunzător tipului respectiv.

Spre deosebire de operaţiile cu valori întregi, care reproduc exact rezultatele din aritmetica întregilor, operaţiile cu date de tip real produc rezultate aproximative, datorate erorilor de rotunjire generate de numărul finit de cifre semnificative folosite în reprezentarea valorilor reale.

Se pot folosi următoarele operaţii:

1) + adunare;

2) scădere;

3) * înmulţire;

4) / împărţire cu rezultat de tip real.

Datele de tip Real pot fi comparate.

Tipul Real nu este un tip ordinal, deci asupra valorilor reale nu se pot aplica funcţiile ordinale Ord, Succ, Pred.

Valorile de tip Real pot fi citite de la tastatură şi afişate pe ecran. Citirea se face cu procedura ReadReal(x), unde x este o variabilă de tip Real, declarată la descrierea variabilelor. După executarea procedurii variabila x va conţine valoarea citită de la tastatură, dacă ea aparţine domeniului de definiţie a tipului sau programul va semnala o eroare de tip run-time, daca valoarea întrodusă nu aparţine domeniului de definiţie.

Afişarea valorilor de tip Real se face cu procedura WriteReal(x), unde x este o expresie de tip Real.

2.1.4.Tipul de date Boolean

Datele de tip Boolean pot avea valorile adevărat sau fals, desemnate prin constantele simbolice True şi False. Ele se reprezintă în memorie pe un octet, având valoarea 0 pentru False şi 1 pentru True.

Asupra datelor booleane se pot aplica următorii operatori logici, rezultatul fiind de tip booleen:

- AND - Şi logic;

- OR - Sau logic;

- XOR - Sau exclusiv;

- NOT - negaţie logică.

Valorile booleen nu se pot afişa şi nu se pot citi.

Valorilor booleene li se pot aplica operatorii relaţionali, obţinând orice operaţie logică dorită. Astfel, echivalenţa logică se obţine cu operatorul = (x=y are valoarea True numai dacă x şi y au aceeaşi valoare booleenă), iar implicaţia – cu operatorul <= (x <= y are valoarea False numai dacă x este true şi y este False)

Tabelul de adevăr al operaţie And

X

Y

X and Y

False

False

False

False

True

False

True

False

False

True

True

True

Tabelul de adevăr al operaţie Or

X

Y

X or Y

False

False

False

False

True

True

True

False

True

True

True

True

Tabelul de adevăr al operaţie Xor

X

Y

X xor Y

False

False

False

False

True

True

True

False

True

True

True

False

Tabelul de adevăr al operaţie Not

X

Not X

False

True

True

False

Tipul de date Booleen este un tip ordinal, deci pentru valori de acest tip pot fi aplicate operaţiile relaţionale, funcţiile ord(x), pred(x), succ(x).

Ord(false)=0

Ord(true)=1

Pred(true)=false

Succ(false)=true

Să se alcătuiască tabelul de adevăr pentru expresia

Not P and (Q or R)

P

Q

R

Not P

Q or R

Not P and (Q or R)

False

False

False

True

False

False

False

False

True

True

True

True

False

True

False

True

True

True

False

True

True

False

True

False

True

False

False

False

False

False

True

False

True

False

True

False

True

True

False

False

True

False

True

True

True

False

True

False

Operatorii not, and, or, xor nu sunt singurii care pot să producă rezultate de tip booleean. Limbajele de programare permit şi utilizarea unor operatori de comparaţie (relaţionali) între valorile cu care se lucrează. Rezultatul aplicării unui astfel de operator asupra doi operanzi va produce un rezultat true sau false, după cum între cele două valori există sau nu relaţia indicată de operator. Se folosesc următorii operatori relaţionali:

<, <=, =, >, >=,<>

Utilizarea acestor operatori se face sub forma:

Cei doi operanzi trebuie să fie de acelaşi tip.

De exemplu:

2 < 3 returnează valoarea true

0 > 7 returnează valoarea false

Expresiile relaţionale pot să apară în instrucţiuni de atribuire. De exemplu, se poate scrie:

A:= B>10,

unde A este o variabilă logică, iar B o variabilă numerică. Ca effect al execuţiei instrucţiunii, variabila A primeşte valoarea true dacă şi numai dacă variabila B are o valoare mai mare decât 10. În caz contrar, A va primi valoarea False.

Dacă vrem să precizăm că un triunghi este echilateral, putem folosi o variabilă booleană echilateral, care se poziţionează pe true numai atunci când cele trei laturi au aceeşi lungime:

Echilateral := (a=b) and (b=c).

Dacă prim este o variabilă booleană, care indică că un număr este prim, atunci, pentru a preciza că variabila are valoarea adevărat, putem scrie fie

Prim=true, fie chiar numai Prim. De asemenea, putem scrie Not Prim în loc de Prim=false.

Variabilele logice sunt folosite, atunci când trebuie să exprimăm diferite condiţii ce trebuie verificate.

2.1.5.Tipul de date Char

O dată de tip Char poate lua ca valoare un singur caracter din setul extins de caractere ASCII. Ea se reprezintă în memorie pe un octet, prin codul ASCII al caracterului corespunzător. Tipul Char este un tip ordinal, care asociază fiecărui caracter valoarea ordinală reprezentată de codul ASCII al caracterului. Pentru date de tip Char pot fi aplicate funcţiile ordinale Succ,Pred, Ord şi operaţiile relaţionale.

Exemple:

Succ(‘a’) returnează caracterul ‘b’

Succ(‘4’) returnează caracterul ‘5’

Pred(‘C’) returnează ‘caracterul ‘B’

Ord(‘A’) returnează 65, codul ASCII al caracterului ‘A’

‘A’<’a’ returnează valoarea true

Pentru date de tip Char poate fi aplicată şi funcţia Chr(i), care este inversă funcţiei Ord. Dacă i este o dată de tip intreg cu valori din intervalul [0 .. 255] atunci Chr(i) returnează caracterul al cărui cod ASCII este egal cu valoarea lui i.

Exemple:

Chr(65) returnează caracterul ‘A’

Chr(49) returnează caracterul ‘1’

Valorile de tip Char pot fi citite de la tastatură şi afişate pe ecran. Citirea se face cu procedura ReadChar(x), unde x este o variabilă de tip Char, declarată la descrierea variabilelor. După executarea procedurii variabila x va conţine valoarea citită de la tastatură, dacă ea aparţine domeniului de definiţie a tipului Char sau programul va semnala o eroare de tip run-time, daca valoarea întrodusă nu aparţine domeniului de definiţie.

Afişarea valorilor de tip Char se face cu procedura WriteCharl(x), unde x este o expresie de tip Char. Pentru afişarea unui şir de caracter se poate folosi procedura WriteString(x),unde x este un şir de caractere. Procedura Writeln face trecere la începutul rândului următor.

2.1.6.Transformarea tipurilor de date

La operaţiile de atribuire trebuie să se ţină cont ca variabila şi valoarea atribuită să fie compatibile (să fie de acelaşi tip). Cu acest scop se folosesc funcţii de transformare (conversie) a unui tip de date în alt tip de date:

IntToNat(x)

IntToReal(x)

NatToInt(x)

NatToReal(x)

RealToInt(x)

RealToNat(x)

Exemple:

Var

A:cardinal

B:integer

1) b:=10

2) a:=IntToNat(b)

Niciun comentariu:

Trimiteți un comentariu