Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Erori
  • Descrierea tipurilor de date în Pascal. Numerele întregi în Pascal

Descrierea tipurilor de date în Pascal. Numerele întregi în Pascal

Cele mai importante elemente ale unui program sunt variabilele. Ele influențează cursul evenimentelor din program în timpul execuției acestuia. De exemplu, dacă nu am fi specificat valoarea variabilei Nume în , cui i-ar fi adresat rezultatul de salut din program?

Variabilele pot conține date complet diferite. De exemplu, o variabilă ar putea stoca numele cuiva, o alta ar putea stoca anul de naștere, o a treia ar putea stoca înălțimea, etc. Astfel de date diferite sunt reprezentate de computer în moduri diferite. Numele este un șir de caractere, anul nașterii este un număr întreg, iar înălțimea este un număr real (de exemplu, înălțimea este de 1,72 m).

Modul în care un computer reprezintă datele este determinat de acestea tip. În plus, tipul de date determină ce acțiuni pot fi efectuate asupra datelor respective.

Principalele tipuri de date standard ale limbajului Turbo Pascal sunt enumerate mai jos:

  1. ÎNTREG– date întregi în intervalul de la –32768 la 32767, ocupând doi octeți în memorie;
  2. REAL– numere reale în intervalul de la 2,9´10 -39 (2,9E-39) la 1,7´10 38 (1,7E38), ocupă șase octeți;
  3. CHAR– caracter separat, un octet;
  4. ŞIR– un șir de caractere, numărul de caractere dintr-o linie (lungimea șirului) este limitat de numărul N între paranteze drepte, ocupă N+1 octeți (dacă nu este specificat numărul N, atunci lungimea maximă a liniei este 255 de caractere);
  5. BOOLEAN– tip logic, are două valori: FALSE (fals) și TRUE (adevărat), un octet.

Rețineți că tipurile INTEGER, CHAR și BOOLEAN sunt clasificate ca ordinal tipuri ordinale.

După cum probabil vă amintiți, atunci când descrieți o variabilă, după numele acesteia sunt plasate două puncte și apoi este indicat tipul. Dacă mai multe variabile au același tip, numele lor pot fi separate prin virgulă.

Un exemplu de descriere a variabilelor de diferite tipuri:

Delphi/Pascal

var a, b, c: întreg; suma: real; Alpha, Beta: char; S: șir; S_1: sfoară; t: boolean;

a, b, c: întreg;

suma: real;

Alpha, Beta: char;

S: sfoară[25];

S_1: sfoară;

t: boolean;

Rețineți că variabila S_1 este un șir de caractere, dar declarația sa nu specifică o lungime. În acest caz, compilatorul însuși stabilește lungimea maximă posibilă - 255 de caractere.

Există și alte tipuri de date predefinite pentru stocarea numerelor întregi și reale. Caracteristicile lor sunt prezentate în tabelele de mai jos. Comparați aceste tipuri cu tipurile INTEGER și REAL prezentate de asemenea în tabele.

Gamă

Dimensiunea în octeți

SCURTARE
ÎNTREG
LONGINT

2147483648 .. 2147483647

BYTE
CUVÂNT

Tipuri de date reale

Gamă

Numărul de cifre semnificative

Dimensiunea în octeți

REAL

2,9´10 -39 .. 1,7´10 3 8

SINGUR

1,5´10 – 45 .. 3,4´10 3 8

DUBLA

5,0´10 -3 24 .. 1,7´10 3 08

EXTINS

3,4´10 -4932 .. 1,1´10 49 32

COMP

2 63 +1 .. 2 63 -1

Ce tip de date să utilizați

Există atât de multe tipuri diferite, ați putea spune, deci pe care ar trebui să le folosiți?
Depinde de sarcina care ți-a fost atribuită. De exemplu, aveți nevoie de o variabilă în care veți stoca înălțimea unei anumite persoane (valoare reală): în acest caz, este suficient să folosiți tipul SINGUL. Dacă utilizați o variabilă pentru a număra numărul anumitor obiecte (o valoare întreagă pozitivă), atunci aflați dacă acest număr poate fi mai mare de 255, dacă nu, utilizați BYTE, dacă se poate, nu vă puteți descurca fără WORD și, în unele cazuri, cazurile LONGINT pot fi, de asemenea, necesare.

Pentru a afla mai multe despre diferitele tipuri, apăsați Shift+F1 în Turbo Pascal (va apărea o fereastră de index de ajutor), apoi selectați obiectul care vă interesează (de exemplu, tastați „type” sau „real”).

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, datorită căruia numărul total de tipuri utilizate într-un program poate fi atât de mare cât se dorește.

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

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

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

Literal nu are 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 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 de buclă tip L din exemplul anterior cu boolean, bucla va rula și mesajul va apărea de două ori pe ecran. [Pentru versiunile Delphi 1 și 2 ord (True) =+1 pentru orice tip boolean.]

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

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

Tabelul 1.3 - Codificarea caracterelor în conformitate cu standardul ANSI

Cod Simbol Cod. Simbol Cod. Simbol Cod Simbol
0 NUL 32 B.L. 64 @ 96 "
1 ZON 33 ! 65 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 albe.

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 din 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, deci valoarea 36444,837 corespunde datei 10/11/1999 și orei. 20:05. Numărul de zile poate fi negativ, dar valorile mai mici decât -693594 (corespunzătoare datei 00.00.0000 de la Nașterea Domnului Hristos) sunt ignorate de funcțiile de conversie a unei date într-un tip șir.

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

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

1.2 Tipuri structurate

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

Pentru compatibilitate cu Pascal standard, Object Pascal permite ca un cuvânt rezervat să fie plasat înaintea unei declarații de tip structurat 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 se deplasează de la adresele mici la cele mai mari, indexul din dreapta al matricei se schimbă cel mai rapid.

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

1.2.2 Înregistrări

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; inregistrare/ incheiere- 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. Tipul standard este utilizat pentru aceasta indicator, De exemplu:

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

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

1.4.3 Alocarea și eliberarea memoriei dinamice

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

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

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

Memoria dinamică nu poate fi doar luată 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 în 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 utilizat în același mod ca tipul de bază:

Mylnt: TMyInteger;

Mylnt:= 2*Round(pi);

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

TMyIntegerType = tip Integer;

MylntVar: TMyIntegerType;

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

function MylntFunc(APar: integer): Integer;

atunci un asemenea apel la ea

MylntFunc(MylntVar)

va fi considerat eronat de către compilator.

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

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 partea dreaptă a 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 variază în intervalul și precizia valorilor asociate cu acestea

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) este exponentul 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 în ordine crescătoare, 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 numit 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 (butoaie) = 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'. Bazele programării
Fiecare profesionist a fost cândva un ceainic. Cu siguranță ești familiarizat cu starea când „nu știi cum să începi să gândești pentru a veni cu așa ceva”. Probabil te-ai confruntat cu o situație în care pur și simplu nu știi de unde să începi. Această carte se adresează tocmai acestor oameni care ar dori să devină programatori, dar care nu au nicio idee cum să înceapă această cale. ...

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

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

Deoarece Lazarus folosește compilatorul Free Pascal, tot ce se spune despre tipurile de date în legătură cu Free Pascal este valabil și pentru Lazarus.

Deci, tipurile de date întregi ale lui Free Pascal sunt listate în Tabelul 13.1.

Tabelul 13.1. Tipuri gratuite de date Pascal Integer (Lazarus).

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

NOTĂ
Tastați în Free Pascal Int64Și QWord nu sunt! Aceasta înseamnă că nu le puteți utiliza, de exemplu, pentru variabilele de index în bucle. Totuși, le-am prezentat aici pentru a nu le descrie separat în viitor și pentru a colecta toate tipurile de numere întregi Free Pascal într-un singur loc. Dacă nu înțelegeți unele cuvinte, nu vă alarmați. La vremea potrivită, vă voi spune despre totul mai detaliat.

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

Într-o coloană TIP sunt dați identificatori de tip de date (cuvinte cheie care indică compilatorului cărui tip aparțin anumite date). Veți învăța cum să utilizați acești identificatori în următoarele lecții.

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

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

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

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

Funcție standard Scăzut definește valoarea minimă a tipului de date. Funtskia Înalt definește valoarea maximă. Cu functii ScrieLnȘi ReadLn deja vă cunoașteți puțin. Vom vorbi mai detaliat despre subrutine (proceduri și funcții) în secțiunea corespunzătoare.

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

10
178
35278

Adevărat, acest lucru se aplică numerelor din sistemul numeric zecimal. Cu siguranță știți deja că există și alte sisteme. Cele mai utilizate sisteme numerice sunt cele binare, zecimale și hexazecimale.

Free Pascal acceptă patru formate întregi:

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

Teme pentru acasă:

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

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

($mod objfpc)($H+)

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

($mod tp)($H+)

Lansa programul. Uitați-vă la intervalul de valori ale tipului Întreg. A trage concluzii.

Învață să gândești ca un programator, adică logic. Nimeni nu va mesteca totul pentru tine până la pensie, așa cum fac eu acum. Trebuie să te obișnuiești să gândești singur. În caz contrar, veți aluneca în „principiul învățării maimuțelor” și atunci șansele tale de a deveni un programator grozav vor fi aproape de zero. Pentru a vă ajuta să nu alunecați la nivelul „înghesuirii”, voi lăsa periodic lacune în învățarea dvs., astfel încât să încercați să vă dați seama de unele lucruri.

Este mult mai bine dacă îți dai seama singur decizie gresita, veți găsi singur greșeala și o veți corecta singur, în loc să folosiți întotdeauna soluțiile corecte ale altora și să le copiați prostesc.

PRELEZA 2

Bazele programării.

Introducere în Pascal. Tipuri de date. Operațiuni.

Alfabetul limbajuluiPascal

Orice limbaj natural constă din elemente precum simboluri, cuvinte, fraze și propoziții. Un limbaj de programare are și ele elemente similare: simboluri, cuvinte, expresii (expresii), operatori (propoziții).

Cuvintele sunt formate dintr-o colecție de simboluri. Expresii - acestea sunt grupuri de cuvinte și operatori - Acestea sunt combinații de cuvinte și expresii. Simbolurile limbajului sunt semne (litere) elementare care sunt folosite pentru alcătuirea unor texte. Deci, setul acestor simboluri formează alfabetul limbii.

Alfabetul Pascal este format din:

1.litere mari și mici ale alfabetului latin, care include următoarele caractere:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - majuscule;

A b c d e f g h i j k l m n o p q r s t u v w x y z - litere mici;

2. cifre arabe zecimale: 0 1 2 3 4 5 6 7 8 9;

3. cifre hexazecimale (construite din cifre zecimale și litere de la A la F);

4. 32 de litere mari și mici ale alfabetului rus;

5. caractere speciale:

Combinațiile de caractere speciale pot forma caractere compuse:

: = atribuire;

< >nu este egal;

>= mai mare sau egal cu;

<= меньше или равно;

Gama de valori;

(*) sau ( ) - comentariu.

Structura programului Pascal

Pentru ca compilatorul Passal să înțeleagă corect exact ce acțiuni se așteaptă de la el, programul dumneavoastră trebuie să fie formatat în deplină concordanță cu sintaxa (regulile de construcție a programului) a acestui limbaj.

Orice program Pascal poate consta din următoarele blocuri (părțile opționale sunt marcate cu paranteze drepte în continuare):

program<имя_программы>;

[foloseste<имена_подключаемых_модулей>;]

[ eticheta<список_меток>;]

[ const<имя_константы> = <значение_константы>;]

[ tip<имя_типа> = <определение_типа>;]

[var<имя_переменной> : <тип_переменной>;]

[ procedură<имя_процедуры> <описание_процедуры>;]

[funcția<имя_функции> <описание_функции>;]

începe (începutul corpului principal al programului)

<операторы>

Sfârşit. (* sfârșitul corpului principal al programului *)

Versiunile ulterioare ale compilatoarelor de limbaj Pascal nu mai necesită specificarea numelui programului, adică a liniei programului<имя_программы>; poate fi omis. Dar acest lucru este posibil numai dacă întregul program este conținut într-un fișier modul. Dacă programul constă din mai multe piese independente - module, atunci fiecare dintre ele trebuie să aibă un antet (program sau unitate).

Oricare dintre secțiunile opționale enumerate poate apărea de mai multe ori în textul programului, secvența lor generală se poate modifica și ea, dar trebuie respectată întotdeauna regula principală a limbajului Pascal: înainte de a fi folosit un obiect, acesta trebuie declarat și descris.

Compilatoarele Pascal nu fac deosebire între literele mici și mari și ignoră caracterele spațiilor albe, astfel încât textul programului poate fi structurat astfel încât să fie cât mai convenabil de citit și depanat.

Directivele compilatorului

Linia care începe cu simbolurile ($ nu este un comentariu, ci o directivă de compilator - o comandă specială de care depinde procesul de compilare și execuție a programului. Vom lua în considerare directivele în acele secțiuni la care se referă „prin sens”.

De exemplu, linia ($I-,Q+) dezactivează validarea I/O, dar permite controlul depășirii calculelor.

Identificatori

Denumirile date obiectelor program (constante, tipuri, variabile, funcții și proceduri, precum și întregul program) se numesc identificatori. Ele pot consta doar din cifre, litere latine și semnul „_” (subliniere). Cu toate acestea, un număr nu poate începe un nume. Identificatorii pot avea orice lungime, dar dacă două nume au aceleași primele 63 de caractere, atunci numele sunt considerate identice.

Puteți da obiectelor programului dvs. orice nume, dar trebuie să vă asigurați că acestea sunt diferite de cuvintele rezervate folosite de Pascal, deoarece compilatorul tot nu va accepta variabile cu nume „străine”.

Iată o listă cu cele mai comune cuvinte rezervate:

implementarea matricei shl

șir de interfață de caz

eticheta const atunci

folosește indicatorul de fișier

far procedura var

pentru program în timp ce

înainte înregistrare cu

repetarea funcției xor

Variabile și tipuri de date

O variabilă este un obiect de program a cărui valoare se poate modifica în timp ce programul rulează.

Un tip de date este o caracteristică a gamei de valori pe care le pot lua variabilele aparținând acelui tip de date.

Toate variabilele utilizate în program trebuie descrise într-o secțiune specială var folosind următorul șablon:

var<имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;

<имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;

Limbajul Pascal are un set mare de tipuri diferite de date, dar acum vom indica doar câteva dintre ele. Vom vorbi mai departe despre toate tipurile de date.

constante

O constantă este un obiect a cărui valoare este cunoscută înainte ca programul să înceapă să ruleze.

Constantele sunt necesare pentru proiectarea programelor vizuale, sunt indispensabile atunci când se utilizează valori repetate în mod repetat în textul unui program și sunt convenabile dacă este necesară modificarea simultană a acestor valori de-a lungul întregului program.

Există trei tipuri de constante în Pascal:

Constante fără nume (cifre și numere, simboluri și șiruri de caractere, seturi);

Constante netipizate denumite;

Constante tipizate denumite.

Constante fără nume

Constantele fără nume nu au nume și, prin urmare, nu trebuie să fie declarate.

Tipul unei constante fără nume este determinat automat, implicit:

Orice succesiune de numere (poate precedată de semnul „-” sau „+”, sau despărțită de un singur punct) este percepută de compilator ca o constantă fără nume - un număr (întreg sau real);

Orice succesiune de caractere incluse în apostrofe este tratată ca o constantă fără nume - un șir;

Orice succesiune de numere întregi sau simboluri separate prin virgule, încadrate de paranteze drepte, este percepută ca o constantă fără nume - o mulțime.

În plus, există două constante speciale true și false legate de tipul de date boolean.

Exemplele de utilizare a constantelor fără nume includ următorii operatori:

real2:= 12,075 + x;

șir4:= "abc" + șir44;

set5:= * set55;

boolean6:= adevărat;

Constante netipizate

Constantele numite, după cum sugerează numele lor, trebuie să aibă un nume. Prin urmare, aceste nume trebuie raportate compilatorului, adică descrise într-o secțiune specială const.

Dacă nu specificați tipul unei constante, atunci prin aspectul acesteia compilatorul însuși va determina cărui tip (de bază) ar trebui să fie atribuită. Orice constantă deja descrisă poate fi utilizată la declararea altor constante, variabile și tipuri de date. Iată câteva exemple de descriere a constantelor numite netipizate:

Constante tipizate

Constantele numite tastate sunt variabile(!) cu o valoare inițială care este deja cunoscută până la pornirea programului. Prin urmare, în primul rând, constantele tastate nu pot fi utilizate pentru a defini alte constante, tipuri de date și variabile, iar în al doilea rând, valorile acestora pot fi modificate în timp ce programul rulează.

Constantele tastate sunt descrise folosind următorul șablon:

const<имя_константы> : <тип_константы> = <начальное_значение>;

Exemplele de mai jos arată cum să faceți acest lucru:

const n: întreg = -10;

b: boolean = adevărat;

Vom oferi exemple de constante tipizate de alte tipuri pe măsură ce studiem tipurile de date corespunzătoare.

Tipuri de date Pascal

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 de descriere a variabilelor (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.

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 și, în plus, capacitatea de a crea noi tipuri de date pe baza celor existente (standard sau definite din nou de programator însuși), care se numesc construite.

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

Tipuri de date ordinale (discrete).

Tipuri de date adresate

Tipuri de date structurate

Tipuri de date aritmetice

Tipuri de date de bază

Logic

Simbolic

Real

Netipizi

index indexat

Tipuri construite

Listabil

saptamana = (su, mo, tu, we, th, fr,sa);

Indicatorul tastat

Matrice

String șir

record record

Procedural

Obiect

Interval (interval)

Tipuri de date construite de programator

Tipuri de date ordinale

Dintre tipurile de date de bază, se remarcă tipurile ordinale. Acest nume poate fi justificat în două moduri:

1. Fiecare element de tip ordinal poate fi asociat cu un număr unic (ordinal). Numerotarea valorilor începe de la zero. Excepția sunt tipurile de date shortint, integer și longint. Numerotarea lor coincide cu valorile elementelor.

2. În plus, pe elemente de orice tip ordinal se definește o ordine (în sensul matematic al cuvântului), care depinde direct de numerotare. Astfel, pentru oricare două elemente de tip ordinal, se poate spune exact care dintre ele este mai mic și care este mai mare.

Rutine standard care gestionează tipuri de date ordinale

Următoarele funcții și proceduri sunt definite numai pentru tipurile ordinale:

1.Funcția ord(x) returnează numărul ordinal al valorii variabilei x (relativ la tipul căruia îi aparține variabila x).

2.Funcția pred(x) returnează valoarea care precede x (nu se aplică primului element al tipului).

3. Funcția succ(x) returnează valoarea după x (nu se aplică ultimului element al tipului).

4.Procedura inc(x) returnează valoarea după x (pentru tipurile de date aritmetice, aceasta este echivalentă cu operatorul x:=x+1).

5.Procedura inc(x,k) returnează k-a valoare după x (pentru tipurile de date aritmetice, aceasta este echivalentă cu operatorul x:=x+k).

6.Procedura dec(x) returnează valoarea anterioară x (pentru tipurile de date aritmetice, aceasta este echivalentă cu operatorul x:=x-1).

7.Procedura dec(x,k) returnează valoarea k-e anterioară x (pentru tipurile de date aritmetice aceasta este echivalentă cu operatorul x:=x-k).

La prima vedere, se pare că rezultatul utilizării procedurii inc(x) este exact același cu rezultatul utilizării funcției succ(x). Cu toate acestea, diferența dintre ele apare la limitele intervalului permis. Funcția succ(x) nu este aplicabilă elementului maxim al unui tip, dar procedura inc(x) nu va produce nicio eroare, ci, acționând conform regulilor de adunare a mașinii, îl va adăuga pe următorul numărului elementului. . Numărul, desigur, va ieși în afara intervalului și, din cauza trunchierii, se va transforma în numărul valorii minime a intervalului. Rezultă că procedurile inc() și dec() 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

tipul șaisprezece = 0..15;

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

Unitatea inițială va fi tăiată ș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 procedura dec(x) și funcția pred(x):

dec(min_element)= max_element

Tipuri de date legate de ordinal

1. Tipul boolean are două valori: fals și adevărat, iar următoarele egalități sunt valabile pentru ele:

ord(fals)=0, ord(true)=1, fals

pred(true)=fals, succ(false)=true,

inc(true)=fals, inc(false)=adevărat,

dec(true)=fals, dec(false)=adevărat.

2. Tipul de caracter char conține 256 de caractere ASCII extinse (de exemplu, „a”, „b”, „i”, „7”, „#”). Numărul caracterului returnat de funcția ord() este același cu numărul caracterului din tabelul ASCII.

3. Să rezumam tipurile de date întregi într-un tabel:

Tip de date

Numărul de octeți

Gamă

2147483648..2147483647

4. Tipurile de date enumerate sunt specificate în secțiunea tip prin listarea explicită a elementelor acestora. De exemplu:

tip săptămână =(sun,lun,tue,wed,thu,fri,sat)

Reamintim că pentru acest tip de date:

inc(sat) = soare, dec(sun) = sat.

5. Tipurile de date interval sunt specificate numai de limitele intervalului lor. De exemplu:

tip luna = 1..12;

budni = mon..fri;

6. Tipurile de date construite de programator sunt descrise în secțiunea 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țiunea de tip. Cu toate acestea, dacă se dorește, acest lucru se poate face și, de exemplu, dând definiții lungi și nume scurte. Să spunem prin introducerea unui nou tip de date

tip int = întreg;

Puteți scurta puțin textul programului.

Tipuri de date reale

Amintiți-vă că aceste tipuri de date sunt aritmetice, nu ordinale.

Tip de date

Numărul de octeți

Interval (valoare absolută)

1.5*10-45..3.4*1038

2.9*10-39..1.7*1038

5.0*10-324..1.7*10308

3.4*10-4932..1.1*104932

Tipuri de date construite

Vom lua în considerare aceste tipuri de date (împreună cu operațiunile definite pentru ele) în continuare pe parcursul mai multor prelegeri.

Operații și expresii

Operatii aritmetice

Să vorbim despre operații - acțiuni standard permise pentru variabile de unul sau altul tip de date de bază. Baza va fi operațiile aritmetice și logice.

Notă: Toți operatorii enumerați mai jos (cu excepția „-” unare și nu) necesită doi operanzi.

1. Operațiile logice (și - ȘI logic, sau - SAU logic, nu - NU logic, xor - SAU exclusiv) sunt aplicabile numai valorilor de tip boolean. De asemenea, rezultă valori booleene. Iată tabele de valori pentru aceste operații:

adevărat fals adevărat

fals fals fals

adevărat fals fals

2. Operații de comparare (=,<>, >, <, <=, >=) se aplică tuturor tipurilor de bază. Rezultatele lor sunt, de asemenea, valori booleene.

3. Operațiile de aritmetică întregi sunt aplicabile numai pentru tipurile întregi. Rezultatul lor este un număr întreg al cărui tip depinde de tipurile de operanzi.

a div b - împărțirea lui a cu b complet (probabil nu este nevoie să vă reamintim că împărțirea cu 0 este interzisă, deci în astfel de cazuri operația generează o eroare). Rezultatul va fi de un tip de date comun tipurilor cărora le aparțin operanzii.

De exemplu, (scurt div byte = întreg). Acest lucru poate fi explicat în felul următor: întregul este un tip minim din care atât octetul cât și scurtătura sunt subseturi.

a mod b - luând restul la împărțirea a la b. Tipul rezultatului, ca și în cazul precedent, este determinat de tipurile de operanzi, iar 0 este o valoare ilegală pentru b. Spre deosebire de modul de operare matematică, al cărui rezultat este întotdeauna un număr nenegativ, semnul rezultatului modului de operare „programator” este determinat de semnul primului său operand. Astfel, dacă la matematică (-2 mod 5) = 3, atunci avem (-2 mod 5) = -2.

a shl k - deplasați valoarea lui a cu k biți la stânga (acest lucru este echivalent cu înmulțirea valorii variabilei a cu 2k). Rezultatul operației va fi de același tip ca primul sau operand(i).

a shr k - deplasează valoarea lui a cu k biți la dreapta (acest lucru este echivalent cu împărțirea completă a valorii variabilei a la 2k). Rezultatul operației va fi de același tip ca primul sau operand(i).

și, sau, nu, xor - operații aritmetice binare care lucrează cu biți ai reprezentării binare a numerelor întregi, după aceleași reguli ca și operațiile logice corespunzătoare.

4. Operațiile aritmetice generale (+, -, *, /) se aplică tuturor tipurilor de aritmetice. Rezultatul lor aparține unui tip de date comun ambilor operanzi (singura excepție este operația de împărțire fracțională /, al cărei rezultat este întotdeauna un tip de date real).

Alte operațiuni

Există și alte operațiuni specifice valorilor unora dintre tipurile de date standard ale lui Pascal. Vom lua în considerare aceste operațiuni în secțiunile corespunzătoare:

#, în, +, *, : vezi prelegerea 5 „Simboluri. Linii. Mulțimi"

@, ^: vezi prelegerea 7 „Adrese și indicații”

Funcții aritmetice standard

Operațiile aritmetice includ și funcții aritmetice standard. Vă oferim o listă a acestora cu o scurtă descriere în tabel.

Funcţie

Descriere

Tipul argumentului

Tip de rezultat

Valoarea absolută (modulul) unui număr

Aritmetic

La fel ca tipul de argument

Arctangent (în radiani)

Aritmetic

Real

Cosinus (în radiani)

Aritmetic

Real

Exponent (de ex.)

Aritmetic

Real

Preluarea părții fracționale a unui număr

Aritmetic

Real

Luând întreaga parte dintr-un număr

Aritmetic

Real

Logaritm natural (baza e)

Aritmetic

Real

Verificarea dacă un număr este impar

Sensul numărului

Real

Rotunjiți la cel mai apropiat număr întreg

Aritmetic

Rotunjiți în jos - la cel mai apropiat număr întreg mai mic

Aritmetic

Sinus (în radiani)

Aritmetic

Real

Pătrare

Aritmetic

Real

Rădăcină pătrată

Aritmetic

Real

Expresii aritmetice

Toate operațiile aritmetice pot fi combinate între ele - desigur, ținând cont de tipurile de date permise pentru operanzii lor.

Operanzii oricărei operații pot fi variabile, constante, apeluri de funcții sau expresii construite pe baza altor operații. Toate împreună se numesc expresie.

Exemple de expresii aritmetice:

(X<0) and (y>0) - o expresie al cărei rezultat este de tip boolean;

z shl abs(k) - al doilea operand este un apel la funcția standard;

(x mod k) + min(a,b) + trunc(z) - o combinație de operații aritmetice și apeluri de funcții;

impar(round(x/abs(x))) - expresie „cu mai multe etaje”.

Ordinea de calcul

Dacă expresia conține paranteze, atunci calculele sunt efectuate în următoarea ordine: cu cât adâncimea de imbricare a parantezelor este mai mică, cu atât mai târziu se calculează operația cuprinsă în ele. Dacă nu există paranteze, atunci se calculează mai întâi valorile operațiilor cu prioritate mai mare, apoi cele cu prioritate mai mică. Mai multe operații consecutive cu aceeași prioritate sunt calculate în succesiune de la stânga la dreapta.

Tabelul 2.1. Priorități (pentru toate) operațiunile Pascal

Cele mai bune articole pe această temă