Matricele în parametrii procedurilor și funcțiilor

Arrays, precum și alte tipuri de date pot servi ca parametrii de proceduri și funcții. Iată ce trebuie să caute o funcție care calculează valoarea medie a unui șir de numere reale:

Funcția medie ia ca parametru un tablou de dimensiuni cunoscute. Cerința pentru un parametru matrice de dimensiune fixă ​​este de multe ori prea descurajator. Procedura de constatare a valorii medii trebuie să fie în măsură să opereze cu șiruri de lungime arbitrară. a introdus un parametru-matrice deschis în acest scop, în limba Delphi. Astfel de matrice au fost împrumutate de limba dezvoltatorii Delphi Modula-2.

1. Parametrul deschis matrice descrise utilizând matrice de combinații, frontierele matrice sunt omise:

2. În interiorul subrutinei mediu limita inferioară a matrice deschisă A este (Low (A) = 0), dar limita superioară (High (A)) nu este cunoscută zero și apare numai în etapa de punere în aplicare a programului.

3. Există doar două moduri de a utiliza matrice deschis: un apel la elementele de matrice și transferul de altă gazdă matrice subrutină o matrice deschisă. Nu poți atribui o matrice la alta deschisă, deoarece dimensiunile lor nu sunt cunoscute dinainte.

Aici este un exemplu de utilizare a funcției de mediu:

4. În a doua declarație, o matrice deschisă este construită în momentul apelului la mediu. deschis constructor matrice este o listă de expresii între paranteze. Expresiile pot utiliza constante, variabile și funcții. Tipul de exprimare trebuie să fie compatibilă cu tipul elementelor de matrice. Construirea unei matrice deschise este echivalent cu crearea și inițializarea variabilei temporare.

5. matricele deschise pot fi transferate numai la subrutina semnificativ ca parametri sau constante.

6. Unele rutine de limbă Delphi bibliotecă ia parametri de tip matrice constantei - deschis constante matrici. Array a trecut ca acest parametru, construite cu grijă în momentul în care apelul subrutinei și poate consta din elemente de diferite tipuri (!). Fizic, se compune dintr-un TVarRec tip de înregistrare, tipul de codificare și o valoare a elementelor de matrice (înregistrare sunt discutate mai jos). Deschideți constantele matrice permite emularea subrutina cu un număr variabil de parametri de diferite tipuri și utilizări, de exemplu, în funcție de format pentru un format al șirului.

Transmiterea parametrilor semnificativ

Acest mod parametru de trecere este implicit. În cazul în care parametrul a trecut de valoare, o copie locală a acestei variabile, care este disponibil pentru procesarea unei proceduri sau funcții. Uită-te la următorul exemplu:

Procedura de testare (s: string);

Când se apelează la această procedură creează o copie a TRANSMITE ca parametru de rând s, care va funcționa Procedura de testare. În acest caz, toate modificările aduse liniei nu va afecta variabila inițială s.

Cu toate acestea, acest lucru nu se aplică în cazul obiectelor. De exemplu, în cazul în care o variabilă este transmisă funcției (sau mai degrabă instanța obiect) Cu TStringList, în acest caz, link-ul va transfera (chiar dacă nu este menționat în mod explicit).

One-dimensional și două-dimensionale matrice statice. Descrierea și elementul de acces. matrice de transfer ca parametrii în subrutină. Exemple.

Pentru a declara o matrice utilizată de proiectare:

în cazul în care fiecare indexType - acest tip de comandă, care nu depășește dimensiunea de 2 GB. Pentru aceasta putem folosi un anumit tip de identificator (de exemplu, boolean sau ansichar), dar, în practică, de obicei, este definită în mod explicit numere întregi de subbenzi. Numărul de elemente ale matricei în fiecare dimensiune este dată de un tip adecvat de serie. Numărul de intrări este egal cu produsul dintre numărul de elemente în toate dimensiunile.

Fraza este o matrice de zarezevirovannym. paranteze pătrate după cuvintele matrice cer sintaxă, și după cuvântul - tipul de elemente din matrice.

Cel mai simplu caz - un tablou unidimensional:

După o descriere a tipului puteți trece la definirea variabilelor și constantelor tastate:

2. Vă rugăm să rețineți că inițializarea elementelor unei matrici apare în paranteze, separate prin virgulă.

3. Matricea poate fi definită și fără a descrie tipul:

4. Pentru a avea acces la un element individual al matrice, este necesar, în paranteze indică indexul, de exemplu,

5. Declarația de matrice de mai sus sunt unidimensionale, deoarece acestea au doar un singur index. matrice dimensionale sunt frecvent utilizate pentru reprezentarea secvenței liniară a elementelor. Dacă doi dintre indicele este stabilit în descrierea de matrice, matrice se numește bidimensional, în cazul în care indicele n - n-dimensional. matrice bidimensionale sunt utilizate pentru a reprezenta masa, și n-dimensionale - să reprezinte spații. Iată un exemplu de a declara un tabel, format din 5 coloane și 20 de rânduri:

Același lucru poate fi scris într-o formă mai compactă:

Pentru a accesa un element individual al unei matrice multidimensionale, trebuie să specificați valoarea fiecărui indice, de exemplu,

sau într-o înregistrare mai compact

Aceste două metode sunt echivalente cu indexare.

One-dimensional și două-dimensionale matrice dinamice. Descrierea și elementul de acces. Setlength funcții procedură Lungime, scăzut, ridicat. Exemple.

Unul dintre instrumentele cele mai puternice limbă Delphi este o matrice dinamică. Principala diferență dintre matrici convenționale este că acestea sunt stocate în memoria dinamică. Și acest lucru se datorează numele lor. Pentru a înțelege de ce este nevoie de ele, uita-te la un exemplu:

Setați pe baza valorii de intrare de utilizator A de dimensiunea matrice este imposibilă, pentru că așa cum frontierele matrice trebuie să specifice valori constante. O valoare nu poate pretinde a fi o constantă introdusă de către utilizator. Cu alte cuvinte, următoarea declarație ar fi o greșeală:

La etapa de scriere a programului este imposibil de prezis cu exactitate ce volume de date pentru a procesa utilizatorul dorește. Cu toate acestea, este necesar să se răspundă la două întrebări importante:

  • Pentru un număr de elemente pentru a declara o matrice?
  • Ce se întâmplă dacă utilizatorul încă nevoie de mai multe elemente?

Puteți proceda după cum urmează. Pentru limitele superioare ale matrice pentru a seta maxim posibil (?) Numărul de articole, și de fapt folosesc doar o parte din matrice. În cazul în care utilizatorul are nevoie de mai multe elemente decât cele rezervate, el poate pur și simplu refuza politicos. De exemplu:

Această soluție nu este optimă. În cazul în care utilizatorul are nevoie doar de 10 membri, funcționează fără probleme, dar utilizează întotdeauna cantitatea de memorie necesară pentru a stoca 100 de elemente. Memoria rezervată pentru cei 90 de membri rămași nu vor fi folosite de program sau de alte persoane. Acum, imaginați-vă că toate programele fac același lucru. Eficiența utilizării memoriei este drastic redusă.

matricele dinamice pot rezolva problema luate în considerare în cel mai bun mod. Dimensiunea unei matrice dinamice pot fi schimbate în timpul rulării.

O gamă dinamică este declarată fără frontiere:

matrice de baseType

Lucrul cu matrice dinamice:

1. DynArray variabilă reprezintă o legătură pentru a fi plasate în matrice de memorie dinamică.

2. Inițial, o matrice de memorie nu este rezervată, numărul de elemente din matrice este egal cu zero, iar valoarea variabilei DynArray egală cu zero.

3. Crearea unui tablou dinamic (alocare de memorie pentru elementele sale) este procedura setlength efectuata.

4. Schimbarea matrice dinamică se efectuează aceeași procedură:

La schimbarea dimensiunii unui tablou de valori ale tuturor elementelor sunt stocate. Secvența de acțiuni este: un nou bloc de memorie este alocată, vechile valori ale elementelor unității sunt copiate în bloc nou, memorie vechi este eliberat.

Când reducerea matrice dinamică teryayutyasya elemente care nu sunt necesare.

Prin creșterea mărimii șirului de elemente adăugate dinamice nu vor fi inițializat la orice valoare, și, în general, valorile lor sunt aleatoare. Cu toate acestea, în cazul în matrice dinamic este compus din elemente, tipul care implică automat inițializarea valoare gol (string, variantă, matrice dinamică, etc.), apoi a adăugat memoria este inițializată cu zerouri.

5. Determinarea numărului de articole produse cu ajutorul funcției Lungime:

6. Elementele unui tablou dinamic este întotdeauna indexat de la zero.

7. Accesul la acestea nu este diferită de accesul la elementele de matrice statice convenționale:

8. Pentru matrice dinamice, precum și matrice convenționale, funcțiile pe de joasă și înaltă, returnează indicii minime și maxime ale șirului respectiv. matrice dinamice Funcția scăzut returnează întotdeauna 0.

9. Eliberați memoria alocată pentru elementele matricei dinamice se efectuează instalarea valoare de lungime de 0 sau atribuirea zero valoare matrice variabilă (ambele opțiuni sunt echivalente):

Cu toate acestea, nu utilizați în mod necesar, la sfârșitul unei matrice dinamice pentru a elibera memorie alocate, astfel cum acesta este eliberat în mod automat atunci când ieșiți din domeniul de aplicare al variabilei matrice (convenabil, nu este!). Această capacitate este asigurată de mecanismul de numărare numărul de referință.

10. Când atribuiți o matrice dinamică la alta, nu se creează o copie a unei matrice existente.

În acest exemplu, variabila B este stocată în adresa dinamică a zonei de memorie în care sunt stocate matrice elementul A (cu alte cuvinte, variabila B i se atribuie valoarea de referință a variabilei de referință A).

Așa cum este cazul cu linii, memoria este eliberată atunci când numărul de referință devine zero.

11. Pentru a lucra cu matrice dinamice, puteți utiliza rândurile familiare ale funcției de copiere. Se întoarce o porțiune din matrice sub forma unei noi matrice dinamic.

12. Pentru matrice multidimensionale dinamice:

Aceasta este, de memorie este alocată pentru fiecare dimensiune.

12. seturi. Descriere, referință, set de operațiuni. Exemple.

O mulțime - este un tip complex de date pentru a reprezenta un set de unele dintre elementele în ansamblu. valori de câmp ale acestui tip - un set de toate subgrupurile posibile compuse din elementele sale, inclusiv setul gol. Toate elementele setului aparține unui anumit tip de ordine, care se numește tipul de bază al setului. Tipul de bază nu pot avea mai mult de 256 de valori posibile. Prin urmare, ca bază tipuri de octet sau de secvență de tip selectat (AnsiChar, Byte, ShortInt, Boolean, WordBool), sau un subset al acestora.

Pentru a descrie setul plural frazei tip utilizat, urmat este înregistrată o multitudine de tipul de bază.

Acum, puteți declara mai multe tipuri de variabile:

Puteți declara un set și fără descriere tip:

· În expresiile valori ale elementelor setului sunt scrise în paranteze pătrate [2, 3, 5, 7], [1..9], [ 'A', 'B', 'C'].

· Se spune să fie gol și este notat ca [] Dacă setul nu are elemente.

· Seturi Exemplu de inițializare:

Set Operațiuni

Atunci când utilizarea operatorilor relaționali sunt permise cu seturi (= <>,> =, <=), объединения, пересечения, разности множеств и операции in.

operațiune comparație (= <>). Două seturi sunt egale în cazul în care constau din aceleași elemente. Ordinea elementelor în seturile fiind comparate nu contează. Două seturi A și B sunt considerate a fi inegale în cazul în care acestea diferă de la putere sau valoarea de cel puțin un element.

articole similare