Acasă - Dispozitivele mobile
2 tipuri principale de date de bază și structurate. Proiecte de algoritm de bază

3.2.1 Tipuri de date simple și structurate. Structuri de date - înregistrări, matrice, liste.

Variabile

În timpul programării, este de obicei necesar să vă amintiți o anumită cantitate de date (rezultate intermediare, evenimente care au avut loc, date de intrare, date de ieșire etc.). Aceste valori trebuie păstrate în memorie. Pentru a face acest lucru, este declarată o locație în memorie care este utilizată pentru stocarea datelor și această locație declarată se numește variabilă. Deoarece datele care sunt stocate pot fi foarte diferite, la declararea unei variabile se declară și tipul de date care vor fi stocate în această variabilă (tip de variabilă).

Tipuri simple

Pentru o variabilă de tip simplu, o singură valoare (deseori citită ca număr) este ascunsă sub un cuvânt cheie și poate fi accesată direct. Cele mai cunoscute tipuri simple sunt: ​​întreg cu semn, întreg fără semn, număr fracționar (cu virgulă), simbol, boolean. Ele pot diferi ușor în diferite limbi.

Tipuri structurate

În cazul tipurilor structurate, mai multe valori comune sunt grupate sub un singur cuvânt cheie, cum ar fi coordonatele unui punct sau numele și prenumele unei persoane. În această formă, setul de date este mai ușor de transferat simultan. În același timp, trebuie să utilizați sau să modificați datele din cadrul structurii pe rând.

Matrice

O matrice este o colecție de date de același tip care au același nume și sunt separate între ele printr-un index. Matricele facilitează foarte mult procesarea datelor de același tip. Ușurința procesării rezultă din faptul că în timpul execuției programului puteți schimba pur și simplu indexul și astfel accesați mai ușor variabila necesară. Preluarea valorii unei variabile dintr-o matrice folosind un număr ordinal este o sarcină destul de rapidă pentru un computer.

Matricele pot fi unidimensionale (rând, rând), bidimensionale (tabel, matrice), tridimensionale (cub) etc.

Exemplu (C#, Java)

int masa = newint ; //creăm o matrice pentru a stoca zece numere întregi

masa=1; //valoarea 1 este scrisă la indexul 0

Lectură suplimentară: http://enos.itcollege.ee/~jpoial/java/i200loeng4.html

Postări

Înregistrările sunt folosite pentru a stoca diferite tipuri de date care împreună formează un set înrudit. De exemplu, înregistrarea unei persoane este formată din următoarele date: prenume (text), prenume (text), sex (valoare booleană, 0 - femeie, 1 - bărbat), greutate (număr fracționar). Aceste date formează un întreg atunci când descriu o persoană, cu toate acestea, ele însele sunt de tipuri foarte diferite.

Exemplu (C#)

structinimene {

publicstring eesnimi;

publicstring perenimi;

publicbool sex;

plutitor public greutate;

Cu această intrare, putem crea o variabilă kasutaja (utilizator) și atribui utilizatorului valorile prenume, prenume, sex și greutate:

inimene kasutaja;

kasutaja.eesnimi ="Jaan" ;

kasutaja.perenimi ="Mets" ;

kasutaja.sex = 1;

kasutaja.greutate = 80,0;

Liste și copaci

În prezent, listele sunt adesea folosite pentru a stoca date. Dacă fiecare element al unei liste indică elementul care îl urmărește, atunci este o listă legată, sfârșitul unei astfel de liste este indicat de un element gol (null). O listă legată, în care fiecare element indică doar următorul, se numește listă unidirecțională. O listă legată, în care fiecare element indică elementele următoare și precedente, se numește bidirecțională. O listă legată în care nu există primul și ultimul element și fiecare element indică următorul se numește listă circulară. Lungimea unei liste legate este determinată de numărul de elemente ale acesteia. Primul element al listei este capul, iar elementele rămase sunt coada.

O stivă este o listă legată în care ultimul element adăugat este citit primul (LIFO - Last In First Out).

O coadă este o listă legată în care elementul adăugat primul este citit primul (FIFO - First In First Out).

Lectură suplimentară: http://www.cs.tlu.ee/~inga/alg_andm/linked_list_C_2011.pdf

Un arbore este o structură de date în care datele sunt plasate sub forma unui arbore, constă din vârfuri (English Node) și arce (English Edges) care leagă vârfurile (pointerii). Vârfurile care sunt conectate prin arce de vârful situat deasupra se numesc copii, iar vârful situat deasupra în acest caz este părintele. Vârful cel mai de sus este rădăcina. Un vârf care nu are copii se numește frunză.

Trecerea de sus la părinte și de acolo la următorul părinte etc. ajungem la rădăcină. Strămoșii sunt toate nodurile situate pe calea de la vârful în cauză până la rădăcină. Înălțimea copacului este determinată de calea cea mai lungă de la frunză la rădăcină.

În cazul unui arbore ordonat, rădăcina și vârfurile conectate direct la acesta sunt definite ca noduri de prim nivel (copiii rădăcinii), iar vârfurile conectate direct la vârfurile primului nivel sunt vârfuri de nivelul al doilea (copiii vârfurilor de primul nivel) și etc.; Ordinea copiilor de la stânga la dreapta este de asemenea importantă.

Lectură suplimentară: http://www.cs.tlu.ee/~inga/alg_andm/tree_gen_2011.pdf

Un arbore binar este un arbore în care fiecare părinte poate avea un copil, doi copii sau deloc, iar ordinea copiilor este importantă.

Un arbore binar de căutare este un arbore binar care este ordonat. Există întotdeauna un număr la stânga vârfului dimensiune mai micăși întotdeauna este mai mult în dreapta.

La căutarea unui astfel de arbore, valoarea căutată este comparată cu rădăcina, iar dacă valoarea căutată este egală cu rădăcina, atunci aceasta există și este găsită. Dacă valoarea dorită nu este egală cu rădăcina, atunci operația de comparare continuă mai departe, respectiv, comparând cea dorită cu un set de vârfuri situate în dreapta sau în stânga până ajung la frunze. Dacă valoarea căutată este egală cu valoarea unuia dintre vârfuri, atunci elementul căutat este găsit și există, dar dacă un astfel de vârf nu este găsit, atunci elementul căutat nu există în acest arbore. Această metodă de căutare este de multe ori mai rapidă decât o parcurgere completă a unei matrice sau a unei liste legate.

Un arbore B este un arbore de căutare în care numărul de copii la fiecare nod este în intervalul de la (t-1) la (2t-1), unde t este orice constantă.

Un arbore B* este un arbore B în care vârfurile sunt umplute până la 2/3 prin umplerea mai întâi a două vârfuri copil prin redistribuirea cheilor și apoi împărțirea lor în 3 vârfuri.

Datorită acestui fapt, arborele B vă permite să păstrați adâncimea copacului mai mică decât cea a unui arbore binar. Prin limitarea umpluturii, este posibil și la niveluri intermediare să se păstreze cantitatea de memorie utilizată în limite bine definite și, în același timp, să se poată adăuga imediat date în locația corespunzătoare.

Compozit, sau structural, tipurile de date, 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 crea noi tipuri de date pe baza celor existente. Astfel, este posibil să se formeze structuri de date de complexitate arbitrară, făcând astfel posibilă realizarea unei reprezentări adecvate în program a datelor cu care operează.

Există mai multe metode de structurare, fiecare diferă prin felul în care se referă la componentele individuale și, prin urmare, prin modul în care se referă la componentele incluse în datele de structură. În funcție de 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 de șir (șiruri de caractere);
  • tip de obiect (obiecte).

Spre deosebire de tipurile de date simple, datele de tip structurat se caracterizează prin multiplicitatea elementelor 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ă. este posibilă cuibărirea tipurilor.

Literatură

  1. Popov V.B. Pascal și Delphi. Manual de autoinstruire - Sankt Petersburg: Peter, 2004. - 544 p.: ill.

Capitolul 6. STRUCTURAT
TIPURI DE DATE Tipurile de date structurate definesc seturi de componente de aceleași tipuri sau diferite. Tipurile de componente sunt formate din alte tipuri de date (simple, structurate, pointeri etc.). În limbajul Pascal există următoarele tipuri structurate: - tip array; - tipul de înregistrare; Există două tipuri mai structurate: - șir de tip șir și - de tip șir PChar, care sunt tipuri de matrice. În cele ce urmează, pentru concizie, obiectele de tipuri structurate vor fi numite cu aceleași nume ca și tipurile lor, fără a se specifica cuvântul „tip”: matrice, înregistrare, set, fișier, șir. În standardul de limbă, există tipuri structurate ambalate și dezambalate. În Turbo Pascal, cuvântul împachetat, care caracterizează un tip împachetat, nu are niciun efect; Ori de câte ori este posibil, împachetarea datelor se face automat. 6.1. Array Type-array este un număr fix de componente ordonate de același tip, echipate cu indici. Poate fi unidimensional sau multidimensional. Pentru a specifica un tip de matrice, utilizați matricea de cuvinte rezervate, după care trebuie să indicați tipul indexului(elor) componentelor (în paranteze drepte) și apoi după cuvântul - tipul componentelor în sine: tastați<имя типа>= matrice[<тип индекса(индексов)>] din<тип компонент>; Exemplu. tip Arr = matrice de Real; (tip matrice de 3 numere reale) Matrice = matrice de Integer; (tip - matrice bidimensională numere întregi, formate din 3 rânduri și 2 coloane) Prin introducerea unui tip de matrice, puteți defini apoi variabile sau constante tastate de acel tip. Dimensiunea matricei poate fi orice, componentele matricei pot fi de orice tip, inclusiv cele structurate, indexul(ii) pot fi de orice tip ordinal, cu excepția tipului Longint. Atunci când se atribuie valori unui tablou constant, componentele sunt indicate în paranteze și separate prin virgule, iar dacă tabloul este multidimensional, parantezele exterioare corespund indexului din stânga, parantezele imbricate în ele corespund următorului index etc. Deci, pentru tipurile introduse mai sus, puteți specifica, de exemplu, următoarele variabile și constante: var Ml, M2: Arr; Matr: Matrice; const M3: Arr =(1, 2, 3); Mat: Matrice = ((1, 2), (3, 4), (5, 6)); Ultima constantă corespunde următoarei structuri: 1 2 3 4 5 6 Notă. Un tip de matrice poate fi, de asemenea, introdus direct la definirea variabilelor corespunzătoare sau a constantelor tastate. De exemplu: var Ml, M2: matrice de Real; Matr: matrice de Integer; Aceleași matrice sunt definite aici ca în exemplul anterior. Când declarați matrice în acest fel, amintiți-vă că tipurile lor nu vor fi identice cu alte tipuri, chiar dacă au aceeași structură. Prin urmare, nu le puteți transmite ca parametri unei subrutine (vezi secțiunea 10.3, de asemenea, nu le puteți atribui valorile altor matrice (și invers), chiar dacă structurile lor sunt aceleași. Componentele matricei sunt accesate prin specificarea numelui matricei urmat de valoarea indicilor componentelor între paranteze drepte. În general, fiecare indice de componentă poate fi specificat printr-o expresie de tipul adecvat, de exemplu: M1, Matrix, M2, etc. O matrice poate fi atribuită valoarea unui alt tablou, dar numai de tip identic. Deci, dacă sunt date următoarele tablouri: var A, B: matrice de Integer; C: matrice de numere întregi; atunci să spunem următorul operator: A:= B; Pe de altă parte, operatorul C:= A; este invalid, deoarece tablourile A și C nu sunt tipuri identice. Există unele diferențe în lucrul cu matrice unidimensionale de caractere (a nu se confunda cu valorile șirurilor - vezi secțiunea 6.2). Astfel, constantelor tipizate de acest tip li se poate atribui o valoare asemănătoare constantelor de șir obișnuite prin specificarea unui șir de caractere în apostrofe, de exemplu const A: array of Char="aaaaa"; B: matrice de Char="bbb"; Pentru astfel de tablouri, ca și pentru șiruri de caractere, pot fi folosite operații de comparare (chiar dacă nu sunt tipuri identice și chiar dacă au) și concatenare (asociere) - vezi clauza 6.2. Ele pot fi utilizate în instrucțiunile de ieșire Write și WriteLn. De exemplu, pentru tablourile introduse mai sus, puteți scrie dacă A > B apoi WriteLn(A) altfel WriteLn(B); 6.2. Șir de tip șir În Turbo Pascal, un tip de șir (tip de șir standard) este o secvență de caractere de lungime arbitrară (până la 255 de caractere). Un șir poate fi gândit ca o matrice de caractere, dar datorită utilizării pe scară largă a șirurilor și a unor caracteristici în comparație cu matricele standard, acestea sunt separate într-un tip de date separat. Un tip de șir poate avea dimensiunea indicată între paranteze pătrate (de la 1 la 255). Dacă dimensiunea șirului nu este specificată, se presupune că este 255, de exemplu: var Str: șir; MaxStr: șir; (șir de 255 de caractere) const January: string = "Ianuarie"; Operațiile de concatenare (+) și de comparare sunt aplicabile șirurilor. Operația de concatenare adaugă un al doilea șir la primul. Exemplu. Concatenează două șiruri. Str, Strl, Str2:șir; begin Strl:= "Turbo"; Str2:= „Pascal”; Str:= Strl + Str2; (în variabila Str - „Turbo Pascal”) final. Puteți compara șiruri de lungimi diferite. Comparația se efectuează de la stânga la dreapta în conformitate cu codurile ASCII ale caracterelor corespunzătoare. Caracterele lipsă din șirul mai scurt sunt considerate a avea un cod mai mic decât cel al oricărui caracter valid. De exemplu, „XS” este mai mare decât „X”. Exemplu. Verificați dacă setul de caractere introdus este numele lunii în rusă. programul EXEMPLUL11; const Instanță: matrice de șir!10]= („IANUARIE”, „FEBRUARIE”, „MARTIE”, „APRILIE”, „MAI”, „IUNIE”, „IULIE”, „AUUG”, „SEPTEMBRIE”, „OCTOMBRIE” , „NOIEMBRIE”, „DECEMBRIE”); Luna: Boolean = Fals; var Str: șir; i: întreg; begin Writeln("Introduceți caractere majuscule: "); ReadLn(Str); pentru i:= 1 la 12 face if Str = Instance[i] then Month:=True; if Month then WriteLn("Numele lunii a fost introdus") else WriteLn("Numele lunii nu a fost introdus") end. De fapt, un șir de N caractere este o matrice de N+1 caractere: șir[N] = matrice de Char. Caracterul nul este destinat să indice numărul de caractere dintr-un șir de utilizat și poate varia de la un caracter cu codul 0 la un caracter cu codul N. Puteți lucra cu el ca și alte caractere dintr-un șir (scrieți și citiți valoarea acestuia). , etc.), dar fără a uita scopul său principal. 6.3. șir ASCIIZ În versiunea 7.0 pentru compatibilitate cu alte limbaje de programare și Mediul Windows a fost introdus un alt tip de șir - șiruri care se termină cu un octet zero - un caracter cu codul 0 (așa-numitele șiruri ASCIIZ). Spre deosebire de șiruri, aceste șiruri nu au o limită a dimensiunii lor (de fapt, dimensiunea poate fi de până la 65535 de octeți). Aceste șiruri primesc tipul standard PChar. De fapt, acest tip este un pointer către un caracter (despre pointeri, vezi paragraful 7): PChar = ^Char; Cu toate acestea, utilizarea sintaxei extinse (key (X+) - vezi secțiunea 17.7.1) vă permite să utilizați o astfel de variabilă ca șir echivalent cu o matrice de tipul pChar = array of Char, unde K este numărul de caractere din șirul, fără a număra caracterul final cu codul 0 Spre deosebire de tipul șirului de caractere, aici caracterul cu index 0 este primul caracter al șirului, iar ultimul caracter cu indice K este caracterul final cu codul 0. Când lucrați cu ASCIIZ. șiruri de caractere, este indicat să specificați o sintaxă extinsă; în acest caz, nu există dificultăți la utilizarea diferitelor rutine standard care funcționează cu șiruri. Exemplu. Folosind șiruri PChar cu sintaxă extinsă. programul EXEMPLUL 12; ($X+) (nu este necesar deoarece este implicit) tip T = array of Char; (matrice pentru un șir de 7 caractere) var Str: PChar; const A: T = "bună ziua!"#0; begin Str:= "ALO!"; WriteLn(Str); (linie de ieșire: HI Str:= @А; {допустимо также: Str:=A} WriteLn(Str); {вывод строки: привет!} WriteLn(Str);{вывод символа "р"} ReadLn end. Если используется ключ {$Х-}, !} variabilă de tip PChar în acest caz este tratat ca un pointer către un singur caracter. În acest caz, niciunul dintre operatorii din exemplul anterior, cu excepția operatorilor Str:=@A; și ReadLn sunt invalide, iar instrucțiunea WriteLn(Str^) executată după instrucțiunea Str:=@A va produce un singur caracter „n”. Pentru a lucra cu șiruri ASCIIZ în versiunea 7.0, sunt utilizate module standard speciale Strings (vezi secțiunea 16.2) și WinDos (vezi secțiunea 16.6). 6.4. Tip de înregistrare O înregistrare include un număr de componente numite câmpuri, care pot fi de diferite tipuri. Când specificați un tip de înregistrare, după înregistrarea de cuvânt rezervată, ar trebui să enumerați toate câmpurile tipului de înregistrare, indicând tipurile lor separate prin două puncte și să încheiați definiția tipului cu sfârșitul cuvântului. Câmpurile sunt separate între ele prin punct și virgulă. Într-o înregistrare poate exista orice număr de câmpuri. Exemplu. tip Complex = înregistrare (Tip de numere complexe) Re: Real; Im: Sfârșit adevărat; Date = înregistrare (Tip - data nașterii) An: Întregul; Luna: 1..12; Ziua: 1..31 sfârşit; Persoană = înregistrare (Tip - informații despre angajat) Nume: șir; Sex: (Bărbat, Femeie); Varsta: Integer; Căsătorit: sfârșitul boolean; Nota. Dacă mai multe câmpuri ale unui tip de înregistrare au același tip, puteți lista numele lor separate prin virgule și apoi să specificați acel tip comun. Astfel, tipul de numere complexe luate în considerare în exemplu poate fi introdus în alt mod: tip Complex = înregistrare Re, Im: Final real; După introducerea unui tip de înregistrare, puteți defini variabile sau constante tastate ale acelui tip de înregistrare. Când atribuiți valori unei constante, câmpurile acesteia sunt scrise în paranteze separate prin punct și virgulă. Pentru a seta valoarea fiecărui câmp, mai întâi specificați numele câmpului, apoi, separate prin două puncte, valoarea acestuia. Deci, pentru tipurile introduse mai sus, puteți seta, de exemplu, următoarele variabile și constante: var X, Y, Z: Complex; Dat:Date; const Data nașterii: Date = (Anul: 1971; Luna: 12; Ziua: 9); Ivanov: Persoană = (Nume: „Ivanov”; Sex: Bărbat; Vârsta: 40; Căsătorit: Adevărat); Nota. Un tip de înregistrare poate fi, de asemenea, introdus direct la definirea variabilelor sau a constantelor tastate. De exemplu, fragmentul var X, Y, Z: record Re, Im: Real end; definește aceleași variabile complexe ca în exemplul anterior. Accesul la câmpurile unei înregistrări se realizează prin specificarea numelui variabilei (constantei) și a numelui câmpului, scrise printr-un punct, de exemplu: Ivanov.Age, X.Re, Dat.Day etc. Exemplu . Utilizarea câmpurilor de înregistrare. X.Re:= 1,5; X.Im:=1,7; Y.Re:= -X.Re; Y.Im:= -X.Im; Ivanov.Căsătorit:= Fals; Pentru a nu scrie numele unei înregistrări de fiecare dată când accesați câmpurile acesteia, puteți utiliza operatorul WITH pe înregistrări. Structura lui arată astfel: cu<имя записи>do<оператор>; În acest caz, numai câmpul de înregistrare poate fi specificat în interiorul instrucțiunii. De exemplu, fragmentul: cu X începe Re:= 1,5; Im:= 1,7; înregistrări care indică tipurile acestora. Parantezele sunt necesare chiar dacă nu există o parte variantă pentru o anumită opțiune. Trebuie remarcat faptul că partea variantă nu este terminată de propria sa instrucțiune end, ca într-un construct CASE obișnuit, deoarece este urmată de instrucțiunea end a întregului tip. În standardul limbajului Pascal, înainte de a utiliza una dintre opțiunile de înregistrare, variabilei de selecție a opțiunii trebuie să i se atribuie valoarea corespunzătoare: Fig:= Pătrat; MySquare.Side:=5,0; Fig:= Cerc; MyCircle.Radius:=7,5; În Turbo Pascal această operație nu este necesară, deși dacă este setată o variabilă de alegere, aceasta poate fi apoi privită în program pentru a determina ce alegere este setată. Mai mult, setarea valorii variabilei de selecție nu are efect asupra nimic, iar următorul fragment este echivalent cu cel discutat mai sus: Fig:= Cerc; MySquare.Side:= 5,0; Fig:= Patrat; MyCircle.Radius:-7,5; În tipul de înregistrare, este permis să nu introduceți o variabilă pentru selectarea opțiunilor, ci să enumerați doar opțiuni diferite, de exemplu: Transf = caz de înregistrare Întregul de 1: (_Word: Word); 2: (_TwoSymb: matrice de Char) final; 6.5. Set În limbajul Pascal, un tip de set este un grad de set al setului original de obiecte de tip ordinal, adică un set de toate combinațiile posibile de obiecte ale setului original. Numărul de elemente ale setului original în Turbo Pascal nu poate fi mai mare de 256, iar numerele ordinale ale elementelor (adică valoarea funcției Ord) trebuie să fie în intervalul de la 0 la 255. Pentru a specifica un tip de set , ar trebui să utilizați cuvintele rezervate set și of, și apoi să indicați elementele acestui set, de obicei sub forma unei enumerații sau interval, de exemplu: tip Alfa = set de „A”..”Z”; Count = set de (Plus, Minus, Mult, Divid); Zece = set de 0..9; Număr = set de „0”..”9” ; Introducând un tip de set, puteți defini variabile sau constante tastate ale acelui tip de set. Când se atribuie valori unui set constant, elementele sale sunt enumerate separate prin virgule (este acceptabil să se specifice intervale) și plasate între paranteze drepte. De exemplu, pentru tipurile introduse mai sus, puteți seta următoarele variabile și constante tastate: var CharVal: Alfa; Operațiune: Numărare; const Index: Zece = ; Cifra: Număr = ["0".."9"]; Nota. Ca și în cazul altor tipuri structurate, un tip de set poate fi introdus direct la definirea variabilelor sau a constantelor tipizate: var CharVal: set of "A."."Z"; Operare: set de (Plus, Minus, Mult, Divid); const Index: set de 0..9 = ; Cifra: set de "0".."9"=["0".."9"]; Un set i se poate atribui una sau alta valoare într-un program. De obicei, valoarea este setată folosind constructorul set. Constructorul definește un set de elemente prin enumerarea expresiilor între paranteze drepte ale căror valori sunt date de elementele acestui set. Este acceptabil să se utilizeze intervale de elemente. Exemplu. Următoarele structuri sunt constructori de set: Fiecare set include așa-numitul. un set gol care nu conține elemente. Constructorul de set poate fi folosit și direct în operațiuni pe seturi. Pentru mulţimi sunt definite următoarele operaţii: + - unirea mulţimilor; - - diferenta de seturi; * - intersectia multimilor; = - verificarea echivalenței a două mulțimi;<>- verificarea neechivalenţei a două mulţimi;<= - проверка, является ли левое множество подмножеством правого множества; >= - verificarea daca multimea din dreapta este o submultime a multimii din stanga; in - verifică dacă elementul specificat în stânga este inclus în setul specificat în dreapta. Rezultatul operației de unire, diferență sau intersecție este mulțimea corespunzătoare, alte operații dau un rezultat de tip logic. Exemplu. Introduceți un șir de caractere format din litere, cifre și spații latine. Verificați corectitudinea caracterelor introduse. programul EXEMPLUL 13; var Str: șir; L: octet; Tru: Boolean; begin WriteLn("Introduceți o linie"); ReadLn(Str); L:= Lungime(str); (numar de caractere introduse) Tru:= L > 0; (adevărat dacă nu este un șir gol) în timp ce Tru și (L > 0) fac (verificați de la sfârșitul liniei) începe Tru:=Str[L] în ["0".."9", "A"., "Z" , "a".."z", " "]; conform formatului intern al datelor sale. În acest caz, componentele reale ale fișierului pot fi de diferite tipuri. Exemplu. tastați UnType = fișier; Tipul de fișier poate fi definit și direct la declararea variabilelor de fișier: var Fl, F2: fișier de Integer; Variabilele de fișier au utilizări specifice. Nu puteți efectua nicio operațiune asupra lor (alocați o valoare, comparați etc.). Acestea pot fi folosite doar pentru a efectua operații asupra fișierelor (citire, scriere, ștergere a unui fișier etc.). Lucrul cu fișierele va fi discutat în paragraful 11. În plus, printr-o variabilă fișier puteți obține informații despre un anumit fișier (tip, parametri, nume fișier etc.)

Un tip de date definește un set de valori valide și un set de operații valide.

Tipuri simple.

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

1. TIPURI DE COMANDĂ , la randul lor sunt:

a) întreg

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

Tastați numele

Lungime (în octeți)

Gama 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 este CHAR - ocupă 1 octet. 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.

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 absolut exact î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. .

Lungimea tipului de date numerice, octeți

Nume tip de date numerice

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

Interval de ordine zecimală a unui tip de date numerice

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

TIPURI STRUCTURATE

Tipurile de date structurate definesc o colecție ordonată de variabile scalare și sunt caracterizate de tipul componentelor lor.

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

Există mai multe metode de structurare. După metoda de organizare și tipul componentelor î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 de șir (șiruri de caractere); în limbajul Turbo Pascal versiunea 6.0 și mai veche, a fost introdus un tip de obiect (obiecte).

Spre deosebire de tipurile de date simple, datele de tip structurat se caracterizează prin multiplicitatea elementelor 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ă. este posibilă cuibărirea tipurilor.

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 ușor organizate și oricare dintre ele poate fi accesată pur și simplu prin specificarea unui număr de serie.

Descrierea matricei este specificată după cum urmează:

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

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 care încadrează lista sunt o cerință de sintaxă;

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

Orice tipuri ordinale pot fi utilizate ca tipuri de index în Turbo Pascal, cu excepția tipurilor LongInt și interval cu tipul de bază LongInt.

Adâncimea de imbricare a tipurilor structurate în general, și, prin urmare, a tablourilor, 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ă. să fie mai mare de 65520 de octeți.

2. Înregistrări

O înregistrare este o structură de date constând dintr-un număr fix de componente numite câmpuri de înregistrare. Spre deosebire de o matrice, componentele (câmpurile) unei înregistrări pot fi diverse 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:

< Numetip>=ÎNREGISTRARE< societate mixtă. 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 obiecte de același tip care sunt conectate logic între ele. Natura conexiunilor dintre obiecte este doar implicată de programator și nu este controlată în niciun fel de Turbo Pascal. numărul de elemente incluse într-o mulțime poate varia de la 0 la 256 (o mulțime care nu conține elemente este numită goală Este inconstanța numărului de elemente 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 mulțimii este indiferentă. Dacă toate elementele unui set sunt incluse și în altul, se spune că primul set este inclus în al doilea.

Descrierea tipului de set este:

< Numetip>=SET DE< bazele. tip>

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

SET, OF – cuvinte rezervate (set, of);

<баз.тип>- tipul de bază al elementelor set, care poate fi orice tip ordinal, cu excepția WORD, INTEGER și LONGINT.

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ă, precum și un tip de interval de același tip de bază.

4. Fișiere

Un fișier se referă fie la o zonă numită memorie externă Un PC sau un dispozitiv logic este o sursă potențială sau un receptor de informații.

Orice fișier are trei caracteristici

    are un nume, care permite programului să lucreze cu mai multe fișiere simultan.

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

    lungime din nou fișier creat nu este specificat în niciun fel când este anunțat ș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 – numele tipului de fișier text standard;

<тип>- 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:

· fisiere tipizate (setate de clauza FILE OF...);

· fișiere text(definit de tipul TEXT);

· fișiere netipizate (definite de tipul FILE).

Despre conversie tipuri numerice Date Pascal

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

Var X: întreg; Y: real;

apoi operatorul

va fi corectă din punct de vedere sintactic, deși există o expresie întreagă în dreapta semnului de atribuire și o variabilă reală în stânga, compilatorul va converti automat tipurile 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 real prin eliminarea părții fracționale.

LA tipuri simple Acestea includ tipurile ordinale, reale și datetime.

Tipurile ordinale sunt diferite prin faptul că au fiecare 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.

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

Tipul datetime este conceput pentru a stoca data și ora. De fapt, folosește formatul real în aceste scopuri.

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ă valoarea ordinală a expresiei X.

Orez. 1.1

Pentru tipurile întregi, funcția ord(x) returnează însăși valoarea lui x, adică Ord(X) = x pentru x aparținând oricărui tip întreg. Aplicarea Ord(x) la tipurile boolean, caracter și enumerare produce un număr întreg pozitiv în intervalul 0 la 1 (boolean), 0 la 255 (caracter), 0 la 65535 (enumerare). 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.

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

0. .. 2 147 483 647

32 768...+32 767

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

9*1018...+9*1018

0. . .4 294 967 295

Tipurile LongWord și Int64 au fost introduse pentru prima dată în versiunea 4, dar tipurile Smallint și Cardinal au fost absente din Delphi 1. Tipul întreg pentru această versiune ocupă 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ântul, este permis Byte (dar nu invers), Longint „include” 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 tip Byte, Shortint, Word, Integer și, respectiv, 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

Returnează modulul x

Returnează un caracter după codul său

Descrește valoarea lui vx cu i, iar în absența lui i - cu 1

Crește valoarea lui vx cu i, iar în absența lui i - cu 1

Returnează cel mai înalt arc al argumentului

Returnează al treilea octet

Returnează octetul scăzut al argumentului

Returnează True dacă argumentul este un număr impar

La fel ca parametrul

Returnează un număr pseudoaleator distribuit uniform în intervalul 0...(w-l)

Returnează pătratul argumentului

Schimbă octeți într-un cuvânt

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, atunci când lucrați cu shortint și word, tipul comun va fi întreg. ÎN setare standard Compilatorul Delphi nu produce cod care controlează dacă o valoare este în afara intervalului, ceea ce poate duce la neînțelegeri.

Tipuri logice. Tipurile booleene includ Boolean, ByteBool, Bool, wordBool și LongBool. În Pascal standard, este definit doar tipul Boolean, celelalte tipuri logice sunt introduse în Object Pascal pentru compatibilitate cu Windows: tipurile Boolean și ByteBool ocupă câte un octet, Bool și WordBool - 2 octeți, LongBool - 4 octeți. Valorile booleene pot fi una dintre constantele pre-declarate 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 valoarea booleană

Ord(True) = +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 cele ce urmează pentru buclă nu va fi executat niciodată:

pentru L:= Fals la True do

ShowMessage("--);

Dacă modificați tipul parametrului buclei L din exemplul anterior la boolean, bucla va rula și mesajul va apărea pe ecran de două ori. [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. Fonturi standard Windows Arial Cyr, Courier New Cyr și Times Nou Roman pentru a reprezenta caractere chirilice (fără literele „ё” și „Ё”) se folosesc ultimele 64 de coduri (de la 192 la 256): „A”... „I” sunt codificate cu valorile 192..223, „a”... „i” - 224...255. Simbolurile „Ё” și „е” au codurile 168 și, respectiv, 184.

Tabelul 1.3 - Codificarea caracterelor în conformitate cu standardul ANSI

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.

Tipul char aplică operații relaționale, precum și funcții încorporate:

Сhar (в) - funcție de tip char; convertește o expresie de tip Byte într-un caracter și o returnează cu valoarea ei;

UpCase(CH) - funcție de tip char; se întoarce majusculă, dacă сн este o literă latină minusculă, altfel returnează simbolul сн însuși (pentru alfabetul chirilic returnează caracterul original).

Tip enumerat. 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. Putere maxima tipul enumerat are 65536 de valori, astfel încât tipul enumerat definește de fapt un subset al întregului cuvânt tip ș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 Word poate fi convertită într-o valoare a unui tip enum, atâta timp cât valoarea expresiei întregi nu 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:

High(x) - returnează valoarea maximă a tipului intervalului căruia îi aparține variabila x;

Scăzut (x) - returnează valoarea minimă a tipului intervalului.

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 absolut exact î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 precedent versiuni Delphi 1...3 Tipul 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 Double. Dacă doriți (din motive de compatibilitate) să utilizați Reals pe 6 octeți, trebuie să specificați o directivă a compilatorului (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 o lungime de la 23 (pentru single) la 63 (pentru Extended) cifre binare, ceea ce asigură o precizie de 7...8 pentru single și 19...20 pentru Extended zecimal digits. 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 Extended, 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.

O poziție specială în Object Pascal este ocupată de tipurile comp și Currency, care sunt tratate ca numere reale cu părți fracționale de lungime fixă: în comp partea fracțională are o lungime de 0 cifre, adică pur și simplu lipsește, în monedă. 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, expresiile comp și currency sunt pe deplin compatibile cu orice alte tipuri reale: toate operațiunile 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 calcule contabile.



 


Citire:



Utilizarea stilurilor în Excel Cum să vă creați propriul stil nou

Utilizarea stilurilor în Excel Cum să vă creați propriul stil nou

Dacă utilizați în mod constant aceleași opțiuni pentru a formata celulele foii de lucru din foile de calcul, ar putea fi o idee bună să creați un stil de formatare...

Ce erori apar în timpul instalării?

Ce erori apar în timpul instalării?

Notă: Programele AutoLISP pot fi executate numai pe versiunea completă a AutoCAD, ele nu funcționează sub AutoCAD LT. (excluzând cazurile de încărcare...

Statutul social al unei persoane în societate

Statutul social al unei persoane în societate

Sugerați ceea ce determină alegerea unei persoane cu privire la statutul său principal. Folosind textul și faptele vieții sociale, faceți două presupuneri și...

Interpretarea completă a erorilor

Interpretarea completă a erorilor

Destul de mulți utilizatori s-au confruntat cu fenomenul ecranului albastru al morții. Ce trebuie să faceți (Windows 7 este cel mai adesea predispus la această problemă)...

imagine-alimentare RSS