În Pascal, un tip de date real este. Turbo Pascal

Cel mai simplu tip de date numerice din Pascal sunt tipurile întregi, concepute pentru a stoca numere întregi. Numerele întregi în Pascal sunt de obicei împărțite în două tipuri: semnate și nesemnate. Numerele semnate sunt un tip întreg care include atât numere pozitive, cât și numere negative, numerele fără semn sunt doar pozitive.

Mai jos sunt două tabele cu tipuri întregi. Mai întâi vom scrie tipuri de numere întregi cu semn:


TipoctetGama de valori
scurtătură1 -128 ... 127
smallint2 -32768 ... 32767
întreg, lung4 -2147483648 ... 2147483647
int648 -9223372036854775808 ... 9223372036854775807

Și asta tipuri de numere întregi fără semn:


TipoctetGama de valori
octet1 0 ... 255
cuvânt2 0 ... 65535
cuvânt lung, cardinal4 0 ... 4294967295
uint648 0 ... 18446744073709551615

După cum puteți vedea, prima coloană conține numele tipului, a doua - numărul de octeți ocupați în memorie de numere de acest tip, iar a treia - intervalul de valori posibile, respectiv. Există două tipuri de numere cu semn - întreg și longint (literal „întreg” și „întreg lung”), care sunt sinonime. Adică, puteți folosi un nume sau altul în secțiunea de descriere.

În mod similar, în cel de-al doilea tabel (numere întregi nenegative în Pascal), există, de asemenea, două tipuri de numere întregi sinonime de 4 octeți - longword și cardinal , așa că utilizați fie unul, fie altul.

De asemenea, puteți observa că dacă mutăm condiționat numerele primului tabel în partea dreaptă în raport cu zero (mutăm intervalul la dreapta astfel încât numărul minim să fie 0), atunci vom obține intervale de numere întregi în al doilea tabel. în rândurile corespunzătoare. Deci, dacă într-un tip de scurtătură de 1 octet adăugăm 128 la granițele din stânga și din dreapta, obținem tipul de octet (0..255); dacă într-un tip smallint de 2 octeți adăugăm 32768 la granițe, obținem cuvântul de tip nesemnat de 2 octeți corespunzător (0..65535), etc.

Toate acestea se întâmplă deoarece în tipurile întregi fără semn, numerele pot fi împărțite exact în două: jumătate din numere în partea negativă, jumătate în partea pozitivă. De ce atunci, în numere semnate, chenarul din stânga în valoare absolută 1 este mai mare decât chenarul din dreapta? – întrebi. De exemplu, în tipul shortint minimul este -128, în timp ce maximul este doar 127 (modulo 1 mai puțin). Și asta pentru că partea dreaptă include și 0 și trebuie să știi și să-ți amintești acest lucru.

Deci, de ce numerele întregi din Pascal trebuie împărțite în atât de multe tipuri? De ce să nu te descurci, de exemplu, cu cel mai mare dintre tipurile de numere întregi din PascalABC.Net și Free Pascal – int64 – care este aproape 9 chintilioane și jumătate (!) cu atât un minus, cât și un plus? Da, dintr-un simplu motiv banal (?) - salvarea memoriei. Dacă trebuie să adăugați două numere pozitive mici de un octet (0..255) și ați descris aceste numere ca int64 (8 octeți), atunci aceasta a luat de 8 ori mai multă memorie. Și dacă programul este mare și există o mulțime de variabile, atunci economiile de memorie cresc foarte brusc. Mai mult, nu are rost să folosim tipuri de numere întregi cu semn dacă problema tratează cantități precum lungimea, masa, distanța, timpul etc.

În secțiunea Abrahamyan Problem Book a site-ului (subsecțiunea Integer), observați utilizarea diferitelor tipuri de numere întregi în Pascal.

Cele mai importante elemente ale unui program sunt variabilele. Ele influențează cursul evenimentelor din program în timpul executării acestuia. De exemplu, dacă nu am fi specificat valoarea variabilei Nume în , cui i-ar fi adresat rezultatul de salut din program?

Variabilele pot conține date complet diferite. De exemplu, o variabilă ar putea stoca numele cuiva, o alta ar putea stoca anul de naștere, o a treia ar putea stoca înălțimea acestuia etc. Astfel de date diferite sunt reprezentate de computer în moduri diferite. Numele este un șir de caractere, anul nașterii este un număr întreg, iar înălțimea este un număr real (de exemplu, înălțimea este de 1,72 m).

Modul în care un computer reprezintă datele este determinat de acestea tip. În plus, tipul de date determină ce acțiuni pot fi efectuate asupra datelor respective.

Principalele tipuri de date standard ale limbajului Turbo Pascal sunt enumerate mai jos:

  1. ÎNTREG– date întregi în intervalul de la –32768 la 32767, ocupând doi octeți în memorie;
  2. REAL– numere reale în intervalul de la 2,9´10 -39 (2,9E-39) la 1,7´10 38 (1,7E38), ocupă șase octeți;
  3. CHAR– caracter separat, un octet;
  4. ŞIR– un șir de caractere, numărul de caractere din rând (lungimea șirului) este limitat de numărul N între paranteze drepte, ocupă N+1 octeți (dacă nu este specificat numărul N, atunci lungimea maximă a liniei este de 255 personaje);
  5. BOOLEAN– tip logic, are două valori: FALSE (fals) și TRUE (adevărat), un octet.

Rețineți că tipurile INTEGER, CHAR și BOOLEAN sunt clasificate ca ordinal tipuri ordinale.

După cum probabil vă amintiți, atunci când descrieți o variabilă, după numele acesteia sunt plasate două puncte și apoi este indicat tipul. Dacă mai multe variabile au același tip, numele lor pot fi separate prin virgulă.

Un exemplu de descriere a variabilelor de diferite tipuri:

Delphi/Pascal

var a, b, c: întreg; suma: real; Alpha, Beta: char; S: șir; S_1: sfoară; t: boolean;

a, b, c: întreg;

suma: real;

Alpha, Beta: char;

S: sfoară[25];

S_1: sfoară;

t: boolean;

Rețineți că variabila S_1 este un șir de caractere, dar declarația sa nu specifică o lungime. În acest caz, compilatorul însuși stabilește lungimea maximă posibilă - 255 de caractere.

Există și alte tipuri de date predefinite pentru stocarea numerelor întregi și reale. Caracteristicile lor sunt prezentate în tabelele de mai jos. Comparați aceste tipuri cu tipurile INTEGER și REAL prezentate de asemenea în tabele.

Gamă

Dimensiunea în octeți

SCURTARE
ÎNTREG
LONGINT

2147483648 .. 2147483647

BYTE
CUVÂNT

Tipuri de date reale

Gamă

Numărul de cifre semnificative

Dimensiunea în octeți

REAL

2,9´10 -39 .. 1,7´10 3 8

SINGUR

1,5´10 – 45 .. 3,4´10 3 8

DUBLA

5,0´10 -3 24 .. 1,7´10 3 08

EXTINSĂ

3,4´10 -4932 .. 1,1´10 49 32

COMP

2 63 +1 .. 2 63 -1

Ce tip de date să folosiți

Există atât de multe tipuri diferite, ați putea spune, deci pe care ar trebui să le folosiți?
Depinde de sarcina care ți-a fost atribuită. De exemplu, aveți nevoie de o variabilă în care veți stoca înălțimea unei anumite persoane (valoare reală): în acest caz, este suficient să folosiți tipul SINGUL. Dacă utilizați o variabilă pentru a număra numărul anumitor obiecte (o valoare întreagă pozitivă), atunci aflați dacă acest număr poate fi mai mare decât 255, dacă nu, folosiți BYTE, nu puteți face fără WORD; cazurile LONGINT pot fi, de asemenea, necesare.

Pentru a afla mai multe despre diferitele tipuri, apăsați Shift+F1 în Turbo Pascal (va apărea o fereastră de index de ajutor), apoi selectați obiectul care vă interesează (de exemplu, tastați „type” sau „real”).

Tipuri de date Pascal

Orice date (constante, variabile, valori ale funcției sau expresii) din Turbo Pascal sunt caracterizate prin tipurile lor. Un tip definește setul de valori valide pe care le poate avea un obiect, precum și setul de operații valide care i se pot aplica. Tipul determină și formatul reprezentării interne a datelor din memoria computerului.

Există următoarele tipuri de date în Turbo Pascal.

1) Tipuri simple:

– real;

– simbolic;

– Boolean (logic);

– enumerate;

– limitat (gamă).

2) Tipuri compozite (structurate):

– regulat (matrice);

– combinate (înregistrări);

– dosar;

– multiplu;

– sfoară;

– obiecte.

3) Tipuri de referință (indicatori tip și netipizat).

4) Tipuri procedurale.

Turbo Pascal oferă un mecanism pentru crearea de noi tipuri de date, datorită căruia numărul total de tipuri utilizate în program poate fi atât de mare pe cât se dorește.

Tipul întreg. Valorile întregi sunt elementele unui subset de numere întregi. Există cinci tipuri de numere întregi în Turbo Pascal. Numele lor, intervalul de valori, lungimea reprezentării în octeți sunt date în tabel. 6.

Tabelul 6

Tipuri de date întregi

Variabilele întregi sunt descrise folosind cuvintele rezervate de mai sus:

i, j, k: întreg;

Datele de tip întreg sunt stocate exact în memorie. De exemplu, variabilele de tip întreg ocupă 2 octeți (16 biți) în memorie, care sunt alocați după cum urmează: 1 bit este alocat pentru a stoca semnul numărului (0 dacă numărul este pozitiv și 1 dacă numărul este negativ) și 15 biți pentru a stoca numărul în calcul binar. Numărul zecimal maxim care poate fi scris ca binar pe 15 biți este 32767.

Când utilizați proceduri și funcții cu parametri întregi, ar trebui să vă ghidați după „imbricarea” tipurilor, adică. oriunde este folosit cuvântul, byte este permis (dar nu invers), longint „include” un număr întreg, care, la rândul său, include shortint.

Pentru tipul întreg sunt definite cinci operații de bază, al căror rezultat este și un număr întreg: +, -, *, div, mod (adunare, scădere, înmulțire, împărțire întreg și rest de împărțire întreg). În expresiile aritmetice, operațiile *, div, mod au prioritate mai mare decât operațiile +, -. Exemple de expresii de scriere:

Lista procedurilor și funcțiilor aplicabile tipurilor întregi este dată în tabel. 7. Literele b, s, w, i, l denotă expresii de tip byte, shortint, word, întreg și, respectiv, longint; x este o expresie a oricăruia dintre aceste tipuri; identificatorii vb, vs, vw, vi, vl, vx denotă variabile ale tipurilor corespunzătoare. Un parametru opțional este indicat între paranteze drepte.

Tabelul 7

Proceduri și funcții standard aplicabile pentru tipuri întregi

Recurs Tip de rezultat Acţiune
Abs(x) x Returnează modulul x
Chr(b) Char Returnează un caracter după codul său
Dec(vx[,i]) - Descrește valoarea lui vx cu i, iar în absența lui i – cu 1
Inc(vx[,i]) - Crește valoarea lui vx cu i, iar în absența lui i – cu 1
salut(i) octet Returnează octetul înalt al argumentului
salut(i) octet Aceleaşi
Lo(i) octet Returnează octetul scăzut al argumentului
Scăzut) octet Aceleaşi
Impar(l) octet Returnează adevărat dacă argumentul este un număr impar
Aleatoriu (w) La fel ca parametrul Returnează un număr pseudo-aleatoriu distribuit uniform în intervalul 0...(w-1)
Sqr(x) x Returnează pătratul argumentului
Schimbați(i) Întreg
Schimbați (w) Cuvânt Schimbă octeți într-un cuvânt
Succ(x) La fel ca parametrul Returnează următoarea valoare întreagă, adică x+1
Pred(x) La fel ca parametrul Returnează valoarea întregului precedent, adică x-1

Când se operează cu numere întregi, tipul rezultatului va corespunde tipului de operand, iar dacă operanzii sunt de diferite tipuri întregi, tipului de operand care are intervalul maxim de valori. Posibila depășire a rezultatului nu este controlată, ceea ce poate duce la erori în program.

Tip real. Valorile tipurilor reale definesc un număr arbitrar cu o anumită precizie finită, în funcție de formatul intern al numărului real. Există cinci tipuri reale în Turbo Pascal (Tabelul 8).

Tabelul 8

Tipuri de date reale

Variabilele reale sunt descrise folosind cuvintele rezervate de mai sus:

Un număr real din memoria computerului este format din 3 părți:

Cifra semnului unui număr;

Parte exponențială;

Mantisa numărului.

Mantisa are o lungime de la 23 (Single) la 63 (Extended) cifre binare, ceea ce oferă o precizie de 7-8 pentru Single și 19-20 pentru Extended zecimal digits. Punctul zecimal (virgula) este implicat înaintea cifrei din stânga (cea mai semnificativă) a mantisei, dar atunci când se operează pe un număr, poziția acestuia este deplasată la stânga sau la dreapta, în conformitate cu ordinea binară a numărului stocat în partea exponențială. , prin urmare operațiile pe numere reale se numesc aritmetică în virgulă mobilă (virgulă).

Tipurile Single, Double și Extended sunt accesate numai în moduri speciale de compilare. Pentru a activa aceste moduri, selectați elementul de meniu Opțiuni, Compilator…și activați opțiunea 8087/80287 în grup Prelucrare numerică.

O poziție specială în Turbo Pascal este ocupată de tipul Comp, care este tratat ca un număr real fără părți exponențiale și fracționale. De fapt, Comp este un întreg mare cu semn care stochează 19...20 de cifre zecimale semnificative. În același timp, în expresiile Comp este pe deplin compatibil cu orice alte tipuri reale: toate operațiile reale sunt definite pe el, poate fi folosit ca argument pentru operații matematice etc.



Numerele reale sunt specificate în sistemul numeric zecimal într-unul dintre doua forme.

ÎN formă de punct fixînregistrarea constă dintr-un număr întreg și o parte fracțională, separate între ele printr-un punct, de exemplu:

0.087 4.0 23.5 0.6

ÎN formă în virgulă mobilă intrarea conține litera E, care înseamnă „înmulțiți cu zece la putere”, iar puterea este un număr întreg, de exemplu:

7E3 6.9E-8 0.98E-02 45E+04

Următoarele operații sunt definite pe obiecte de tip real: +, -, *, /.

Operațiunile „*” și „/” au prioritate mai mare decât operațiunile „+” și „-”.

Dacă cel puțin un operand este real, atunci operațiile +, -, *, / conduc la un rezultat real. Operația de împărțire / conduce la un rezultat real chiar și în cazul a doi operanzi întregi, de exemplu: 9/3 = 3,0.

Pentru a lucra cu date reale, pot fi utilizate funcții matematice standard prezentate în tabel. 9. Rezultatul acestor funcții este și el real.

Tabelul 9

Funcții matematice care funcționează cu date reale

Este interzisă utilizarea variabilelor și constantelor de tip REAL:

– în funcțiile pred(x), succ(x), ord(x);

– ca indici de matrice;

– ca etichete în declarațiile de transfer de control;

– ca variabile de control (parametri de ciclu).

Pentru a converti un număr real într-un număr întreg, puteți utiliza următoarele funcții:

trunc(x) – parte întreagă a lui x (x – real);

round(x) – rotunjirea la cel mai apropiat număr întreg (x este real).

Tip de caracter. Variabilele de caractere sunt descrise folosind cuvântul rezervat char:

Valorile de acest tip sunt selectate dintr-un set de caractere ordonat (set ASCII) format din 256 de caractere. Fiecărui caracter i se atribuie un număr întreg din intervalul 0..255. De exemplu, literele mari ale alfabetului latin A..Z au codurile 65..90, iar literele mici au codurile 97..122.

Valoarea unei variabile de tip de caracter este un singur caracter înconjurat de apostrofe, de exemplu:

„F” „8” „*”

Variabilele de caractere pot fi comparate între ele, iar codurile de caractere sunt comparate.

Există funcții care stabilesc o corespondență între un simbol și codul său:

ord(c) – dă numărul simbolului c;

chr(i) – returnează numărul caracterului i.

Aceste funcții sunt inverse una față de cealaltă.

tip boolean. Variabilele booleene sunt descrise folosind cuvântul rezervat boolean:

p1, p2: boolean;

Variabilele de tip boolean iau două valori: adevărat(adevărat), fals(minciună).

Aceste valori sunt ordonate după cum urmează: false< true. false имеет порядковый номер 0, true имеет порядковый номер 1.

Variabilelor booleene li se poate atribui direct o valoare sau pot folosi o expresie booleană. De exemplu,

a, d, g, b: boolean;

Operațiuni de relație (<, <=, >, >=, =, <>), aplicate variabilelor întregi, reale și simbolice, produc un rezultat logic.

Operațiile logice pe operanzi de tip logic produc, de asemenea, un rezultat logic (operațiile sunt enumerate în ordinea descrescătoare a priorității) (pentru mai multe detalii, vezi Tabelele 3 și 5):

nu – negație (operație NU);

și – înmulțire logică (operație AND);

sau – adăugare logică (operație OR);

xor – OR exclusiv.

Expresia (nu a) are sensul opus a lui a.

Expresia (a și b) se evaluează drept adevărată dacă numai a și b sunt adevărate, în caz contrar, valoarea acestei expresii este falsă;

Expresia (a sau b) se evaluează ca fals dacă doar a și b sunt evaluați ca fals, în caz contrar, rezultatul este adevărat;

Tip enumerare. Un tip de enumerare non-standard este specificat printr-o enumerare sub formă de nume de valori pe care o variabilă le poate lua. Fiecare valoare este denumită printr-un identificator și este situată într-o listă înconjurată de paranteze. Forma generală a descrierii tipului enumerat:

x = (w1, w2, …, wn);

unde x este numele tipului, w1, w2,..., wn sunt valorile pe care le poate lua o variabilă de tip x.

Aceste valori sunt ordonate w1

Următoarele funcții standard se aplică argumentului w de tip enumerat:

succ(w), pred(w), ord(w).

culoare=(rosu, negru, galben, verde)

ww=(stânga, sus, dreapta, jos);

f: matrice de ww;

succ(d) = galben;

Variabilele a și b sunt de tip w. pot lua una dintre cele trei valori, cu pornit

Operațiile relaționale sunt aplicabile valorilor de tip enumerat: =,<>, <=, >=, <, >.

Este permisă specificarea constantelor de tip enumerate direct în secțiune var fără a utiliza partiția tip, De exemplu

c,d: (rosu, negru, galben, verde);

Tip de gamă (limitat).. Când definiți un tip limitat, specificați valorile inițiale și finale pe care le poate lua o variabilă de tip interval. Valorile sunt separate prin două puncte.

Descrierea tipului restricționat este de formă

Aici a este numele tipului, min, max sunt constante.

Atunci când specificați un tip restricționat, trebuie respectate următoarele reguli:

– ambele constante de limită min și max trebuie să fie de același tip;

– se creează un tip limitat din datele unui tip de bază, care poate fi un întreg, caracter sau tip enumerat. De exemplu:

col = roșu.. galben;

litera = ‘a’...’f’;

– Variabilele de tip restricționat pot fi declarate în secțiunea var fără a se face referire la secțiunea de tip:

– un tip restricționat moștenește toate proprietățile tipului de bază din care este creat;

– limita minimă trebuie să fie întotdeauna mai mică decât limita maximă.

Matrice. Un tablou este un tip complex care este o structură constând dintr-un număr fix de componente de același tip. Tipul de componentă se numește tip de bază. Toate componentele matricei pot fi comandate cu ușurință și accesul la oricare dintre ele poate fi asigurat prin simpla indicare a numărului său de serie. Descrierea matricei în secțiune var are forma:

o: matrice de t2;

unde a este numele matricei, matrice, de– cuvinte de serviciu (însemnând „matrice de...”), t1 – tip index; t2 – tip componentă (tip bază).

Numărul de indici determină dimensiunea matricei. Indecii pot fi tipuri întregi (cu excepția longint), caracter, logic, enumerare și interval. Indicele sunt separate prin virgule și cuprinse între paranteze drepte. Componentele matricei pot fi de orice tip, cu excepția fișierului.

Exemplul 1. Luați în considerare o matrice unidimensională C, ale cărei valori sunt cinci numere reale:

4.6 6.23 12 -4.8 0.7

Descrierea acestei matrice este următoarea:

c: matrice de real;

Pe baza unei anumite valori de index, puteți selecta o anumită componentă a matricei (de exemplu, C înseamnă al treilea element al matricei C, adică numărul 12).

Exemplul 2. Luați în considerare o matrice bidimensională B (matricea B), a cărei valoare este un tabel de numere întregi:

Descrierea acestei matrice este următoarea:

b de număr întreg;

Aici b este numele matricei, primul index este numărul rândului și ia valori de la 1 la 2, al doilea este numărul coloanei și ia valori de la 1 la 4. Pe baza unor valori specifice de index, puteți selectați o componentă de matrice specifică (de exemplu, b înseamnă un element de tabel situat în primul rând și a treia coloană, adică numărul -4).

Indecșii pot fi expresii arbitrare corespunzătoare tipului de index din descrierea matricei:

a: matrice de real;

a[(i+1)*2]:= 24;

Setul de operații asupra elementelor matrice este complet determinat de tipul acestor elemente.

Tip șir. Tipul de șir este un set de șiruri de caractere de lungime arbitrară (de la zero la un număr dat). Variabilele de tip șir sunt descrise folosind un cuvânt funcție şir:

b: şir ;

Particularitati:

– valoarea unei variabile șir poate fi introdusă folosind tastatura, atribuită într-un operator de atribuire sau citită dintr-un fișier. În acest caz, lungimea șirului introdus poate fi orice (mai mică decât dimensiunea specificată, egală cu dimensiunea sau mai mare, în acest din urmă caz, caracterele suplimentare sunt eliminate); a:= „Rezultate”;

– este permisă utilizarea operației de concatenare în operatorul de atribuire, deoarece șirurile își pot modifica dinamic lungimea: a:= a + ‘calculare’;

– lungimea maximă a unei variabile șir este de 255 de caractere, această indicație de lungime poate fi omisă:

o: şir;

a1: şir ;

Variabilele a și a1 sunt aceleași (descriere echivalentă).

– memoria pentru variabilele de tip șir este alocată la maximum, dar este utilizată doar partea din memorie ocupată efectiv de caractere șir în momentul de față. Pentru a descrie o variabilă șir de lungime n, se folosesc n+1 octeți de memorie: n octeți pentru a stoca caractere șir, n+1 octeți pentru a stoca lungimea curentă.

– operațiunile de comparare sunt definite pe valorile tipurilor de șir:< <= > >= = <>. Un șir scurt este întotdeauna mai mic decât unul lung. Dacă șirurile au aceeași lungime, atunci codurile de caractere sunt comparate.

– accesul la elementele individuale ale unui șir este posibil în același mod ca și accesul la elementele matricei: a, a. Numărul elementului de linie este indicat între paranteze drepte.

Proceduri și funcții orientate spre lucrul cu șiruri.

concat (s1, s2,…)– funcția de îmbinare a șirurilor, s1, s2,... - linii, numărul de linii poate fi arbitrar. Rezultatul funcției este un șir. Dacă șirul rezultat este mai lung de 255 de caractere, șirul este trunchiat la 255 de caractere.

copie(e, index, numărare)– funcția de extragere a unui șir dintr-un șir sursă s lungime conta caractere, începând cu numărul caracterului index.

șterge (s, index, număr)– procedură pentru îndepărtarea din șirul s a unui subșir de lungime conta caractere, începând cu numărul caracterului index.

insert (s1, s2, index)– procedura de inserare a rândurilor s1 a alinia s2, începând cu caracterul cu numărul index.

lungime(i)– funcție pentru determinarea lungimii curente a șirului, returnează un număr egal cu lungimea curentă a șirului.

poziție (s1, s2)– funcția de căutare într-un șir s2 subșiruri s1. returnează numărul de poziție al primului caracter al unui subșir s1în linie s2(sau 0 dacă această linie nu există).

val (st, x, cod)– procedura de conversie a șirului s într-un număr întreg sau variabilă reală x. Parametru cod conține 0 dacă conversia a avut succes (și în x este plasat rezultatul conversiei), sau numărul de poziție al liniei în care este detectat caracterul eronat (în acest caz, valoarea x nu se schimbă).

Compatibilitate și conversie de tip. Turbo Pascal este un limbaj tipizat. Este construit pe baza respectării stricte a conceptului de tip, conform căruia toate operațiile utilizate în limbaj sunt definite numai pe operanzi de tipuri compatibile.

Două tipuri sunt considerate compatibile dacă:

– ambele sunt de același tip;

– ambele sunt reale;

- ambele sunt intacte;

– un tip este un tip de interval de al doilea tip;

– ambele sunt tipuri de gamă de același tip de bază;

– ambele sunt mulţimi compuse din elemente de acelaşi tip de bază;

– ambele sunt șiruri de caractere împachetate (definite cu cuvântul precedent packed) de aceeași lungime maximă;

– unul este de tip șir, iar celălalt este de tip șir sau caracter;

– un tip este orice pointer, iar celălalt este un pointer către obiectul său asociat;

– ambele sunt tipuri procedurale cu același tip de rezultat (pentru un tip de funcție), număr de parametri și tip de parametri corespunzători reciproc.

Compatibilitatea tipurilor este deosebit de importantă în operatorii de atribuire. Fie t1 tipul variabilei și t2 tipul expresiei, adică se realizează atribuirea t1:=t2. Această atribuire este posibilă în următoarele cazuri:

– t1 și t2 sunt de același tip, iar acest tip nu se referă la fișiere, rețele de fișiere, înregistrări care conțin câmpuri de fișiere sau rețele de astfel de înregistrări;

– t1 și t2 sunt tipuri ordinale compatibile, iar valoarea lui t2 se află în intervalul de valori posibile ale lui t1;

– t1 și t2 sunt tipuri reale, iar valoarea lui t2 se află în intervalul de valori posibile ale lui t1;

– t1 – tip real și t2 – tip întreg;

– t1 – linie și t2 – caracter;

– t1 – sfoară și t2 – sfoară ambalată;

– t1 și t2 – șiruri ambalate compatibile;

– t1 și t2 sunt mulțimi compatibile și toți membrii lui t2 aparțin mulțimii de valori posibile ale lui t1;

– t1 și t2 sunt pointeri compatibili;

– t1 și t2 sunt tipuri procedurale compatibile;

– t1 este un obiect și t2 este descendentul acestuia.

Într-un program, datele de un tip pot fi convertite în date de alt tip. Această conversie poate fi explicită sau implicită.

Conversia explicită de tip apelează funcții speciale de conversie ale căror argumente aparțin unui tip și ale căror valori aparțin altuia. Un exemplu sunt funcțiile deja discutate ord, trunc, round, chr.

Conversia implicită este posibilă numai în două cazuri:

– în expresiile compuse din variabile reale și întregi, acestea din urmă sunt convertite automat într-un tip real, iar întreaga expresie în ansamblu capătă tip real;

– aceeași zonă de memorie este tratată alternativ ca conținând date de unul sau altul tip (combinând date de diferite tipuri în memorie).

Orice program scris în orice limbaj de programare este conceput în esență pentru a procesa date. Datele pot fi numere, texte, grafice, sunet etc. Unele date sunt date sursă, altele sunt rezultatul, care se obține prin prelucrarea datelor sursă de către program.

Datele sunt stocate în memoria computerului. Programul le accesează folosind nume de variabile asociate cu locațiile de memorie în care sunt stocate datele.

Variabilele sunt descrise înainte de codul programului principal. Numele variabilelor și tipul de date stocate în acestea sunt indicate aici.

Există o mulțime de tipuri de date în limbajul de programare Pascal. În plus, utilizatorul însuși își poate defini propriile tipuri.

Tipul unei variabile determină ce date pot fi stocate în locația de memorie asociată cu aceasta.

Variabile de tip întreg poate fi asociat doar cu valori întregi, de obicei, în intervalul -32768 până la 32767. Pascal are alte tipuri de numere întregi (byte, longint).

Variabile de tip real stocați numere reale (fracționale).

Variabilă boolean Tipul (boolean) (boolean) poate lua doar două valori - adevărat(1, adevărat) sau fals(0, fals).

Tip de caracter (car) poate lua valori dintr-o anumită secvență ordonată de caractere.

Tip de interval definit de utilizator și format numai din tipuri ordinale. Reprezintă un subset de valori într-un anumit interval.

Vă puteți crea propriul tip de date prin simpla enumerare a valorilor pe care le poate lua o variabilă de acest tip. Acesta este așa-numitul tip de date enumerate.

Toate cele de mai sus sunt simple tipuri de date. Există însă și unele complexe, structurate, care se bazează pe tipuri simple.

Matrice este o structură care ocupă o singură zonă în memorie și este formată dintr-un număr fix de componente de același tip.

Coarde este o succesiune de caractere. În plus, numărul acestor caractere nu poate fi mai mare de 255 inclusiv. Această limitare este o trăsătură caracteristică a lui Pascal.

Înregistra este o structură formată dintr-un număr fix de componente numite câmpuri. Datele din diferite câmpuri ale unei înregistrări pot fi de diferite tipuri.

Seturi reprezintă o colecție de orice număr de elemente, dar de același tip enumerat.

Fișiere pentru Pascal, sunt secvențe de același tip de date care sunt stocate pe dispozitive de memorie externe (de exemplu, un hard disk).

Conceptul unui astfel de tip de date ca indicator asociat cu stocarea dinamică a datelor în memoria computerului. Adesea, utilizarea tipurilor de date dinamice este mai eficientă în programare decât utilizarea tipurilor de date statice.

Cel mai frecvent în matematică tipuri numerice- Asta întreg numere care reprezintă un număr infinit de valori discrete și valabil numere care reprezintă un continuum nelimitat de valori.

Descrierea tipurilor de date numerice ale lui Pascal (numere întregi)

În cadrul aceluiași limbaj, pot fi implementate diferite submulțimi ale mulțimii de numere întregi. Gama de valori posibile ale tipurilor numerice întregi depinde de reprezentarea lor internă, care poate fi de unul, doi sau patru octeți. Astfel, în Pascal 7.0 sunt utilizate următoarele tipuri de date numerice întregi:

Cu întreg tipuri de date numerice Pascal poate efectua următoarele operații:

  • Aritmetică:
    adăugare(+);
    scădere(-);
    multiplicare(*);
    restul diviziunii (mod);
    exponentiarea;
    plus unar (+);
    minus unar (-).
  • Operațiuni de relație:
    relație de egalitate (=);
    relație de inegalitate (<>);
    raportul este mai mic (<);
    raport mai mare decât (>);
    relație nu mai mică de (>=);
    nu mai atitudine (<=).

Când acţionează cu tipuri de date numerice întregi tipul rezultatului va corespunde tipului operanzilor, iar dacă operanzii sunt de diferite tipuri întregi, tipului operandului care are puterea maximă (gamă maximă de valori). Posibila depășire a rezultatului nu este controlată în niciun fel (acest lucru este important!) , ceea ce poate duce la erori.

O atenție deosebită trebuie acordată operațiunii de divizare a tipurilor de date numerice întregi. Pascal permite două operații de împărțire, care sunt notate corespunzător "/" Şi div. Trebuie să știți că rezultatul împărțirii „/” nu este un număr întreg, dar număr real(acest lucru este adevărat chiar dacă împărțiți 8 la 2, adică 8/2=4,0). Diviziunea div este diviziune intregi, adică tipul de rezultat este întreg.

Descrierea tipurilor de date numerice ale lui Pascal (reale)

Tipul de date numerice reale se referă la un subset de numere reale care pot fi reprezentate în așa-numitul format în virgulă mobilă cu un număr fix de cifre. Cu virgulă mobilă, fiecare tip de date numerice este reprezentat ca două grupuri de cifre. Primul grup de numere se numește mantisa, al doilea este exponent. În general, un tip de date numerice sub formă de virgulă mobilă poate fi reprezentat astfel: X= (+|-)MP (+ | -) r, unde M este mantisa numărului; r – ordinea numerelor (r – întreg); P – baza sistemului numeric. De exemplu, pentru baza zecimală, reprezentarea 2E-1 (aici E este baza sistemului numeric zecimal) va arăta astfel: 2*10 -1 =0.2, iar reprezentarea 1.234E5 va corespunde cu: 1.234*10 5 =123400,0.

Pascal folosește următoarele tipuri de numere reale, care definesc un număr arbitrar doar cu o precizie finită, în funcție de formatul intern al numărului real:

Când se descrie o variabilă reală de tip real, o variabilă de 4 octeți va fi creată în memoria computerului. În acest caz, 3 octeți vor fi dați pentru mantisă și un octet pentru comandă.

Următoarele operații pot fi efectuate pe tipuri de date numerice reale:

  • Aritmetică:
    adăugare (+);
    scădere(-);
    multiplicare(*);
    diviziune(/);
    exponentiarea;
    plus unar (+);
    minus unar (-).
  • Operațiuni de relație:
    relație de inegalitate (<>);
    raportul este mai mic (<);
    raport mai mare decât (>);
    relație nu mai mică de (>=);
    nu mai atitudine (<=).

După cum puteți vedea, Pascal se caracterizează printr-o gamă bogată de tipuri reale, dar acces la tipuri de date numerice singur, dublaŞi prelungit posibil numai în moduri speciale de compilare. Aceste tipuri de date numerice sunt concepute pentru suport hardware pentru aritmetica în virgulă mobilă și, pentru a le utiliza eficient, computerul trebuie să includă un coprocesor matematic.

Tipul de date numerice ocupă o poziție specială în Pascal. comp, care este tratat ca un număr real fără părți exponențiale și fracționale. De fapt, comp este un număr întreg cu semn „mare” care reține 19..20 de cifre zecimale semnificative. În același timp, tipul de date numerice compîn expresii este pe deplin compatibil cu alte tipuri reale: toate operațiile reale sunt definite pe el, poate fi folosit ca argument la funcții matematice etc.

Despre conversia tipurilor de date numerice ale lui Pascal

În Pascal, conversiile implicite (automate) ale tipurilor de date numerice sunt aproape imposibile. Se face o excepție numai pentru tip întreg, care poate fi folosit în expresii precum real. De exemplu, dacă variabilele sunt declarate astfel:

Var X: întreg; Y: real;

Acesta este operatorul

va fi corectă din punct de vedere sintactic, deși există o expresie întreagă în dreapta semnului de atribuire și o variabilă reală în stânga, compilatorul va converti automat tipurile de date numerice. Transformarea inversă este tip automat realîn tip întreg imposibil în Pascal. Să ne amintim câți octeți sunt alocați pentru variabilele de tip întregŞi real: pentru tipul de date întreg întreg Sunt alocați 2 octeți de memorie, iar în realitate - 6 octeți. A converti real V întreg Există două funcții încorporate: rundă(x) rotunjește x real la cel mai apropiat număr întreg, trunchi(x) trunchiază un număr real prin eliminarea părții fracționale.