Tipuri simple de date în pascal. Tipuri de variabile în Pascal: descriere, proprietăți, exemple

Când descrieți o variabilă, trebuie să specificați tipul acesteia. Tipul unei variabile descrie setul de valori pe care le poate lua și acțiunile care pot fi efectuate asupra acesteia. Descrierea tipului definește un identificator care denotă tipul.

Tipurile simple sunt împărțite în tipuri standard (ordinale) și enumerate (restrânse).

Tipuri standard

Turbo Pascal are patru tipuri standard încorporate: întreg, real, boolean și char.

Tipul întreg

Turbo Pascal are cinci tipuri de numere întregi încorporate: shortint, integer, longint, byte și word. Fiecare tip denotă un subset specific de numere întregi, așa cum se arată în tabelul următor.

Tipuri întregi încorporate.

Gamă

Format

8 biți semnați

16 biți semnați

2147483648 +2147483647

Semnat pe 32 de biți

8 biți nesemnați

16 biți nesemnați

Operațiile aritmetice pe operanzi de tip întreg sunt efectuate în conformitate cu următoarele reguli:

  1. Tipul constant întreg este încorporat tipul întreg cu cel mai mic interval care include valoarea acestei constante întregi.
  2. În cazul unei operații binare (o operație care folosește doi operanzi), ambii operanzi sunt convertiți în tipul lor comun înainte de a fi acționați. Tipul comun este tipul întreg încorporat cu cel mai mic interval care include toate valorile posibile ale ambelor tipuri. De exemplu, tipul obișnuit pentru un număr întreg cu lungimea de octeți este întreg, iar tipul comun pentru un întreg și un număr întreg de lungime a unui cuvânt este un întreg lung. Acțiunea se realizează în funcție de acuratețe tip general iar tipul rezultatului este generic.
  3. Expresia din dreapta în instrucțiunea de atribuire este evaluată indiferent de mărimea variabilei din stânga.

Operații efectuate pe numere întregi:

„+” - adăugare

„-“ - scădere

"*" - înmulțire

SQR - pătrat

DIV - după împărțire, aruncă partea fracționată

MOD - obținerea unui rest întreg după împărțire

ABS - modul de număr

ALEATOR (X) -primire Număr aleatoriu de la 0 la X

A: = 100; b: = 60; a rezultat DIV b - 1 a rezultat MOD b - 40

Variabilele de tip întreg sunt descrise după cum urmează:

var lista de variabile: tip;

De exemplu: var a, p, n: întreg;

Tip real (real)

Un tip real este un subset de numere reale care poate fi reprezentat în format virgulă mobilă cu un număr fix de cifre. Scrierea unei valori în virgulă mobilă include de obicei trei valori - m, b și e - astfel încât m * b e, unde b este întotdeauna 10 și m și e sunt numere întregi în intervalul real. Aceste valori m și e definesc în continuare intervalul și precizia tipului real.

Există cinci tipuri de tipuri reale: real, single, duble, exnende, comp. Tipurile reale diferă în intervalul și precizia valorilor asociate acestora

Interval și cifre zecimale pentru tipuri reale

Gamă

Numerele

2,9x10E-39 până la 1,7x10E 38

1,5x10E-45 până la 3,4x10E 38

5.0x10E-324 până la 1.7x10E 308

3,4x10E-493 până la 1,1x10E 403

2E 63 până la 2E 63

Operatii efectuate pe numere reale:

  • Toate operațiunile sunt valabile pentru numere întregi.
  • SQRT (x) este rădăcina pătrată a numărului x.
  • SIN (X), COS (X), ARCTAN (X).
  • LN (X) -logaritm natural.
  • EXP (X) -exponent X (ex x).
  • EXP (X * LN (A)) - exponentiație (A x).
  • Funcții de conversie a tipului:
    • TRUNC (X) - aruncă partea fracționată;
    • ROUND (X) - rotunjire.
  • Câteva reguli ale operațiilor aritmetice:
    • Dacă în operatie aritmetica există numere de tip real și întreg, atunci rezultatul va fi de tip real.
    • Toate părțile constitutive ale expresiei sunt scrise pe un singur rând.
    • Se folosesc doar paranteze.
    • Nu poți pune două semne aritmetice la rând.

Variabilele de tip real sunt descrise după cum urmează:

var lista de variabile: tip;

De exemplu:

var d, g, k: real;

Tip de caracter (caracter)

Tipul char include orice caracter inclus în apostrofe. Pentru a reprezenta un apostrof ca variabilă simbolică, trebuie să-l încadrați într-un apostrof: '' '' '.

Fiecare simbol are propriul său cod și număr. Numerele succesive ale cifrelor 0.1..9 sunt sortate în ordine crescătoare. Numerele de serie ale literelor sunt, de asemenea, în ordine crescătoare, dar nu se succed neapărat.

Caracterele de comparație sunt aplicabile datelor de caractere:

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

De exemplu: „A”< ‘W’

Funcții care se aplică variabilelor simbolice:

  1. ORD (X) - definește numărul ordinal al caracterului X. Ord (‘a’) = 97;
  2. CHR (X) - definește un caracter după număr. chr (97) = 'a';
  3. PRED (X) - returnează caracterul care precede caracterul X. Pred (‘B’) = ’A’;
  4. SUCC (X) - returnează caracterul după caracterul X. succ (‘A’) = ’B’;

Tip enumerat

Tipul de date enumerate este denumit astfel deoarece este specificat ca o enumerare de constante într-o ordine strict definită și într-o cantitate strict definită. Un tip enumerat constă dintr-o listă de constante. Variabilele de acest tip pot lua valoarea oricăreia dintre aceste constante. Descrierea tipului enumerat este:

Tip<имя типа>= (lista constantelor); Var<имя переменной>:<имя типа>;

Unde<список констант>este un tip special de constante separate prin virgulă care au propriul număr ordinal, începând de la 0.

De exemplu:

direcția tip = (nord, sud, vest, est); luna = (iunie, iulie, august, ianuarie); capacitate = (galeata, butoi, canistra, rezervor); var turn: directie; plecare: luna; volum: capacitate; var turn: (nord, sud, vest, est); plecare: (iunie, iulie, august, ianuarie); volum: (galeata, butoi, canistra, rezervor);

Puteți executa următorii operatori de atribuire:

Viraj: = sud; plecare: = august; volum: = rezervor;

dar misiunile mixte nu pot fi efectuate:

Plecare: = sud; volum: = august;

Următoarele funcții se aplică variabilelor enumerate:

1. ORD - număr de serie

2. PRED este elementul precedent

3. SUCC este un element de urmărire.

PRED (baril) = găleată; SUCC (sud) = vest; ORD (iulie) = 1;

Variabilele de tip enumerat pot fi comparate deoarece sunt ordonate și numerotate. Deci expresii: nord< юг, июнь < январь имеют значения TRUE, а юг>vest și dolar<бочка значение FАLSE.

Tip limitat

Dacă o variabilă nu acceptă toate valorile tipului său, ci doar într-un anumit interval, atunci poate fi considerată ca o variabilă de tip limitat. Fiecare tip restricționat este specificat prin impunerea unei constrângeri asupra tipurilor de bază.

Este descris astfel:

TIP<имя типа>= constant1 .. constant2

În acest caz, trebuie respectate următoarele reguli:

  1. Ambele constante constrânse trebuie să fie de același tip.
  2. Orice tip simplu, altul decât real, poate fi folosit ca tip de bază.
  3. Valoarea inițială la definirea tipului mărginit nu trebuie să fie mai mare decât valoarea finală.
indice de tip = 0 ..63; litera = 'a' .. 'z'; var char1, char2: litera; a, g: indice;

O puteți descrie direct în secțiunea descriere a variabilei:

var a, g: 0 ..63; char1, char2: „a” .. „z”.

Tipuri de date Pascal

Orice date (constante, variabile, valori ale funcțiilor 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 sunt aplicabile. Tipul determină și formatul reprezentării interne a datelor din memoria computerului.

Următoarele tipuri de date există în Turbo Pascal.

1) Tipuri simple:

- real;

- simbolic;

- boolean (logic);

- listate;

- limitat (gamă).

2) Tipuri compozite (structurate):

- regulat (matrice);

- combinate (înregistrări);

- dosar;

- multiplu;

- sfoară;

- obiecte.

3) Tipuri de referință (indicatoare tipizate și netipizate).

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 submult 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 întregi sunt stocate exact în memorie. De exemplu, variabilele întregi 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 calculul sistemului 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, trebuie să vă ghidați după „imbricarea” tipurilor, adică. oriunde este folosit cuvântul, byte este permis (dar nu invers), longint „include” întreg, care la rândul său include shortint.

Pentru un tip întreg, sunt definite cinci operații de bază care au ca rezultat și un număr întreg: +, -, *, div, mod (adunare, scădere, înmulțire, împărțire întreg și rest din împărțirea întregului). În expresiile aritmetice, operațiile *, div, mod au prioritate față de 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 ale tipurilor 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 tipurilor î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
Buna eu) octet Returnează octetul înalt al argumentului
Buna eu) octet De asemenea
Lo (i) octet Returnează octetul cel mai puțin semnificativ al argumentului
Lo (w) octet De asemenea
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ții î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 întreagă anterioară, adică x-1

Când se operează pe 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 de 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 semnată a unui număr;

Parte exponențială;

numere de mantisă.

Mantisa are o lungime de 23 (Single) până 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 bitului din stânga (cel mai semnificativ) al mantisei, dar atunci când se manipulează 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, Compilatorul...și activați opțiunea 8087/80287 într-un 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, Comp este pe deplin compatibil cu orice alte tipuri reale în expresii: toate operațiile reale sunt definite peste el, poate fi folosit ca argument al operațiilor matematice etc.



Numerele reale sunt specificate în notație zecimală într-unul dintre doua forme.

V forma punct fixînregistrarea constă din părți întregi și fracționale, separate între ele printr-un punct, de exemplu:

0.087 4.0 23.5 0.6

V punctul de plutireînregistrarea 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 o prioritate mai mare decât operațiunile „+” și „-”.

Dacă cel puțin un operand este real, atunci operațiile +, -, *, / conduc la un rezultat real. Operatorul de împărțire / conduce la un rezultat real ș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 lucrează cu date reale

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

- în funcţiile pred (x), succ (x), ord (x);

- ca indici de tablouri;

- ca etichete în operatorii 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 funcțiile:

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

rotunjire (x) - rotunjire la cel mai apropiat număr întreg (x este real).

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

Valorile de acest tip sunt selectate dintr-un set ordonat de caractere (din setul ASCII) de 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 - codurile 97..122.

Valoarea unei variabile tip caracter este un caracter inclus în apostrofe, de exemplu:

„F ’’ 8 ’’ * ’

Variabilele simbolice pot fi comparate între ele, în timp ce codurile simbolurilor sunt comparate.

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

ord (с) - dă numărul caracterului cu;

chr (i) - produce caracterul cu numărul i.

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

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

p1, p2: boolean;

Variabilele booleene iau două valori: Adevărat(Adevărat), fals(Minciuna).

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

Variabilelor de tip boolean fie li se poate atribui o valoare direct, fie se poate folosi o expresie booleană. De exemplu,

a, d, g, b: boolean;

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

Operațiile booleene pe operanzi de tip boolean dau, de asemenea, un rezultat boolean (operațiile sunt listate în ordinea descrescătoare a priorității) (pentru mai multe detalii, consultați Tabelele 3 și 5):

not - negație (operație NOT);

și - înmulțirea logică (operație AND);

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

xor - exclusiv OR.

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

Expresia (a și b) se evaluează ca fiind adevărată dacă ambele a și b sunt adevărate, în caz contrar această expresie este evaluată ca falsă.

Expresia (a sau b) se evaluează ca falsă dacă ambele a și b sunt false, în caz contrar rezultatul este adevărat.

Tip enumerat... Un tip enumerat 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. Vedere generală a descrierii unui tip 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 de tip enumerat w:

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 și mai departe

Operațiile relației sunt aplicabile valorilor de tipul enumerat: =,<>, <=, >=, <, >.

Este permisă specificarea constantelor de tip enumerat direct în secțiune var fără a folosi o secțiune tip, de exemplu

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

Tip de interval (restricționat).... La definirea unui tip restricționat, sunt specificate 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

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 limita min si max trebuie sa fie de acelasi tip;

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

col = roșu .. galben;

litera = ‘a’ .. ’f’;

- variabilele de tip limitat pot fi descrise în secțiunea var fără a face referire la secțiunea de tip:

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

- chenarul minim trebuie să fie întotdeauna mai mic decât chenarul 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 unei matrice pot fi comandate cu ușurință și oricare dintre ele poate fi accesată prin simpla specificare a numărului său ordinal. Descrierea matricei în secțiune var se pare ca:

A: matrice de t2;

unde a este numele matricei, matrice, de- cuvinte de serviciu (înseamnă „matrice de la...”), t1 - tip index; t2 - tip componentă (tip bază).

Numărul de indici determină dimensiunea matricei. Indecii pot fi tipuri întregi (cu excepția lungint), caracter, boolean, enumerați și interval. Indecii sunt separați prin virgule și încadrați între paranteze drepte. Componentele matricei pot fi de orice tip, cu excepția tipului de fișier.

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;

După o anumită valoare a indexului, puteți selecta o componentă specifică a matricei (de exemplu, C înseamnă al treilea element al matricei C, adică numărul 12).

Exemplul 2. Considerăm 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. Pentru valori specifice ale indicilor , puteți selecta o componentă specifică a matricei (de exemplu, b înseamnă un element de tabel în primul rând și a treia coloană, adică numărul -4).

Indecșii pot fi expresii arbitrare corespunzătoare tipului de indecși 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.

Tipul șirului... Un tip de șir este un set de șiruri de caractere de lungime arbitrară (de la zero la un număr specificat). Variabilele de tip șir sunt descrise folosind un cuvânt de serviciu şir:

b: şir ;

Particularitati:

- valoarea unei variabile șir poate fi introdusă cu ajutorul tastaturii, atribuită într-un operator de atribuire, 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 + ‘calculări’;

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

A: ş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 o parte din memorie care este ocupată efectiv de caractere șir în acest moment. Pentru a descrie o variabilă șir de lungime n, se folosesc n + 1 octeți de memorie: n octeți - pentru a stoca caracterele șirului de caractere, n + 1 --i octeți - pentru a stoca lungimea curentă.

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

- este posibil să accesați elemente individuale ale unui șir în același mod ca și accesarea elementelor de matrice: a, a. Parantezele pătrate indică numărul elementului de linie.

Proceduri și funcții orientate pe șiruri.

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

copie (s, index, count)- funcția de selectare a unei linii din linia originală s lungimea numara caractere care încep cu caracterul de sub număr index.

șterge (s, index, număr)- procedura de scoatere din șir s a unui subșir de lungime numara caractere care încep cu caracterul cu numărul index.

inserare (s1, s2, index)- procedura de inserare a rândurilor s1în linie s2începând cu caracterul cu numărul index.

lungime (e)- funcţie de determinare a lungimii curente a şirului, returnează un număr egal cu lungimea curentă a şirului.

poziție (s1, s2)- funcția de căutare a șirurilor s2 subșiruri s1... oferă numărul de poziție al primului caracter al unui subșir s1în linie s2(sau 0 dacă această linie nu este prezentă).

val (st, x, cod)- procedura de conversie a unui șir 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 a fost găsit caracterul eronat (în acest caz, valoarea X nu se schimba).

Compatibilitate și conversie de tip... Turbo Pascal este un limbaj tipizat. Este construit pe baza respectării stricte a conceptului de tipuri, 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 acelasi tip;

- ambele sunt reale;

- ambele sunt intregi;

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

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

- ambele sunt multimi compuse din elemente de acelasi tip de baza;

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

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

- un tip este orice pointer, iar celălalt este un pointer către un obiect înrudit;

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

Compatibilitatea tipului capătă o importanță deosebită în operatorii de atribuire. Fie t1 tipul variabilei, iar 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 aplică fișierelor, matricelor de fișiere, înregistrărilor care conțin câmpuri de fișiere sau matricelor 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 este un șir și t2 este un caracter;

- t1 este un șir și t2 este un șir împachetat;

- t1 si t2 - siruri impachetate 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 si t2 sunt pointeri compatibili;

- t1 și t2 sunt tipuri procedurale compatibile;

- t1 este un obiect și t2 este copilul său.

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

Conversiile de tip explicit numesc funcții de conversie speciale ale căror argumente sunt de un tip și valori ale altuia. Un exemplu sunt funcțiile deja luate în considerare ord, trunc, round, chr.

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

- in expresiile compuse din variabile reale si intregi, acestea din urma sunt convertite automat intr-un tip real, iar intreaga expresie devine tip real;

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

Cunoașterea și înțelegerea tipurilor de date este parte integrantă a programării.

În acest tutorial, vă vom prezenta tipurile de date în limbajul de programare Turbo Pascal.

În limbajul Pascal, orice obiect, i.e. constantele, variabilele, valorile funcției sau expresiile sunt caracterizate prin tipurile lor. Un tip definește un set de valori valide pentru un obiect, precum și un set de operațiuni care îi sunt aplicabile. În plus, tipul determină formatul reprezentării datelor interne în memoria computerului. În ceea ce privește tipurile de obiecte, Pascal este un limbaj static. Aceasta înseamnă că tipul unui obiect, de exemplu, o variabilă, este determinat în timpul descrierii sale și nu poate fi schimbat ulterior.

Structura tipurilor de date în limbajul Pascal:

Tipuri de limbaj simple
Tipurile simple includ tipurile ordinale, reale, șiruri și adrese (indicatori). Toate definesc tipul unei singure valori.

Tipuri ordinale caracterizate prin faptul că fiecare dintre ele are un număr finit de valori posibile, între care se stabilește o ordine liniară. Fiecare dintre valori poate fi asociată cu un număr întreg - numărul său ordinal.

Tipuri întregi- indică seturi de numere întregi în diferite intervale. Există cinci tipuri de numere întregi, care diferă în intervalul de valori valide și dimensiunea memoriei utilizate. Tipurile întregi sunt indicate prin identificatori: Byte, ShortInt, Word, Integer, LongInt; caracteristicile lor sunt prezentate în tabelul următor.

Valorile tipurilor întregi sunt scrise în program în modul obișnuit:
123 4 -3 +345 -699
Prezența unui punct zecimal într-un număr întreg nu este permisă. Ar fi o greșeală să scrieți un număr întreg ca acesta:
123.0
În plus față de notația zecimală obișnuită, este permis să scrieți numere întregi în format hexazecimal folosind prefixul $, de exemplu:
$ 01AF $ FF $ 1A $ F0A1B
Cazul literelor A, B, ..., F este irelevant.

Operațiuni permise:

  • - misiune;
  • - toate cele aritmetice: +, -, *, /, div, mod (cu împărțire obișnuită [/], rezultatul este real!);
  • - comparatie<, >, >=, <=, <>, =.
tip boolean- constă doar din două valori: Fals (fals) și True (adevărat). Cuvintele Fals și True sunt definite în limbaj și sunt, de fapt, constante booleene. Cazul literelor din scrierea lor este nesemnificativ: FALSE = fals. Valorile de acest tip sunt rezultatul evaluării expresiilor condiționate și logice și participă la tot felul de declarații condiționale din limbă.
Operațiuni permise:
  • - misiune;
  • - comparatie:<, >, >=, <=, <>, =;
  • - operatii logice: NOT, OR, AND, XOR
Tip de caracter (Char) este un tip de date format dintr-un caracter (semn, literă, cod). Valoarea Char poate fi orice caracter din setul ASCII. Dacă un simbol are o reprezentare grafică, atunci în program este scris între ghilimele simple (apostrofe), de exemplu:
"f" "s" "." "*" "" - (spațiu)
Pentru a reprezenta apostroful în sine, imaginea acestuia este dublată: „" "".
Dacă caracterul nu are o reprezentare grafică, de exemplu, un caracter de tabulație sau de returnare car, atunci puteți utiliza forma echivalentă de scriere a valorii caracterului, constând din prefixul # și codul ASCII al caracterului:
#9 #32 #13
Operațiuni permise:
  • - misiune;
  • - comparatie:<, >, >=, <=, <>, =. Caracterul mai mare este cel cu numărul ASCII mai mare.
Tip șir (șir, șir [n])- acest tip de date definește secvențe de caractere - șiruri. Parametrul n definește numărul maxim de caractere din șir. Dacă nu este specificat, se presupune n = 255. Valoarea tipului „șir” din program este scrisă ca o secvență de caractere cuprinse între ghilimele simple (apostrofe), de exemplu
„Acesta este un șir”
„1234” este, de asemenea, un șir, nu un număr
"" - linie goală

Operațiuni permise:
  • - misiune;
  • - adăugare (concatenare, îmbinare); de exemplu, S: = "Iarna" + "" + "a venit!";
  • - comparatie:<, >, >=, <=, <>, =. Șirurile sunt considerate egale dacă au aceeași lungime și sunt echivalente caracter cu caracter.
Tipuri reale- desemnează un set de numere reale în diferite intervale. Există cinci tipuri reale, care diferă în intervalul de valori permise și dimensiunea memoriei utilizate. Tipurile reale sunt desemnate prin identificatori: Real, Single, Double, Extended, Comp; caracteristicile lor sunt prezentate în tabelul următor.

Tip comp deși aparține unor tipuri reale, de fapt este un număr întreg cu o gamă foarte mare de valori.
Valorile tipurilor reale pot fi scrise într-un program în mai multe moduri:
1.456 0.000134 -120.0 65432
+345 0 -45 127E + 12
-1,5E-5 -1,6E + 12 5E4 0,002E-6

Ar fi o greșeală să scrii un număr real ca acesta:
.5 (corect 0.5)
12. (12.0 sau 12 este corect)

Un număr real în formă de virgulă mobilă (forma exponențială) este scris ca o pereche
<мантисса>E<порядок>
Această denumire este înțeleasă ca „mantisa înmulțită cu zece în putere egală cu ordinul”. De exemplu,
-1,6E + 12 corespunde cu -1,61012

Operațiuni permise:
- misiune;
- toate aritmetice: +, -, *, /;
- comparatie:<, >, >=, <=, <>, =.

La compararea numerelor reale, trebuie amintit că, din cauza inexactității reprezentării lor în memoria computerului (având în vedere inevitabilitatea rotunjirii), trebuie evitate încercările de a determina egalitatea strictă a două valori reale. Există șansa ca egalitatea să se dovedească a fi falsă, chiar dacă de fapt nu este.

Interval sau (tip restricționat) nu este un tip de limbă predefinit (cum ar fi Integer sau Char) și, prin urmare, nu are niciun identificator asociat. Acest tip este introdus de utilizator. Folosind-o, putem defini un nou tip care va conține doar valori dintr-un sub-gamă limitat de tip de bază. Tipul de bază poate fi doar un tip întreg, un tip Char (caracter) și oricare dintre tipurile enumerate introduse de programator.

Pentru a introduce un nou tip - un interval - trebuie să specificați numele tipului de intrare și limitele intervalului în blocul de descriere a tipului TIP prin simbolul special al intervalului „..” (două puncte la rând):
TIP
Secol = 1..21; (sub-gamă de tip de număr)
CapsLetters = "A" .. "Z"; (subgamă de tip Char)

Tipuri de limbaj structurat

Tipurile structurate includ: matrice, înregistrare, set, fișier etc. Toate definesc tipul (sau tipurile) unei structuri de date.

Matrice- o structură ordonată de acelaşi tip de date, stocându-le secvenţial. Matricea are în mod necesar dimensiuni care determină câte elemente sunt stocate în structură. Orice element din matrice poate fi atins prin indexul său.

Tipul matricei este determinat de construcția:
Matrice [gamă] de ElementType;

Intervalul dintre paranteze pătrate indică valorile index ale primului și ultimului element din structură. Exemple de declarare a tipurilor și variabilelor:

TIP Vector = matrice de Real; VAR V1: Vector; V2: matrice de octeți;
Aici variabila V1 este definită folosind tipul Vector descris mai sus; tipul variabilei V2 este construit direct în stadiul descrierii acesteia.

Ca tip de elemente de matrice, puteți specifica și o matrice, formând astfel structuri multidimensionale. De exemplu, o descriere a unei structuri bidimensionale (matrice) ar arăta astfel:
VAR M1: matrice de matrice de octeți; Același lucru poate fi scris mult mai compact: VAR M2: matrice de Byte;
Aici tablourile M1 și M2 au exact aceeași structură - o matrice pătrată 3x3.

Un element de matrice este accesat prin specificarea indexului său, de exemplu:

Writeln (V1); (afișarea primului element al matricei V1) readln (M2); (intrarea celui de-al treilea element al celui de-al doilea rând al matricei M2)
Aceasta completează lecția despre tipurile de date, textul a fost aproape complet copiat și lipit (linkul va fi mai jos), deoarece Nu văd niciun motiv să spun acest material cu propriile mele cuvinte. Dacă diferența dintre tipurile de date este chiar puțin clară, atunci acest lucru este deja bun.

Bazele programării
Fiecare profesionist a fost cândva un ceainic. Cu siguranță ești familiarizat cu starea când „nu știi cum să începi să gândești pentru a veni cu asta”. Probabil că ai întâlnit o situație în care pur și simplu nu știi de unde să începi. Această carte se adresează doar acelor oameni care ar dori să devină programator, dar nu știu deloc cum să înceapă această cale. ...

Aproape toate tipurile de date întregi sunt. Aceste tipuri de date reprezintă numere întregi dintr-un interval specific. Numele exacte ale tipurilor întregi și ale intervalelor de valori depind de limbajul de programare specific, de compilator și de modul de compilare. Aflați mai multe despre acest lucru în documentația compilatorului.

De exemplu, tipul de date Întregîn Delphi are un interval de -2147483648 ... 2147483647, în timp ce în Turbo Pascal tipul de date este Întreg reprezintă numere din intervalul -35768 ... 32767. În Free Pascal, o gamă de valori precum Întreg este determinat de modul selectat.

Deoarece Lazarus folosește compilatorul Free Pascal, ceea ce s-a spus despre tipurile de date în legătură cu Free Pascal este valabil și pentru Lazarus.

Deci, tipurile de date întregi Free Pascal sunt listate în tabelul 13.1.

Tabelul 13.1. Tipuri de date întregi gratuite Pascal (Lazarus).

Tip de Dimensiune, octeți Gama de valori
octet 1 0…255
Shortint 1 -128…127
Smallint 2 -35768…32767
Cuvânt 2 0…65535
Întreg 2 sau 4 Depinde de modul de compilare
Cardinal 4 0…4294967295
Longint 4 -2147483648…2147483647
Cuvânt lung 4 0...4294967295
Int64 8 -9223372036854775808...9223372036854775807
QWord 8 0...18446744073709551615

NOTĂ
În Free Pascal, tipuri Int64și QWord nu sunt! Aceasta înseamnă că nu le puteți utiliza, de exemplu, pentru variabilele de index în bucle. Totuși, le-am adus aici, ca să nu le descriu separat pe viitor și să adun într-un singur loc toate tipurile întregi de Free Pascal. Dacă nu înțelegeți unele dintre cuvinte, nu vă alarmați. În timp util, vă voi spune despre totul mai detaliat.

Și acum câteva explicații pentru tabel.

Într-o coloană TIP DE sunt dați identificatori ai tipurilor de date (cuvinte cheie care indică compilatorului din ce tip aparțin acestea sau acele date). Veți învăța cum să utilizați acești identificatori în lecțiile următoare.

Într-o coloană MARIMEA este indicată dimensiunea pe care tipul de date o ocupă în memoria computerului. De exemplu, un număr întreg pozitiv poate fi reprezentat prin diferite tipuri: octet, Cuvânt, Cardinal etc. Cu toate acestea, un număr ca Cardinal va ocupa 4 octeți în memorie, în timp ce un număr ca octet- doar 1 octet. Prin urmare, dacă știți sigur că numărul cu care lucrați nu va lua niciodată o valoare mai mare de 255, atunci este mai bine să-l definiți ca tip octet, deoarece aceasta va economisi spațiu în memoria computerului. Deși totul nu este atât de simplu aici (nuanțele de alocare a memoriei și a altor resurse computerizate depășesc domeniul de aplicare).

Într-o coloană GAMĂ este specificat intervalul de valori pe care operează tipul de date. De exemplu, un număr ca octet poate lua valori de la 0 la 255.

Acum exersează. Să scriem un program care afișează intervalele de valori ale tuturor tipurilor de date întregi. Codul sursă pentru acest program este prezentat mai jos:

Lista 13.1. Un program pentru afișarea intervalelor de numere întregi. program td; ($ mode objfpc) ($ H +) folosește ($ IFDEF UNIX) ($ IFDEF UseCThreads) cthreads, ($ ENDIF) ($ ENDIF) Clase (puteți adăuga unități după aceasta); începe Writeln ("Byte:", Low (Byte), "..", High (Byte)); Writeln ("Scurtare:", Low (Scurt), "..", High (Scurt)); Writeln ("Smallint:", Low (Smallint), "..", High (Smallint)); Writeln („Cuvânt:”, Scăzut (Cuvânt), „..”, Înalt (Cuvânt)); Writeln ("Integer:", Low (Integer), "..", High (Integer)); Writeln ("Cardinal:", Low (Cardinal), "..", High (Cardinal)); Writeln ("Longint:", Low (Longint), "..", High (Longint)); Writeln ("Cuvânt lung:", Low (Cuvânt lung), "..", High (Cuvânt lung)); Writeln ("Int64:", Low (Int64), "..", High (Int64)); Writeln ("QWord:", Low (QWord), "..", High (QWord)); Readln; Sfârșit.

Funcție standard Scăzut definește valoarea minimă a tipului de date. Funckia Înalt definește valoarea maximă. Cu functii ScrieLnși ReadLn esti deja putin cunoscut. Despre subrutine (proceduri și funcții) vom vorbi mai detaliat în secțiunea corespunzătoare.

În cele din urmă, vă voi spune cum sunt scrise datele întregi într-un program. Și la fel ca peste tot - doar scrieți numărul, fără ghilimele și orice caractere suplimentare. De exemplu, așa

10
178
35278

Adevărat, acest lucru se aplică numerelor din sistemul de notație zecimală. Probabil știi deja că există și alte sisteme. Cele mai utilizate sunt sistemele de numere binar, zecimal și hexazecimal.

Free Pascal acceptă patru formate de notații întregi:

  1. Notație zecimală... Doar un număr ca 10.
  2. Notație hexazecimală... Un număr prefixat cu $. De exemplu, hexazecimalul $ 10 este egal cu zecimalul 16.
  3. Notație octală... Un număr prefixat cu &. De exemplu, octal și 10 este egal cu zecimalul 8.
  4. Notație binară... Un număr prefixat cu%. De exemplu, numărul binar% 10 este egal cu zecimala 2.

Teme pentru acasă:

Creați un program care afișează intervale de valori întregi (Listarea 13.1). Compilați programul și rulați-l. Asigurați-vă că aceste valori se potrivesc cu cele prezentate în tabelul 13.1.

În codul sursă al programului, găsiți linia care setează modul de compilare:

($ mod objfpc) ($ H +)

În această linie, în loc de cuvânt objfpc scrie un cuvânt tp... Adică, linia rezultată ar trebui să arate astfel:

($ mod tp) ($ H +)

Rulați programul. Uită-te la gama de valori cum ar fi Întreg... A trage concluzii.

Învață să gândești ca un programator, adică logic. Nimeni nu va mesteca totul până nu te pensionezi, așa cum fac eu acum. Trebuie să te obișnuiești să gândești singur. În caz contrar, vei aluneca în „principiul maimuță al învățării”, iar atunci șansele tale de a deveni un mare programator se vor apropia de zero. Pentru a vă ajuta să nu alunecați în nivelul „înghesuirii”, voi lăsa periodic lacune în antrenamentul dvs., astfel încât să încercați să vă dați seama de unele lucruri.

Este mult mai bine dacă te gândești la decizie gresita, tu însuți vei găsi eroarea și o vei remedia singur, decât vei folosi întotdeauna soluțiile corecte ale altora și le vei copia prost.

3.2. Tipuri simple de date în Turbo Pascal 7

Un tip simplu definește un set ordonat de valori ale parametrilor. Turbo Pascal are următoarele grupuri de tipuri simple:

  • tipuri de numere întregi;
  • tip boolean;
  • tip de caracter;
  • tip enumerat;
  • tipul intervalului;
  • tipuri reale.

Toate tipurile simple, cu excepția celor reale, sunt numite tipuri ordinale. Pentru valorile tipurilor ordinale, sunt definite proceduri și funcții standard: Dec, Inc, Ord, Pred, Succ (a se vedea clauza 13.1).

3.2.1. Tipuri întregi

Spre deosebire de Pascal, unde este definit un singur tip întreg, Turbo Pascal are cinci tipuri de întregi standard: Shortint, Integer, Longint, Byte, Word. Caracteristicile acestor tipuri sunt prezentate în tabel. 2.

Tabelul 2. Tipuri de date întregi

Tip de Gamă Format Dimensiunea în octeți
Shortint -128 .. 127 Simbolic 1
Întreg -32768 .. 32767 Simbolic 2
Longint -2147483648 .. 2147483647 Simbolic 4
octet 0 .. 255 Nesemnat 1
Cuvânt 0 .. 65535 Nesemnat 2

3.2.2. tip boolean

Tipul boolean standard (dimensiune - 1 octet) este un tip de date, din care orice element poate avea doar două valori: True și False. În acest caz, sunt adevărate următoarele condiții:
Ord fals (fals) = 0
Ord (Adevărat) = 1
Succ (Fals) = Adevărat
Pred (Adevărat) = Fals

Turbo Pascal 7.0 adaugă încă trei boolean ByteBool (dimensiune de 1 octet), WordBool (dimensiune de 2 octeți) și LongBool (dimensiune de 4 octeți). Au fost introduse pentru unificarea cu alte limbaje de programare și cu mediul Windows. Ele diferă de tipul boolean standard prin valoarea reală a parametrului de acest tip, care corespunde valorii True. Pentru toate tipurile booleene, valoarea False corespunde numărului 0, scris în numărul corespunzător de octeți. Valoarea True pentru tipul boolean corespunde numărului 1, scris în octetul său, iar pentru alte tipuri, valoarea True corespunde oricărui număr, altul decât zero (deși funcția Ord în acest caz dă valoarea 1).

3.2.3. Tip de caracter

Tipul de caracter standard Char definește un set complet de caractere ASCII. Funcția Ord dintr-o valoare de tip Char oferă codul simbolului corespunzător. Valorile tipului simbolic sunt comparate prin codurile lor.

3.2.4. Tip enumerat

Un tip enumerat nu este standard și este definit printr-un set de identificatori cu care valorile parametrilor se pot potrivi. Lista de identificatori este indicată în paranteze, identificatorii sunt despărțiți prin virgule:

tip
= ();)

Este important în ce ordine sunt listați identificatorii la definirea unui tip, deoarece primului identificator i se atribuie un număr de secvență de 0, al doilea - 1 și așa mai departe. Același identificator poate fi utilizat în definirea unui singur tip enumerat. . Funcția Ord oferă numărul ordinal al valorii sale dintr-o valoare enumerată.

Exemplu. Tip enumerat.

tip Operat = (Plus, Minus, Mult, Divide);

Tipul boolean este un caz special de tip enumerat:

tip Boolean = (Fals, True);

3.2.5. Tipul intervalului

În orice tip ordinal, puteți selecta un subset de valori determinat de valoarea minimă și maximă, care include toate valorile tipului original care se află în aceste limite, inclusiv limitele în sine. Un astfel de subset definește un tip de interval. Tipul intervalului este specificat prin specificarea valorilor minime și maxime, separate prin două puncte:

tip =. ... ;

Valoarea minimă la definirea acestui tip nu trebuie să fie mai mare decât cea maximă.

Exemplu. Definiția range types.

tip
Duzină = 1..12; (numerele de la 1 la 12)
AddSub = Plus..Minus; (operatii de adunare si scadere)

3.2.6. Tipuri reale

Spre deosebire de standardul limbajului Pascal, unde este definit un singur tip real, Turbo Pascal are cinci tipuri reale standard: Real, Single, Double, Extended, Comp. Pentru caracteristicile acestor tipuri, vezi tabelul. 3. Tabelul 3. Tipuri de date reale

Tip de Gamă Cifre semnificative Dimensiunea în octeți
Real 2.9*10-39..1.7*1038 11-12 6
Singur 1.5*10-45..3.4*1038 7-8 4
Dubla 5.0*10-324.-1.7*10308 15-16 8
Extins 3.4*10-4932..1.1*104932 19-20 10
Comp -263+1..263-1 19-20 8

Tipul Comp este de fapt un tip întreg cu gamă extinsă, dar nu este considerat ordinal.

Tipurile Single, Double, Extended și Comp pot fi utilizate în programe numai dacă există un coprocesor aritmetic sau dacă emulatorul coprocesorului este activat (vezi secțiunile 17.5.8 și 17.7.1).

Imparte asta