Pascal var tipuri. Tipuri de date întregi

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 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, în memoria computerului va fi creată o variabilă de 4 octeți. Î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 extins 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. Conversia 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.

Datele sunt un concept general pentru tot ceea ce funcționează un computer. Orice tip de date definește setul de valori pe care le poate lua o anumită variabilă și operațiunile care le pot fi aplicate. Fiecare variabilă întâlnită într-un program trebuie să fie asociată cu un singur tip.

Există două tipuri de tipuri simple în Pascal: tipuri ordinale și tipuri reale. Un tip ordinal este fie definit de programator (tip de enumerare sau tip de interval) fie este notat prin numele unuia dintre cele trei tipuri ordinale predefinite: Boolean, Integer sau Char. Un tip real este notat cu numele de tip prescriptiv Real.

Un tip enumerat este caracterizat de un set de valori diferite incluse în el, printre care este definită o ordine liniară. Valorile însele sunt desemnate în definiția acestui tip prin nume.

Un tip de interval (limitat) este specificat folosind valori minime și maxime legate de un tip ordinal descris anterior. Acesta este modul în care se generează un nou tip ordinal.

Tipuri de date ordinale

Un tip de date ordinal descrie un set finit și ordonat de valori. Aceste valori sunt mapate la succesiunea de numere ordinale 0,1,2,...; se face o excepție numai pentru numerele întregi ordinale, care se mapează pe ele însele. Fiecare tip ordinal are o valoare minimă și maximă. Pentru toate valorile, cu excepția minimului, există o valoare anterioară, iar pentru toate valorile, cu excepția maximului, există o valoare ulterioară.

Funcțiile prescrise succ, pred, ord acceptă argumente de oricare dintre tipurile ordinale:
succ(X) - dă următoarea valoare ordinală după X
pred(X) - dă valoarea ordinală care precede X
ord(X) - dă numărul ordinal pentru X

Pentru toate tipurile ordinale, există operatori relaționali = , = și > , presupunând că ambii operanzi sunt de același tip.

tip boolean

O valoare booleană este una dintre cele două valori de adevăr, notate prin numele predefinite false și true .

Există următorii operatori logici care produc o valoare logică atunci când se aplică operanzilor logici:
și - ȘI logic
sau - SAU logic
nu - NU logic

De asemenea, oricare dintre operațiile relaționale (= , = , > , in) produce un rezultat logic.

În plus, tipul boolean este definit astfel încât false

Există, de asemenea, funcții logice predefinite (adică funcții care dau un rezultat logic):
odd(F) - adevărat dacă întregul este F-impar și rezultatul este fals dacă F-par
eoln(F) - verificare la sfârșitul liniei
eof(F) - verificare la sfârșitul fișierului

Tipul întreg

Tipul întreg include o varietate de numere întregi.

Când lucrați cu operanzi întregi, următoarele operații aritmetice produc valori întregi:
* - înmulțire
div - parte întreagă din diviziune
mod - restul diviziunii
+ - adaos
- - scădere

Pascal are, de asemenea, o constantă predefinită numită MaxInt, care conține valoarea maximă a unui număr întreg și este egală cu 32767

Întregul rezultat este, de asemenea, obținut prin patru funcții importante prescrise:
abs(I) - valoarea absolută a valorii întregi I
sgr(I) - valoarea întreagă a lui I pătrat dat fiind că I trunc(R) - oferă partea întreagă a numărului real R
round(R) - returnează un număr întreg rotunjit. În acest caz: pentru R>0 înseamnă trunchi (R+0,5), iar pentru R

Dacă I ​​este o valoare întreagă, atunci:
succ(I) - dă următoarea valoare întreagă (I+1)
pred(I) - oferă valoarea întreagă anterioară (I-1)

Tip de caracter (Char)

Valorile Char sunt elementele unui set finit și ordonat de caractere. Valorile de acest tip sunt reprezentate de un singur caracter cuprins între ghilimele simple (apostrofe). Dacă este nevoie de apostroful în sine, se scrie de două ori.
Exemple: "*" "G" "3" """" "X"

    Pentru tipul Char, se aplică următoarele ipoteze minime:
  1. Cifrele zecimale de la 0 la 9 sunt ordonate în funcție de valorile lor numerice și se succed reciproc (de exemplu, succ("5") = "6").
  2. Pot exista litere mari de la „A” la „Z”; dacă da, atunci acestea sunt ordonate alfabetic, dar nu se succed neapărat (de exemplu, „A”
  3. Pot exista litere mici de la „a” la „z”; dacă da, atunci ele sunt ordonate alfabetic, dar nu se succed neapărat (de exemplu, „a”

Pentru a mapa un anumit set de caractere la numere de serie și înapoi, există două funcții predefinite:
ord(C) - dă numărul ordinal al caracterului C din setul ordonat de caractere menționat
chr(I) - dă caracterul cu numărul de ordine I

Pentru argumentele de tip Char, funcțiile predefinite pred și succ pot fi definite după cum urmează:
pred(C) = chr(ord(C)-I)
succ(C) = chr(ord(C)+I)

Comentariu. Simbolul precedent sau următor depinde de setul specificat de simboluri, deci ambele relații sunt valabile numai dacă există simbolul precedent sau următor.

Tip real

Valorile de tip real sunt elementele unui subset de numere reale definite de implementare.

Toate operațiunile pe cantități de tip real sunt aproximative, acuratețea lor este determinată de implementarea (mașina) cu care aveți de-a face. Tipul real este un tip simplu, nu este un tip ordinal. Valorile reale nu au un număr ordinal și pentru oricare dintre ele nu există o valoare anterioară sau următoare.

Dacă cel puțin unul dintre operanzi este de tip real (celălalt poate fi un număr întreg), următoarele operații dau un rezultat real:
* - înmulțire
/ - diviziune (ambele operanzi pot fi numere întregi, dar rezultatul este întotdeauna real)
+ - adaos
- - scădere

Există funcții prescrise care dau un rezultat real având în vedere un argument real:
abs(R) - valoarea absolută a lui R
sqr(R) - R pătrat dacă rezultatul este în intervalul numerelor reale

Și aceste funcții prescrise dau un rezultat real cu un număr întreg sau un argument real:
sin(X) - dă sinusul lui X; X este exprimat în radiani
cos(X) - dă cosinusul lui X; X este exprimat în radiani
arctan(X) - dă arctangenta lui X exprimată în radiani
ln(X) - dă valoarea logaritmului natural (baza e) pentru X, X>0
exp(X) - dă valoarea funcției exponențiale (adică puterii lui X)
sqrt(X) - dă valoarea rădăcinii pătrate a lui X, X>=0

Avertizare. Funcțiile pred, succ nu pot fi folosite pentru argumente reale Nu puteți folosi valori de tip real la indexarea tablourilor, pentru controlul într-o buclă cu un parametru, pentru determinarea tipului de bază al seturilor, pentru indexarea într-un operator de variantă.

Orice date - constante, variabile, valori ale funcției - sunt caracterizate în Pascal printr-un tip de date.

Să definim conceptul tip de date. După cum se știe deja, toate obiectele programului (variabile, constante etc.) trebuie descrise.

Descrierile informează traducătorul, în primul rând, despre existența variabilelor și a altor obiecte utilizate, iar în al doilea rând, indică proprietățile acestor obiecte. De exemplu, o descriere a unei variabile a cărei valoare este un număr indică proprietățile numerelor. În mod formal, numerele pot fi întregi și reale (fracționale). În Pascal, ca și în alte limbaje de programare, numerele sunt împărțite în două tipuri: întreg(cuvânt întreg rezervat) și real(cuvânt rezervat real).

Separarea numerelor întregi într-un tip separat se explică prin faptul că într-un computer, numerele întregi și reale sunt reprezentate diferit: un număr întreg poate fi reprezentat cu absolut exactitate, dar un număr real are inevitabil o eroare finită, care este determinată de proprietăți. al traducătorului.

De exemplu, să fie variabila x de tip real și valoarea ei egală cu unu: x=1 . Valoarea corespunzătoare din memoria computerului poate fi 0,999999999, 1,000000001 sau 1,000000000. Dar dacă variabila x este declarată ca o variabilă de tip întreg, atunci unitatea din computer va fi reprezentată cu absolut precizie, iar variabila x nu va putea lua valori reale (fracționale) - la urma urmei, a fost descrisă ca o variabilă de tip întreg.

Deci tipul de date definește:

  • Reprezentare internă a datelor în memoria computerului;
  • setul de valori pe care cantitățile de acest tip le pot lua;
  • operațiuni care pot fi efectuate pe valori de acest tip.

Introducerea tipurilor de date este unul dintre conceptele de bază ale limbajului Pascal și anume că atunci când se efectuează o operație de atribuire a unei variabile la valoarea unei expresii, variabila și expresia trebuie să fie de același tip. Această verificare este efectuată de compilator, ceea ce simplifică foarte mult căutarea erorilor și duce la creșterea fiabilității programului.

Multe tipuri de date ale limbajului Turbo Pascal pot fi împărțite în două grupuri:

  • tipuri standard (predefinite). ;
  • tipuri definite de utilizator (tipuri definite de utilizator) .

Tipurile standard Turbo Pascal includ:

  • tipul întreg – număr întreg;
  • tip real – real;
  • tip de caracter – char;
  • tip boolean – boolean;
  • tip șir – șir ;
  • tip pointer – pointer;
  • tip text – text .

Tipurile de date personalizate sunt diferite combinații de tipuri standard.

Tipurile personalizate includ:

  • tip enumerat;
  • tip de interval;
  • tip de indicator;
  • tipuri structurate;
  • tip procedural.

Comentariu. Este posibilă o altă clasificare a tipurilor de date, în funcție de care tipurile sunt împărțite în simple și complexe.

Tipurile simple includ: tipul întreg, tipul real, tipul caracterului, tipul logic, tipul enumerat și tipul intervalului.

Un tip complex reprezintă diverse combinații de tipuri simple (matrice, înregistrări, seturi, fișiere etc.)

Tipuri standard

Tipul de date standard este definit chiar de limbajul Pascal. Când folosiți tipuri standard într-un program, este suficient să indicați subsecțiunile tipurilor necesare (const, var) și apoi să descrieți constantele și variabilele utilizate în program. Nu este nevoie să folosiți subsecțiunea Tip.

De exemplu, dacă programul folosește numai variabile:

i,j – întreg (întregi);

x,y - real (real);

t,s - caracter (caracter);

a,b – boolean (logic),

atunci este nevoie doar de o subsecțiune de variabile - Var. Prin urmare, în partea descriptivă a programului, declarațiile de variabile sunt scrise după cum urmează:

Tipuri întregi

Datele de acest tip pot accepta doar valori întregi. Într-un computer, valorile de tip întreg sunt reprezentate cu absolut exactitate. Dacă variabila este negativă, atunci trebuie să fie precedată de semnul „–” dacă variabila este pozitivă, atunci semnul „+” poate fi omis. Acest tip este necesar în cazul în care o anumită cantitate nu poate fi reprezentată aproximativ ca număr real. De exemplu, numărul de oameni, animale etc.

Exemple de scriere a valorilor întregi: 17, 0, 44789, -4, -127.

Gama de variație a datelor unui tip întreg este determinată de cinci tipuri standard de numere întregi și este prezentată în tabel:

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

Ultimele două tipuri reprezintă doar numere pozitive, iar primele trei reprezintă atât numere pozitive, cât și negative.

În textul programului sau la introducerea datelor de tip întreg, valorile sunt scrise fără virgulă zecimală . Valori reale ale variabilelor nu trebuie să depășească valorile admise tipul (Shortint, Integer, Longint, Byte, Word) care a fost folosit pentru a descrie variabila. Posibilele excese în timpul calculelor nu sunt controlate în niciun fel, ceea ce va duce la funcționarea incorectă a programului.

Un exemplu de utilizare a unei variabile întregi

Var a:intger; b:cuvânt; c:octet; Începe a:=300; (a este setat la 300) b:=300; (b stabilit la 300) c:=200; (c este setat la 200) a:=b+c; (a este setat la 500) c:=b; (Eroare! Variabila c poate lua doar valori de 255. Aici variabila c este setată la 500, ceea ce va cauza depășirea rezultatului.) Sfârșit.

Tipuri reale

Valorile tipurilor reale sunt reprezentate aproximativ într-un computer. Gama de variație a datelor de tip real este determinată de cinci tipuri standard: real (Real), precizie simplă (Single), precizie dublă (Dublu), precizie extinsă (Extended), complex (Comp) și este prezentat în tabel:

Tip Gamă Numărul de cifre semnificative Dimensiunea în octeți
Real 2.9E-39...1.7E+38 11-12 6
Singur 1.5E-45...3.4E+38 >7-8 4
Dubla 5E-324...1.7E+308 15-16 8
Extins 3.4E-4951...1.1E+4932 19-20 10
Comp -2E+63+1...+2E+63-1 19-20 8

Numerele reale pot fi reprezentate în două formate: virgulă fixă ​​și virgulă mobilă.

Formatul pentru scrierea unui număr cu virgulă fixă ​​este același cu notația matematică obișnuită pentru un număr zecimal cu o parte fracțională. Partea fracțională este separată de întreaga parte folosind un punct, de exemplu

34.5, -4.0, 77.001, 100.56

Formatul de notație în virgulă mobilă este utilizat atunci când scrieți numere foarte mari sau foarte mici. În acest format, numărul dinaintea „E” este înmulțit cu numărul 10 la puterea de după „E”.

1E-4 1*10-4
3,4574E+3 3.4574*10+3
4,51E+1 4.51*10+1

Exemple de numere în virgulă mobilă:

Număr Înregistrare în Pascal
0,0001 1E-4
3457,4 34574E-1
45,1 451E-1
40000 4E+4
124 0,124E+3
124 1,24E+2
124 12,4E+1
124 1240E-1
124 12400E-2

Tabelul de la 5 la 9 linii arată o înregistrare a aceluiași număr 124. Prin schimbarea poziției punctului zecimal în mantisă (punctul „plutește”, de unde și denumirea „înregistrarea unui număr în virgulă mobilă”) și în același timp modificând valoarea comenzii, puteți selecta cele mai potrivite numere de înregistrare.

Un exemplu de descriere a variabilelor de tip real.

Tip de caracter

Valorile caracterelor sunt caractere care pot fi tastate pe tastatura computerului. Acest lucru vă permite să prezentați text în program și să efectuați diferite operații asupra acestuia: inserați, ștergeți litere și cuvinte individuale, formatare etc.

Un tip de caracter este desemnat de cuvântul rezervat Char și este conceput pentru a stoca un singur caracter. Datele de caractere ocupă un octet în memorie.

Formatul declarației variabilelor simbolice:

<имя переменной>: Char;

La definirea valorii unei variabile caracter, caracterul este scris cu apostrofe. În plus, puteți specifica caracterul necesar specificând direct valoarea codului său numeric ASCII. În acest caz, trebuie să precedați numărul care indică codul ASCII al caracterului solicitat cu semnul #.

Un exemplu de utilizare a variabilelor tip caracter:

Var c:char; (c este o variabilă de tip caracter) Begin c:=’A’; (variabilei c i se atribuie caracterul 'A') c:=#65; (variabilei c i se atribuie și caracterul A. Codul său ASCII este 65) c:=’5’; (variabilei c i se atribuie simbolul 5, Sfârșit. Aici 5 nu mai este un număr)

tip boolean

Tipul de date logic se numește Boolean după matematicianul englez George Boole, creatorul domeniului matematicii - logica matematică.

Format pentru declararea unei variabile de tip boolean:

<имя переменной>: boolean;

Datele de acest tip pot lua doar două valori:

  • Adevărat - adevăr;
  • Falsul este o minciună.

Datele logice sunt utilizate pe scară largă în verificarea validității anumitor condiții și în compararea cantităților. Rezultatul poate fi adevărat sau fals.

Pentru a compara datele, sunt furnizate următoarele operații relaționale:

Un exemplu de utilizare a operațiilor relaționale:

relația 5>3, rezultat adevărat;

relația 5=3, rezultat fals.

Un exemplu de utilizare a variabilelor de tip boolean.

Var a,b:boolean; (a,b sunt variabile de tip logic) Begin a:=True; (variabila a este setată la adevărat) b:=fals; (variabila b este setată la fals) End.

constante

Numerele întregi, numerele reale, caracterele, șirurile de caractere și constantele logice pot fi folosite ca constante.

O constantă trebuie declarată în partea sa descriptivă folosind cuvântul rezervat const.

Format de declarație constantă

Const<имя константы>= <значение>;

Dacă un program folosește mai multe constante, este permis un singur cuvânt cheie Const, iar descrierea fiecărei constante se termină cu punct și virgulă. Un bloc constant se termină cu declararea unei alte secțiuni sau declararea unui bloc de instrucțiuni executabile.

Const (declarație secțiune constantă) an=2003; (constanta de tip intreg, deoarece nu exista virgula zecimala in inregistrare) time=14,05; (constantă de tip real) N=24; (constanta de tip intreg, deoarece nu exista virgula zecimala in notatie) P=3,14; (constantă de tip real) A=adevărat; (constantă booleană) str1=’7’; (constantă tip caracter) str2=’A’; (constantă tip caracter) str3=’Turbo’; (constantă de tip șir) Var (declarație secțiune variabilă) X,y:întreg; (variabile de tip întreg)

Tipuri personalizate

Din setul de tipuri de utilizatori, vom lua în considerare numai

  • tip enumerat;
  • tip de interval.

Vom avea nevoie de aceste două tipuri atunci când studiem tablourile.

Tip enumerare

Un tip de date enumerate descrie noi tipuri de date ale căror valori sunt definite de programator. Un tip enumerat este specificat printr-o enumerare a valorilor pe care le poate primi. Fiecare valoare este denumită printr-un identificator și este situată într-o listă înconjurată de paranteze. Un tip enumerat este un tip de date definit de utilizator, astfel încât declarația sa de tip începe cu cuvântul rezervat TYPE.

Format de tip enumerare:

<имя типа>= (constant1, constant2,..., constantN);

Unde
constant1 , constant2 ,..., constantN – un set ordonat de valori identificatoare tratate ca constante.

Un exemplu de descriere a tipului enumerat:

Tip minge=(unu, doi, trei, patru, cinci); var t:ball;

Aici bila este numele tipului enumerat; unu, doi, trei, patru, cinci – constante; t este o variabilă care poate lua orice valoare constantă.

Într-un tip enumerat, o constantă este un identificator, deci nu este citată și nu poate fi un număr. Astfel, într-un tip enumerat, o constantă este un tip special de constantă care nu poate fi:

  • constante de tip numeric: 1, 2, 3, 4 etc.;
  • constante de tip de caracter: „a”, „s”, „1”, „3”, etc.;
  • constante de tip șir: „primul”, „al doilea”, etc.

În plus, operațiile aritmetice și procedurile standard de intrare și ieșire Citire și Scriere nu sunt aplicabile valorilor de acest tip.

Un exemplu de utilizare a variabilelor enumerate:

Tip zile = (luni, marți, miercuri, joi, vineri, sâmbătă, duminică); Var zi: zile; begin if day = Sunday then writeln(‘Astăzi este duminică!’); Sfârşit.

Elementele incluse în definiția unui tip enumerat sunt considerate a fi ordonate în ordinea în care sunt enumerate. Numerotarea începe de la zero. Prin urmare, în exemplul dat, zilele săptămânii au următoarele numere de serie

Pentru a determina în mod programatic numărul ordinal, este utilizată funcția Ord().

În exemplul nostru, numerele de ordine sunt egale:

Ord(luni) = 0;

Ord(sâmbătă) = 5;

Ord (duminică) = 6.

Tip de interval

Dacă o variabilă nu acceptă toate valorile tipului său, ci doar valorile conținute într-un anumit interval, atunci acest tip de date se numește tip de interval. Tipul interval este adesea numit tip limitat și tip interval. Un tip de interval este definit de limitele valorilor sale:

<минимальное значение>..<максимальное значение>

  • două caractere „..” sunt tratate ca un singur caracter, deci nu sunt permise spații între ele;
  • marginea din stânga a intervalului nu trebuie să depășească marginea din dreapta.

Tipul de interval este un tip de date definit de utilizator, astfel încât declarația sa de tip începe cu cuvântul funcție TYPE.

Un exemplu de descriere a tipului de interval:

Tip cifră = 1..10; luna = 1..31; lat = 'A'..'Z';

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 cu semn sunt un tip întreg care include atât numere pozitive, cât și numere negative, numerele fără semn sunt doar numere 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ă și două tipuri de numere întregi sinonime de 4 octeți - longword și cardinal , deci folosiți unul sau 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 din al doilea tabel situat. î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 tu. 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ă știți și să vă amintiți 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.

Tipuri de date în limbajul Pascal: clasificare și descrieri. Tipuri de date aritmetice și ordinale, acțiuni cu acestea. Expresii aritmetice: funcții, operații și ordinea acțiunilor. Compatibilitatea tipului de date și conversiile.

Compilatoarele Pascal necesită ca informațiile despre cantitatea de memorie necesară pentru a rula un program să fie furnizate înainte de a rula. Pentru a face acest lucru, în secțiunea descriere a variabilei ( var) trebuie să enumerați toate variabilele utilizate în program. În plus, trebuie să spuneți compilatorului câtă memorie va ocupa fiecare dintre aceste variabile. De asemenea, ar fi bine să se convină în prealabil asupra diferitelor operațiuni aplicabile anumitor variabile...

Toate acestea pot fi comunicate programului prin simpla indicare a tipului viitoarei variabile. Având informații despre tipul unei variabile, compilatorul „înțelege” câți octeți trebuie alocați pentru aceasta, ce acțiuni pot fi efectuate cu ea și la ce construcții poate participa.

Pentru comoditatea programatorilor, Pascal are multe tipuri de date standard, plus capacitatea de a crea noi tipuri.

Când construim noi tipuri de date pe baza celor existente (standard sau definite din nou de programator însuși), trebuie să ne amintim că orice clădire trebuie construită pe o fundație bună. Prin urmare, acum vom vorbi despre această „fundație”.

Bazat pe tipuri de date de bază sunt construite toate celelalte tipuri de limbaj Pascal, care se numesc: construit.

Împărțirea în tipuri de date de bază și construite în Pascal este prezentată în tabel:

Tipurile de date construite de programator sunt descrise în secțiune tip conform următorului model:

tip<имя_типа> = <описание_типа>;

De exemplu:

tip Lat_Bukvy = "a" .. "z", "A" .. "Z";

Tipurile de date de bază sunt standard, deci nu este nevoie să le descrieți în secțiune tip. Cu toate acestea, dacă se dorește, acest lucru se poate face, de exemplu, oferind definiții lungi nume scurte. Să spunem prin introducerea unui nou tip de date

tip Int = Integer;

Puteți scurta puțin textul programului.

De asemenea, tipurile construite standard nu trebuie descrise în secțiune tip. Cu toate acestea, în unele cazuri, acest lucru încă trebuie făcut din cauza cerințelor de sintaxă. De exemplu, în lista de parametri proceduri sau funcții Constructorii de tip nu pot fi utilizați (vezi prelegerea 8).

Tipuri de date ordinale

Dintre tipurile de date de bază, cele mai notabile sunt tipuri ordinale. Acest nume poate fi justificat în două moduri:

Rutine standard care procesează tipuri de date ordinale

Doar pentru cantități tipuri ordinale Sunt definite următoarele funcții și proceduri:

  1. Funcţie Ord(x) returnează numărul ordinal al valorii variabilei x (față de tipul căruia îi aparține variabila x).
  2. Funcţie Pred(x) returnează valoarea care precede x (nu se aplică primului element al tipului).
  3. Funcţie Succ(x) returnează valoarea după x (nu se aplică ultimului element al tipului).
  4. Procedură Inc(x) returnează valoarea după x (pentru tipuri de date aritmetice aceasta este echivalentă cu operatorul x:= x + 1).
  5. Procedură Inc(x, k) returnează a k-a valoare după x (pentru tipuri de date aritmetice aceasta este echivalentă cu operatorul x:= x + k).
  6. Procedură Dec(x) returnează valoarea care precede x (pentru tipuri de date aritmetice aceasta este echivalentă cu operatorul x:= x - 1).
  7. Procedură Dec(x, k) returnează valoarea k–e care precede x (pentru tipuri de date aritmetice aceasta este echivalentă cu operatorul x:= x - k).

La prima vedere, pare ca rezultatul aplicării procedurii Inc(x) coincide complet cu rezultatul aplicării funcției Succ(x). Cu toate acestea, diferența dintre ele apare la limitele intervalului permis. Funcţie Succ(x) nu este aplicabil elementului maxim al unui tip, dar aici este procedura Inc(x) nu va produce nicio eroare, dar, acționând conform regulilor de adăugare a mașinii, va adăuga următoarea unitate la numărul elementului. Numărul, desigur, va depăși intervalul și, din cauza trunchierii, se va transforma în numărul valorii minime a intervalului. Se pare că procedurile Inc() Şi Dec() ei percep orice tip ordinal ca fiind „închis într-un inel”: imediat după ultimul, vine din nou prima valoare.

Să explicăm tot ce s-a spus cu un exemplu. Pentru tipul de date

tip Sixteen = 0 .. 15 ;

încercarea de a adăuga 1 la numărul 15 va avea ca rezultat următorul rezultat:

1 1 1 1 1 1 0 0 0 0

Unitatea inițială va fi întreruptă și, prin urmare, se dovedește că Inc(15)=0 .

O situație similară la limita inferioară a intervalului permis al unui tip de date ordinal arbitrar este observată pentru procedură Dec(x) si functii Pred(x):

Tipuri de date legate de ordinal

Să descriem acum tipuri de date ordinale mai detaliat.

  1. tip boolean boolean are două valori: Fals și True, iar pentru ele sunt valabile următoarele egalități:
  2. La tipul de caractere Char include 256 de caractere tabelul ASCII extins(de exemplu, „a”, „b”, „i”, „7”, „#”). Numărul caracterului returnat de funcție Ord() , se potrivește cu numărul acestui simbol în Tabelul ASCII.
  3. Tipuri de date întregi Să o punem într-un tabel:
  4. Listabil tipurile de date sunt specificate în secțiune tip prin enumerarea explicită a elementelor acestora. De exemplu:

    tip Săptămâna = (sun, lun, tue, wed, thu, fri, sat);

    0 1 2 3 4 5 6

  5. Reamintim că pentru acest tip de date: Tipuri de date de interval

    sunt specificate numai de limitele intervalului lor. De exemplu:
    tip Luna = 1 .. 12 ;

  6. Budni = Lun .. Vin;

    Programatorul își poate crea propriile tipuri de date, care sunt o combinație de mai multe tipuri standard. De exemplu:

tip Valid_For_Identifiers = "a" .. "z" , "A" .. "Z" , "_" , "0" .. "9" ;