Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Simple;
Structurate;
Referinta.
Tipurile ordinale (scalare)
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.
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.
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) |
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.
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.
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 |
|
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. |
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).
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:
|
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.
|
|
subdomeniu
1 10, luni .. vineri;
chiar si tipul Byte este un subdomeniu: 0 ..255.
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
|
|
Exemple:
type natura1 = 0 . MaxLongInt;
saptamana = (luni, marti, miercuri, joi,
vineri, sambata, duminica);
semafor = (rosu, galben, verde);
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.
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
Copyright © 2024 - Toate drepturile rezervate