Sunteți pe pagina 1din 21

2.

TIPURI DE DATE I DATE ELEMENTARE




2.1 Date i informaii

n practic se face deosebire ntre o dat i o informaie. Exemplele
oferite n cele mai multe cazuri sunt edificatoare. Exist i tendine de a oferi
definiii pentru date i pentru informaii. Dilemele cnd o informaie este
considerat dat i cnd o dat este o informaie, sunt rezolvate pentru muli
specialiti, dar rmn dileme pentru o alt categorie de specialiti.
Din punct de vedere al programatorului, ceea ce face obiectul prelucrrii
sunt de fapt iruri de bii care reprezint date sau informaii, funcie de
contextul n care sunt generate i de modul n care se interpreteaz
rezultatele. Pentru a nu complica i mai mult problematica, se consider c n
activitatea de programare se opereaz cu date. Toate intrrile i ieirile
programelor sunt date. Sistemele de prelucrare, ns sunt intitulate n
continuare sisteme informaionale sau sisteme informatice, n mod ornamental
din punctul de vedere al programatorilor.
n realitate, atunci cnd acestea funcioneaz corect, prelucreaz ntr-
adevr informaii. Atunci cnd, ns, fluxurile sunt greoaie i determin un
nivel de istorism costisitor, prelucrrile sunt ale unor date certe.
Pentru ca n literatura de specialitate capitolul deinut descrierii
operanzilor informaii sau date se numete STRUCTURI DE DATE, n
continuare, nu se mai face deosebirea dintre informaie i dat. Utilizatorii sunt
aceia care decid dac ofer spre prelucrare informaii sau date i dac
rezultatele prelucrrii sunt date sau sunt informaii.


2.2 Clasificri ale datelor

Exist numeroase puncte de vedere de abordare a gruprii datelor,
fiecare constituindu-se ntr-un criteriu. Ceea ce este ns adevrat, este legat
de faptul c fiecrei date i se ataeaz totalitatea atributelor ce rezult din
multitudinea de clasificri care se iau n considerare.
a) Criteriul variabilitii grupeaz datele n:
- date constante, care nu se modific ntr-un interval de timp sau
pe durata execuiei programului; n cazul n care pentru a face un
program lizibil constantele sunt puse n coresponden cu anumii
identificatori, n programe sunt vehiculai acetia din urm,
formnd constantele simbolice.
- date variabile, ale cror niveluri se modific fie ntr-un interval de
timp, fie pe parcursul execuiei unui program; ntotdeauna se
vorbete de o valoare iniial, valori intermediare i o valoare
final; numrul valorilor intermediare determin mecanismele
necesare prelucrrilor, includerea n structuri repetitive sau
stocarea lor n fiiere;
b) Criteriul compunerii difereniaz datele astfel:
- date simple sau elementare, fiecare avnd o anumit semnificaie
i fiind independente de celelalte date care apar ntr-un context
specificat; datele elementare se mai numesc atomi;
- date compuse sau structurate, formate din date elementare sau
date la rndul lor structurate; fiecare component are o anumit
poziie n cadrul structurii i mpreun cu celelalte formeaz un
ntreg; ntre prile care alctuiesc o dat compus exist legturi
n primul rnd de coninut i numai toate la un loc caracterizeaz
un fenomen, un proces sau un individ dintr-o colectivitate:
apartenena i poziia fiecrei componente se precizeaz explicit
la descrierea datei structurate;
c) Criteriul semnificaiei coninutului conduce la:
- date care fac obiectul operaiilor de prelucrare, adic particip ca
operanzi n expresii, se iniializeaz prin atribuiri sau operaii de
intrare, se stocheaz pe supori, se afieaz sau se transmit ca
parametri;
- date care permit adresarea operanzilor i care au valori cuprinse
ntre limite precizate, care prin calcule de adrese localizeaz
corect fie operanzi, fie alte date de adresare, fie funcii de
prelucrare;
- date care efectueaz prelucrarea, care apar ca succesiuni de
instruciuni direct executabile dac fiierul care le aparine este
ncrcat n memoria unui calculator i se comand lansarea n
execuie a acestuia;
d) Criteriul naturii datelor genereaz tipurile de date urmtoare:
- date de tip ntreg, ale cror elemente aparin mulimii Z;
- date de tip real, ale cror elemente aparin mulimii R;
- date de tip complex, ale cror elemente aparin mulimii C, iar
coeficienii care desemneaz partea real i partea imaginar
aparin mulimii R;
- date de tip boolean, ale cror elemente aparin mulimii {TRUE,
FALSE} sau {0, 1};
- date de tip caracter, ale cror elemente aparin mulimii
caracterelor ce sunt definite prin combinaie de bii la nivelul unui
bait; din cele 256 de combinaii unele sunt grupate pentru litere,
altele pentru cifre, altele pentru caractere speciale i pentru
caractere de control; corespunztor, sunt definite date de tip
alfabetic, de tip numeric, date de tip caractere de control etc.;
aceste date au cte un singur element din mulimea care i
definete tipul;
- date de tip ir de caractere reprezint o compunere prin
concatenare a datelor de tip caracter; datele acestea au un
delimitator al sfritului de ir, fie o constant de tip ntreg la
nceput, preciznd numrul de caractere care intr n alctuirea
irului;
e) Criteriul construirii tipurilor conduce la:
- date de tip fundamental care aparin unui tip implementat n
fiecare limbaj de programare, precum tipurile ntreg, real,
caracter, boolean, complex; programatorul are posibilitatea
definirii constantelor simbolice i variabilelor proprii specificnd
tipurile fundamentale i alege prelucrrile compatibile acestora;
- date de tip derivat care se obin prin includerea n cadrul unor
structuri a componentelor avnd unul din tipurile fundamentale
implementate n limbaj; rezultatul obinut este un tip de dat
derivat care se pune n coresponden cu un identificator i care
este folosit de programator pentru a defini variabilele n program
avnd respectivul tip;
f) Criteriul dispunerii n memoria intern, grupeaz datele n:
- date dispuse n zone contigue care permit localizarea uneia
dintre ele cunoscnd o adres i o deplasare; n cazul n care
zonele de memorie ocupate au aceeai lungime, adresa fiecrei
date se constituie ca termen al unei progresii aritmetice i este
calculat cunoscnd adresa primei date i poziia n irul datelor
contigue a elementului cutat;
- date dispersate n memoria intern - se obin n cazul alocrii
dinamice a memoriei necesare, ceea ce impune stocarea i
conservarea adresei zonei de memorie asociat fiecrei date;
dac datele dispuse n zone contigue, au realizat proiectarea
alocrii n faza de compilare, datelor dispersate li se aloc
memorie efectiv n faza de execuie i nu exist posibilitatea ca n
mod direct s se construiasc modele de calcul a adreselor fizice
pe care datele le ocup, mai ales dac alocarea memoriei este un
proces ce depinde de testarea unor condiii din program;
g) Criteriul cmpului de aciune, mparte datele n:
- date cu caracter global care se definesc o singur dat, dar care
sunt utilizate din orice punct al programului sau a funciilor i
procedurilor care intr n componena lui; aceste date se definesc
i li se aloc memorie o singur dat i au cmpul de aciune cel
mai cuprinztor;
- date cu caracter local sunt n fiecare procedur i li se aloc
memorie dinamic, automat, la apelarea fiecrei proceduri sau
funcii; odat cu revenirea n secvena apelat deci la ieirea din
funcie sau din procedur - are loc eliberarea memoriei alocate
(dealocarea memoriei); variabilele locale nu sunt folosite dect n
procedura sau funcia unde au fost definite;
- date de tip registru au rolul de a pune la dispoziie
programatorului n limbaje evoluate, accesul la registrele
calculatorului; n cazul unei folosiri judicioase exist posibilitatea
creterii vitezei de prelucrare, iar n cazul folosirii abuzive a
registrelor se obine fenomenul invers;
h) Criteriul definirii domeniului presupune:
- date al cror domeniu este specificat prin limita inferioar, limita
superioar i forma de prezentare generic a elementelor;
- date al cror domeniu este definit odat cu enumerare
elementelor care i formeaz.
i) Criteriul alocrii memoriei, grupeaz datele n:
- date statice calcule de alocare a memoriei se efectueaz n faza
de compilare, iar nainte de execuie, alocarea este efectiv;
- date dinamice a cror memorie este alocat i dealocat n timpul
execuiei programului, prin funcii de bibliotec apelate.
ntr-un program, o anumit dat este astfel definit nct se ncadreaz
ntr-una din subgrupele fiecrui criteriu. Astfel, definirea:

// PROGRAM definire:
#include<.>
#include<.>
................................
int k;
main( )
{
................................
}

dintr-un program C/C++ se interpreteaz astfel:
- k este o dat variabil (criteriul variabilitii);
- k este o dat elementar (criteriul compunerii);
- k este o dat de tip operand (criteriul semnificaiei);
- k este o dat de tip ntreg (criteriul naturii datelor);
- k este o dat de tip fundamental (criteriul construirii tipurilor);
- k este o dat dispus ntr-o zon contigu (criteriul dispunerii
n memoria intern);
- k este o dat global (criteriul cmpului de aciune).
Deci, k este un operand, variabila elementar, global, de tipul
fundamental ntreg, dispus ntr-o zon contigu.


2.3 Modele de prezentare a datelor

ntre forma de reprezentare natural sau extern a datelor i forma de
reprezentare intern a acestora, exist mari diferene.
Reprezentarea intern a datelor, se realizeaz utiliznd algoritmi de
codificare, care pun n coresponden datele cu iruri de bii. Pentru fiecare tip
de dat se definete lungimea zonei de memorie i algoritmul de codificare,
precum i codurile operaiilor care utilizeaz operanzii n concordan cu
caracteristicile de tip ale acestora.
a) Modelul de verificare a concordanei tip-coninut-adres
Modele de reprezentare a datelor au n componena lor:
- LSUP
i
,LIMF
i
valori care precizeaz limita inferioar i limita superioar a
intervalului creia i aparine data de tip i specificat;
- A
i
indicatorul algoritmului de realizare a reprezentrii interne
pentru datele de tip i;
- f( ) funcia de apartenen a datei la un anumit tip;
- M mulimea funciilor de conversie;
- n numrul de tipuri de date;
- k cerine de aliniere a adresei de nceput a zonei de memorie, k
e {1, 2, 4, 8};
- T
i
natura i a datei;
- adr( ) funcia de determinare a adresei unei zone de memorie pus
n coresponden cu un identificator specificat:

adr : J -> N (2.1)

unde:
- J mulimea identificatorilor;
- N submulime a numerelor naturale cu care se localizeaz fiecare bait al
zonei de memorie la dispoziia programatorului;

- N b a N = ] , [
~

delimiteaz posibiliti hardware de dispunere n memorie a
programului, unde a, b e N, a < b;
- cont( ) funcia coninut a zonei de memorie:

cont : (2.2)
i
n
i
i
D U T J
1 =


- tip( ) funcia de identificare a tipului variabilei:

tip : J -> T (2.3)

Mulimea T
j
a naturii datelor fundamentale implementate n limbajul de
programare L
j
, se definete prin:

T
j
= { T
1
, T
2
, ...,T
n
} (2.4)

Dac j este C, atunci:

T
C
= {int, bool, float, char, string} (2.5)

deci n = 5, fr a fi luate n considerare variantele pentru datele ntregi, reale
i posibilitatea de a specifica seturi de valori.
Pentru datele de natur boolean, LSUP
2
este 1 sau TRUE i LINF
2
este 0
sau FALSE.
Pentru datele de natur real A
3
, corespunde modului de construire a
mantisei i caracteristicii precum i dispunerea acestora pe cei 6 baii.
Pentru datele ntregi H, mulimea funciilor de conversie are elementele:

H = {f
11
, f
12
, f
13
, f
14
, f
15
} (2.6)

Dintre acestea numai f
11
i f
14
sunt inversabile, deci tabloul funciilor:

f
ij
( ), i = 1, 2, 3, 4, 5 i j =1, 2, 3, 4, 5 (2.7)

demonstreaz c se efectueaz conversii n toate direciile cu o anumit
pierdere a unor simboluri din descrierea iniial.
Cerinele de aliniere sunt specifice particularitii hardware a sistemelor
de calcul. n cazul n care la compilare nu este realizat optimizarea alocrii
memoriei, apar zone neutilizabile cu efecte ce sunt interpretate mai dificil.
Declararea:

...
char a;
float b;
char c;
char d;
...

n absena optimizrii alocrii de memorie, conduce la rezervarea:


a b c d

A : 8
A+8

A+16 A+20

Figura 2.1 Alocarea n memorie a variabilelor a, b, c i d

n cazul optimizrii, secvenei de program i corespunde:


b d a c

A : 8 A+8

Figura 2.2 Alocarea optimizat n memorie a variabilelor a, b, c i d

Este posibil optimizarea datorit comunicativitii dispunerii operanzilor
ntr-o secven, atunci cnd acetia sunt elementari i nu apare problema
redefinirii.
Funcia de apartenena a datelor la un anumit tip se definete prin:

f : U x D
i
-> { FALSE, TRUE} (2.8)

unde:
- U - mulimea irurilor ce se genereaz cu simbolurile alfabetului
nstruit pentru un limbaj;
- D
i
intervalul sau mulimea elementelor specifice tipului de date i.

e
e
=
Di x daca TRUE
Di x daca FALSE
i x f ) , ( (2.9)

De exemplu:

f(13, int) =TRUE (2.10)

pentru c 13 e [-32768, 32767] Z, D
int
fiind domeniul ntregilor, n timp ce

f( - 4, bool) = FALSE (2.11)

pentru c 4 nu aparine mulimii {FALSE, TRUE}.
n secvena:

...
int x;
...
x = 20;
...

presupunnd c n compilare i editare de legturi, variabilei x i se asociaz
zona de memorie:


07AA0
00 00 00 14
x


07AA0
14 00 00 00
x

a b
Figura 2.3 Zona de memorie asociat variabilei x
(a microprocesoare MOTOROLA, b microprocesoare INTEL)

adr(x) = 07AA0
cont(x) = (00000014)
16
f(cont(x), int) = TRUE
tip (x) = int

Deci:

f(cont(x), tip(x)) = TRUE (2.12)

Funcia de aliniere:

K: adresa x tip
i
-> TRUE (2.13)

=
i
i
i
k adresa daca FALSE
k adresa daca TRUE
) T K(adresa,
M
(2.14)

unde k
i
este factorul de aliniere cerut prin construcie pentru tipul de date T
i
.

K(07AA0, int) = TRUE (2.15)

pentru c 07AA0M4

K(adr(x), tip (x)) = TRUE (2.16)

Se spune c variabila x este:
- corect alocat;
- corect iniializat;
dac i numai dac:

f (cont(x), tip(x)) AND K(adr(x), tip(x)) = TRUE (2.17)

b) Modelul de generare a constantelor pentru un tip specificat de
date
Folosind convenii i simboluri, se definesc reguli, mecanisme de
generare a constantelor. Astfel, se noteaz:


c

a


b
- cifra
- a sau b
[ ] - construcie opional


Figura 2.4 Notaiile utilizate n generarea constantelor

Constantelor ntregi li se asociaz modelul de generare:


+
-
ccccc. . . c


Figura 2.5 Modelul de generare a constantelor

Putem verifica dac irurile:

0
- 125
. 3
+- 60
44

sunt sau nu constante ntregi. Cu uurin ne dm seama c irurile . 3 + - 60
i 44 - nu ndeplinesc cerinele impuse de ablonul model.
Pentru constantele de tip real se prezint modelul de generare:

] [ ] ... [ [.] ] ... [ cc e c cc c cc
E
(

)
`

+
(

)
`

)
`

+


Figura 2.6 Modelul de generare a constantelor reale

irurile:
+ 1 . 2e-4
- . 3 E2
2 . e-1
1e + 4

sunt constante reale ntruct respect regulile de generare incluse n ablon.
c) Modele de descriere a datelor folosind grafuri.
ntruct grafurile permit punerea n eviden a interdependenelor dintre
elemente omogene sau neomogene, se consider utilizarea lor ca fiind
sugestiv n cazul structurilor de date.
Prin convenie, se stabilesc c nodurile care prezint numai arce
incidente spre interior corespund datelor elementare, iar nodurile care au arce
incidente spre interior i spre exterior corespund datelor de grup.
Astfel, graful:

b
c
d
a


Figura 2.7 Graful de reprezentare a datei compuse a

este interpretat ca: data compus a are n alctuirea ei datele elementare b, c
i d.
Graful:

0 - ->0 - ->0- ->0
a b c d (2.18)

corespunde datelor interdependente, n care b urmeaz lui a, c urmeaz lui b i
d urmeaz lui c. Nodurile a, b, c, d sunt fie date elementare, fie date compuse,
iar pentru stabilirea relaiei de preceden este necesar memorarea unor
adrese.
Pentru realizarea n cadrul programelor a definirii structurilor complexe
de date este necesar reprezentarea acestora folosind grafuri i dup aceea
scrierea n program a unei forme liniarizate neambigue.
De exemplu, pentru structura de tip arborescent, se utilizeaz scrierea
parantetica, ce presupune ca elementele de pe acelai nivel s fie separate prin
virgul, iar pentru trecerea la nivel inferior, utilizarea unei paranteze rotunde
deschise.
Revenirea la nivelul precedent se marcheaz cu o parantez nchis.
Astfel grafului:

a
c
h
j
i
g
f
e
d
b

Figura 2.8 Graful de reprezentare a datei complexe a

i corespunde liniarizarea:

a(b(d,e,f,g), c(h(i,j))) (2.19)

d) Modele care permit implementarea recursivitii n descrierea
datelor
Se face deosebire ntre modelele recursive de descriere a datelor
precum:

<semn> : : = + , -
<cifra> : : = 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
<ntreg fr semn> : : = <cifra> , <ntreg fr semn><cifra> ,
<cifra><ntreg fr semn>
<ntreg> : : = <ntreg fr semn> , <semn><ntreg fr semn>

i modelele care implementeaz, recursivitatea n descrierea datelor. Astfel,
construcia:

tip_de_dat o = | ( _ntreg,o_o) (2.20)

pune n eviden ca dat | conine dou date elementare i anume care are
tipul ntreg i o care are tipul o.
Aceste modele permit descrierea structurilor de date autoreferite: liste,
stive i arbori.
e) Modele grafice
Sunt utilizate reprezentri grafice pentru locaiile de memorie asociate
variabilelor i constantelor unui program. Prin arce se stabilesc legturile
dintre locaii. Acest model de descriere a datelor este sugestiv i fr
ambiguitate.
Construcia:

1 7 10 ni1


Figura 2.9 Modelul locaiilor de memorie asociate variabilelor i constantelor

reprezint o list, fiecare component avnd dou elemente: primul reprezint
informaia util avnd valorile 1, 7 i 10, iar al doilea conine adrese. Arcele
orientate indic locaia a crei adresa este memorat n componenta
precedent.
f) Modelul vectorial
Se consider un vector avnd un numr dat de componente. Fiecare
component are o semnificaie precizat, iar componentele luate n ansamblu
lor descriu complet i corect structurile de date.
Se observ c pentru datele elementare, multe dintre componentele
vectorului sunt nule. Zerourile, arat lipsa dependenelor n aval i n amonte
sau mrimea distanei dintre dou componente.
Funcia distant se definete astfel:

d(x,y) = adr (y) adr (x) (2.21)

Definim lg(x,T
i
), funcia lungime a zonei de memorie asociat
operandului x. De exemplu, pentru secvena de program:

...
x : extended;
y : comp;
z : shortint;
w : word;
...

lg(x, extended) = 10 baii
lg (y, comp) = 8 baii
lg (z, shortint) = 1 baii
lg(w, word) = 4 baii
unde:

lg : I x T -> {1,2,4,6,8,10} (2.22)

Programul care pune n eviden lungimile tipurilor de date ale limbajului
C/C++ este:

//program dimensiune_tip
#include <iostream.h>
#include <malloc.h>
main()
{
cout<<"\n - - - - - - - - - - - - - - - - - - - - - - - - ";
cout<<"\n Reprezentarea datelor de tip ntreg";
cout<<"\n - - - - - - - - - - - - - - - - - - - - - - - - ";
cout<<"\n char: "<< sizeof(char)<<" octet";
cout<<"\n unsigned char: "<< sizeof(unsigned char)<<" octet";
cout<<"\n int: "<< sizeof(int)<<" octet";
cout<<"\n unsigned int: "<< sizeof(unsigned int)<<" octet";
cout<<"\n signed int: "<< sizeof(signed int)<<" octeti";
cout<<"\n short int: "<<sizeof(short int)<<" octeti";
cout<<"\n long int: "<< sizeof(long int)<<" octeti";
cout<<"\n - - - - - - - - - - - - - - - - - - - - - - - - ";
cout<<"\n Reprezentarea datelor de tip real";
cout<<"\n - - - - - - - - - - - - - - - - - - - - - - - - ";
cout<<"\n float: "<< sizeof(float)<<" octeti";
cout<<"\n double: "<<sizeof(double)<<" octeti";
cout<<"\n long double: "<<sizeof(long double)<<" octeti";
cout<<"\n - - - - - - - - - - - - - - - - - - - - - - - - ";
cout<<"\n Reprezentarea datelor de tip caracter";
cout<<"\n - - - - - - - - - - - - - - - - - - - - - - - - ";
cout<<"\n char: "<<sizeof(char)<<" octet";
cout<<"\n - - - - - - - - - - - - - - - - - - - - - - - - ";
cout<<"\n Reprezentarea datelor de tip logic";
cout<<"\n - - - - - - - - - - - - - - - - - - - - - - - - ";
cout<<"\n boolean: "<< sizeof(bool)<<" octet";
}

Dac variabilele x i y sunt contigue:

d(x,y) = lg (x,T
i
) (2.23)

n cazul vectorilor i matricelor, apare posibilitatea punerii n eviden a
contiguitii. Pentru un vector x cu n componente:

d(x[j], x [j+1]) = 1g (x[1],T
i
) (2.24)

oricare j aparine mulimii {1, 2, . . ., n}.
n cazul n care variabilele ocup zone de memorie necontigue:

d(x,y) > lg (x,T
i
) (2.25)

inegalitatea depinznd de modalitatea n care s-a fcut alocarea memoriei.
Redefinirile sau reacoperirile, corespund unor distane fie nule, fie mai
mici dect lungimea cmpului considerat reper.


y
12
x
l1

Figura 2.10 Modelul de reacoperire a locaiilor de memorie

d(x,y) < lg (x) = l1 (2.26)

lg (y) = 12 (2.27)

adr(x) < adr(y) < adr(x) + 11 (2.28)

Uniunile de date apar drept cazuri particulare n acest model de
descriere a datelor.

union a: T
1
, b:T
2
,c :T
3
; (2.29)

dist(a,b) = dist(a,c) = dist(b,c) = 0 (2.30)

Lungimea zonei de memorie ocupat de variabilele union este:

1= max {lg(a,T
1
),lg(b,T
2)
,lg (c,T
3
)) (2.31)

g) Modelul obiectelor generice
Datele aparinnd unui anumit tip apar n expresii precedate sau urmate
de anumii operatori. De asemenea, ele sunt parametrii pentru anumite funcii.
Modelul include:
- forma generic de construire a datei de un tip specificat
- operatorii i funciile care utilizeaz datele definite pentru tipul
respectiv, precum i excepiile de utilizare.
Acest model permite descrierea corect a secvenelor de program, cu
construirea de obiecte acolo unde limbajele de programare implementeaz
cerinele programrii orientate pe obiect.
Exist multe alte modaliti de descriere riguroas a datelor, toate ns
se subordoneaz unor obiecte dintre care cel mai important este crearea
premiselor analizei semantice, pentru punerea n eviden mai nti a
corectitudinii descrierilor de date i mai apoi a corectitudinii programelor.


2.4 Cerine de definire a datelor

n toate programele scrise apar variabile simple. Acestea definesc fie
variabile de control, fie variabile n care se regsesc totaluri sau rezultate
independente de alte evaluri ale programului. Fiecare dat pe care un
programator o specific are caracteristici proprii, care determin tipul i locul n
care este definit, modul de alocare a memoriei, modalitatea de iniializare i
felul n care este folosit n final coninutul su.
Vom considera spre exemplificare un program P n care se utilizeaz
variabilele i de tip ntreg i s de tip real.
Variabila i este o variabil de control folosit n regsirea elementelor
vectorului definit prin:

float x[100];

Variabila s este definit astfel:

float s;

Pentru variabilele independente, definirea n secven este comutativ
fr a influena rezultatul prelucrrii.
Secvenele:

i; int
s; float
variabile
S2.
s; float
i; int
variabile
S1. (2.32)

sunt echivalente, rezultatele prelucrrii unui program care conine una din cele
dou secvene sunt identice.
Dac programului P i se ataeaz o secven S la stnga, se obine
programul P
1
:

P
1
= S || P (2.33)

unde || este operatorul de concatenare.
Dac programului P i se ataeaz o secven S la dreapta, se obine
programul P
2
:

P
2
= P || S (2.34)

Se spune c secvena S de instruciuni este comutativ n raport cu
operatorul || dac:

rez (S || P; d) = rez (P || S; d) (2.35)

unde rez( ) este funcia rezultat definit:

rez: P X C -> C (2.36)

unde:
P mulimea programelor;
C mulimea constantelor elementare, vectoriale, matricele i de alte
structuri.
n cazul secvenelor S
1
, S
2
dac:

rez(S
1
|| P;d) = rez(S
2
|| P; d) (2.37)

se spune c cele dou secvene sunt echivalente, adic:

(S
1
U S
2
) || P (2.38)

Se observ c n programul P, variabila de control i trebuie iniializat cu
valoarea 1 i atinge cel mult valoarea 100, domeniul acesteia fiind:

Dom (i) = [1,100] N (2.39)

Definirea cu tipul integer determin:

Dom(int) = [-37768, 32767] N (2.40)

deci Dom (i) Dm (int) unde Dom este funcia domeniu:

Dom : J -> D (2.41)

Aceast funcie permite tratarea tipurilor fundamentale int, float, bool ca
identificatori cu caracteristici prefixate prin construcia limbajului C/C++.
Dac presupunem c cele 100 de componente ale vectorului x au valori
cuprinse ntre 1 i 200 suma lor nu depete 200 * 100 = 20000. Deci:

Dom (s) = [100,20000] N (2.42)

Dom (float) = [2.9E 39,1.7E38] (2.43)

Dom (s) Dom (float) (2.44)

Faptul c domeniile variabilelor i i s, sunt incluse n domeniile definite
tipurilor, determin excluderea situaiei obinerii de rezultate trunchiate i deci
de pierdere a controlului coninutului lor.
Oportunitatea alegerii tipului ntreg sau real, este pus n eviden de
ponderea funciilor de conversie care se activeaz la execuie.
Pentru un programator care a lucrat ntr-un limbaj de asamblare,
secvenele:

int i; int i;
float s; float s;
. . . . . .
i = 1.; i = 1;
s = 0; s = 0.;

sunt diferite pentru c:
- n prima secven se genereaz constanta 1, ca avnd tip float; deci
ocup o zon de memorie de 4 bytes (constante de maxim 7 - 8
cifre). Zona este structurat pentru caracteristic i mantis.
Constanta 0 se genereaz ntr-o zon de memorie de 2 sau 4 bytes
corespunztoare tipului int;
- n modul obiect generat la compilare, i = 1 i s = 0, se concretizeaz
prin copieri (mutri) ale coninutului zonelor de memorie care
corespund operanzilor din dreapta semnului egal, n alte zone de
memorie care corespund operanzilor din stnga semnului egal;
- instruciunile de copiere (mutare) presupun operanzi omogeni; dac
operandul receptor este de tip ntreg, atunci operandul emitor
trebuie s fie tot de tip ntreg; dac operandul receptor este de tip
real, atunci i operandul emitor trebuie s fie de tip real; n caz de
neomogenitate, compilatorul genereaz secvene de apelare a
funciilor de conversie;
- secvena S
1
necesit 2 apeluri de funcii de conversie i anume:
conversie de la real la ntreg, f13 i conversie de la real la ntreg f31;

rez1 = f13(1.)
copiere rez1 -> i
rez2 = f31 (0)
copiere rez2 -> s

- ntruct n secvena S
2
, exist concordana ntre tipurile constantelor
generate ca operanzi emitori i operanzi receptori, nu mai sunt
necesare apelri ale funciilor de conversie.
Ca o cerin n alegerea tipului, este realizarea unui nivel ct mai redus
al apelurilor funciilor de conversie.
Posibilitatea definirii la utilizare a variabilelor elementare, conduce
uneori la realizarea unei ocupri a memoriei cu operanzi cu grad redus de
folosire.
Exist limbaje, ca de exemplu Fortran i Basic, care nu necesit
definirea explicit a variabilelor, ci acestea se definesc la prima utilizare, tipul
fiind precizat odat cu respectarea unei reguli de construire a identificatorilor.
Gradul de utilizare este marcat prin numrul de instruciuni n care
variabilele apar, sau prin frecvena de modificare a coninutului lor. Un
program devine cu att mai bun cu ct mprtierea variabilelor elementare
este mai redus.
Astfel, dac n secvena S
1
apare variabila i, iar n secvena S
2
apare
variabila j i programul:

P = S
1
|| S
2
(2.45)

se observ c domeniile celor dou variabile care au acelai tip sunt disjuncte,
deci este definit o singur variabil care este utilizat de ambele secvene.
Dac:

rez (S
2
; rez (S
1
; i), j) = rez (S
2
; rez(S
1
;i), i) (2.46)

secvena:

int i;
int j;
...
S (i);
1
...
S
2
(j);

va fi modificat obinndu-se secvena:

int i;
...
S
1
(i);
...
S
2
(i);

Caracterul local sau global, dinamic sau static, este dat de contextul n
care se utilizeaz fiecare variabil. Important este ca programul s realizeze
pentru un exemplu de test din specificaiile de programare, acelai coninut
pentru toate punctele de control.
Dac pentru valorile 1, 2, 3, 4, 5 ale vectorului x de 5 componente, la
iteraia a treia, n specificaiile de programare se indic pentru variabila s
valoarea 6 i dac prin:

rez (S
1
S
1
S
1
; s, i) (2.47)

cont(s) este 6, nseamn c definirea s este corect. Dac ns n locul asociat
structurii repetitive, este definit s i este iniializat:

rez (S
1
S
1
S
1
; s, i) (2.48)

conduce la cont (s) cu valoarea 3, pentru c celelalte valori se pierd la fiecare
activare a blocului, se conchide c definirea local determin erori asupra
rezultatului.


2.5 Cerine de iniializare i utilizare

Variabilele elementare se iniializeaz sub control de ctre programator.
Ele au semnificaii precum:
- definesc dimensiunile problemei de rezolvat;
- definesc precizia rezultatelor;
- definesc opiuni ale utilizatorului care determin funcii care se
activeaz;
- conin rezultate cu grad de cuprindere difereniat;
- controleaz execuia repetitiv a secvenelor;
- specific limite de valori pe care le iau unele variabile;
- conin niveluri puse n coresponden cu tipuri de erori, tipuri de
rezultate sau evenimente n prelucrare.
Compilatoarele moderne pun n eviden situaiile n care se definesc i
se utilizeaz variabile elementare, fr ca n prealabil s fie iniializate.
Iniializarea unei variabile elementare se efectueaz:
- la definire; exist limbaje care permit definirea i iniializarea
variabilei (de exemplu, n limbajul C, construciile int s = 0, i = 0;
sunt frecvente);
- printr-o funcie de citire;
- prin atribuire, variabila elementar aflndu-se n membrul stng.
O variabil elementar se definete pentru a i se utiliza coninutul cel
puin o singur dat ntr-o expresie, ca parametru ntr-o funcie sau ntr-o
expresie indicial.
Afiarea rezultatului coninut de o variabil elementar apare ca o
utilizare a acesteia sub form de parametru n funcii precum writeln( ),
println().
Se spune c variabila elementar i este corect definit i corect utilizat
dac:

cont_spcf (i,n) = = cont_prg (i,m) (2.49)

unde:
cont_spcf ( ) funcia de coninut a variabilei i dup efectuarea pasului n al
algoritmului precizat n specificaiile de programare;
cont_prg ( ) funcia de coninut a variabilei i dup executarea
instruciunii m din program, instruciune care delimiteaz
sfritul pasului n al algoritmului descris n specificaii.
Dac:

cont_prg (i, m) = = cont_prg(i, m+1) (2.50)

oricare ar fi m [1, M] N, unde M este numrul de instruciuni executabile
care formeaz programul, se spune c i nu i modific coninutul, este deci o
constant i ori este defectuos utilizat, ori trebuia definit nu ca variabil ci ca
o constant simbolic.
Urma programului se obine prin:

cout<<m<< <<cont_prg(i, m);

unde m = 1, 2, . . . , M sau numai pentru valori modificate:

if (cont_prg (i,m) != cont_prg(i,m+1))
cout<<M+1<< <<cont_prg(i,m+1);

n cazul n care datele elementare se definesc numai pentru seturi de
valori dintr-o mulime, se utilizeaz funcia de apartenen, care pune n
eviden corectitudinea reiniializrii unei variabile sau a rezultatelor din
calcule.
Dac:

f (cont_prg (x, m), T
i
) = = FALSE (2.51)

nseamn c la instruciunea a m a a programului, valoarea variabilei
elementare x nu corespunde setului de valori T ataat acesteia.
De exemplu, dac pentru marcarea erorilor de execuie se atribuie
codurile:
- 0, dac execuia s-a desfurat normal;
- 1, dac exist tentativa mpririi prin zero;
- 2, dac matricea este singular;
- 3, dac valorile unei expresii indiciale depesc limitele pentru care
este definit operandul de tip masiv:

T
i
= {0, 1, 2, 3} (2.52)

Dac ntr-o funcie de inversare a matricei, variabila ierr este definit pe
mulimea T
i
i dac ntr-un punct k al funciei i se atribuie valoarea 7, atunci:

f (cont_prg (ierr, k), T
i
) = = FALSE (2.53)

nseamn c s-a nregistrat o eroare, o ndeprtare de specificaiile de
programare. Este posibil ca uneori specificaiile de programare s suporte
modificri, care reflect cerine de finee realizate n program. Mulimea
tipurilor de erori este diversificat i atunci se obine:

T

i
= T
i
U {4, 5, 6, 7} (2.54)

unde codurile 4, 5, 6, 7 corespund unor noi situaii care conduc la ntreruperea
execuiei. n acest caz:

f(cont_prg(ierr, k), T

i
) = = TRUE (2.55)

Cerinele de iniializare pentru date de acelai tip, conduc la trecerea de
la variabile elementare, la variabile de tip masiv.
Construciei:

int a, b, c, d, e, f;
...
a = 0;
b = 0;
c = 0;
d = 0;
e = 0;
f = 0;
...

i corespunde secvena compact:

int x[6];
int i;
. . .
for (i=0; i<6; i++)
x[i] = 0;

sau secvena:

int x[6] = {0, 0, 0, 0, 0, 0};

Alegerea dintre date elementare i date compuse, este legat n primul
rnd de modul de calcul a adreselor i de obiectivul urmrit prin prelucrare iar
n al doilea rnd, de compactitatea programului.
Datele elementare, se constituie ca o mulime de noduri ale unui graf n
care mulimea arcelor este vid. Adresele variabilelor elementare au caracter
aleator. n general, nu se stabilete o relaie de calcul a adreselor unor
elemente din mulimea de date elementare, avnd ca reper un element
aparinnd de asemenea acestei mulimi.


2.6 Cerine de lizibilitate a programului

Datele elementare sunt puse n coresponden cu identificatori sugestivi.
Astfel, pentru calculul volumului unei prisme paralelipipedice se definesc:

. . .
int lungime, latime, inaltime, volum;
cin>>lungime>>inaltime>>latime;
volum=lungime*latime*inaltime;
cout<<volum = << volum;
. . .

n cazul definirii unei variabile compuse omogene, secvena echivalent
este:

. . .
int x[4];
cin>>x[0]>>x[1]>>x[2];
x[3]=x[0]*x[1]*x[2];
cout<< volum = <<x[3];
. . .

Lizibilitatea programului n acest caz, este crescut numai ca posibilitate
de urmrire a sintaxei acestuia. n prima form se nelege exact semnificaia
prelucrrii. n plus, dac se accept utilizarea variabilelor de stare globale, care
sunt n totalitate variabile elementare, dup apelarea funciilor, se fac teste i
se continu prelucrarea numai dac acestea au nivelul pus n coresponden cu
execuia cerut.
Aceasta este de fapt cauza necesitii standardizrii rspunsului pe care
l ofer funciile n domeniul valorilor de stare pe care le returneaz.
Secvena:

. . .
int stare;
. . .
stare = f (p . . . p
n
);
1 1
if (stare != 0)
return(stare);
stare=f (p . . . . .p
n
);
2 1
if (stare != 0)
return(stare);
. . .

ilustreaz controlul permanent al programatorului asupra rezultatelor
prelucrrii folosind variabila elementar stare.

S-ar putea să vă placă și