Numerele întregi în Pascal. Tipuri de date în Pascal (variabile, constante), tipurile și descrierea acestora

17.10.2019 Efecte foto

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 se caracterizează prin numeroasele valori diferite pe care le conține, 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 sunt aplicați 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 acestea 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 reale 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 nu există o valoare anterioară sau următoare pentru niciuna dintre ele.

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ă.

Lecția acoperă principalele tipuri de date standard în Pascal, conceptul de variabilă și constantă; explică modul de lucru cu operații aritmetice

Pascal este un limbaj de programare tipizat. Aceasta înseamnă că variabilele care stochează date sunt de un anumit tip de date. Aceste. Programul trebuie să indice direct ce date pot fi stocate într-o anumită variabilă: date text, date numerice, dacă sunt numerice, apoi întregi sau fracționale etc. Acest lucru este necesar în primul rând pentru ca computerul să „știe” ce operațiuni pot fi efectuate cu aceste variabile și cum să le efectueze corect.

De exemplu, adăugarea de date text, sau așa cum este numită corect în programare, concatenarea, este îmbinarea obișnuită a șirurilor, în timp ce adăugarea datelor numerice are loc în plus, numerele fracționale și întregi sunt de asemenea adăugate diferit; Același lucru este valabil și pentru alte operațiuni.

Să ne uităm la cele mai comune tipuri de date în Pascal.

Tipuri de date întregi în Pascal

Tip Gamă Memoria necesară (octeți)
octet 0..255 1
scurtătură -128..127 1
întreg -32768.. 32767 2
cuvânt 0..65535 2
longint -2147483648..2147483647 4

Trebuie să rețineți că atunci când scrieți programe în Pascal întreg(tradus din engleză în ansamblu) este cel mai des folosit, deoarece intervalul de valori este cel mai solicitat. Dacă este nevoie de o gamă mai largă, utilizați longint(întreg lung, tradus din engleză ca întreg lung). Tip octetîn Pascal este folosit atunci când nu este nevoie să lucrați cu valori negative, același lucru este valabil și pentru tip cuvânt(doar intervalul de valori aici este mult mai mare).

Exemple de modul în care variabilele sunt descrise (declarate) în Pascal:

programul a1; var x,y:intger; (tip întreg) myname:string; (tip șir) începe x:=1; y:=x+16; numele meu:="Petru"; writeln("nume: ",numele meu, ", vârsta: ", y) sfârșit.

Rezultat:
nume: Peter, vârsta: 17

Comentarii în Pascal

Observați cum comentariile sunt folosite în Pascal. În comentariile exemplu, i.e. textul serviciului care este „nu este vizibil” pentru compilator este inclus între acolade. De obicei, comentariile sunt făcute de programatori pentru a explica bucăți de cod.

Sarcina 3. Populația Moscovei este de a = 9.000.000 de locuitori. Populația din New Vasyuki este b=1000 de locuitori. Scrieți un program care să determine diferența dintre numărul de locuitori dintre două orașe. Utilizați variabile

Tipuri de date reale în Pascal

Numerele reale în Pascal și în programare în general sunt numele numerelor fracționale.

Tip Gamă Memoria necesară (octeți)
real 2,9 * 10E-39 .. 1,7 * 10E38 6
singur 1,5 * 10 E-45 .. 3,4 * 10E38 4
dubla 5 * 10E-324 .. 1,7 * 10E308 8
extins 1,9 * 10E-4951 .. 1,1 * 10E4932 10

Tipul real din Pascal este cel mai des folosit tip real.

Au fost prezentate cele de mai sus tipuri de date simple în Pascal, care includ:

  • Ordinal
  • Întreg
  • Logic
  • Caracter
  • Listabil
  • Interval
  • Real

Pentru a afișa valorile variabilelor de tip real, se utilizează de obicei ieșirea formatată:

  • formatul folosește fie un număr, indicând numărul de poziții alocate acestui număr în formă exponențială;
  • p:=1234,6789; Scris (p:6:2); (1234,68)

    Alături de tipurile simple, limbajul mai folosește tipuri de date structurate și indicatori, care va face obiectul unor lecții ulterioare despre Pascal.

    Constante în Pascal

    Adesea într-un program se știe dinainte că o variabilă va lua o anumită valoare și nu o va modifica pe toată durata execuției întregului program. În acest caz, trebuie să utilizați o constantă.

    Declarația unei constante în Pascal are loc înainte de declararea variabilelor (înainte de cuvântul de serviciu var) și arată astfel:

    Un exemplu de descriere constantă în Pascal:

    1 2 3 4 5 6 const x= 17 ;

    var numele meu: șir ;

    începe numele meu: = "Petru" ;

    writeln("nume: ", numele meu, ", vârsta: ", x) final.


    const x=17; var myname:string; începe numele meu:="Petru"; writeln("nume: ",numele meu, ", vârsta: ", x) sfârșit.

    Ieșire „frumoasă” de numere întregi și numere reale

    1. Pentru a ne asigura că după afișarea valorilor variabilelor există indentări, astfel încât valorile să nu se „imbina” între ele, se obișnuiește să se indice prin două puncte câte caractere trebuie furnizate pentru a afișa valoare:
    2. Operații aritmetice în Pascal
    3. Ordinea operațiunilor

    evaluarea expresiilor din paranteze;

    înmulțire, împărțire, div, mod de la stânga la dreapta;

    • adunare si scadere de la stanga la dreapta.
    • Proceduri și funcții aritmetice standard Pascal

      Aici merită să ne oprim mai în detaliu asupra unor operații aritmetice.

      Operația inc în Pascal, increment pronunțat, este o procedură Pascal standard care înseamnă creșterea cu unu.
      Exemplu de operație inc:

    • x:=1; inc(x); (Crește x cu 1, adică x=2) writeln(x)
    • Utilizare mai complexă a procedurii inc:
    • Inc(x,n) unde x este un tip ordinal, n este un tip întreg; procedura inc crește x cu n.

      Procedura Dec în Pascal funcționează similar: Dec(x) - scade x cu 1 (descrește) sau Dec(x,n) - scade x cu n.

    • Operatorul abs reprezintă modulul unui număr. Funcționează astfel:
    • a: =- 9;
    • b:=abs(a);
    • (b=9)

      a:=-9; b:=abs(a); (b=9)

    • Operatorul div în Pascal este adesea folosit, deoarece o serie de sarcini implică operarea întregii diviziuni. Restul de diviziune sau operatorul mod în Pascal este, de asemenea, indispensabil pentru rezolvarea unui număr de probleme.
    • Formula este: exp(ln(a)*n), unde a este un număr, n este un grad (a>0).

      Cu toate acestea, în compilatorul Pascal abc, exponențiarea este mult mai simplă:

      var x:intger; începe x:=9; scrieln(sqrt(x)); (răspunsul 3) sfârşitul.

    Sarcina 4. Dimensiunile unei cutii de chibrituri sunt cunoscute: înălțime - 12,41 cm, lățime - 8 cm, grosime - 5 cm Calculați aria bazei cutiei și volumul acesteia
    (S=latime*grosime, V=zona*inaltime)

    Sarcina 5. Grădina zoologică are trei elefanți și destul de mulți iepuri, numărul de iepuri schimbându-se frecvent. Un elefant ar trebui să mănânce o sută de morcovi pe zi, iar un iepure - doi. În fiecare dimineață, grădina zoologică spune computerului numărul de iepuri. Computerul, ca răspuns la aceasta, trebuie să spună însoțitorului numărul total de morcovi care trebuie hrăniți astăzi iepurilor și elefanților.

    Sarcina 6. Se stie ca x kg de dulciuri costă o ruble Stabilește cât costă y kg din aceste dulciuri și, de asemenea, la câte kilograme de dulciuri pot fi cumpărate k ruble Toate valorile sunt introduse de utilizator.

    Conceptul de tip este unul dintre conceptele fundamentale ale oricărui limbaj de programare. Obiectele (constante, variabile, funcții, expresii) pe care programul operează aparțin unui anumit tip.

    Tip este un set de valori pe care obiectele programului le pot lua și un set de operații permise asupra acestor valori.

    De exemplu, valorile 1 și 2 sunt de tip întreg, pot fi adunate, înmulțite și alte operații aritmetice. Semnificațiile „monitor” și „Pascal” sunt de natură lingvistică, au propriul lor set de operații valide. În cele mai frecvent utilizate limbi, pot fi folosite doar tipuri strict definite, precunoscute. Pascal, împreună cu tipurile standard găsite în alte limbaje de nivel înalt, permite programatorului să-și creeze propriile tipuri.

    Toate tipurile permise în limba Pascal sunt împărțite în două grupuri mari: simplu și complex (structurat).

    Tip Gamă Mantissa, semne Memoria necesară (octeți)
    REAL 2,9*10E-39..1,7*10E38 11-12
    SINGUR 1,5*10E-45..3,4*10E38 7-8
    DUBLA 5.0*10E-324..1.7*10E308 15-16
    EXTINSĂ 1,9*10E-4951..1,1*10E4932 19-20
    COMP -2E+63+1..2E+63-1 10-20

    Utilizarea eficientă a tipurilor SINGLE, DOUBLE, EXTEND, COMP este posibilă numai atunci când directiva ($N+) este activată. În mod implicit, este dezactivat. Pentru a rezolva probleme de inginerie și economice sunt suficiente valori de tip REAL.

    Exemplu

    Var Res, Summa, Itog: real;

    boolean tipul de date este descris de identificatorul BOOLEAN. Variabilele și constantele de acest tip pot lua doar una din două valori: TRUE (adevărat) sau FALSE (fals).

    Exemplu

    Var Sel1, Sel2: boolean;

    A,B,C,D: boolean;

    Expresiile booleene ocupă 1 octet de memorie și sunt folosite în expresii logice și relaționale și pentru a controla ordinea în care sunt executate instrucțiunile programului.

    Literal (caracter) tipul este descris de identificatorul standard CHAR. Constantele și variabilele de acest tip pot lua una dintre valorile tabelului de cod ASCII. Semnificația unei constante sau variabile de acest tip este cuprinsă în apostrofe.

    De exemplu, Var Bukva, Znak, Simbol: char;

    Bukva:=’A’; Znak:=’+’; Simbol:=’!’

    Variabilele tip caracter ocupă 1 octet în memorie. Utilizarea datelor char în expresii aritmetice este interzisă. Operațiunile de comparare pot fi aplicate valorilor literale, rezultatul depinzând de numărul variabilei sau constantei literale din tabelul de coduri.

    Pe lângă tipurile de date standard, Pascal acceptă tipuri scalare, definit de utilizator. Acestea includ enumerabilŞi interval tipuri . Aceste tipuri de date ocupă 1 octet în memorie, astfel încât orice tip de utilizator nu poate conține mai mult de 255 de elemente. Utilizarea lor îmbunătățește semnificativ vizibilitatea programului, facilitează găsirea erorilor și economisește memorie.

    Tip enumerare este specificat direct prin listarea tuturor valorilor pe care le poate lua o variabilă de un anumit tip. Valorile individuale sunt separate prin virgule, iar întreaga listă este inclusă în paranteze.

    Format

    Tip<имя типа>=(<значение1, значение2, ..., значениеN>);

    Var<идентификатор, ...>: < имя типа>;

    Exemplu

    Tip Sezon =(Primăvara, Vara, Toamna, Iarna);

    Var S1, S2: Sezon;

    Toamna: (septembrie, octombrie, noiembrie);

    Acest exemplu arată un tip de date utilizator Season definit în mod explicit. Semnificațiile lor sunt determinate - desemnări ale anotimpurilor. Variabilele S1 și S2 pot lua doar una dintre valorile enumerate. O încercare de a le atribui orice altă valoare va provoca o întrerupere a software-ului. Al treilea tip de enumerare este anonim (nu are nume) și este specificat prin enumerarea valorilor în secțiunea Var. Toamna este o variabilă de acest tip și poate lua valorile Septembrie, Octombrie, Nowember. Astfel, se poate specifica orice tip, dar acest lucru nu este întotdeauna acceptabil. Prima metodă este cu siguranță mai înțeleasă și mai consecventă cu natura limbajului Pascal.

    Tip de interval vă permite să specificați două constante care definesc limitele intervalului de valori pentru o anumită variabilă. Pentru fiecare operație pe o variabilă de interval, compilatorul generează rutine de verificare pentru a determina dacă valoarea variabilei rămâne în intervalul specificat. Ambele constante trebuie să aparțină unuia dintre tipurile standard, altele decât cele reale. Valoarea primei constante trebuie să fie neapărat mai mică decât valoarea celei de-a doua.

    Format

    Tip<имя типа> = <константа1> .. <константа2>;

    Var<идентификатор>: < имя типа>;

    Exemplu

    Tip Zile = 1.. 31;

    Var Work_d, Free_d: Zile;

    În acest exemplu variabilele Work_d, Free_d au tip Zileși poate lua orice valoare din intervalul 1. . 31.

    Ieșirea din interval cauzează o întrerupere software.

    Puteți defini un tip de interval definind limitele intervalului nu după valorile constantelor, ci după numele acestora:

    Const Min = 1; Max = 31;

    Tip Zile = Min .. Max;

    Var Work_d, Free_d: Zile;

    Tipuri structurate Tipurile de date se bazează pe tipuri scalare și pot conține diverse combinații ale acestora. Ele definesc o colecție ordonată de elemente scalare și se caracterizează prin tipul componentelor lor. Limbajul Pascal oferă următoarele tipuri de date structurate:

    linie - o secvență de caractere închise în apostrofe;

    matrice - un tip de date structurate format dintr-un număr fix de elemente de același tip, accesate prin index ;

    multe - un set de obiecte selectate în funcție de o caracteristică sau un grup de caracteristici care pot fi considerate ca un întreg;

    înregistrare - un set de un număr fix de componente de diferite tipuri;

    fişier- o succesiune de componente de același tip și aceeași lungime.

    Două tipuri mai structurate - procedural și obiect - sunt dificil de mapat la date într-o reprezentare convențională.

    Figura 1- Un set de tipuri de bază ale limbajului Pascal

    Agenția Federală pentru Educație

    Abstract

    „TIPURI DE DATE ÎN PASCAL”

    1. Tipuri de date

    Orice date, de ex. constantele, variabilele, proprietățile, valorile funcției sau expresiile 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. În plus, tipul determină și formatul reprezentării interne a datelor în memoria PC-ului.

    În general, limbajul Object Pascal este caracterizat de o structură ramificată de tipuri de date (Fig. 1.1). Limbajul oferă un mecanism pentru crearea de noi tipuri, datorită căruia numărul total de tipuri utilizate într-un program poate fi atât de mare cât se dorește.

    Datele procesate în program sunt împărțite în variabile, constante și literale:

    constante reprezintă date ale căror valori sunt setate în secțiunea declarație constantă și nu se modifică în timpul execuției programului.

    Variabile sunt declarate în secțiunea de declarare a variabilelor, dar spre deosebire de constante, ele își primesc valorile în timpul execuției programului, iar aceste valori pot fi modificate. Constantele și variabilele pot fi denumite după nume.

    Literal nu are un identificator și este reprezentat direct de valoarea din textul programului.

    Tip definește setul de valori pe care le pot lua elementele de date și setul de operațiuni permise asupra acestora.

    Acesta și cele patru capitole ulterioare oferă descrieri detaliate ale fiecărui tip.

    1.1 Tipuri simple

    Tipurile simple includ tipurile ordinale, reale și datetime.

    Tipuri ordinale diferă prin faptul că fiecare dintre ele are un număr finit de valori posibile. Aceste valori pot fi ordonate într-un anumit mod (de unde și numele tipurilor) și, prin urmare, fiecare dintre ele poate fi asociată cu un număr întreg - numărul ordinal al valorii.

    Tipuri reale, strict vorbind, au și un număr finit de valori, care este determinat de formatul reprezentării interne a unui număr real. Cu toate acestea, numărul de valori posibile ale tipurilor reale este atât de mare încât nu este posibil să se asocieze un număr întreg (numărul său) cu fiecare dintre ele.

    Tip dată-oră conceput pentru a stoca data și ora. De fapt, folosește formatul real în aceste scopuri.

    1.1.1 Tipuri ordinale

    Tipurile ordinale includ (vezi Figura 1.1) tipuri întregi, logice, cu caractere, enumerate și intervale. Funcția Ord(x) poate fi aplicată la oricare dintre ele, care returnează numărul ordinal al valorii expresiei X.


    Orez. 1.1 - Structura tipului de date

    Pentru întreg tipuri, funcția ord(x) returnează însăși valoarea lui x, adică Ord(X) = x pentru x aparținând oricărui întreg tip. Aplicarea Ord(x) la logic , simbolic şi enumerabil tipuri oferă un număr întreg pozitiv în intervalul de la 0 la 1 ( tip boolean), de la 0 la 255 ( simbolic), de la 0 la 65535 ( enumerabil). Tip-gamă păstrează toate proprietățile tipului ordinal de bază, deci rezultatul aplicării funcției ord(x) la acesta depinde de proprietățile acestui tip.

    De asemenea, puteți aplica funcții la tipurile ordinale:

    pred(x)- returnează valoarea anterioară a tipului ordinal (valoarea care corespunde numărului ordinal ord(x) -1, adică ord(pred(x)) = ord(x) - 1;

    succ(x)- returnează următoarea valoare a tipului ordinal, care corespunde numărului ordinal ord(x) +1, adică ord(Succ(x)) = ord(x) + 1.

    De exemplu, dacă un program definește o variabilă

    apoi funcția PRED(c) va returna caracterul „4”, iar funcția SUCC(c) va returna caracterul „6”.

    Dacă ne imaginăm orice tip ordinal ca un set ordonat de valori, crescând de la stânga la dreapta și ocupând un anumit segment pe axa numerelor, atunci funcția pred(x) nu este definită pentru stânga, iar succ (x) pentru dreapta sfârşitul acestui segment.

    Tipuri întregi . Gama de valori posibile ale tipurilor întregi depinde de reprezentarea lor internă, care poate fi unul, doi, patru sau opt octeți. În tabel 1.1 arată numele tipurilor întregi, lungimea reprezentării lor interne în octeți și intervalul de valori posibile.

    Tabelul 1.1 - Tipuri întregi

    Nume Lungime, octeți Gama de valori
    Cardinal 4 0. .. 2 147 483 647
    octet 1 0...255
    Shortint 1 -128...+127
    Smallint 2 -32 768...+32 767
    Cuvânt 2 0...65 535
    Întreg 4
    Longint 4 -2 147 483 648...+2 147 483 647
    Int64 8 -9*1018...+9*1018
    Cuvânt lung 4 0. . .4 294 967 295

    Tipuri Cuvânt lungŞi Int64 au fost introduse pentru prima dată în versiunea 4 și tipurile SmallintŞi Cardinal nu este disponibil în Delphi 1. Tastați întreg pentru această versiune este nevoie de 2 octeți și are un interval de valori de la -32768 la +32767, adică la fel ca Smallint .

    Când utilizați proceduri și funcții cu parametri întregi, ar trebui să vă ghidați după „imbricarea” tipurilor, adică. oriunde poate fi folosit cuvânt, permis de utilizare octet(dar nu invers), în Longint„intră” Smallint, care la rândul său include Shortint .

    Lista procedurilor și funcțiilor aplicabile tipurilor întregi este dată în tabel. 1.2. Literele b, s, w, i, l denotă expresii de următorul tip: octet , Shortint, Word, Integer și Longint ,

    x este o expresie a oricăruia dintre aceste tipuri; literele vb, vs, vw, vi, vl, vx denotă variabile ale tipurilor corespunzătoare. Un parametru opțional este indicat între paranteze drepte.

    Tabelul 1.2 - Proceduri standard și funcții 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(w) octet Returnează cel mai înalt arc al argumentului
    salut(eu) Aceleaşi Returnează al treilea octet
    Lo(i) Returnează octetul scăzut al argumentului
    Scăzut) Aceleaşi
    impar (l) boolean Returnează True dacă argumentul este un număr impar
    Aleatoriu (w) La fel ca parametrul Returnează un număr pseudoaleator distribuit uniform în intervalul 0...(w-l)
    sqr(x) X Returnează pătratul argumentului
    schimb(i) Întreg Schimbă octeți într-un cuvânt
    schimb(w) Cuvânt Aceleaşi

    Când se operează cu numere întregi, tipul de rezultat va corespunde tipului operanzilor, iar dacă operanzii sunt de tipuri întregi diferite, un tip comun care include ambii operanzi. De exemplu, când operezi cu scurtăturăŞi cuvânt tipul comun va fi întreg. În setarea implicită, compilatorul Delphi nu produce cod pentru a verifica dacă o valoare este în afara intervalului, ceea ce poate duce la neînțelegeri.

    Tipuri booleene . Tipurile logice includ Boolean, ByteBool, Bool, wordBoolŞi LongBool. În Pascal standard, este definit doar tipul boolean, alte tipuri logice sunt introduse în Object Pascal pentru compatibilitate cu Windows: tipuri booleanŞi ByteBool fiecare ocupă un octet, BoolŞi WordBool- 2 octeți fiecare, LongBool- 4 octeți. Valorile booleene pot fi una dintre constantele pre-declarate False sau True.

    Deoarece tipul boolean este un tip ordinal, acesta poate fi folosit într-o instrucțiune buclă de tip numărabil. În Delphi 32 pentru boolean sens

    Ord (Adevărat) = +1, în timp ce pentru alte tipuri ( Bool, WordBool etc.)

    Ord(True) = -1, astfel încât aceste tipuri de operatori ar trebui să fie utilizați cu precauție! De exemplu, pentru versiunea Delphi 6, instrucțiunea executabilă showMessage(" --- ") în bucla următoare pentru nu va fi executat niciodată:

    pentru L:= Fals la True do

    ShowMessage("--);

    Dacă înlocuim parametrul de buclă tip L din exemplul anterior cu boolean, bucla va rula și mesajul va apărea de două ori pe ecran. [Pentru versiunile Delphi 1 și 2 ord (True) =+1 pentru orice tip boolean.]

    Tip de caracter . Valoarea unui tip de caracter este setul tuturor caracterelor PC. Fiecărui caracter i se atribuie un număr întreg în intervalul 0...255. Acest număr servește ca cod pentru reprezentarea internă a simbolului, este returnat de funcția ord.

    Pentru codificare în Windows se folosește codul ANSI (numit după American National Standard Institute, institutul american de standardizare care a propus acest cod). Prima jumătate a caracterelor PC cu codurile 0... 127 corespunde Tabelului 1.3. A doua jumătate a caracterelor cu codurile 128...255 variază pentru diferite fonturi. Fonturile standard Windows Arial Cyr, Courier New Cyr și Times New Roman folosesc ultimele 64 de coduri (de la 192 la 256) pentru a reprezenta caractere chirilice (fără literele „ё” și „Ё”): „A”... „Z” sunt valori codificate 192..223, „a”... „i” - 224...255. Simbolurile „Ё” și „е” au codurile 168 și, respectiv, 184.

    Tabelul 1.3 - Codificarea caracterelor în conformitate cu standardul ANSI

    Cod Simbol Cod. Simbol Cod. Simbol Cod Simbol
    0 NUL 32 B.L. 64 @ 96 "
    1 ZON 33 ! 65 O 97 O
    2 STX 34 66 ÎN 98 b
    3 ETX 35 # 67 CU 99 Cu
    4 EOT 36 $ 68 D 100 d
    5 ENQ 37 % 69 E 101 e
    6 ACK 38 & 70 F 102 f
    7 BEL 39 " 71 G 103 d
    8" B.S. 40 ( 72 N 104 h
    9 HT 41 ) 73 eu 105 i
    10 LF 42 * 74 J 106 j
    11 VT 43 + 75 LA 107 k
    12 FF 44 F 76 L 108 1
    13 CR 45 - 77 M 109 m
    14 AŞA 46 78 N 110 n
    15 SI. 47 / 79 0 111 O
    16 DEL 48 0 80 R 112 P
    17 DC1 49 1 81 Q 113 q
    18 DC2 50 2 82 R 114 r
    19 DC3 51 3 83 S 115 s
    20 DC 4 52 4 84 T 116 t
    21 N.A.K. 53 5 85 U 117 u
    22 SYN 54 6 86 V 118 v
    23 ETB 55 7 87 W 119 W
    24 POATE 56 8 88 X 120 x
    25 E.M. 57 9 89 Y 121 U
    26 SUB 58 : 90 Z .122 z
    27 ESC 59 ; 91 t 123 {
    28 FS 60 < 92 \ 124 1
    29 G.S. 61 = 93 ] 125 }
    30 R.S. 62 > 94 L 126 ~
    31 NE 63 F 95 127 r

    Caracterele cu codurile 0...31 se referă la coduri de service. Dacă aceste coduri sunt folosite în textul caracterelor programului, ele sunt considerate spații albe.

    Să tastați char operațiunile relaționale sunt aplicabile, precum și funcțiile încorporate:

    Char (c)- funcția de tip char; convertește o expresie în tip octetîntr-un simbol și îl returnează cu valoarea sa;

    UpCase(CH)- funcția de tip char; returnează o literă majusculă dacă сн este o literă latină minusculă, în caz contrar returnează simbolul сн însuși (pentru chirilic, returnează caracterul original).

    Tip enumerare . Un tip enumerat este specificat printr-o enumerare a valorilor pe care le poate primi. Fiecare valoare este denumită printr-un identificator și se află într-o listă înconjurată de paranteze, de exemplu:

    culori = (rosu, alb, albastru);

    Utilizarea tipurilor enumerate face programele mai vizuale.

    Corespondența dintre valorile unui tip enumerat și numerele ordinale ale acestor valori se stabilește prin ordinea de enumerare: prima valoare din listă primește numărul ordinal 0, a doua - 1 etc. Capacitatea maximă de un tip enumerat este de 65536 de valori, deci de fapt tipul enumerat specifică un subset al întregului tip cuvântși poate fi considerată ca o declarație compactă a unui grup de constante întregi cu valori 0, 1 etc.

    Utilizarea tipurilor enumerate crește fiabilitatea programelor, permițându-vă să controlați valorile pe care le primesc variabilele corespunzătoare. Obiectul Pascal permite conversia inversă: orice expresie de tip Cuvânt poate fi convertit într-o valoare a unui tip enumerat, cu excepția cazului în care valoarea expresiei întregi depășește cardinalitatea acelui tip. Această conversie se realizează prin utilizarea unei funcții declarate automat cu numele tipului enumerat.

    Tip-gamă . Un tip de interval este un subset al tipului său de bază, care poate fi orice tip ordinal, cu excepția unui tip de interval.

    Un tip de interval este definit de limitele valorilor sale în cadrul tipului de bază:

    <мин.знач.>..<макс.знач.>

    Aici<мин. знач. >- valoarea minimă a intervalului de tip;<макс. знач. >- valoarea sa maximă.

    Tipul intervalului nu trebuie să fie descris în secțiunea tip, dar poate fi specificat direct la declararea variabilei.

    Când determinați un tip de interval, trebuie să urmați următoarele reguli:

    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.

    Un tip de interval moștenește toate proprietățile tipului său de bază, dar cu limitările puterii sale mai mici. În special, dacă este definită o variabilă.

    Biblioteca standard Object Pascal include două funcții care acceptă lucrul cu tipuri de intervale:

    Ridicat(x)- returnează valoarea maximă a tipului de interval căruia îi aparține variabila x;

    Scăzut(x)- returnează valoarea minimă a tipului intervalului.

    1.1.2 Tipuri reale

    Spre deosebire de tipurile ordinale, ale căror valori sunt întotdeauna mapate la o serie de numere întregi și, prin urmare, sunt reprezentate absolut exact în PC, valorile tipurilor reale definesc un număr arbitrar doar cu o precizie finită în funcție de formatul intern al numărului real. .

    Tabelul 1.4 - Tipuri reale

    În versiunile anterioare ale Delphi 1...3 tip Real a ocupat 6 octeți și a avut un interval de valori de la 2,9*10-39 la 1,7*1038. În versiunile 4 și 5, acest tip este echivalent cu tipul Dubla. Dacă este necesar (din motive de compatibilitate), utilizați 6 octeți Real, trebuie să specificați o directivă de compilator (SREALCOMPATIBILITY ON).

    După cum se vede din tabel. 1.4, un număr real din Object Pascal ocupă de la 4 până la 10 octeți adiacenți și are următoarea structură în memoria PC.

    Aici s este cifra semnului numărului; e - parte exponenţială; conține ordine binară; m este mantisa numărului.

    mantisa m are lungimea de 23 (pentru singur) până la 63 (pentru Extins) biți binari, care asigură o precizie de 7...8 pt singur si 19...20 pt Extins cifre zecimale. 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ă).

    Rețineți că coprocesorul aritmetic procesează întotdeauna numerele în format Extins, iar celelalte trei tipuri reale în acest caz sunt obținute prin simpla trunchiere a rezultatelor la dimensiunea necesară și sunt folosite în principal pentru a economisi memorie.

    Tipurile ocupă o poziție specială în Object Pascal compŞi Valută, care sunt tratate ca numere reale cu părți fracționale de lungime fixă: in comp partea fracționată are o lungime de 0 cifre, adică pur și simplu lipsește, în valută lungimea părții fracționale este de 4 zecimale. De fapt, ambele tipuri definesc un întreg mare cu semn care stochează 19...20 de cifre zecimale semnificative (intern ocupă 8 octeți adiacenți). În același timp, în expresii compŞi valută sunt pe deplin compatibile cu orice alte tipuri reale: toate operațiile reale sunt definite pe ele, pot fi folosite ca argumente pentru funcții matematice etc. Cel mai potrivit domeniu de aplicare pentru aceste tipuri este calculele contabile.

    1.1.3 Tip dată-oră

    Tipul datetime este definit de un identificator standard TDateTimeși este conceput pentru a stoca simultan atât data, cât și ora. În reprezentarea internă ocupă 8 octeți și similar valută este un număr real cu o parte fracțională fixă: partea întreagă a numărului stochează data, iar partea fracțională stochează ora. Data este definită ca numărul de zile care au trecut de la 30 decembrie 1899, iar ora ca fracțiunea de zi care a trecut de la 0 ore, deci valoarea 36444,837 corespunde datei 10/11/1999 și orei. 20:05. Numărul de zile poate fi negativ, dar valorile mai mici decât -693594 (corespunzătoare datei 00.00.0000 de la Nașterea Domnului Hristos) sunt ignorate de funcțiile de conversie a unei date într-un tip șir.

    Mai sus tipul de date TDateTime aceleași operații sunt definite ca pe numerele reale, iar expresiile de acest tip pot implica constante și variabile de tipuri întregi și reale.

    Pentru că tipul TDateTime compatibil cu formatul numerelor reale, puteți determina cu ușurință o dată care este cu câteva zile înainte sau înapoi față de una dată: pentru a face acest lucru, este suficient să adăugați sau, respectiv, să scădeți numărul întreg dorit din data dată.

    1.2 Tipuri structurate

    Oricare dintre tipurile structurate (și în Object Pascal există patru dintre ele: matrice, înregistrări, seturi și fișiere) se caracterizează prin multiplicitatea elementelor care formează acest tip. Fiecare element, la rândul său, poate aparține unui tip structurat, ceea ce ne permite să vorbim despre posibila imbricare de tipuri. Obiectul Pascal permite o adâncime arbitrară de imbricare a tipurilor, dar lungimea totală a oricăruia dintre ele în reprezentarea internă nu trebuie să depășească 2 GB.

    Pentru compatibilitate cu Pascal standard, Object Pascal permite ca un cuvânt rezervat să fie plasat înaintea unei declarații de tip structurat impachetat, indicând compilatorului să salveze ori de câte ori este posibil memoria alocată pentru obiectele de tip structurat; dar compilatorul ignoră de fapt această instrucțiune: „împachetarea” datelor în Object Pascal se face automat oriunde este posibil.

    1.2.1 Matrice

    Matricele din Object Pascal sunt în multe privințe similare cu tipurile de date similare din alte limbaje de programare. O caracteristică distinctivă a tablourilor este că toate componentele lor sunt date de același tip (eventual structurate). Aceste componente pot fi ușor organizate și oricare dintre ele poate fi accesată pur și simplu prin specificarea numărului său de serie.

    Descrierea tipului de matrice este specificată după cum urmează:

    <имя типа>= matrice[<сп.инд.типов>] din<тип>;

    Aici<имя типа>- identificator corect; matrice, de- cuvinte rezervate (array, from);<сп.инд.типов>- o listă cu unul sau mai multe tipuri de index, separate prin virgule; parantezele pătrate care încadrează lista sunt o cerință de sintaxă;<тип>- orice tip de Object Pascal.

    Orice tipuri ordinale cu o capacitate de cel mult 2 GB pot fi utilizate ca tipuri de index în Object Pascal (adică, cu excepția Cuvânt lungŞi Int64)

    Adâncimea de imbricare a tipurilor structurate în general și, în consecință, a tablourilor, este arbitrară, astfel încât numărul de elemente din lista de tipuri de index (dimensiunea matricei) nu este limitat, totuși, lungimea totală a reprezentării interne a oricărui matricea nu poate fi mai mare de 2 GB. În memoria PC-ului, elementele matricei se succed în așa fel încât atunci când se deplasează de la adresele mici la cele mai mari, indexul din dreapta al matricei se schimbă cel mai rapid.

    În Object Pascal, puteți utiliza un singur operator de atribuire pentru a transfera toate elementele unei matrice într-o altă matrice de același tip.

    1.2.2 Înregistrări

    Înregistra este o structură de date formată dintr-un număr fix de componente numite câmpuri ale unei înregistrări. Spre deosebire de o matrice, componentele (câmpurile) unei înregistrări pot fi de diferite tipuri. Pentru a face posibilă referirea la una sau la alta componentă a unei înregistrări, câmpurile sunt denumite.

    Structura unei declarații de tip post este:

    <имятипа>=record<сп.полей>Sfârşit;

    Aici<имя типа>- identificator corect; înregistrare/terminare- cuvinte rezervate (înregistrare, sfârșit);<сп.полей>- lista câmpurilor; este o succesiune de secțiuni ale unei înregistrări separate prin punct și virgulă.

    Fiecare secțiune a unei înregistrări constă din unul sau mai mulți identificatori de câmp, separați prin virgule.

    Oferi caz... de, care deschide partea de variantă, seamănă superficial cu operatorul de selecție corespunzător, dar de fapt joacă doar rolul unui fel de cuvânt de serviciu care denotă începutul părții de variantă. De aceea la sfârșitul părții de variantă nu trebuie să puneți Sfârşit ca un cuplu să cazul...de. (Deoarece partea de variantă este întotdeauna ultima din înregistrare, aceasta este în continuare urmată de sfârșit, dar numai ca o pereche de înregistrat). Tasta de selectare a propoziției cazul...de este ignorat efectiv de compilator: singura cerință pentru el în Object Pascal este ca cheia să definească un tip ordinal standard sau predeclarat.

    Numele câmpurilor trebuie să fie unice în înregistrarea în care sunt declarate, totuși, dacă înregistrările conțin câmpuri de înregistrare, adică sunt imbricate unele în altele, numele pot fi repetate la diferite niveluri de imbricare.

    1.2.3 Seturi

    Seturi - acestea sunt seturi de același tip de obiecte legate logic între ele. Natura relațiilor dintre obiecte este doar implicată de programator și nu este controlată în niciun fel de Object Pascal. Numărul de elemente incluse într-o mulțime poate varia de la 0 la 256 (un set care nu conține elemente se numește gol). Este inconstanța numărului de elemente ale acestora care se deosebește de matrice și înregistrări.

    Două mulțimi sunt considerate echivalente dacă și numai dacă toate elementele lor sunt aceleași, iar ordinea elementelor din mulțime este indiferentă. Dacă toate elementele unui set sunt incluse și în altul, se spune că primul set este inclus în al doilea. Un set gol este inclus în orice alt set.

    Descrierea tipului de set este:

    <имя типа>= set de<базовый тип>;

    Aici<имя типа>- identificator corect; set, de- cuvinte rezervate (set, of);<базовый тип>- tipul de bază al elementelor de mulțime, care poate fi orice tip ordinal, cu excepția Word, Integer, Longint, Int64 .

    Pentru a defini o mulțime se folosește așa-numitul constructor de mulțimi: o listă de specificații ale elementelor mulțimii, separate prin virgule; lista este înconjurată de paranteze drepte. Specificațiile elementului pot fi constante sau expresii ale unui tip de bază sau un tip de interval de același tip de bază.

    Structura internă a mulțimii este astfel încât fiecăruia dintre elementele sale i se atribuie o cifră binară (un bit); dacă un element este inclus într-un set, bitul corespunzător are valoarea 1, în caz contrar - 0. În același timp, unitatea minimă de memorie este un octet care conține 8 biți, astfel încât compilatorul a alocat un octet seților și ca urmare puterea fiecăruia dintre ele a devenit egală cu 8 elemente. Capacitatea maximă a setului este de 256 de elemente. Pentru astfel de seturi, compilatorul alocă 16 octeți adiacenți.

    Și încă un experiment: modificați intervalul tipului de bază la 1..256. Deși capacitatea de acest tip este de 256 de elemente, atunci când se încearcă compilarea unui program compilatorul va raporta eroarea: Seturile pot avea cel mult 256 de elemente deoarece numerotarea elementelor setului începe de la zero indiferent de limita inferioară declarată în program. Compilatorul permite utilizarea ca tip de bază a unui tip de interval întreg cu o limită minimă de 0 și maxim 255, sau orice tip enumerat cu cel mult 256 de elemente (cardinalitatea maximă a unui tip enumerat este de 65536 de elemente).

    1.3 șiruri

    Următoarele tipuri sunt utilizate pentru procesarea textului în Object Pascal:

    sfoară scurtă shortString sau șir [n], unde n<= 255;

    sfoară lungă şir ;

    linie largă WideString ;

    șir de terminale nul pchar .

    Ceea ce au în comun aceste tipuri este că fiecare șir este tratat ca o matrice unidimensională de caractere, numărul de caractere în care se poate modifica într-un program care rulează: pentru șirul [n], lungimea șirului se modifică de la 0 la n, pentru şirŞi pchar- de la 0 la 2 GB.

    Pascal standard folosește doar șiruri scurte șir[n]. În memorie, unui astfel de șir îi sunt alocate n+i octeți, primul octet conține lungimea curentă a șirului, iar caracterele în sine sunt localizate începând de la al 2-lea octet. Deoarece lungimea șirului în acest caz este de un octet, lungimea maximă a unui șir scurt nu poate depăși 255 de caractere. Tipul standard este folosit pentru a declara un șir scurt de lungime maximă ShortString(echivalent Şir).

    Windows folosește pe scară largă șiruri cu terminale nule, care sunt șiruri de caractere delimitate de caracterul #o. Lungimea maximă a unui astfel de șir este limitată doar de memoria disponibilă și poate fi foarte mare.

    Un nou tip a fost introdus în versiunile pe 32 de biți ale Delphi şir, combinând avantajele ambelor tipuri. Când lucrați cu acest tip, memoria este alocată după cum este necesar (dinamic) și este limitată de memoria disponibilă disponibilă pentru program.

    1.4 Indicatori și memorie dinamică

    1.4.1 Memoria dinamică

    Memoria dinamică- aceasta este RAM-ul PC-ului furnizat programului în timpul funcționării acestuia. Plasarea dinamică a datelor înseamnă utilizarea memoriei dinamice direct în timpul rulării programului. În schimb, alocarea statică se face de către compilatorul Object Pascal atunci când programul este compilat. În cazul plasării dinamice, nici tipul, nici cantitatea de date care trebuie plasate nu sunt cunoscute în avans.

    1.4.2 Indicatoare

    RAM PC este o colecție de celule pentru stocarea informațiilor - octeți, fiecare având propriul său număr. Aceste numere se numesc adrese, vă permit să accesați orice octet de memorie. Object Pascal oferă programatorului un mijloc flexibil de gestionare a memoriei dinamice - așa-numitele pointeri. Un pointer este o variabilă care conține adresa unui octet de memorie ca valoare. Folosind pointeri, puteți plasa oricare dintre tipurile de date cunoscute în Object Pascal în memoria dinamică. Doar unii dintre ei ( Byte, Char, ShortInt, Boolean) ocupă un octet în reprezentarea internă, restul - mai multe adiacente. Prin urmare, pointerul se adresează de fapt doar primului octet de date.

    De obicei, un pointer este asociat cu un anumit tip de date. Vom numi astfel de indicatoare tastate. Pentru a declara un pointer tastat, utilizați pictograma ^, care este plasată în fața tipului corespunzător.

    În Object Pascal, puteți declara un pointer fără a fi nevoie să îl asociați cu niciun tip de date specific. Tipul standard este utilizat pentru aceasta indicator, De exemplu:

    Pointerii de acest fel vor fi numiți netipați. Deoarece pointerii netipați nu sunt asociați cu un anumit tip, ele pot fi utilizate pentru a aloca dinamic date a căror structură și tip se modifică pe măsură ce programul rulează.

    După cum sa menționat deja, valorile pointerilor sunt adresele variabilelor din memorie, așa că te-ai aștepta ca valoarea unui pointer să poată fi transmisă altuia. De fapt, acest lucru nu este în întregime adevărat. În Object Pascal, puteți trece valori doar între pointerii asociati cu același tip de date.

    1.4.3 Alocarea și eliberarea memoriei dinamice

    Toată memoria dinamică din Object Pascal este tratată ca o matrice continuă de octeți, care se numește heap.

    Memoria pentru orice variabilă alocată dinamic este alocată prin procedura New. Parametrul pentru apelarea acestei proceduri este un pointer tastat. Ca urmare a accesului, pointerul capătă o valoare corespunzătoare adresei de la care pot fi plasate datele. Valoarea către care indică pointerul, adică datele efective alocate heap-ului, este indicată de semnul ^, care este plasat imediat după indicator. Dacă nu există niciun semn ^ după indicator, atunci aceasta înseamnă adresa la care se află datele. Are sens să ne gândim din nou la ceea ce tocmai s-a spus: valoarea oricărui pointer este o adresă și pentru a indica că nu vorbim despre adresă, ci despre datele care se află la această adresă, se pune un ^ după pointer (uneori acesta este denumit pointer de dereferențiere).

    Datele alocate dinamic pot fi folosite oriunde în program unde sunt valabile pentru constante și variabile de tipul adecvat

    Memoria dinamică nu poate fi luată doar din grămadă, ci și returnată înapoi. Pentru a face acest lucru, utilizați procedura Dispose. De exemplu, operatori

    Dispune (pJ);

    Aruncă (pR);

    va returna la heap memoria care a fost atribuită anterior pointerilor pJ și pR (vezi mai sus).

    Rețineți că procedura Dispose (pPtr) nu modifică valoarea pointerului pPtr, ci doar returnează memoria asociată anterior cu acest pointer în heap. Cu toate acestea, reaplicarea procedurii la un pointer liber va duce la o eroare de rulare. Programatorul poate marca indicatorul eliberat cu cuvântul rezervat nil.

    1.5 Tastați aliasuri

    Pentru orice tip puteți declara câte aliasuri doriți. De exemplu:

    TMyInteger = Integer;

    În viitor, aliasul poate fi folosit în același mod ca tipul de bază:

    Mylnt: TMyInteger;

    Mylnt:= 2*Round(pi);

    Aceste tipuri de alias-uri sunt de obicei folosite pentru a îmbunătăți vizibilitatea codului programului. Cu toate acestea, în Object Pascal puteți declara aliasuri puternic tastate adăugând tipul de cuvânt rezervat înaintea numelui tipului de bază:

    TMyIntegerType = tip Integer;

    MylntVar: TMyIntegerType;

    Din punctul de vedere al compilatorului, aliasurile tipizate sunt compatibile cu tipul de bază în diverse tipuri de expresii, dar declară de fapt un nou tip de date, deci nu pot fi folosite ca parametri formali pentru apelarea subrutinelor în locul tipului de bază. Dacă, de exemplu, este declarată o procedură

    function MylntFunc(APar: integer): Integer;

    atunci un asemenea apel la ea

    MylntFunc(MylntVar)

    va fi considerat eronat de către compilator.

    Alias-urile puternic tipizate forțează compilatorul să genereze informații de tip run-time (RTTI). Aceste informații sunt utilizate de obicei de mediul Delphi pentru a sprijini funcționarea diferitelor tipuri de editori.

    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 și, 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 următoarele egalități sunt valabile pentru ele:
    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. Tipuri de date de interval sunt specificate numai de limitele intervalului lor. De exemplu:

      tip Luna = 1 .. 12 ;
      Budni = Lun .. Vin;

    6. 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" ;

    Acest tip constă în combinarea mai multor intervale, iar în acest caz se modifică ordinea literelor latine: dacă în tipul standard