Variabile întregi în Pascal. Numerele întregi în Pascal

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

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

    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

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

În această lecție vom afla despre tipurile de date în limbajul de programare Turbo Pascal.

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

Structura tipurilor de date în Pascal:

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

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

Tipuri întregi- denotă seturi de numere întregi în diferite intervale. Există cinci tipuri de numere întregi, care diferă în intervalul de valori valide și dimensiunea RAM pe care o ocupă. Tipurile întregi sunt desemnate prin identificatori: Byte, ShortInt, Word, Integer, LongInt; caracteristicile acestora sunt prezentate în tabelul următor.

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

Operațiuni valabile:

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

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

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

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

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

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

Când comparați numerele reale, trebuie să vă amintiți că, din cauza inexactității reprezentării lor în memoria computerului (din cauza inevitabilității rotunjirii), ar trebui să evitați să încercați să determinați egalitatea strictă a două valori reale. Există șansa ca egalitatea să fie falsă, chiar dacă de fapt nu este.

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

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

Tipuri de limbaj structurat

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

Matrice- o structură ordonată de date de același tip care le stochează secvenţial. Matricea trebuie să aibă dimensiuni care să determine câte elemente sunt stocate în structură. Orice element dintr-o matrice poate fi atins prin indexul său.

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

Intervalul dintre paranteze pătrate indică valorile index ale primului și ultimului element din structură. Exemple de declarații de tipuri și variabile:

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

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

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

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

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ă valoarea ordinală a 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 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 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
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 predeclarate 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 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 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.

Datele sunt un concept general pentru tot ceea ce funcționează un computer. Orice tip de date definește setul de valori pe care o anumită variabilă le poate lua ș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 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

În Pascal există și o constantă predefinită numită MaxInt, care conține valoarea maximă a unui număr întreg de tip Integer ș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)

Cometariu. Simbolul precedent sau următor depinde de setul specificat de simboluri, deci ambele aceste 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
/ - divizare (ambele operanzi pot fi numere întregi, dar rezultatul este întotdeauna real)
+ - adaos
- - scădere

Există funcții predefinite 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ă.

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

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


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

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


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

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

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

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

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

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

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