Arrays și lucrul cu ei

O matrice este o structură de date obișnuită declarată de un construct special de limbă

Array [intervale index] de tip de componente

Cel mai adesea, matricea este folosită pentru stocarea valorilor vectoriale, de exemplu:







V. Array [1..3] din Real;

declarând astfel o structură de trei valori reale, indexate de un anumit interval de întregi (V [1], V [2] și V [3]). În cazul în care componentele de indexare (elemente) ale șirului este dat un interval numeric, ca în acest exemplu, este necesar să se respecte doar două cerințe: în primul rând, gama nu trebuie să aparțină tipului LongInt, adică ea trebuie să „se potrivesc“ tip maxim în Word, un al doilea, produs al numărului de componente ale șirului definit printr-o serie de indici, mărimea componentei în octeți, nu poate depăși 65520 octeți (aproximativ 64K). Ultima cerință este comună nu numai pentru toate rețelele, ci și pentru alte structuri de date. Astfel, pot fi descrise rețelele

Este foarte convenabil, deoarece vă permite să nu vă faceți griji cu privire la aducerea indexului la un interval de 1..n, ca, de exemplu, trebuie să facă atunci când se lucrează cu Fortran sau unele versiuni de bază.

În general, nu există nimic care să declare gama de indici de matrice după numere. Ca indexuri, puteți utiliza orice tipuri enumerate, atât încorporate, cât și de intrare. Indicii pot fi specificați ca înainte într-un interval și dacă intervalul corespunde întregului tip, puteți scrie numele acestui tip enumerat:

ComplectType = Array [MonthType] din Word;

Alpha. Array ['A' .. 'z'] din Char;

Comutare. Array [Boolean] de Byte; <два элемента>

Matricele considerate sunt unidimensionale, adică Cele în care componentele sunt scalare. Este permisă declararea matricelor de tablouri:

VectorType = Array [1..3] din Real; <вектор>

MatrixType = Array [1..10] din VectorType; <матрица10x3>

Descrierea tipului unei matrice MatrixType bidimensionale ar putea fi scris diferit:

MatrixType = Array [1..10] din Array [1..3] din Real;

MatrixType = Array [1..10, 1..3] din Real;

Ultima opțiune reprezintă cel mai clar descrierea matricei. Numărul măsurătorilor este în mod formal nelimitat, dar suma dimensiunilor tuturor componentelor matricei nu trebuie să depășească 64K. Fiecare dimensiune este complet independentă de celelalte și puteți declara matrice cu indicatori diferiți:







M. Array [-10..0, 'A' .. 'C', Boolean] de Byte;

Array [Boolean] de Byte;

În mod interesant, tipul elementului matricei M depinde de numărul de indicii specificați pentru el. De exemplu,

M [0] este o matrice Array ['A' .. 'C', Boolean] de Byte,

M [0, 'B'] este un vector de tip Array [Boolean] de Byte,

M [0, 'B', False] este o valoare Byte.

ArrayBType = Array [Boolean] de Byte;

ArrayCType = Array ['A' .. 'C'] din ArrayBType;

ArrayMType = Array [-10..0] din ArrayCType;

și numai atunci alocările formularului

Turbo Pascal vă permite să scrieți indici care nu sunt delimitați cu virgulă, ci ca și cum ați fi izolați:

M [-3, 'B', True] este echivalent cu M [-3] ['B'] [Adevărat]

O componentă de matrice poate fi nu numai o altă matrice, ci și o înregistrare, un pointer și un alt tip. Dacă R este o matrice de înregistrări (RECORD), atunci accesul la câmpul fiecărei înregistrări se face după specificarea unui index:

Turbo Pascal are un mod special de compilare, specificat de cheia $ R. În cazul în care întregul program sau un fragment din el a fost compilat în modul, atunci când accesează elementele matrice vor fi verificate afilierea a indicelui a anunțat gama, iar în cazul unei serii de program de vină este întreruptă cu o eroare de 201 (verificare de eroare Range). Dimpotrivă, nu se produce în orice regim de inspecție, și o valoare a indicelui incorect va extrage „ca și cum nimic nu sa întâmplat“ o anumită valoare - dar, din păcate, nu face parte din această matrice. În mod obișnuit, programul este depanat în modul $ R + și este utilizat în modul $ R-. Acest lucru reduce într-o oarecare măsură dimensiunea fișierului EXE și timpul de execuție.

La cele două rețele compatibile A și B, este aplicabilă numai operația de atribuire:

care copiază o matrice B de elemente în matrice A.

Tot felul de operații matematice pe matrice (matrice) trebuie să fie implementate de dvs. sau folosind biblioteci speciale (de exemplu, Turbo Numeric Toolbox).

Pentru compatibilitatea cu alte versiuni ale Pascal, Turbo Pascal permite folosirea unor caractere compuse (. Și.) În loc de paranteze pătrate:

M [0] este echivalent cu M (.0.)

În plus, cuvântul cheie Array din descrierile matricei poate fi precedat de cuvântul rezervat PACKED (ambalat, comprimat):

X. PACKED Array [1..100] din Real;

În concluzie, observăm o caracteristică a compilatorului lui Turbo Pascal. Pentru multe limbi de programare, regula este corectă: lucrul cu un element de matrice durează mai mult decât cu o variabilă scalară (trebuie să calculați locația elementului în memorie). Dacă indicii când se face referire la un element sunt date de variabile sau expresii, atunci acest lucru este valabil pentru Turbo Pascal. Dar dacă indicele elementului este setat de o constantă, viteza de acces la acesta va fi maximă, deoarece compilatorul va calcula locația elementului în faza de compilare a programului.







Articole similare

Trimiteți-le prietenilor: