Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Pascal


Index » educatie » » informatica » Pascal
» TIPURI DE DATE


TIPURI DE DATE


TIPURI DE DATE

In limbajele evoluate de programare,fiecare argument,fiecare variabila are un anumit tip bine definit,adica poate lua valori dintr-o multime precizata de valori,multime pe care sunt definite anumite operatii.

Exista trei categorii de tipuri de date:

Simple;



Structurate;

Referinta.

Tipurile ordinale (scalare)

Se caracterizeaza prin prezenta functiilor: Ord, Pred, Succ, Low si High

Succ (x)- furnizeaza succesorul lui x (daca exista);

Pred (x)- furnizeaza predecesorul lui x (daca exista).Tipul rezultatului este identic cu a lui x in cazul functiilor de mai sus.

Ord (x)-furnizeaza numarul de ordine al lui x in multimea respectiva, numaratoarea incepand de la 0.Rezultatul lui Ord este, deci, intreg.

Oricare doua valori ordinale pot fi comparate intre ele cu operatorii: =, <> (diferit), <, >, <= (mai mic sau egal), >= (mai mare sau egal).

Tipuri simple standard

Acestea sunt: tipurile logice, tipul caracter, tipurile intregi si tipurile reale. Doar primele trei sunt ordinale.

a)            Tipuri intregi

Exista cinci tipuri intregi predefinite: ShortInt, Integer, Longint, Byte si Word Fiecare tip desemneaza o submultime a multimii numerelor intregi, dupa cum urmeaza:

TIP

DOMENIU

FORMAT

ShortInt

8 biti cu semn

Integer

16 biti cu semn

LongInt

-2147483648..2147483647

32 biti cu semn

Byte

8 biti fara semn

Word

16 biti fara semn

Observatii

Cand se fac operatii intre doua date de tipuri intregi diferite, se considera tipul de date comun, adica cel mai mic tip intreg care le include pe ambele.

Orice constanta intreaga este considerata din domeniul cel mai mic care ar putea-o cuprinde.

Tipul expresiei din dreapta unei instructiuni de atribuire este determinat independent de tipul variabilei din partea stanga a atribuirii.

Operatii

Cu datele de tip intreg pot fi realizate urmatoarele operatii:

Adunarea: 2+3=5; -2+(-10)=-12 sau operator unar: +2= 2;

Scaderea: 2-6=-4; 78-34=44 sau operatorul unar de schimbare a sem  nului (ca in cazul lui -10 din exemplul de la adunare) ;

Inmultirea: 2*(-5)=-10; 4*6=24

div

I  Impartirea intreaga: x div y=catul impartirii lui x la y: 7 div 3=2; 12 didiv 3=4.

mod

Restul impartirii intregi a lui x la y: x mod y; 7 mod 3=1; 12 div 3=0; 

not 

Negatie (operator unar pe biti): in reprezentarea binara a numarului, bitii bitii egali cu 0 devin 1, iar cei egali cu 1 devin 0. Astfel, de exemplu, 111 1110=10112, deci not 11=4, deoarece 410 =01002;

and

Si aritmetic (operator binar pe biti)

Xo xor

Sau exclusiv (operator binar pe biti)

Shl shl

Shift left (deplasare spre stanga)

Sh shr

Shift right (deplasare spre dreapta)

Exemple

Sa consideram declaratiile: var a,b,m,n,i:integer;  In urma secventei de atribuiri: a:=2; b:=3+a; m:=b div 2; i:=1; n:sqr(2+i); i:=Pred(i); vom avea: a=2, b=5, m=2, n=9, i=0.

Faptul ca un numar n este par, se poate exprima si prin n mod 2=0.

Faptul ca n este divizibil prin m se exprima prin: n mod m=0.

Ultima cifra a unui numar intreg n este n mod 10, iar pentru a afla celelalte cifre ale numarului, va trebui sa facem o impartire repetata prin 10 (n:=n div 10). Apoi se considera din nou ultima cifra si se repeta impartirea.

Utilizare

Datele de tip Integer vor fi folosite in probleme de matematica cu numere intregi, dar si in programe care lucreaza cu ecranul, deoarece acesta poate fi privit ca un plan in care coordonatele sunt numere intregi, nu reale. De asemenea, vom folosi numere intregi cand vom avea nevoie sa contorizam sau sa indexam ceva.

c) Tipul caracter

Tipul caracter este denumit de identificatorul char. Este vorba despre multimea caracterelor, adica a tuturor cifrelor, a literelor mari si mici, precum si a caracterului spatiu sau a simbolurilor speciale: +,-,$,),.,@ etc. Acestea trebuie sa fie cuprinse intre apostrofuri. Un caz special il constituie apostroful insusi, care trebuie dublat: '"". Tipul Char este scalar, deoarece caracterele se pot numara. De fapt, exista o lista a lor, numita lista codurilor ASCII, continand fiecare caracter si numarul sau de ordine.

O functie care are atat argumentul, cat si rezultatul unui caracter este functia UpCase UpCase(c)= majuscula corespunzatoare caracterului c, daca este cazul. De exemplu, UpCase('a')='A', UpCase('A')='A', iar UpCase('1')='1', UpCase('%')='%'.

Exemple:

Fie declaratiile: var a,b,c:Char; m:Integer; In urma secventei de atribuiri: a:='b'; b:=Succ(a); c:=Succ('D'); m:=Ord(b); vom avea valorile: a:='b'; b:='b'; c:='E'; m=98.

Utilizare

Tipul caracter va fi folosit mai ales in programele ce folosesc tastatura.

Observatie

Constantele sir de caractere de lungime 1 pot fi considerate ca fiind caractere!

d)Tipuri logice

Tipurile logice mai sunt numite si booleene, denumire venind de la numele matematicianului englez Boole, care s-a ocupat de logica matematica. Exista patru tipuri logice predefinite: Boolean, ByteBool, WordBool si LongBool Valorile boolene sunt reprezentate de identificatorii de constante predefiniti False si True. Aceste tipuri sunt tipuri ordinale:

False True; Ord(False)=0; Ord(True)=1;

Succ(False)=True; Pred(True)=False.

Operatii specifice

Exista urmatoarele operatii logice ce se pot executa cu datele de tipuri booleene:

Conjunctia logica: x and y;

Disjunctia logica: x or y;

Negatia logica: not x;

Disjunctia logica exclusiva: x xor y.

Tabelele lor de adevar sunt urmatoarele:

not

False

True

True

False

and

False

True

False

False

False

True

False

True

or/xor

False

True

False

False

True

True

True

True/False

Exemple

Fie declaratiile: var cond1, cond2, a:Boolean; s:Char; m:Integer; Dupa atribuirile: cond1:=2=3; cond2:=False; a:=not (cond2) or cond1; vom avea: cond1=False (caci 2<>3), cond2= False, iar a=True.

Daca avem si: s:='a'; a:=s='b'; m:=Ord(a), atunci s:='a', a=False, m=0.

Daca prim este o variabila booleana, care indica, de pilda, ca un numar este prim, atunci, pentru a preciza ca variabila are valoarea adevarat, putem scrie fie prim=True, fie chiar numai prim. De asemenea, putem scrie not prim in loc de prim=False.

Utilizare

Variabilele logice sunt foarte utile in programare, atunci cand trebuie sa exprimam diferite conditii ce trebuie verificate.

d)Tipuri reale

Un tip real este reprezentat de o submultime a multimii numerelor reale, care poate fi reprezentata in calculator (in notatia in virgula mobila, cu un numar fix de cifre). Astfel, fiecare numar real este memorat sub forma celui mai apropiat numar rational in memoria calculatorului.

Tipuri reale de date:

Tipul

Domeniul valorilor absolute

Format

Numar de cifre semnificative

Real

2.9E-39..1.7E38

6 octeti

Single

1.5E-45..3.4E38

4 octeti

Double

5.0E 5.0E -324..1.7E308

8 octeti

Extended

3.4E  3.4E-4932..1.1E4932

10 octeti

Comp

8 octeti

Operatii

Adunarea; poate fi considerat si operator unar

Scaderea; poate fi considerat si operator unar (schimbarea

semnului)

Inmultirea

Impartirea

Functii ce pot fi aplicate datelor de tip real:

Functia

Tipul argumentului (real/intreg)

Rezultat de tip real/intreg

Abs

R  R

Abs(x)=|x|

Sqr

R R

Patratul argumentului

Sin

R/I  R

Sinusul valorii argumentului exprimat in radiani

Cos

R/I  R

Cosinusul valorii argumentului exprimat in radiani

Arctan

R/I  R

Arctan(x)=unghiul, exprimat in radiaradiani, a carui tangenta este x

Ln

R/I R

Logaritmul natural al argumentului

Exp

R/I  R

Exp(x)=ex, unde e=2.718281828459

Sqrt

R/I  R

Sqrt(x)=radicalul lui x

Int

R  R

Int(x)=partea intreaga a lui x

Frac

R/I  R

Partea fractionara a argumentului

Trunc

R  I

Trunc(x)=valoarea trunchiata la un numar de tip LongInt a lui x

Round

R  I

Round(x)=cel mai apropiat numar intreg pentru x, de tip LongInt.

Exemple

Round(3.4)=3; Round(-3.4)= -3;

Round(3.6)=4; Round(-3.6)= -4;

Trunc(3.4)=3; Trunc(-3.4)= -3;

Trunc(3.6)=3; Trunc(-3.6)=-3;

Int(3.4)=3.0; Int(-3.4)=-4;

Int(3.6)=3.0; Int(-3.6)=-4; 

Fie declaratiile: var a,b,x,y,z:Real; m,n:Integer; In urma secventei de atribuiri:

a:=2; b:=3; x:=-b/a; y:=Sqr(x); z:=Abs(x);

m:=Trunc(3-x); n:=Round(z*2+0.2),

vom avea: a=2, b=3, x=-1.5, y=2.25, z=1.5, m=4, n=3.

Pentru a exprima ca un numar real x este si intreg se va folosi functia Int: x=Int(x).

Utilizare

Numerele reale vor fi folosite in orice gen de probleme cu calcule stiintifice.

Tipuri ordinale definite de utilizator

a) Tipul enumerat

Tipul de date enumerat a aparut din necesitatea scrierii unor programe usor de inteles.

Diagrama de sintaxa prin care se defineste tipul enumerat este:

identificator

 
tip

enumerat


Exemple:

(luni, marti, miercuri, joi, vineri, sambata, duminica);

(iarna, primavara, vara, toamna);

tipul Bolean este definit el insusi ca fiind un tip enumerat: (False, True). Asupra datelor de tip enumerat se pot aplica functiile Ord, Succ si Pred. De exemplu Ord (luni) = 0, Ord (marti) = 1 etc., iar Pred (vineri) = joi etc.

Sunt permise si comparatiile. De exemplu primavara<toamna.

b) Tipul subdomeniu

Acesta reprezinta o succesiune de valori consecutive extrase dintr-un tip ordinal definit anterior sau predefinit, numit tip de baza. Cu datele de un tip subdomeniu se pot face acele operatii care se pot face si cu tipul de baza.

Un tip subdomeniu se defineste sub forma:

constanta1 . constanta2.

constanta

 

constanta

 
tip

subdomeniu

1 10, luni .. vineri;

chiar si tipul Byte este un subdomeniu: 0 ..255.

Definirea tipurilor

Fiind foarte flexibil, limbajul Pascal permite programatorului definirea de tipuri de date proprii. Acestea pot purta un nume, sau pot ramane anonime. Cele ce primesc un nume, vor fi definite in sectiunea declarativa a unui program ( sau a unui subprogram sau unit) fie din considerente de crestere a lizibilitatii programului, fie din restrictii de sintaxa ale limbajului. Numele unui tip de date este un identificator.

Asadar, definirea unor tipuri de date id_tipi are forma:

Type  id_tip1 = definitie de tip1;

id_tip2 = definitie de tip2;

. . . . . . . . . . . . . . . . . . . . .

definire

tip

 

identificator

 

tip


Exemple:

type natura1 = 0 . MaxLongInt;

saptamana = (luni, marti, miercuri, joi,

vineri, sambata, duminica);

semafor = (rosu, galben, verde);

Constante

O constanta este o data (o informatie) a carei valoare nu poate fi modificata pe parcursul rularii unui program.


constanta


In limbajul Turbo Pascal exista urmatoarele tipuri de constante: intregi, reale, siruri de caractere, simbolice.

Constante intregi

Acestea sunt reprezentate de acele numere intregi care pot fi reprezentate in memoria calculatorului. Numerele pot fi reprezentate atat in baza 10, cat si in baza 16 (hexazecimal), caz in care sunt precedate de simbolul $.

Exemple: 30, +7, 65535, -28901, $A12, $FFF

Reprezentari eronate: 14., 238+, $G, 12.3,100.000.000

Pentru desemnarea valorilor 32767, respectiv 2147483647 se pot folosi constantele simbolice standard, numite MaxInt si respectiv MaxLongInt.

Diagrama de sintaxa pentru definirea constantelor intregi este data mai jos:


constanta

intreaga


Constante reale

Acestea sunt numere reale din domeniul [-3,4x10-4352, 1, 1x104932]. In locul virgulei se foloseste punctul zecimal.

Exemple: 12.5, -900,+24, 82E+20, -12E-3.

Ultimele doua numere reprezinta valorile 82x1020 si -12x10-3.


constanta

intreaga


Observatie

De fapt, in calculator nu se pot memora numere irationale, de aceea, fiecare numar real va fi aproximat prin numarul rational cel mai apropiat. Astfel, numere precum π sau vor fi memorate cu un numar finit de zecimale !

Constante siruri de caractere

Un sir de caractere este o secventa de zero sau mai multe caractere din setul de caractere ASCII extins (este vorba despre o tabela care cuprinde toate caracterele afisabile si neafisabile ale calculatorului), scrisa pe un singur rand in program si inclusa intre apostrofuri. Un sir de caractere fara nimic intre apostrofuri este un sir vid. O secventa de doua apostrofuri succesive simbolizeaza un singur caracter, apostroful.

Exemple:

́TURBO ́ TURBO

́ You ́ ́ 11 see ́ You ́ll see

* ́ ́ ́ ́ apostroful : ́

́ ́ sirul vid

* ́ ́ spatiu vid

Ca o extensie a limbajului Pascal Standard, Turbo Pascal permite inserarea de caractere de control in cadrul sirurilor. Astfel, simbolul # urmat de o constanta de tip intreg fara semn din domeniul 0 - 255 semnifica un caracter corespunzator valorii ASCII respective.

Exemple:

# 13 # 10

# 31

́ Linia 1 ́# 13 ́ Linia 2 ́

# 7 # 7 ́ Trezeste-te ! ́ # 7 # 7

Si simbolul ˆ poate forma siruri de caractere de control, cu valori intre 0 si 31, daca acesta precede alte caractere.

Diagrama de sintaxa a constantelor de tip sir de caractere este data in continuare:


constanta sir

de caractere

caracter

 


Constante simbolice

Acestea sunt constante desemnate prin identificatori. Ele pot fi predefinite, precum MaxInt, MaxlogInt, True, False, PI, Nil, sau pot fi definite de utilizator in partea declarativa a programului (sau in unituri proprii).

Observatie

Folosirea lor este recomandata, deoarece confera programului claritate si asigura si independenta acestuia fata de modificari ulterioare.

Definirea constantelor

In partea declarativa a unui program putem defini constante simbolice proprii, cu ajutorul cuvantului const, astfel:

const id_c_1 = val_ct_! ;

id_c_2 = val_ct_2 ;


Prin diagrame de sintaxa, definirea constantelor simbolice proprii se descrie asa:



identificator

 
definire

constanta

tip

 



 



Observatii

Tipul unei constante se subintelege din definirea ei.

Dupa cum reiese din diagrama de sintaxa anterioara, in Turbo Pascal exista posibilitatea de a defini si asa numitele constante cu tip, care sunt, de fapt, variabile initializate. Deci acestea pot sa-si schimbe valoarea pe parcusrsul executiei programului.

Astfel, daca se defineste variabila const a: Integer = 1; (care se initializeaza cu valoarea 1), dupa o atribuire de genul a :=2+a, a va avea valoarea 3.

Exemple:

Daca va trebui sa facem un program cu calcule despre cercuri, vom folosi constanta л, adica valoarea ei, cu cat mai multe zecimale, pentru o precizie a calculelor cat mai buna. Scrierea acestor zecimale de fiecare data cand apelam la л ar fi obositoare, de aceea declaram pi si vom folosi pi, in loc de 3,1415926: constanta pi=3.1415926;. Observam ca am folosit punctul zecimal, in loc de virgula zecimala, in exprimarea numarului real л; asa se procedeaza in programare, dupa sistemul de notare anglo-saxon.

Daca va trebui sa scriem program pentru admiterea la liceu a unor elevi, liceu care are un anumit nume constant; de aceea vom declara:

const Nl=´Colegiul Liceal "Ferdinand I" Bacau´;. E mai simplu de scris NL in loc de numele liceului"!

Daca scriem programul unui joc pe calculator, vom folosi niste taste ce vor controla, de pilda, deplasarea unei piese. De exemplu: const stinga=´0´; dreapta=´p; sus=´q´; jos=´a´; si chiar daca uitam ce taste am definit, e mult mai usor sa le referim prin identificarii constantelor stanga, dreapta, sus si jos.

Erori frecvente

De multe ori se scrie gresit o declaratie de constanta, dupa cum urmeaza:

const pi; Se uita sa se precizeze valoarea lui л.

const pi: = 3.1515926; Se foloseste := (specific atribuirii) in loc de =.

const л = 3.1415926; Se greseste la identificatorul de constanta.

Variabile. Declararea variabilelor

Prin variabila se intelege o informatie (o data) a carei valoare se poate modifica pe parcursul executiei unui program. Fiecarei variabile i se asociaza un identificator. Multimea de valori pe care o poate lua acea variabila reprezinta tipul acelei variabile. O variabila se declara astfel: var identif_var : identif_de_tip;.

Cand avem mai multe variabile de acelasi tip, putem scrie: var v_1, v_2, v_3: tip;, iar cand avem si tipuri mai multe, vom scrie ceva de genul:

var v_1, v_2, v_3: tip_1;

w_1, w_2, w_3 : tip_2;

Diagrama de sintaxa este data mai jos.


identificator

 

tip

 
declarare

variabila


Exemplu:

program CalculArie;

const pi = 3.1415926;

var raza, aria : Real;

begin

raza : = 2;

aria : = pi*Sqrt (raza)

end.

Programul are doua parti: primele trei randuri reprezinta zona declaratiilor, iar instructiunile dintre begin si end. zona actiunilor, adica partea operativa. Calculatorul a atribuit valoarea 2 variabilei raza. A calculat aria (obtinand o anumita valoare) si gata. Noi nu am precizat prin nimic sa ni se comunice rezultatul. De aceea va trebui sa folosim o procedura de extragere a datelor, de scriere a lor pe ecran.

Dar, chiar daca am dispune de o asemenea procedura, rezultatul programului ar fi acelasi la orice executare a sa. De aceea, ar fi bine sa putem introduce de la tastatura raze de diferite valori; deci am avea nevoie de o procedura de citire a datelor. Aceste proceduri exista in limbajul Pascal:

a. Proceduri de citire a datelor (eu scriu - calculatorul citeste):

ReadLn (v1, v2, . ,vn) - citeste variabilele v1, . ,vn, introduse de la tastatura. Variabilele pot fi de orice tip invatat pana acum, mai putin Boolean sau un tip enumerare (sau un subdomeniu al unui astfel de tip). Introducerea mai multor variabile se poate face daca acestea se separa prin spatii sau <Enter>.

La sfarsit trebuie apasata tasta <Enter>.

Cursorul trece pe randul urmator. Procedura ReadLn va citi si sfarsitul de linie (caracterul Enter).

Read (v1, v2, . , vn) - la fel ca ReadLn, doar ca nu citeste sfarsitul de linie. De aceea, in cazul sirurilor de caractere e bine sa se foloseasca ReadLn.

b. Proceduri de scriere a datelor (calculatorul scrie - eu citesc)

Write (e1, e2, . , en) - evalueaza si apoi afiseaza valoarea expresiilor e1, . , en. Expresiile pot fi inclusiv de tipul Boolean, caz an care se afiseaza unul din doua cuvinte (False sau True), dar nu pot fi de tip enumerare. Dupa afisarea valorilor unor expresii, acestea nu se pierd si nici nu se schimba.

WriteLn (e1, e2, . ,en) face acelasi lucru, dar la sfarsitul intregii afisari, muta cursorul pe randul urmator.

De exemplu, pentru a citi raza vom scrie: ReadLn (raza), iar dupa calculul ariei, aceasta se afiseaza prin: Write (aria). Putem scrie direct Write (pi* Sqrt (raza)), efectul fiind acelasi.

Observatii

In lista argumentelor procedurilor Write si WriteLn, expresiile pot fi urmate de un format de afisare, astfel: e:m:n, unde e este expresia de afisat, iar m si n sunt expresii cu valori intregi.

m reprezinta numarul de pozitii ecran pe care sa se afiseze; daca valoarea de afisat necesita mai mult de m pozitii, atunci m este ignorat;

√ n reprezinta numarul de zecimale cu care se doreste scrierea valorii expresiei e (daca este de tip real), in reprezentarea fara exponent.

Daca valoarea de afisat necesita mai putin de m pozitii, afisarea se va face cu spatii in fata, pana la ocuparea tuturor celor m pozitii.

Erori frecvente:

Unii incepatori sau cunoscatori al limbajului BASIC cred ca se poate face o citire in felul urmator: ReadLn (΄ Dati n = ΄ , n); iar altii nu sesizeaza diferenta intre un sir si valoarea identificatorului corespunzator: ReadLn ('n').

Sa scriem programul folosind noile proceduri invatate:

program CalculArie;

const pi = 3.1415926;

var raza, aria: Real;

begin

Readln (raza);

aria : = pi*Sqrt (raza);

WriteLn (aria)

end.

Pornind acest program se intampla urmatoarele:

apare cursorul si noi introducem o valoare, de exemplu 2;

se afiseaza foarte rapid o alta valoare, insa sub forma ciudata:1.25663704000035E+0001. (??!!??) (Pentru a vedea ce s-a afisat, se va apasa Alt+F5). Este vorba despre formatul stiintific de afisare a valorilor reale; valoarea de mai sus se interpreteaza ca fiind 1.25 . x101. Pentru a afisa o expresie pe m pozitii, din care n pozitii pentru partea zecimala, vom scrie: Write (e:m:n). De exemplu, Write /aria:7:3) va afisa, cu un spatiu in fata: 12.566. O pozitie a fost ocupata de punctul zecimal, trei de cele trei zecimale cerute, doua de partea intreaga (12), iar un spatiu a fost in fata pentru a obtine totalul de 7 pozitii.

Cu aceasta inlocuire, programul devine mai "bun", dar tot nu satisface urmatoarele cerinte:

sa se ceara explicit sa introducem raza;

sa se spuna ca rezultatul pe care il afiseaza este aria cercului de raza data.

Observatii

Limbajul Pascal dispune de functia Eoln care testeaza daca s-a ajuns la citirea sfarsitului de linie, caz in care returneaza True, sau nu, cand returneaza False. O astfel de functie se poate folosi atunci cand se doreste prelucrarea de linii de caractere, cu dimensiuni variabil





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate

Pascal


analytics

Access
Adobe photoshop
Autocad
Baze de date
C
Calculatoare
Corel draw
Excel
Foxpro
Html
Internet
Java
Linux
Mathcad
Matlab
Outlook
Pascal
Php
Powerpoint
Retele calculatoare
Sql
Windows
Word






termeni
contact

adauga