Tipuri de date întregi. Pascal

Datele sunt un concept general pentru tot ceea ce operează. Mașină de calcul. Orice tip de date definește setul de valori pe care le poate lua o anumită variabilă și operațiunile care le pot fi aplicate.Fiecărei variabile întâlnite în program trebuie 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 interval), 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.

Un tip de interval (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 dau, 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 (de exemplu, succ("5") = "6").
  2. Pot exista litere mari de la „A” la „Z”; dacă da, 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, 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 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 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țiunile pe valori reale sunt aproximative, 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 număr î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

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

cel mai frecvent în matematică tipuri numerice- Acest întreg numere care reprezintă un număr infinit de valori discrete și valabil numere care reprezintă un continuum nelimitat de valori.

Descrierea tipurilor de date numerice (numere întregi) Pascal

În cadrul aceluiași limbaj, pot fi implementate diferite submulțimi ale mulțimii de numere întregi. Gama de valori posibile ale tipurilor numerice întregi depinde de reprezentarea lor internă, care poate fi de unul, doi sau patru octeți. Deci, Pascal 7.0 utilizează următoarele tipuri de date numerice întregi:

Cu întreg tipuri de date numerice Pascal poate efectua următoarele operații:

  • Aritmetic:
    adăugare(+);
    scădere(-);
    multiplicare(*);
    restul diviziunii (mod);
    exponentiarea;
    plus unar (+);
    minus unar (-).
  • Operațiuni de relație:
    relație de egalitate (=);
    relație de inegalitate (<>);
    raport mai mic (<);
    raport mai mare decât (>);
    raportul nu mai mic decât (>=);
    nu mai mult (<=).

Când acţionează cu tipuri de date numerice întregi tipul rezultatului va corespunde tipului operanzilor, iar dacă operanzii sunt de diferite tipuri întregi, tipului operandului care are cardinalitatea maximă (gamă maximă de valori). Depășirea posibilă a rezultatului nu este controlată în niciun fel (este important!) , ceea ce poate duce la erori.

O atenție deosebită trebuie acordată operațiunii de divizare a tipurilor de date numerice întregi. În Pascal sunt permise două operații de împărțire, care sunt respectiv notate "/" Și div. Trebuie să știți că rezultatul împărțirii „/” nu este un întreg, dar numar real(acest lucru este adevărat chiar dacă împărțiți 8 la 2, adică 8/2=4,0). Divizia div este diviziune intregi, adică tipul de rezultat întreg.

Descrierea tipurilor de date numerice (reale) Pascal

Tipul de date numerice reale se referă la un subset de numere reale care pot fi reprezentate într-un așa-numit format în virgulă mobilă cu un număr fix de cifre. Cu virgulă mobilă, fiecare tip de date numerice este reprezentat ca două grupuri de cifre. Primul grup de cifre se numește mantisa, al doilea - ordinea. În general, un tip de date numerice în formă de virgulă mobilă poate fi reprezentat astfel: X= (+|-)MP (+ | -) r , unde M este mantisa numărului; r este ordinea numărului (r este un număr întreg); P este baza sistemului numeric. De exemplu, pentru o bază zecimală, reprezentarea lui 2E-1 (aici E este baza sistemului numeric zecimal) va arăta astfel: 2*10 -1 =0.2, iar reprezentarea lui 1.234E5 va corespunde cu: 1.234* 105 =123400,0.

Pascal folosește următoarele tipuri de numere reale, care definesc un număr arbitrar doar cu o precizie finită, în funcție de formatul intern al numărului real:

Când se descrie o variabilă reală de tip real, o variabilă de 4 octeți va fi creată în memoria computerului. În acest caz, 3 octeți vor fi dați sub mantise și unul - sub ordin.

Puteți efectua următoarele operații pe tipuri de date numerice reale:

  • Aritmetic:
    adăugare (+);
    scădere(-);
    multiplicare(*);
    Divizia(/);
    exponentiarea;
    plus unar (+);
    minus unar (-).
  • Operațiuni de relație:
    relație de inegalitate (<>);
    raport mai mic (<);
    raport mai mare decât (>);
    raportul nu mai mic decât (>=);
    nu mai mult (<=).

După cum puteți vedea, Pascal se caracterizează printr-o gamă bogată de tipuri reale, dar acces la tipuri de date numerice singur, dublaȘi extins posibil numai în moduri speciale de compilare. Aceste tipuri de date numerice sunt concepute pentru suport hardware pentru aritmetica în virgulă mobilă și pentru utilizarea lor eficientă, PC-ul trebuie să includă un coprocesor matematic.

O poziție specială în Pascal este ocupată de un tip de date numerice. comp, care este tratat ca un număr real fără părți exponențiale și fracționale. De fapt, comp este un întreg „mare” cu semn care stochează 19..20 de cifre zecimale semnificative. În același timp, tipul de date numerice compîn expresii, este pe deplin compatibil cu alte tipuri reale: toate operațiile reale sunt definite pe el, poate fi folosit ca argument al funcțiilor matematice etc.

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 tip întreg, care poate fi folosit în expresii precum 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ă este tip automat real pe tip întreg nu este posibil în Pascal. Să ne amintim câți octeți sunt alocați pentru variabile precum întregȘi real: sub tipul de date întreg întreg Sunt alocați 2 octeți de memorie, iar sub real - 6 octeți. Pentru conversie real V întreg există două funcții încorporate: rundă(x) rotunjește un x real la cel mai apropiat număr întreg, trunchi(x) trunchiază un număr real prin eliminarea părții fracționale.

Pentru ca mașina să poată procesa orice intrare, trebuie să „înțeleagă” ce tip aparțin variabilele cărora sunt introduse valorile. În absența informațiilor despre formatul datelor, computerul nu va putea determina dacă aceasta sau acea operațiune este permisă într-un anumit caz: de exemplu, este clar intuitiv că nu puteți ridica o scrisoare unei puteri sau nu puteți lua integrala. de o sfoară. Astfel, utilizatorul trebuie să determine ce acțiuni pot fi efectuate cu fiecare variabilă.

Ca și în alte limbaje de programare de nivel înalt, tipurile de variabile din Pascal sunt optimizate pentru a îndeplini sarcini de direcții diferite, au o gamă diferită de valori și lungime în octeți.

Diviziunea tipurilor de variabile

Tipurile de variabile în Pascal sunt împărțite în simple și structurate. Tipurile simple includ tipurile reale și ordinale. Cele structurate includ matrice, înregistrări, seturi și fișiere. Pointere, obiecte și tipuri procedurale alocate separat.

Luați în considerare tipurile ordinale și reale. Tipurile ordinale includ 5 tipuri de numere întregi, un tip enumerat și un tip de interval.

Tipuri ordinale

Există 5 tipuri de numere întregi, care diferă în lungime în octeți și interval de valori.

Lungimea Byte și ShortInt este de 1 octet. Diferența dintre ele este că Byte stochează doar valori nenegative, în timp ce ShortInt vă permite să stocați valori negative (de la -128 la +127). Tipurile Word și Integer sunt similare între ele, singura diferență fiind că dimensiunea lor este de 2 octeți.

În cele din urmă, LongInt vă permite să stocați atât valori negative, cât și pozitive folosind 4 octeți - în dimensiunea numerică a puterii a 16-a de fiecare parte a zero. Diverse tipuri de variabile în Pascal contribuie la rezolvarea eficientă a sarcinilor utilizatorului, deoarece în fiecare caz specific poate fi necesară atât o gamă mică, cât și o gamă largă de valori și pot exista, de asemenea, restricții privind cantitatea de memorie alocată. .

Este important să înțelegeți că zero ocupă la fel de mult spațiu de memorie ca orice alt număr. Astfel, atunci când se formează un interval de valori, numărul minim negativ modulo va fi cu unul mai mult decât unul pozitiv: de exemplu, de la -128 la +127.

Variabilele care îi aparțin pot fi TRUE (adevărat) sau FALSE (fals) și necesită 1 octet de memorie.

Tipul CHAR vă permite să stocați oricare dintre numeroasele caractere care există în memoria computerului. În același timp, în variabilele simbolice în Pascal, este stocat efectiv doar codul caracterului, în conformitate cu care este afișată forma sa grafică.

Tipuri reale

Printre tipurile de variabile în Pascal, există mai multe numerice cu posibilitatea de a scrie o parte fracțională. Diferența dintre tipurile Single, Real, Double și Extended se reduce la intervalul de valori acceptate, la numărul de cifre semnificative după virgulă zecimală și la dimensiunea în octeți.

În conformitate cu ordinea prezentată mai sus, o variabilă de fiecare tip va ocupa 4, 6, 8 sau 10 octeți.

Matrice

Tipurile de date structurate sunt complexe și vă permit să combinați un număr de valori simple într-o singură variabilă. Un exemplu izbitor este o matrice, care poate fi specificată după cum urmează:

String=matrice de caractere;

Astfel, am primit un tip numit String, care vă permite să setați variabile cu o lungime de 100 de caractere. Ultima linie specifică direct o matrice unidimensională Y de tip String. Descrierea variabilelor în Pascal se realizează plasând identificatorul în partea stângă, iar valoarea variabilei în dreapta, după semnul egal.

Intervalul de index înscris vă permite să accesați fiecare element specific al matricei:

În acest caz, citim al doilea element al tabloului Y creat mai devreme.

Un caz special al unei matrice unidimensionale sunt, de asemenea, variabile șir în Pascal, deoarece un șir este o secvență de caractere, adică elemente de tip char.

Intrări

Înregistrarea constă din mai multe câmpuri completate cu date de orice tip, cu excepția fișierului. În general, o variabilă de acest tip este similară cu un element de bază de date. De exemplu, puteți introduce numele și numărul de telefon al unei persoane:

tip NTel = Record

Prima linie conține numele tipului în stânga și înregistrarea cuvântului de serviciu în dreapta. Al doilea rând conține câmpul cu numele, al treilea - numărul de telefon. Cuvântul „sfârșit” indică faptul că am introdus toate câmpurile pe care le-am dorit, iar acest lucru completează procesul de creare a unei înregistrări.

În final, pe ultima linie, definim variabila One, care este de tip NTel.

Vă puteți referi atât la înregistrarea ca întreg, cât și la componentele sale individuale, de exemplu: one.NAME (adică nume_variabilă.nume_câmp_înregistrare).

Fișiere

Pascal vă permite să lucrați cu fișiere text, tastate și netascate, care sunt o secvență structurată de componente care au același tip.

Când citiți sau scrieți într-un fișier, atât adresa completă, cât și forma sa scurtă pot fi utilizate:

„C:\Folder\File2.txt”

Forma scurtă este utilizată atunci când fișierul se află în folderul în care este stocat programul care îl accesează. Formularul complet poate fi folosit în orice circumstanță.

Puteți seta o variabilă de tip de fișier astfel:

f1: fișierul întregului;

Pentru a lucra cu fișiere, sunt utilizate diverse funcții și proceduri care asociază o variabilă cu un fișier de pe disc, o deschid pentru citire, scriere și suprascriere, închiderea acesteia când ați terminat, permițându-vă să creați un nou nume și ștergerea fișierului de pe computer .

In cele din urma

Fără capacitatea de a utiliza diferite tipuri de variabile în Pascal, utilizatorul nu va putea implementa nici cea mai simplă sarcină. Pentru ca programul să execute algoritmul fără erori, este necesar să învețe atât cuvintele de serviciu, cât și sintaxa, deoarece mașina poate „înțelege” comenzile numai dacă sunt scrise în singurul mod corect.

Tipurile ordinale includ (vezi Figura 4.1) tipul întreg, boolean, caracter, enumerat și interval. Pentru oricare dintre ele este aplicabilă funcția ORD(X), care returnează numărul ordinal al valorii expresiei X. Pentru tipurile întregi, funcția ORD(X) returnează însăși valoarea lui X, adică. ORD(X) = X pentru X de orice tip de top. Aplicarea ORD(X) la tipurile booleene, caractere și enumerate produce un număr întreg pozitiv în intervalul de la 0 la 1 (boolean), de la 0 la 155 (caracter), de la 0 la 65535 (enumerat). Un tip de interval reține toate proprietățile tipului ordinal subiacent, astfel încât rezultatul aplicării funcției ORD(X) la acesta depinde de proprietățile acelui tip.

Funcțiile pot fi aplicate și la tipurile ordinale:

PRED (X) - returnează valoarea anterioară a tipului ordinal (valoarea care corespunde ordinalului ORD(X)- 1), adică.

ORD(PRED(X)) = ORD(X) - 1;

SUCC(X) - Returnează următoarea valoare ordinală care corespunde ordinalului ORD(X) +1, adică.

ORD(SUCC(X)) = ORD(X) + 1.

De exemplu, dacă programul definește o variabilă

atunci funcția PRED(C) va returna valoarea „4”, iar funcția SUCC(C) va returna valoarea „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 segment pe axa numerelor, atunci funcția PRED(X) nu este definită pentru capătul din stânga și SUCC(X) nu este definit pentru capătul drept al acestui segment.

tipuri de numere întregi. Gama de valori posibile pentru tipurile întregi depinde de reprezentarea lor internă, care poate fi unul, doi sau patru octeți. În tabel. 4.1 oferă numele tipurilor întregi, lungimea reprezentării lor interne în octeți și intervalul de valori posibile.

Tabelul 4.1

Când utilizați proceduri și funcții cu parametri întregi, trebuie să vă ghidați după „imbricarea” tipurilor, adică oriunde poate fi folosit WORD, este permis BYTE (dar nu invers), LONGINT „include” INTEGER, care, la rândul său, include SHORTINT.

Lista procedurilor și funcțiilor aplicabile tipurilor întregi este dată în Tabelul 4.2. în litere b, s, w, i, l expresii de tip BYTE, SHORTINT, WORD, INTEGER și, respectiv, LONGINT, x este o expresie a oricăruia dintre aceste tipuri; scrisori vb, vs, vw, vi, vl, vx denotă variabile ale tipurilor corespunzătoare. Un parametru opțional este indicat între paranteze drepte.

Tabelul 4.2

Proceduri și funcții standard aplicabile tipurilor î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
Buna eu) octeți Returnează octetul înalt al argumentului
salut(w) aceeași La fel
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) Ca parametru Returnează un număr pseudo-aleatoriu distribuit uniform în intervalul 0...(w-l)
sgr(x) X Returnează pătratul argumentului
schimb(i) Întreg Schimbați octeți într-un cuvânt
schimb(w) Cuvânt

Când se acționează asupra numerelor întregi, tipul rezultatului va corespunde tipului operanzilor, iar dacă operanzii sunt de diferite tipuri întregi, tipului operandului care are cardinalitatea maximă (gama maximă de valori). Posibila depășire a rezultatului nu este controlată în niciun fel, ceea ce poate duce la neînțelegeri, de exemplu:

a:= 32767; (Valoare INTEGER maximă posibilă)

x:= a + 2; (Depășire în timp ce se evaluează această expresie !}

y:= LongInt(a)+2; (Nu există depășire după turnarea variabilei într-un tip mai puternic)

WriteLn(x:10:0, y:10:0)

Ca rezultat al rulării programului, obținem

tip boolean. Valorile booleene pot fi una dintre constantele predeclarate FALSE (fals) sau TRUE (adevărat). Regulile pentru ei sunt:

Fals< True;

succ(False)=Adevărat;

prezice(Adevărat) = Fals.

Deoarece tipul boolean este un tip ordinal, poate fi folosit într-un operator de tip numărabil, astfel:

pentru 1:= fals la adevărat face ....

tip de caracter. 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 și este returnat de funcția ORD.

Codul ASCII este folosit pentru codare ( Codul American Standard pentru Schimbul de Informații Codul American Standard pentru Schimbul de Informații). Acesta este un cod pe 7 biți, adică poate codifica doar 128 de caractere în intervalul de la 0 la 127. În același timp, într-un octet de 8 biți rezervat pentru stocarea unui caracter în Turbo Pascal, puteți codifica de două ori mai multe caractere în intervalul de la 0 la 255. prima jumătate a caracterelor PC cu codurile 0...127 corespunde standardului ASCII (Tabelul 4.3). A doua jumătate a caracterelor cu codurile 128...255 nu este limitată de cadrul rigid al standardului și se poate modifica pe PC-uri de diferite tipuri (Anexa 2 arată câteva codificări comune ale acestor caractere).

Tabelul 4.3

Codificarea caracterelor conform standardului ASCII
Cod Simbol Cod Simbol Cod Simbol Cod Simbol
NUL BL ® "
ZON ! A A
STX " ÎN b
ETX # CU Cu
EOT $ D d
ENQ % E e
ASC & F f
BEL " G g
BS ( H h
NT ) eu i
LF * J j
VT + k k
FF , L i
CR - M m
ASA DE . N n
SI / DESPRE
DEL p P
DC1 Q q
DC2 R r
DC3 S s
DC4 T t
NAK U u
SYN V V
ETB w w
POATE SA X X
EM La La
SUB : z z
ESC / [ {
FS < \ l
GS = ] }
RS > ^ ~
NE ? - n

Simbolurile cu codurile 0...31 se referă la coduri de service. Dacă aceste coduri sunt folosite în textul simbolic al unui program, ele sunt considerate spații. Când sunt utilizate în operațiunile I/O, acestea pot avea următoarele semnificații singure:

Simbol Cod Sens
BEL apel; afișarea acestui simbol este însoțită de un semnal sonor
NT Filă orizontală; când este afișat, mută cursorul într-o poziție care este un multiplu de 8 plus 1 (9, 17, 25 etc.)
LF Traducerea liniilor; când este afișat pe ecran, toate caracterele ulterioare vor fi afișate începând din aceeași poziție, dar pe linia următoare
VT Filă verticală; când este afișat pe ecran este înlocuit cu un caracter special
FF Pagina rulată; formează o pagină atunci când iese către imprimantă, când este afișată pe ecran este înlocuită cu un caracter special
CR Retur transport; introdus prin apăsarea tastei Enter (atunci când este introdus folosind READ sau READLN înseamnă comanda „Enter” și nu se încadrează în buffer-ul de intrare; când ieșire înseamnă comanda „Continuați ieșirea de la începutul liniei curente”)
SUB Sfârșitul dosarului; introdus de la tastatură apăsând Ctrl-Z; este înlocuit cu un caracter special în ieșire
SSC Sfârșitul lucrării; introdus de la tastatură prin apăsarea tastei ESC; este înlocuit cu un caracter special în ieșire

Operațiile relaționale și funcțiile încorporate sunt aplicabile tipului CHAR: CHR(B) - funcție de tip CHAR; convertește expresia B de tip BYTE într-un caracter și o returnează cu valoarea sa;

UPCASE(CH) - functie de tip CHAR; returnează o literă mare dacă CH este o literă latină minusculă, în caz contrar returnează caracterul CH însuși, de exemplu:

cl:= UpCase("s");

c2:= UpCase("F");

ScrieLn(cl," ",c2)

Deoarece funcția UPCASE nu procesează chirilic, ca urmare a rulării acestuia

programul va fi afișat pe ecran

Tip enumerat. Un tip enumerat este definit prin enumerarea valorilor pe care le poate primi. Fiecare valoare este denumită printr-un identificator și se află într-o listă cuprinsă între paranteze, de exemplu:

culori =(rosu, alb, albastru);

Utilizarea tipurilor enumerate face programele mai lizibile. Dacă, de exemplu, programul utilizează date asociate cu lunile anului, atunci următorul fragment de program:

TypeMonth=(Ian, Feb, Mar, Apr, Mai, Iun, Iul, Aug, Sep, Oct, Nov, Dec);

luna: TypeMonth;

if month = Aug then WriteLn("Ar fi frumos să mergi la mare!");

ar fi, vezi tu, foarte clar. Vai! În Turbo Pascal, nu puteți folosi chirilic în identificatori, așa că suntem forțați să scriem astfel:

TypeMonth=(ian,feb,mar,may,jun,jul,aug,sept,oct,nov,dec);

luna: TypeMonth;

if month = aug then WriteLn("Ar fi frumos să mergi la mare!");

Corespondența dintre valorile unui tip enumerat și numerele ordinale ale acestor valori se stabilește prin ordinea enumerarii: prima valoare din listă primește numărul ordinal 0, a doua - 1 și așa mai departe. Capacitatea maximă a unui tip enumerat este de 65536 de valori, astfel încât un tip enumerat definește de fapt un subset al tipului întreg WORD și poate fi considerat ca o declarație compactă a unui grup de constante întregi cu valori 0, 1 etc. simultan. .

Utilizarea tipurilor enumerate crește fiabilitatea programelor prin posibilitatea de a controla valorile pe care le primesc variabilele corespunzătoare. Să fie date, de exemplu, următoarele tipuri enumerate:

culori = (negru, rosu, alb);

ordenal= (unu, doi, trei);

zile = (luni, marți, miercuri);

În ceea ce privește cardinalitatea și reprezentarea internă, toate cele trei tipuri sunt echivalente:

ord(negru)=0, ..., ord(alb)=2,

ord(unu)=0, ...ord(trei)=2,

ord(luni)=0, ...ord(miercuri)=2.

Cu toate acestea, dacă sunt definite variabile

col:culori; num: comanda;

apoi operatorii permisi

num:= succ(două);

zi:= pred(marti);

dar nu este permis

După cum sa menționat deja, există o corespondență unu-la-unu între valorile unui tip enumerat și setul de numere întregi, care este specificată de funcția ORD(X). Turbo Pascal permite de asemenea conversia inversă: orice expresie de tip WORD poate fi convertită într-o valoare de tip enumerat, atâta timp cât valoarea expresiei întregi nu depășește puterea1™ a tipului enumerat. Această conversie se realizează prin utilizarea unei funcții declarate automat cu numele unui tip enumerat (vezi Secțiunea 4.4). De exemplu, pentru declarația de tip discutată mai sus, următoarele atribuții sunt echivalente:

col:= culori(0);

Desigur, sarcina

va fi invalid.

Variabilele de orice tip enumerat pot fi declarate fără a declara mai întâi acel tip, de exemplu:

col: (negru, alb, verde);

Tip-gamă. Un tip de interval este un subset al tipului său de bază, care poate fi orice tip ordinal, cu excepția tipului de interval. Un tip de interval este definit de limitele valorilor sale în cadrul tipului de bază:

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

Aici<мин.знач. >- valoarea minimă a intervalului-tip;

<макс.знач.>- valoarea sa maximă.

De exemplu:

cifra = "0".."9";

Tipul intervalului nu trebuie să fie descris în secțiunea TYPE, dar poate fi specificat direct la declararea unei variabile, de exemplu:

Ichr: "A".."Z";.

La definirea unui tip de interval, trebuie respectate următoarele reguli:

  • două caractere „..” sunt tratate ca un singur caracter, deci nu sunt permise spații între ele;
  • capătul din stânga intervalului nu trebuie să depășească capătul din dreapta. Un tip de interval moștenește toate proprietățile tipului său de bază, dar cu limitări din cauza cardinalității sale mai mici. În special, dacă variabila este definită

zile = (lu,tu,we,th,fr,sa,su);

WeekEnd = sa .. su;

apoi ORD(W) va returna 5, în timp ce PRED(W) va avea ca rezultat o eroare.

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

HIGH(X) - returnează valoarea maximă a intervalului de tip căruia îi aparține variabila X;

LOW(X) - Returnează valoarea minimă a tipului de interval.

Următorul program scurt va afișa șirul

ScrieLn(Low(k),"..", High(k))

Mulțimea numerelor întregi este infinită, dar putem alege întotdeauna un astfel de număr de biți pentru a reprezenta orice număr întreg care apare la rezolvarea unei anumite probleme. Mulțimea numerelor reale nu este doar infinită, ci și continuă, așa că indiferent de câți biți luăm, inevitabil vom întâlni numere care nu au o reprezentare exactă. Numerele în virgulă mobilă sunt una dintre modalitățile posibile de a reprezenta numere reale, care reprezintă un compromis între precizie și intervalul de valori acceptate.

Un număr în virgulă mobilă constă dintr-un set de cifre individuale, împărțite condiționat într-un semn, un exponent, un exponent și o mantisă. Exponentul și mantisa sunt numere întregi, care împreună cu semnul dau reprezentarea unui număr în virgulă mobilă în următoarea formă:

Din punct de vedere matematic, aceasta este scrisă astfel:

(-1) s × M × B E , unde s este semnul, B este baza, E este ordinul și M este mantisa.

Baza determină sistemul numeric al cifrelor. Este dovedit matematic că numerele în virgulă mobilă cu baza B=2 (reprezentare binară) sunt cele mai rezistente la erorile de rotunjire, prin urmare, în practică, se întâlnesc doar bazele 2 și, mai rar, 10. Pentru o prezentare ulterioară, vom presupune întotdeauna B=2, iar formula numerică cu virgulă mobilă va arăta astfel:

(-1) s × M × 2 E

Ce este mantisa și ordinea? mantisa este un număr întreg cu lungime fixă ​​care reprezintă cei mai semnificativi biți ai unui număr real. Să presupunem că mantisa noastră este formată din trei biți (|M|=3). Luați, de exemplu, numărul „5”, care în sistemul binar va fi egal cu 101 2 . Bitul înalt corespunde cu 2 2 =4, bitul din mijloc (care îl avem este zero) 2 1 =2, iar bitul scăzut 2 0 =1. Ordin este puterea bazei (două) de ordinul cel mai înalt. În cazul nostru, E=2. Este convenabil să scrieți astfel de numere în așa-numita formă standard „științifică”, de exemplu „1.01e+2”. Este imediat clar că mantisa este formată din trei personaje, iar ordinea este două.

Să presupunem că vrem să obținem un număr fracționar folosind aceiași 3 biți ai mantisei. Putem face acest lucru dacă luăm, să zicem, E=1. Atunci numărul nostru va fi

1.01e+1 = 1×2 1 +0×2 0 +1×2 -1 =2+0.5=2.5

Este evident că în acest fel același număr poate fi reprezentat în moduri diferite. Luați în considerare un exemplu cu lungimea mantisei |M|=4. Numărul „2” poate fi reprezentat astfel:

2 = 10 (binar) = 1.000e+1 = 0.100e+2 = 0.010e+3.

Prin urmare, deja în primele mașini, numerele erau reprezentate în așa-numitele formă normalizată, când primul bit al mantisei a fost întotdeauna presupus a fi unul.

Acest lucru salvează un bit (deoarece cel implicit nu trebuie să fie stocat în memorie) și asigură că reprezentarea numărului este unică. În exemplul nostru, „2” are o singură reprezentare („1.000e+1”), iar mantisa este stocată în memorie ca „000” deoarece unitatea conducătoare este implicit subînțeles. Dar în reprezentarea normalizată a numerelor, apare o nouă problemă - este imposibil să se reprezinte zero în această formă.

  • Analizarea datelor folosind comenzile Selecție parametri și Solver
  • Analiza și interpretarea datelor cercetării psihologice experimentale.
  • Analiza datelor inițiale. Standardele tehnice ale drumului orașului.
  • ANALIZA DATELOR OBȚINITE. DECIZIE PRIVIND SUFICIENŢA SAU INSUFICIENŢA CARACTERISTICILOR DE ALIMENTARE CU APA PENTRU NEVOILE SISTEMULUI DE IRIGAŢIE.
  • Echipamente de linie de comunicații: echipamente de transmisie a datelor, echipamente terminale, echipamente intermediare.

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

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

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

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

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

    Utilizarea eficientă a tipurilor SINGLE, DOUBLE, EXTEND, COMP este posibilă numai atunci când este inclusă directiva ($N+). În mod implicit, este în starea oprită. Pentru a rezolva problemele de inginerie și economice, valorile de tip REAL sunt suficiente.

    Exemplu

    Var Res, Summa, Itog: real;

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

    Exemplu

    Var Sel1, Sel2: boolean;

    A,B,C,D: boolean;

    Expresiile de tip boolean ocupă 1 octet de memorie și sunt folosite în expresii logice și relaționale, precum și pentru a controla ordinea de execuție a instrucțiunilor programului.

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

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

    Litera:='A'; Semn:='+'; Simbol:='!'

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

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

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

    Format

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

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

    Exemplu

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

    Var S1, S2: Sezon;

    Toamna: (septembrie, octombrie, noiembrie);

    În acest exemplu, este afișat tipul de date declarat explicit al utilizatorului sezon. Semnificațiile lor sunt determinate - denumirile anotimpurilor. Variabilele S1 și S2 pot lua doar una dintre valorile enumerate. Încercarea de a le atribui orice altă valoare va cauza o întrerupere a software-ului. Al treilea tip de enumerare este anonim (nu are nume) și este specificat prin enumerarea valorilor în secțiunea Var. Toamna este o variabilă de acest tip și poate lua valorile Septembrie, Octombrie, Nowember. Astfel, se poate da orice tip, dar acest lucru nu este întotdeauna acceptabil. Prima modalitate este cu siguranță mai de înțeles și mai în concordanță cu natura limbajului Pascal.

    tip de interval vă permite să setați două constante care definesc limitele intervalului de valori pentru această variabilă. Compilatorul generează rutine de verificare pentru fiecare operație pe o variabilă de tip interval care determină dacă valoarea variabilei rămâne în intervalul specificat pentru aceasta. Ambele constante trebuie să aparțină unuia dintre tipurile standard, cu excepția reală. Valoarea primei constante trebuie să fie neapărat mai mică decât valoarea celei de-a doua.

    Format

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

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

    Exemplu

    Tip Zile = 1.. 31;

    Var Work_d, Free_d: Zile;

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

    În afara intervalului declanșează o întrerupere software.

    Puteți defini un tip de interval specificând limitele intervalului nu prin valori constante, ci după numele acestora:

    Const Min = 1; max=31;

    Tip Zile = Min .. Max;

    Var Work_d, Free_d: Zile;

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

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

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

    o multime de - un set de obiecte selectate în funcție de un anumit atribut sau grup de atribute, care poate fi considerat ca un întreg;

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

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

    Două tipuri mai structurate - procedural și tip obiect (obiectiv) - sunt greu de asociat cu datele într-o reprezentare convențională.

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



    Se încarcă...
    Top