Cum sunt notate numerele întregi în turbo pascal. TurboPascal. Tipuri de date. Ordinea operațiunilor

De obicei, datele în timpul prelucrării computerizate sunt prezentate fie sub formă de valori individuale, fie sub formă de agregate ale acestora. Una dintre cele mai importante, și poate cea mai importantă caracteristică a unei cantități este tipul acesteia.

Ce definesc tipurile de date Pascal?

În primul rând, valorile posibile ale variabilelor, funcțiilor, expresiilor, constantelor aparținând tipului original; în al doilea rând, determină forma internă de reprezentare a datelor într-un computer; și în al treilea rând, definește funcțiile și operațiunile efectuate asupra valorilor care aparțin unuia sau altuia.

În limbajul Pascal, toate variabilele care vor fi utilizate ulterior în program trebuie declarate în secțiunea de descriere, indicând tipul lor. Descrierea obligatorie constantă a tipului duce la apariția redundanței în textul sursă al programelor, dar, în același timp, această redundanță este un instrument auxiliar în procesul de dezvoltare a programelor - care este o proprietate necesară a limbajelor moderne de nivel înalt. .

Pascal distinge următoarele tipuri de date:

Tabelul de mai jos prezintă varietățile de tipuri de date simple în Pascal și caracteristicile acestora:

Următoarele proprietăți sunt tipice pentru tipurile ordinale incluse în grupul celor simple:

  1. Un set infinit de valori de tip ordinal este o mulțime ordonată mărginită;
  2. Funcția standard Ord (returnează numărul ordinal al unei anumite valori dintr-un anumit tip) se aplică fiecărui tip ordinal posibil;
  3. Pentru fiecare tip de ordinal posibil, atunci când este nevoie, puteți aplica specificații standard Pred și Succ, care returnează valorile anterioare și, respectiv, următoare;
  4. Pentru fiecare tip ordinal posibil, ocazional, puteți aplica funcțiile standard Scăzut și Ridicat, care returnează, respectiv, cele mai mici și, respectiv, cele mai mari valori ale tipului dat.

Echivalența și compatibilitatea tipurilor de date:

La fel de importante în limbajul Pascal sunt conceptele de echivalență și compatibilitate de tip. Să definim aceste concepte. Două tipuri TIP1 și TIP2 sunt numite echivalente dacă este îndeplinită una dintre următoarele condiții:

  1. TIP1 și TIP2 au același nume de tip;
  2. tipul TIP2 este declarat folosind tipul TIP1 folosind fie o egalitate, fie o secvență de egalități:

tip TIP1 = Integer; TIP2 = TIP1; TIP3 = TIP2;

Acum să introducem conceptul de compatibilitate de tip. Se spune că tipurile sunt compatibile dacă:

  1. aceste tipuri sunt echivalente;
  2. sunt fie numere întregi, fie reale;
  3. unul dintre cele două tipuri este interval, celălalt este baza sa;
  4. ambele tipuri sunt tipuri de intervale cu o bază comună;
  5. unul dintre cele două tipuri este șir, celălalt este caracter.

Restricțiile de compatibilitate de tip pot fi ocolite folosind tipul de turnare:

Când tipul de turnare este utilizat pe o referință de variabilă, variabila este tratată ca o instanță a tipului reprezentat de identificatorul de tip. Mărimea unei variabile (adică numărul de octeți pe care îi ocupă variabila) trebuie să fie egală cu dimensiunea tipului reprezentat de identificatorul de tip.

Tipul de date definește setul de valori permise și setul de operațiuni permise.

Tipuri simple.

Tipurile simple sunt împărțite în ORDINALE și REALE.

1. Tipuri ordinale , la randul lor sunt:

un întreg

Pascal definește 5 tipuri de numere întregi, care sunt determinate în funcție de semnul și valoarea pe care le va lua variabila.

Tastați numele

Lungime (în octeți)

Interval de valori

32 768...+32 767

2 147 483 648...+2 147 483 647

b) logic

Numele acestui tip este BOOLEAN. Valorile booleene pot fi una dintre constantele booleene: TRUE (adevărat) sau FALSE (fals).

c) simbolic

Numele acestui tip CHAR - ocupă 1 octet. Valoarea tipului de caracter este setul tuturor caracterelor PK. Fiecărui caracter i se atribuie un număr întreg în intervalul 0...255. Acest număr servește drept cod pentru reprezentarea internă a personajului.

2. TIPURI REALE .

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

Lungimea tipului de date numerice, octeți

Numele tipului de date numerice

Numărul de cifre semnificative ale unui tip de date numerice

Interval de exponent zecimal al tipului de date numerice

2*1063 +1..+2*1063 -1

TIPURI STRUCTURATE

Tipurile de date structurate definesc un set ordonat de variabile scalare și sunt caracterizate de tipul componentelor lor.

Tipurile de date structurate, spre deosebire de cele simple, definesc seturi de valori complexe cu un singur nume comun. Putem spune că tipurile structurale definesc un anumit mod de a forma noi tipuri din cele existente.

Există mai multe metode de structurare. După metoda de organizare și tipul de componente în tipurile de date complexe, se disting următoarele soiuri: tip obișnuit (matrice); tip combinat (înregistrări); tip de fișier (fișiere); mai multe tipuri; tipul șirului de caractere (șiruri de caractere); Turbo Pascal versiunea 6.0 și mai târziu introduce un tip de obiect (obiecte).

Spre deosebire de tipurile de date simple, datele de tip structurat sunt caracterizate de o multitudine de elemente care formează acest tip, adică o variabilă sau constantă de tip structurat are întotdeauna mai multe componente. Fiecare componentă la rândul său poate aparține unui tip structurat, adică. posibilă cuibărit de tipuri.

1. Matrice

Matricele din Turbo 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 comandate cu ușurință și oricare dintre ele poate fi accesată pur și simplu prin specificarea unui număr de serie.

O descriere a matricei este definită după cum urmează:

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

Aici<имя типа>- identificator corect;

Array, of - cuvinte rezervate (array, from);

<сп.инд.типов>- o listă cu unul sau mai multe tipuri de index separate prin virgule; parantezele pătrate din jurul listei sunt o cerință de sintaxă;

<тип>- orice tip de Turbo Pascal.

Ca tipuri de index în Turbo Pascal, puteți utiliza orice tipuri ordinale, cu excepția tipurilor LongInt și interval cu tipul de bază LongInt.

Adâncimea de imbricare a tipurilor structurate în general, și deci a matricelor, este arbitrară, astfel încât numărul de elemente din lista de indici de tip (dimensiunea matricei) nu este limitat, cu toate acestea, lungimea totală a reprezentării interne a oricărei matrice nu poate fi limitată. depășește 65520 octeți.

2. Înregistrări

O înregistrare este o structură de date care constă 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 tipuri variate. Pentru a putea face referire la una sau la alta componentă a înregistrării, câmpurile sunt denumite.

Structura unei declarații de tip de înregistrare este următoarea:

< Numetip>= ÎNREGISTRARE< cn. câmpuri> Sfârșit

Aici<имя типа>- identificator corect;

RECORD, END - cuvinte rezervate (record, end);

<сп.полей>- lista câmpurilor; este o succesiune de secțiuni ale unei înregistrări separate prin punct și virgulă.

3. Seturi

Seturile sunt un set de același tip de obiecte logice legate între ele. Natura relațiilor dintre obiecte este doar implicată de programator și nu este controlată în niciun fel de Turbo Pascal. numărul de elemente incluse în mulţime poate varia de la 0 la 256 (o mulţime care nu conţine elemente se numeşte goală).Seturile diferă de matrice şi înregistrări prin variabilitatea numărului elementelor lor.

Două mulțimi sunt considerate echivalente dacă și numai dacă toate elementele lor sunt aceleași, iar ordinea elementelor mulțimii este indiferentă. Dacă toate elementele unui set sunt incluse și în altul, spunem că primul set este inclus în al doilea.

Descrierea unui tip de set este:

< Numetip>=SET DE< bazele. tip>

Aici<имя типа>- identificator corect;

SET, OF - cuvinte rezervate (set, from);

<баз.тип>- tipul de bază al elementelor mulţimii, care poate fi orice tip ordinal, cu excepţia CUVÂNTULUI, ÎNTREGUL şi LONGINT.

Pentru a specifica o mulțime, se folosește așa-numitul constructor de mulțimi: o listă de specificații ale elementelor de mulțime, separate între ele prin virgule; lista este cuprinsă între 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ă.

4. Fișiere

Un fișier este fie o zonă numită memorie externa PC-ul sau dispozitivul logic este o sursă potențială sau un receptor de informații.

Orice fișier are trei caracteristici

    are un nume, ceea ce face posibil ca programul să lucreze cu mai multe fișiere în același timp.

    conţine componente de acelaşi tip. Tipul de componentă poate fi orice tip Turbo Pascal, cu excepția fișierelor. Cu alte cuvinte, nu puteți crea un „fișier de fișiere”.

    iar lungimea fișier creat nu este specificat în niciun fel atunci când este declarat și este limitat doar de capacitatea dispozitivelor de memorie externe.

Un tip de fișier sau o variabilă de tip de fișier poate fi specificat în unul din trei moduri:

< Nume>= DOSARUL DE< tip>;

< Nume>=TEXT;

<имя>= FIȘIER;

Aici<имя>- numele tipului de fișier (identificatorul corect);

FILE, OF - cuvinte rezervate (file, from);

TEXT este numele tipului standard de fișiere text;

<тип>- orice tip de Turbo Pascal, cu excepția fișierelor.

În funcție de metoda de declarare, se pot distinge trei tipuri de fișiere:

Fișiere tipizate (specificate prin clauza FILE OF...);

fișiere text (determinate de tipul TEXT);

fișiere netipizate (determinate de tipul FILE).

Despre conversia tipurilor de date numerice în Pascal

Conversiile implicite (automate) ale tipurilor de date numerice sunt aproape imposibile în Pascal. Se face o excepție numai pentru tipul întreg, care poate fi folosit în expresii de tip real. De exemplu, dacă variabilele sunt declarate după cum urmează:

VarX: întreg; Y: real

apoi operatorul

va fi corectă din punct de vedere sintactic, deși o expresie întreagă se află în dreapta semnului de atribuire, iar o variabilă reală este în stânga, compilatorul va face automat conversia tipurilor de date numerice. Conversia inversă automată de la tipul real la tipul întreg este imposibilă în Pascal. Să ne amintim câți octeți sunt alocați pentru variabilele de tip întreg și real: 2 octeți de memorie sunt alocați pentru tipul de date întreg și 6 octeți pentru real. Există două funcții încorporate pentru conversia realului în întreg: round(x) rotunjește un x real la cel mai apropiat număr întreg, trunc(x) trunchiază un număr real eliminând partea fracțională.

Datele sunt concept general pentru tot ceea ce funcționează computerul. 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.Fiecărei variabile întâlnite în program trebuie să fie asociat un singur tip.

Există două tipuri de tipuri simple în Pascal: tipuri ordinale și tipuri reale. Un tip ordinal este fie definit de programator (un tip enumerat sau un tip de gamă), fie desemnat prin numele unuia dintre cele trei tipuri ordinale predefinite: Boolean, Integer sau Char . Tipul real este notat prin numele tipului predefinit Real .

Un tip enumerat se caracterizează prin setul de valori distincte pe care îl conține, printre care se definește o ordine liniară. Valorile însele sunt desemnate în definiția acestui tip prin nume.

Tipul intervalului (restricționat) este specificat folosind valorile minime și maxime ale tipului ordinal descris anterior. Astfel este generat 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 secvența numerelor de serie 0,1,2,...; se face o excepție numai pentru numerele ordinale întregi care se mapează pe ele însele. Fiecare tip ordinal are o valoare minimă și maximă. Pentru toate valorile, cu excepția valorii minime, există o valoare anterioară, iar pentru toate valorile, cu excepția valorii maxime, există o valoare ulterioară.

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

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

tip boolean (boolean)

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

Există următoarele operații logice care produc o valoare booleană atunci când sunt aplicate operanzilor logici:
și - ȘI logic
sau - SAU logic
nu - NU logic

De asemenea, oricare dintre operațiile relaționale (= , = , > , in) oferă un rezultat boolean.

Î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 F este impar și fals dacă F este par
eoln(F) - verificați sfârșitul unui șir
eof(F) - verificați sfârșitul fișierului

Tip întreg (întreg)

Tipul întreg include un set de numere întregi.

Când se operează pe operanzi întregi, următoarele operații aritmetice produc valori întregi:
* - înmulțire
div - partea întreagă a diviziunii
mod - modulo
+ - adaos
- - scădere

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

Patru funcții predefinite importante oferă, de asemenea, întregul rezultat:
abs(I) - valoarea absolută a valorii întregi I
sgr(I) - valoarea întreagă a lui I pătrat, cu condiția ca 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ă trunc(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 de tip Char sunt elemente ale unui set finit și ordonat de caractere. Valorile de acest tip sunt notate printr-un singur caracter cuprins între ghilimele simple (apostrofe). Dacă aveți nevoie de apostroful în sine, atunci este scris de două ori.
Exemple: "*" "G" "3" """" "X"

    Următoarele ipoteze minime sunt valabile pentru tipul Char:
  1. Cifrele zecimale de la 0 la 9 sunt ordonate în funcție de valorile lor numerice și se succed una pe alta (de exemplu, succ("5") = "6").
  2. Pot exista litere mari de la „A” la „Z”; dacă da, acestea sunt comandate în ordine alfabetică, dar nu se succed neapărat unul pe altul (de exemplu, „A”
  3. Poate exista literă mică de la „a” la „z”; dacă da, acestea sunt ordonate alfabetic, dar nu se succed neapărat (de exemplu, „a”

Există două funcții predefinite pentru maparea unui anumit set de caractere la numere de serie și invers:
ord(C) - dă numărul ordinal al caracterului C din setul ordonat de caractere menționat
chr(I) - dă caracterul cu I ordinal

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

Cometariu. Simbolul care precede sau care urmează acestui caracter depinde de setul specificat de caractere, deci ambele aceste relații sunt valabile numai dacă există caracterul precedent sau următor.

Tip real (Real)

Valorile reale sunt elemente ale unui subset de numere reale definit de implementare.

Toate operațiile pe valori reale sunt aproximări, precizia lor este determinată de implementarea (mașina) cu care aveți de-a face. Tipul real se referă la 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 întreg), următoarele operații produc un rezultat real:
* - înmulțire
/ - diviziune (ambele operanzi pot fi numere întregi, dar rezultatul este întotdeauna real)
+ - adaos
- - scădere

Există funcții predefinite care dau un rezultat real cu 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 predefinite dau un rezultat real cu un număr întreg sau un argument real:
sin(X) - dă sinusul lui X; X exprimat în radiani
cos(X) - dă cosinusul lui X; X exprimat în radiani
arctan(X) - dă arc tangenta lui X exprimată în radiani
ln(X) - dă valoarea logaritmului natural (cu 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

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

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 operațiilor. Compatibilitate și conversii ale tipurilor de date.

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

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

Pentru confortul programatorilor, limbajul Pascal există multe tipuri de date standard și plus capacitatea de a crea noi tipuri.

Când construiți noi tipuri de date bazate pe cele existente (standard sau definite din nou de programator însuși), trebuie să vă amintiți 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 limbajul Pascal este prezentată în tabel:

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

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

De exemplu:

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

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

tip Int = Integer;

puteți scurta puțin textul programului.

Tipurile construite standard pot fi, de asemenea, omise în secțiune tip. Cu toate acestea, în unele cazuri, trebuie încă 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 proeminente 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 x:= x + 1).
  5. Procedură Inc(x, k) returnează k-a valoare după x (pentru tipuri de date aritmetice aceasta este echivalentă cu x:= x + k).
  6. Procedură Dec(X) returnează valoarea care precede x (pentru tipuri de date aritmetice aceasta este echivalentă cu x:= x - 1).
  7. Procedură Dec(x, k) returnează valoarea k-e care precede x (pentru tipuri de date aritmetice aceasta este echivalentă cu x:= x - k).

La prima vedere, se pare că 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 acceptabil. Funcţie Succ(X) nu este aplicabil elementului maxim al tipului, ci procedura Inc(X) nu va da 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() percepe orice tip ordinal ca fiind „închis într-un inel”: imediat după ultimul vine din nou prima valoare.

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

tip Sixteen = 0 .. 15 ;

o încercare 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 va dovedi 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)și caracteristici pred(X):

Tipuri de date legate de ordinal

Să descriem acum tipuri de date ordinale in detalii.

  1. tip boolean boolean are două valori: False și True și 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 caracter în Tabelul ASCII.
  3. Tipuri de date întregi hai sa o punem intr-un tabel:
  4. enumerate tipurile de date sunt specificate în secțiune tip 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 stabilite numai de limitele intervalului lor. De exemplu:

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

  6. De asemenea, 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 ordinea este inversată litere latine: dacă este de tip standard