Tip de date fracționale pascal. Turbo Pascal. Tipuri de date

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 absolut exact, 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.

cometariu. 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ă . Valorile 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; (ai i se atribuie valoarea 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 duce la 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 în 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 rânduri arată o înregistrare a aceluiași număr 124. Prin schimbarea poziției punctului zecimal în mantisă (punctul „plutește”, de unde și numele „î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 tipului de caractere 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, End. 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:

  • Adevarul adevarat;
  • 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 (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 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 de 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țiunile 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 de 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';

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 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 ieși în afara intervalului ș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ă ultima valoare 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 in detalii.

  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ă-l 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, mier, thu, fri, sat); 0 1 2 3 4 5 6

    Reamintim că pentru acest tip de date:

  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

Când descrieți o variabilă, trebuie să indicați tipul acesteia. Tipul unei variabile descrie setul de valori pe care îl poate lua și acțiunile care pot fi efectuate asupra acesteia. O declarație de tip specifică un identificator care reprezintă tipul.

Tipurile simple sunt împărțite în standard (ordinal) și enumerate (restrâns).

Tipuri standard

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

Tip întreg (î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. Un tip de constantă întreg este un tip de număr întreg încorporat cu cel mai mic interval care include valoarea acelei constante întregi.
  2. În cazul unei operații binare (o operație care utilizează doi operanzi), ambii operanzi sunt convertiți în tipul lor comun înainte ca operația să fie efectuată asupra lor. 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 și un număr întreg cu lungimea de octeți este întreg, iar tipul comun pentru un întreg și un număr întreg cu lungimea unui cuvânt este întreg lung. Acțiunea se realizează în funcție de precizia tipului generic, iar tipul rezultatului este tipul generic.
  3. Expresia din dreapta operatorului de atribuire este evaluată indiferent de mărimea variabilei din stânga.

Operații efectuate pe numere întregi:

„+” - adaos

„-“ - scădere

"*" - înmulțire

SQR - pătrat

DIV - renunță la partea fracțională după împărțire

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

ABS - modul de număr

RANDOM(X) - obținerea unui 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 а,р,n:integer;

Tip real (real)

Tipul 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 format virgulă mobilă implică de obicei trei valori - m, b și e - astfel încât m*b e, unde b este întotdeauna 10 și m și e sunt valori întregi în intervalul real. Aceste valori ale lui m și e determină în continuare intervalul și precizia tipului real.

Există cinci tipuri de tipuri reale: reale, simple, 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 lui x.
  • SIN(X), COS(X), ARCTAN(X).
  • LN(X) este logaritmul natural.
  • EXP(X)-exponent al lui X (e 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ă o operație aritmetică conține numere de tip real și întreg, atunci rezultatul va fi de tip real.
    • Toate componentele expresiei sunt scrise pe o singură linie.
    • 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 este orice caracter inclus în apostrofe. Pentru a reprezenta un apostrof ca variabilă caracter, trebuie să-l încadrați într-un apostrof: ''''.

Fiecare caracter are propriul său cod și număr. Numerele de serie ale cifrelor 0,1..9 sunt ordonate crescător. Numerele de serie ale literelor sunt, de asemenea, ordonate crescător, dar nu se succed neapărat.

Următoarele semne de comparație se aplică datelor de caractere:

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

De exemplu: „A”< ‘W’

Funcții care se aplică variabilelor caracter:

  1. ORD(X) - determină numărul de serie al simbolului X. ord (‘a’) =97 ;
  2. CHR(X) - identifică 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 de enumerare

Un tip de date enumerate este denumit astfel deoarece este specificat ca o listă 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 de enumerare arată astfel:

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

Unde<список констант>- acesta este un tip special de constante, specificate separate prin virgule și având propriul număr de serie, începând de la 0.

De exemplu:

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

Puteți efectua următorii operatori de atribuire:

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

dar nu poți face sarcini mixte:

Plecare:=sud; volum:=august;

Următoarele funcții se aplică variabilelor de tip enumerat:

1. ORD - număr de serie

2. PRED - element anterior

3. SUCC - element ulterior.

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

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

Tip limitat

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

Este descris după cum urmează:

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

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

  1. Ambele constante mărginite trebuie să fie de același tip.
  2. Orice tip simplu, cu excepția realului, poate fi folosit ca tip de bază.
  3. Valoarea inițială la definirea unui tip limitat nu trebuie să fie mai mare decât valoarea finală.
indice de tip =0 ..63 ; litera=’a’...’z’; var char1,char2:litera; a,g:index ;

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

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

Agenția Federală pentru Educație

Eseu

„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, astfel încât 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 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ă

atunci 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 care cresc de la stânga la dreapta și ocupă un anumit segment pe axa numerelor, atunci funcția pred(x) nu este definită pentru capătul din stânga, iar succ (x) este nedefinit pentru capătul drept al 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 .

Atunci când utilizați proceduri și funcții cu parametri întregi, ar trebui să vă ghidați după „imbricarea” tipurilor, de exemplu. 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 și funcții standard aplicabile pentru tipuri întregi

Recurs Tip de rezultat Acțiune
abs(x) X Returnează modulul x
chr(b) Char Returnează un caracter după codul său
dec(vx[,i]) - Descrește valoarea lui vx cu i, iar în absența lui i - cu 1
inc(vx[,i]) - Crește valoarea lui vx cu i, iar în absența lui i - cu 1
salut(w) octet Returnează cel mai înalt arc al argumentului
Buna eu) La fel Returnează al treilea octet
Lo(i) Returnează octetul scăzut al argumentului
Scăzut) La fel
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 La fel

Când se operează cu numere întregi, tipul rezultat va corespunde tipului operanzilor, iar dacă operanzii sunt de diferite tipuri întregi, tipul general 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 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 se modifică 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 A 97 A
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 ASA DE 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 SA 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.

Agenția Federală pentru Educație

Eseu

„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, astfel încât 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 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ă

atunci 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 care cresc de la stânga la dreapta și ocupă un anumit segment pe axa numerelor, atunci funcția pred(x) nu este definită pentru capătul din stânga, iar succ (x) este nedefinit pentru capătul drept al 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 .

Atunci când utilizați proceduri și funcții cu parametri întregi, ar trebui să vă ghidați după „imbricarea” tipurilor, de exemplu. 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 și funcții standard aplicabile pentru tipuri întregi

Recurs Tip de rezultat Acțiune
abs(x) X Returnează modulul x
chr(b) Char Returnează un caracter după codul său
dec(vx[,i]) - Descrește valoarea lui vx cu i, iar în absența lui i - cu 1
inc(vx[,i]) - Crește valoarea lui vx cu i, iar în absența lui i - cu 1
salut(w) octet Returnează cel mai înalt arc al argumentului
Buna eu) La fel Returnează al treilea octet
Lo(i) Returnează octetul scăzut al argumentului
Scăzut) La fel
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 La fel

Când se operează cu numere întregi, tipul rezultat va corespunde tipului operanzilor, iar dacă operanzii sunt de diferite tipuri întregi, tipul general 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 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 se modifică 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 A 97 A
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 ASA DE 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 SA 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.

A tasta 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 de 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 intervalului 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 cu absolut exactitate î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 în Object Pascal ocupă de la 4 până la 10 octeți alăturaț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 prelucrează î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 ele 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, astfel încât 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 să scădeți numărul întreg dorit din data dată, respectiv.

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 bătătorit, 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[<сп.инд.типов>] de<тип>;

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 treceți 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

Record 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, despărțiț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ă caz de. (Deoarece partea variantă este întotdeauna ultima din înregistrare, aceasta este în continuare urmată de sfârșit, dar numai ca o pereche pentru înregistrare). Tasta de selectare a propoziției caz 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. Acest lucru se face folosind tipul standard 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 am menționat, 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 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ă indicatorul, adică datele reale 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 de fapt declară 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.