Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Greške
  • Opis tipova podataka u Pascalu. Cijeli brojevi u Pascalu

Opis tipova podataka u Pascalu. Cijeli brojevi u Pascalu

Najvažniji elementi programa su varijable. Oni utiču na tok događaja u programu tokom njegovog izvođenja. Na primjer, ako nismo specificirali vrijednost varijable Name u, kome bi se uputio pozdravni izlaz programa?

Varijable mogu sadržavati potpuno različite podatke. Na primjer, u jednoj varijabli može biti pohranjeno nečije ime, u drugoj - godina rođenja, u trećoj - visina itd. Takve različite podatke kompjuter predstavlja na različite načine. Ime je niz znakova, godina rođenja je cijeli broj, visina je realan broj (na primjer, visina je 1,72 m).

Način na koji su podaci predstavljeni od strane računara je određen njegovim tip... Pored toga, tip podataka određuje koje su radnje dozvoljene na ovim podacima.

Ovo su glavni standardni tipovi podataka Turbo-Pascal jezika:

  1. INTEGER- cjelobrojni podaci u rasponu od –32768 do 32767, zauzimaju dva bajta u memoriji;
  2. REAL- realni brojevi u rasponu od 2.9´10 -39 (2.9E-39) do 1.7´10 38 (1.7E38), zauzimaju šest bajtova;
  3. CHAR- jedan znak, jedan bajt;
  4. STRING- niz znakova, broj znakova u nizu (dužina niza) je ograničen na broj N u uglastim zagradama, zauzima N + 1 bajt (ako broj N nije naveden, maksimalna dužina niza je 255 znakova) ;
  5. BOOLEAN- boolean tip, ima dvije vrijednosti: FALSE (lažno) i TRUE (tačno), jedan bajt.

Imajte na umu da se tipovi INTEGER, CHAR i BOOLEAN odnose na redni vrste (redni tipovi).

Kao što se vjerovatno sjećate, kada se opisuje varijabla, nakon njenog imena stavlja se dvotočka, a zatim se navodi tip. Ako je nekoliko varijabli istog tipa, njihova imena mogu biti navedena odvojena zarezima.

Primjer opisa varijabli različitih tipova:

Delphi / Pascal

var a, b, c: cijeli broj; zbroj: realan; Alfa, Beta: char; S: string; S_1: string; t: boolean;

a, b, c: cijeli broj;

zbroj: realan;

Alfa, Beta: char;

S: niz [25];

S_1: string;

t: boolean;

Imajte na umu da je S_1 niz znakova, ali ne specificira dužinu kada ga opisuje. U ovom slučaju, sam kompajler postavlja maksimalnu moguću dužinu - 255 znakova.

Postoje i drugi unaprijed definirani tipovi podataka za pohranjivanje cijelih i realnih brojeva. Njihove karakteristike su prikazane u tabelama ispod. Uporedite ove tipove sa tipovima INTEGER i REAL, takođe prikazanim u tabelama.

Domet

Veličina u bajtovima

SHORTINT
INTEGER
LONGINT

2147483648 .. 2147483647

BYTE
WORD

Pravi tipovi podataka

Domet

Značajne cifre

Veličina u bajtovima

REAL

2,9´10 -39 .. 1,7´10 3 8

SINGLE

1,5´10 - 45 .. 3,4´10 3 8

DOUBLE

5.0´10 -3 24 .. 1.7´10 3 08

PRODUŽENA

3.4´10 -4932 .. 1.1´10 49 32

COMP

2 63 +1 .. 2 63 -1

Koji tip podataka koristiti

Toliko različitih vrsta, kažete, a koju biste trebali koristiti?
Zavisi od zadatka koji vam je dodijeljen. Na primjer, potrebna vam je varijabla u koju ćete pohraniti visinu određene osobe (stvarna vrijednost): u ovom slučaju dovoljno je koristiti tip SINGLE. Ako neku varijablu koristite za prebrojavanje određenih objekata (pozitivna cjelobrojna vrijednost), onda razmislite da li ovaj broj može biti veći od 255, ako ne, koristite BYTE, ako može, ne možete bez WORD-a, a u u nekim slučajevima može biti potreban i LONGINT.

Da biste saznali više o različitim tipovima, pritisnite Shift + F1 u Turbo-Pascal okruženju (pojavit će se prozor indeksa pomoći), a zatim odaberite objekt koji vas zanima (na primjer, upišite 'type' ili 'real').

Federalna agencija za obrazovanje

apstraktno

"VRSTE PODATAKA U PASCAL-u"

1. Tipovi podataka

Bilo koji podatak, tj. konstante, varijable, svojstva, vrijednosti funkcija ili izrazi karakteriziraju njihovi tipovi. Tip definira skup važećih vrijednosti koje objekt može imati, kao i skup važećih operacija koje su primjenjive na njega. Pored toga, tip takođe određuje format internog prikaza podataka u memoriji računara.

Generalno, jezik Object Pascal karakteriše razgranata struktura tipova podataka (slika 1.1). Jezik pruža mehanizam za kreiranje novih tipova, zbog čega ukupan broj tipova koji se koriste u programu može biti koliko god želite.

Podaci koji se obrađuju u programu podijeljeni su na varijable, konstante i literale:

Konstante su podaci čije su vrijednosti postavljene u odjeljku deklaracije konstante i ne mijenjaju se tokom izvršavanja programa.

Varijable su deklarirane u sekciji deklaracije varijable, ali za razliku od konstanti, one primaju svoje vrijednosti već tokom izvršavanja programa, a te vrijednosti se mogu mijenjati. Konstanti i varijablama se može pristupiti po imenu.

Doslovno nema identifikator i predstavljen je u tekstu programa direktno vrijednošću.

Tip definira skup vrijednosti koje elementi podataka mogu preuzeti i skup operacija dozvoljenih na njima.

Svi tipovi su detaljno opisani u ovom i naredna četiri poglavlja.

1.1 Jednostavni tipovi

Jednostavni tipovi uključuju redne tipove, stvarne tipove i tipove datuma i vremena.

Redni tipovi razlikuju se po tome što svaki od njih ima konačan broj mogućih vrijednosti. Ove vrijednosti se mogu sortirati na određeni način (otuda i naziv tipova) i, stoga, svaka od njih može biti povezana s nekim cijelim brojem - rednim brojem vrijednosti.

Pravi tipovi, striktno govoreći, takođe imaju konačan broj vrednosti, što je određeno formatom unutrašnjeg prikaza realnog broja. Međutim, broj mogućih vrijednosti realnih tipova je toliko velik da nije moguće pridružiti cijeli broj (njegov broj) svakom od njih.

Tip datuma i vremena namijenjeno za pohranjivanje datuma i vremena. U stvari, koristi pravi format za ove svrhe.

1.1.1 Redni tipovi

Redni tipovi uključuju (pogledajte sliku 1.1) cijeli broj, boolean, karakter, nabrojani i tip raspona. Funkcija Ord (x) je primjenjiva na bilo koju od njih, koja vraća rednu vrijednost izraza X.


Rice. 1.1 - Struktura tipa podataka

Za cijeli od tipova, funkcija ord (x) vraća vrijednost samog x, to jest, Ord (X) = x za x koji pripada bilo kojem cijeli tip. Primjena naredbe (x) na logicno , simbolična i nabrojiva tipovi daje pozitivan cijeli broj u rasponu od 0 do 1 ( boolean tip), od 0 do 255 ( simbolički), od 0 do 65535 ( enumerable). Vrsta opsegačuva sva svojstva osnovnog ordinalnog tipa, tako da rezultat primjene funkcije ord (x) na njega ovisi o svojstvima ovog tipa.

Funkcije možete primijeniti i na redne tipove:

pred (x)- vraća prethodnu vrijednost rednog tipa (vrijednost koja odgovara rednom broju ord (x) -1, odnosno ord (rred (h)) = ord (h) - 1;

uspješan (x)- vraća sljedeću vrijednost rednog tipa, koja odgovara rednom broju ord (h) +1, odnosno ord (Succ (h)) = ord (h) + 1.

Na primjer, ako program definira varijablu

tada će funkcija PRED (c) vratiti znak "4", a funkcija SUCC (c) će vratiti znak "6".

Ako zamislimo bilo koji redni tip kao uređeni skup vrijednosti koje se povećavaju s lijeva na desno i zauzimaju određeni segment na numeričkoj osi, tada je funkcija pred (x) nedefinirana za lijevo, a succ (x) - za desni kraj ovog segmenta.

Cjelobrojni tipovi ... Raspon mogućih vrijednosti za cjelobrojne tipove ovisi o njihovoj internoj reprezentaciji, koja može biti jedan, dva, četiri ili osam bajtova. Table 1.1 navodi nazive cjelobrojnih tipova, dužinu njihove interne reprezentacije u bajtovima i raspon mogućih vrijednosti.

Tabela 1.1 - Cjelobrojni tipovi

Ime Dužina, bajtovi Raspon vrijednosti
Kardinal 4 0. .. 2 147 483 647
Byte 1 0...255
Shortint 1 -128...+127
Smallint 2 -32 768...+32 767
Riječ 2 0...65 535
Integer 4
Longint 4 -2 147 483 648...+2 147 483 647
Int64 8 -9*1018...+9*1018
LongWord 4 0. . .4 294 967 295

Vrste LongWord i Int64 su prvi put predstavljeni u verziji 4, a tipovi Smallint i Kardinal nije dostupno u Delphiju 1. Tip cijeli broj za ovu verziju traje 2 bajta i ima raspon vrijednosti od -32768 do +32767, odnosno isto je kao Smallint .

Kada se koriste procedure i funkcije sa cjelobrojnim parametrima, treba se voditi „ugniježđenjem“ tipova, tj. gde god se može koristiti riječ, upotreba je dozvoljena Byte(ali ne i obrnuto), u Longint"Uključeno" Smallintšto zauzvrat uključuje Shortint .

Lista procedura i funkcija primjenjivih na cjelobrojne tipove data je u tabeli. 1.2. Slova b, s, w, i, l označavaju izraze, respektivno, tipa Byte , Shortint, Word, Integer i Longint ,

x je izraz bilo kojeg od ovih tipova; slova vb, vs, vw, vi, vl, vx označavaju varijable odgovarajućih tipova. Opcioni parametar je naveden u uglastim zagradama.

Tabela 1.2 – Standardne procedure i funkcije primjenjive na cjelobrojne tipove

Žalba Vrsta rezultata Akcija
trbušnjaci (x) x Vraća modul x
chr (b) Char Vraća znak po njegovom kodu
dec (vx [, i]) - Smanjuje vrijednost vx za i, a u nedostatku i - za 1
inc (vx [, i]) - Povećava vrijednost vx za i, a u nedostatku i za 1
zdravo (w) Byte Vraća luk višeg reda argumenta
zdravo (ja) Također Vraća treći bajt
Lo (i) Vraća najmanji značajan bajt argumenta
nisko (w) Također
neparan (l) Boolean Vraća True ako je argument neparan broj
Nasumično (w) Isto kao parametar Vraća pseudo-slučajni broj ravnomjerno raspoređen u rasponu 0 ... (w-l)
sqr (x) X Vraća kvadrat argumenta
zamijeniti (i) Integer Zamijenjuje bajtove u jednoj riječi
zamijeniti (w) Riječ Također

Za operacije s cijelim brojevima, tip rezultata će odgovarati tipu operanda, a ako su operandi različitih cjelobrojnih tipova, zajednički tip, koji uključuje oba operanda. Na primjer, kada djelujete sa shortint i riječ zajednički će biti tip cijeli broj... U podrazumevanoj postavci, Delphi kompajler ne generiše kod koji kontroliše mogućnost provere da li je vrednost van opsega, što može dovesti do zabune.

Boolean tipovi ... Boolean tipovi uključuju Boolean, ByteBool, Bool, wordBool i LongBool... U standardnom Pascalu definiran je samo tip Boolean, ostali logički tipovi su uvedeni u Object Pascal radi kompatibilnosti sa Windows: tipovima Boolean i ByteBool zauzimaju po jedan bajt svaki, Bool i WordBool- 2 bajta svaki, LongBool- 4 bajta. Logičke vrijednosti mogu biti jedna od prethodno deklariranih konstanti False ili True.

Pošto je logički tip redni tip, može se koristiti u operatoru petlje prebrojivog tipa. U Delphiju 32 for Boolean značenje

Ord (Tačno) = +1, dok za ostale tipove ( Bool, WordBool itd.)

Ord (True) = -1, tako da ovu vrstu operatora treba koristiti oprezno! Na primjer, za Delphi 6, izvršni izraz showMessage ("---") u sljedećoj petlji za neće se izvršiti ni jednom:

za L: = Netačno do Tačno

ShowMessage ("-);

Ako zamijenimo tip parametra petlje L u prethodnom primjeru sa Boolean, ciklus će se pokrenuti i poruka će se pojaviti dva puta na ekranu. [Za Delphi verzije 1 i 2, ord (Tačno) = + 1 za bilo koji logički tip.]

Tip karaktera ... Vrijednosti tipa znakova su skup svih PC znakova. Svakom znaku je dodijeljen cijeli broj u rasponu od 0 ... 255. Ovaj broj služi kao kod za interni prikaz simbola i vraća ga funkcija ord.

Windows koristi ANSI kod za kodiranje (nazvan po Američkom nacionalnom institutu za standarde - Američkom institutu za standarde koji je predložio ovaj kod). Prva polovina PC karaktera sa kodovima 0 ... 127 odgovara tabeli 1.3. Druga polovina znakova sa kodovima 128 ... 255 razlikuje se za različite fontove. Standardni Windows fontovi Arial Cyr, Courier New Cyr i Times New Roman za predstavljanje ćiriličnih znakova (bez slova "ë" i "Ë") koriste posljednja 64 koda (od 192 do 256): "A" ... "Z" su kodirane vrijednosti 192..223, "a" ... "i" - 224 ... 255. Simboli "Ë" i "ë" imaju kodove 168, odnosno 184.

Tabela 1.3 - Kodiranje znakova prema ANSI standardu

Šifra Simbol Šifra. Simbol Šifra. Simbol Šifra Simbol
0 NUL 32 BL 64 @ 96 "
1 ZON 33 ! 65 A 97 a
2 STX 34 66 V 98 b
3 ETX 35 # 67 WITH 99 With
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 " 71 G 103 d
8" BS 40 ( 72 N 104 h
9 Ht 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 TO 107 k
12 FF 44 F 76 L 108 1
13 CR 45 - 77 M 109 m
14 SO 46 78 N 110 n
15 SI 47 / 79 0 111 O
16 DEL 48 0 80 R 112 P
17 DC1 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC 4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 ETB 55 7 87 W 119 W
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 Imati
26 SUB 58 : 90 Z .122 z
27 ITD 59 ; 91 t 123 {
28 FS 60 < 92 \ 124 1
29 GS 61 = 93 ] 125 }
30 Rs 62 > 94 L 126 ~
31 US 63 F 95 127 r

Simboli sa kodovima 0 ... 31 odnose se na servisne kodove. Ako se ovi kodovi koriste u tekstu znakova programa, smatraju se razmacima.

Kucati char relacijske operacije su primjenjive, kao i ugrađene funkcije:

šar (in)- funkcija kao char; pretvara izraz u tip Byte na simbol i vraća ga sa njegovom vrijednošću;

Gornji dio (CH)- funkcija kao char; vraća veliko slovo ako je ch malo latinično slovo, u suprotnom vraća znak ch (za ćirilicu vraća originalni znak).

Nabrojani tip ... Nabrojani tip je specificiran nabrajanjem vrijednosti koje može primiti. Svaka vrijednost je imenovana nekim identifikatorom i nalazi se na listi okruženoj zagradama, na primjer:

boje = (crvena, bijela, plava);

Upotreba nabrojanih tipova čini programe jasnijim.

Korespondencija između vrijednosti nabrojanog tipa i rednih brojeva ovih vrijednosti utvrđuje se redoslijedom nabrajanja: prva vrijednost na listi dobija redni broj 0, druga - 1 i tako dalje. Maksimalna kardinalnost nabrojani tip ima 65536 vrijednosti, stoga, u stvari, nabrojani tip specificira neki podskup cjelobrojnog tipa riječ i može se smatrati kompaktnom deklaracijom grupe cjelobrojnih konstanti sa vrijednostima 0, 1 itd.

Upotreba nabrojanih tipova povećava pouzdanost programa zbog mogućnosti kontrole vrijednosti koje primaju odgovarajuće varijable. Obrnuta konverzija je dozvoljena u Object Pascal-u: bilo koji izraz tipa Riječ može se pretvoriti u nabrojanu vrijednost sve dok vrijednost cjelobrojnog izraza ne prelazi kardinalnost tog tipa. Ova konverzija se postiže korištenjem automatski deklarirane funkcije s imenom nabrojanog tipa.

Vrsta opsega ... Raspon-tip je podskup njegovog osnovnog tipa, koji može biti bilo koji redni tip osim tipa raspona.

Tip raspona je postavljen granicama njegovih vrijednosti unutar osnovnog tipa:

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

Evo<мин. знач. >- minimalna vrijednost tipa opsega;<макс. знач. >- njegovu maksimalnu vrijednost.

Tip opsega ne mora biti opisan u odjeljku tipa, ali se može navesti direktno prilikom deklariranja varijable.

Kada definirate vrstu raspona, morate se voditi sljedećim pravilima:

dva znaka ".." tretiraju se kao jedan znak, tako da nisu dozvoljeni razmaci između njih; lijeva granica opsega ne smije prelaziti desnu granicu.

Tip opsega nasljeđuje sva svojstva svog osnovnog tipa, ali s ograničenjima zbog niže kardinalnosti. Konkretno, ako je varijabla definirana.

Standardna biblioteka Object Pascal uključuje dvije funkcije koje podržavaju rad s tipovima raspona:

visoka (x)- vraća maksimalnu vrijednost tipa raspona kojem pripada varijabla x;

nisko (x)- vraća minimalnu vrijednost tipa raspona.

1.1.2 Pravi tipovi

Za razliku od rednih tipova čije se vrijednosti uvijek uspoređuju s većim brojem cijelih brojeva i stoga su u PC-u apsolutno tačno predstavljene, vrijednosti realnih tipova definiraju proizvoljan broj samo s određenom konačnom preciznošću, ovisno o interni format realnog broja.

Tabela 1.4 - Realni tipovi

U prethodnim verzijama Delphija 1 ... 3 tip Real uzeo je 6 bajtova i imao raspon vrijednosti od 2,9 * 10-39 do 1,7 * 1038. U verzijama 4 i 5, ovaj tip je ekvivalentan tipu Dvostruko... Ako je potrebno (iz razloga kompatibilnosti) koristite 6-bajt Real, morate navesti direktivu kompajlera (SREALCOMPATIBILITY ON).

Kao što možete vidjeti iz tabele. 1.4, realni broj u Object Pascal-u zauzima od 4 do 10 susednih bajtova i ima sledeću strukturu u memoriji računara.

Ovdje je s predznačena cifra broja; e - eksponencijalni dio; sadrži binarni poredak; m je mantisa broja.

Mantissa m ima dužinu od 23 (za single) do 63 (za Prošireno) binarnih znamenki, što osigurava tačnost od 7 ... 8 for single i 19 ... 20 for Prošireno decimalne cifre. Decimalna tačka (zarez) se podrazumeva ispred levog (najznačajnijeg) bita mantise, ali kada se manipuliše brojem, njegova pozicija se pomera ulevo ili udesno u skladu sa binarnim redosledom broja pohranjenog u eksponencijalnom delu, stoga se operacije nad realnim brojevima nazivaju aritmetičkim s pomičnim zarezom (zarez) ...

Imajte na umu da aritmetički koprocesor uvijek obrađuje brojeve u formatu Prošireno, a ostala tri stvarna tipa u ovom slučaju se dobijaju jednostavnim skraćivanjem rezultata na željenu veličinu i uglavnom se koriste za uštedu memorije.

Tipovi zauzimaju posebno mjesto u Object Pascal-u. komp i Valuta, koji se tretiraju kao realni brojevi sa razlomcima fiksne dužine: in komp razlomački dio ima dužinu od 0 znamenki, odnosno jednostavno je odsutan, u valuta dužina razlomka je -4 decimale. U stvari, oba tipa definiraju veliki cijeli broj s predznakom koji pohranjuje 19 ... 20 značajnih decimalnih cifara (unutra zauzimaju 8 uzastopnih bajtova). Istovremeno, u izrazima komp i valuta su u potpunosti kompatibilni sa bilo kojim drugim realnim tipovima: sve realne operacije su definirane nad njima, mogu se koristiti kao argumenti matematičkih funkcija, itd. Najprikladnije polje primjene ovih tipova su računovodstveni proračuni.

1.1.3 Tip datuma i vremena

Tip datum-vrijeme je određen standardnim identifikatorom TDateTime i namijenjen je za istovremeno pohranjivanje datuma i vremena. U internom prikazu zauzima 8 bajtova i sličan je valuta je realan broj sa fiksnim razlomkom: datum je pohranjen u cijelom dijelu broja, a vrijeme je pohranjeno u razlomkom dijelu. Datum je definisan kao broj dana koji je prošao od 30. decembra 1899. godine, a vreme je definisano kao delić dana od 0 sati, tako da vrednost 36444.837 odgovara datumu 10.11.1999. vrijeme 20:05. Broj dana može biti negativan, međutim, vrijednosti manje od -693594 (što odgovara datumu 00.00.0000 od Rođenja Hristovog) zanemaruju se funkcije konverzije datuma u niz.

Iznad podataka poput TDateTime definirane su iste operacije kao i sa realnim brojevima, a konstante i varijable cjelobrojnog i realnog tipa mogu učestvovati u izrazima ovog tipa.

Od tipa TDateTime kompatibilan sa formatom realnih brojeva, lako možete odrediti datum koji je nekoliko dana ispred ili unazad od zadatog datuma: za to je dovoljno dodati ili oduzeti željeni cijeli broj od datog datuma, respektivno.

1.2 Strukturirani tipovi

Bilo koji od strukturiranih tipova (a u Object Pascal-u ih ima četiri: nizovi, zapisi, skupovi i fajlovi) karakteriše mnogostrukost elemenata koji formiraju ovaj tip. Svaki element, zauzvrat, može pripadati strukturiranom tipu, što nam omogućava da govorimo o mogućem ugniježđenju tipova. Object Pascal dozvoljava proizvoljnu dubinu ugniježđenja tipova, ali ukupna dužina bilo kojeg od njih u internom predstavljanju ne smije biti veća od 2 GB.

Radi kompatibilnosti sa standardnim Pascalom, Object Pascalu je dozvoljeno da prethodi deklaraciji strukturiranog tipa sa rezerviranom riječi spakovano, nalažući kompajleru da sačuva memoriju dodijeljenu objektima strukturiranog tipa što je više moguće; ali kompajler zapravo zanemaruje ovaj savjet: "pakovanje" podataka u Object Pascal se obavlja automatski kad god je to moguće.

1.2.1 Nizovi

Nizovi u Object Pascalu su vrlo slični sličnim tipovima podataka u drugim programskim jezicima. Karakteristična karakteristika nizova je da su sve njihove komponente podaci istog tipa (moguće strukturirani). Ove komponente se mogu lako naručiti i bilo kojoj od njih se može pristupiti jednostavnim navođenjem serijskog broja.

Opis tipa niza je definiran na sljedeći način:

<имя типа>= niz [<сп.инд.типов>] of<тип>;

Evo<имя типа>- ispravan identifikator; niz, od- rezervirane riječi (niz, iz);<сп.инд.типов>- lista jednog ili više tipova indeksa, odvojenih zarezima; uglaste zagrade oko liste su sintaksni zahtjev;<тип>- bilo koji tip Object Pascal.

Kao tipove indeksa u Object Pascal-u možete koristiti bilo koji redni tip koji ima kardinalnost ne veću od 2 GB (tj. osim LongWord i Int64)

Dubina ugniježđenja strukturiranih tipova općenito, a samim tim i nizova, je proizvoljna, tako da broj elemenata na listi tipova indeksa (dimenzija niza) nije ograničen, ali ukupna dužina unutrašnjeg prikaza bilo kojeg niza ne može prelazi 2 GB. U memoriji računara elementi niza slijede jedan za drugim tako da se pri pomicanju sa nižih adresa na više adrese najbrže mijenja krajnji desni indeks niza.

U Object Pascal-u možete proslijediti sve elemente jednog niza drugom nizu istog tipa pomoću jednog operatora dodjeljivanja.

1.2.2 Zapisi

Snimanje je struktura podataka sastavljena od fiksnog broja komponenti koje se nazivaju polja zapisa. Za razliku od niza, komponente (polja) zapisa mogu biti različitih tipova. Da bi se omogućilo upućivanje na određenu komponentu zapisa, polja su imenovana.

Struktura deklaracije tipa zapisa je sljedeća:

<имятипа>= zapis<сп.полей>kraj;

Evo<имя типа>- ispravan identifikator; zapis / kraj- rezervirane riječi (zapis, kraj);<сп.полей>- lista polja; je niz sekcija zapisa sa tačkom i zarezom između njih.

Svaki dio zapisa sastoji se od jednog ili više identifikatora polja, odvojenih zarezima.

Rečenica slučaj ... of, koji otvara varijantni dio, izgleda kao odgovarajući operator selekcije, ali u stvari igra samo ulogu svojevrsne službene riječi koja označava početak varijantnog dijela. Zato na kraju varijantnog dela ne treba stavljati kraj kao par za slučaj ... of... (Budući da je varijantni dio uvijek zadnji u zapisu, i dalje ga prati kraj, ali samo kao par za snimanje). Ključ za odabir u prijedlogu slučaj ... of kompajler ga zapravo ignoriše: jedini uslov za njega u Object Pascal-u je da ključ definiše neki standardni ili unapred deklarisani redni tip.

Imena polja moraju biti jedinstvena unutar zapisa gdje su deklarirana, međutim, ako zapisi sadrže polja zapisa, odnosno ugniježđeni su jedno u drugo, imena se mogu ponavljati na različitim nivoima ugniježđenja.

1.2.3 Setovi

Setovi - to su skupovi objekata iste vrste koji su međusobno logički povezani. Priroda veza između objekata je samo implicirana od strane programera i ni na koji način je ne kontroliše Object Pascal. Broj elemenata uključenih u skup može varirati od 0 do 256 (skup koji ne sadrži elemente naziva se prazan). Nestalnost broja njihovih elemenata je ono što skupovi razlikuju od nizova i zapisa.

Dva skupa se smatraju ekvivalentnima ako i samo ako su svi njihovi elementi isti, a redoslijed elemenata u skupu je indiferentan. Ako su svi elementi jednog skupa također uključeni u drugi, oni govore o uključivanju prvog skupa u drugi. Prazan set je uključen u bilo koji drugi.

Opis vrste seta je sljedeći:

<имя типа>= skup od<базовый тип>;

Evo<имя типа>- ispravan identifikator; set, of- rezervirane riječi (skup, od);<базовый тип>- osnovni tip elemenata skupa, koji može biti bilo koji redni tip, osim Riječ, Integer, Longint, Int64 .

Za definisanje skupa koristi se takozvani konstruktor skupa: lista specifikacija elemenata skupa, odvojenih jedan od drugog zarezima; lista je okružena uglastim zagradama. Specifikacije elemenata mogu biti konstante ili izrazi osnovnog tipa, kao i tip raspona istog osnovnog tipa.

Unutrašnja struktura skupa je takva da je svakom njegovom elementu dodeljena jedna binarna cifra (jedan bit); ako je element uključen u skup, odgovarajući bit ima vrijednost 1, inače - 0. Istovremeno, minimalna jedinica memorije je jedan bajt koji sadrži 8 bitova, pa je kompajler skupovima dodijelio jedan bajt, a kao kao rezultat, kardinalnost svakog od njih je postala 8 elemenata. Maksimalna kardinalnost skupa je 256 elemenata. Za takve skupove, kompajler dodeljuje 16 susednih bajtova.

I još jedan eksperiment: promijenite raspon osnovnog tipa na 1..256. Iako je kardinalnost ovog tipa 256 elemenata, pri pokušaju kompajliranja programa kompajler će prijaviti grešku: Skupovi mogu imati najviše 256 elemenata (Skupovi ne mogu imati više od 256 elemenata) od numeracije elemenata skupa počinje od nule bez obzira na donju granicu deklariranu u programu... Kompajler dozvoljava korišćenje kao osnovnog tipa tipa celobrojnog opsega sa minimalnom granicom od 0 i maksimalno 255, ili bilo kog nabrojanog tipa sa ne više od 256 elemenata (maksimalna kardinalnost nabrojanog tipa je 65536 elemenata).

1.3 Žice

Sledeći tipovi se koriste za obradu teksta u Object Pascal-u:

kratka linija shortString ili niz [n] gdje je n<= 255;

duga linija string ;

široki niz WideString ;

null-terminated string pchar .

Ono što je zajedničko ovim tipovima je da se svaki niz tretira kao jednodimenzionalni niz znakova, broj znakova u kojem se može promijeniti u programu koji radi: za string [n], dužina niza se mijenja od 0 do n , za string i pchar- od 0 do 2 GB.

Standardni Pascal koristi samo kratke stringove Niz [n]... U memoriji se takvom nizu dodjeljuje n + i bajtova, prvi bajt sadrži trenutnu dužinu niza, a sami znakovi se nalaze počevši od 2. bajta. Pošto se u ovom slučaju jedan bajt dodeljuje za dužinu niza, maksimalna dužina kratkog niza ne može biti veća od 255 karaktera. Za deklarisanje kratkog niza maksimalne dužine, namijenjen je standardni tip Shortstring(ekvivalentno String).

Windows naširoko koristi nizove koji su završeni nulom, koji su nizovi znakova razgraničeni znakom # o. Maksimalna dužina takvog niza ograničena je samo dostupnom memorijom i može biti vrlo velika.

Delphi 32-bit uvodi novi tip string kombinujući pogodnosti oba tipa. Kada se radi s ovom vrstom, memorija se dodjeljuje po potrebi (dinamički) i ograničena je dostupnom memorijom koja je dostupna programu.

1.4 Pokazivači i memorija hrpe

1.4.1 Dinamička memorija

Dinamička memorija- ovo je PC RAM koji se daje programu kada je pokrenut. Dinamička alokacija podataka znači korištenje dinamičke memorije direktno dok je program pokrenut. Nasuprot tome, statičku alokaciju vrši Object Pascal kompajler tokom kompilacije programa. Kod dinamičke alokacije, ni tip ni količina podataka za dodjelu nisu unaprijed poznati.

1.4.2 Pokazivači

PC RAM je skup ćelija za pohranjivanje informacija - bajtova, od kojih svaka ima svoj broj. Ovi brojevi se zovu adrese i omogućavaju vam pristup bilo kom bajtu memorije. Object Pascal pruža programeru fleksibilan alat za upravljanje memorijom - takozvane pokazivače. Pointer je varijabla koja kao vrijednost sadrži adresu memorijskog bajta. Koristeći pokazivače, možete dodijeliti bilo koji od poznatih tipova podataka u Object Pascal-u u hrpu. Samo nekoliko njih ( Byte, Char, ShortInt, Boolean) zauzimaju jedan bajt u internom prikazu, a ostatak - nekoliko uzastopnih. Stoga, u stvari, pokazivač adresira samo prvi bajt podataka.

Tipično, pokazivač je povezan s nekom vrstom podataka. Takve pokazivače ćemo zvati otkucanima. Da biste deklarirali ukucani pokazivač, koristite simbol ^ koji se nalazi ispred odgovarajućeg tipa.

U Object Pascalu možete deklarirati pokazivač i ne vezati ga ni za jedan određeni tip podataka. Za to se koristi standardni tip. pokazivač, Na primjer:

Pointeri ove vrste će se zvati netipizirani. Budući da netipizirani pokazivači nisu povezani sa određenim tipom, zgodno ih je koristiti za dinamičko dodjeljivanje podataka čija se struktura i tip mijenjaju tokom programa.

Kao što je već spomenuto, vrijednosti pokazivača su adrese varijabli u memoriji, pa bi se očekivalo da vrijednost jednog pokazivača može biti proslijeđena drugom. U stvari, to nije istina. U Object Pascalu možete proslijediti vrijednosti samo između pokazivača povezanih s istim tipom podataka.

1.4.3 Dodjela i oslobađanje dinamičke memorije

Sva memorija hrpe u Object Pascalu se tretira kao čvrsti niz bajtova koji se naziva hrpa.

Memorija za bilo koju dinamički dodijeljenu varijablu dodjeljuje se novom procedurom. Parametar za pozivanje ove procedure je ukucani pokazivač. Kao rezultat poziva, pokazivač dobija vrijednost koja odgovara adresi sa koje se podaci mogu postaviti. Vrijednost na koju ukazuje pokazivač, odnosno stvarni podaci dodijeljeni na hrpi, označeni su simbolom ^, koji se postavlja odmah iza pokazivača. Ako iza pokazivača nema simbola ^, onda to znači adresu na kojoj se nalaze podaci. Ima smisla ponovo razmisliti o ovome što je upravo rečeno: vrijednost bilo kojeg pokazivača je adresa, a da bismo naznačili da ne govorimo o adresi, već o podacima koji se nalaze na ovoj adresi, iza se stavlja ^ pokazivač (ponekad se to naziva pokazivačem dereferenciranja).

Dinamički dodijeljeni podaci mogu se koristiti bilo gdje u programu gdje je dozvoljeno za konstante i varijable odgovarajućeg tipa

Dinamička memorija se ne može samo uzeti iz gomile, već i vratiti nazad. Za to se koristi procedura Dispose. Na primjer, operateri

Dispose (pJ);

Dispose (pR);

će vratiti u hrpu memoriju koja je prethodno bila dodijeljena pJ i pR pokazivačima (vidi gore).

Imajte na umu da procedura Dispose (pPtr) ne mijenja vrijednost pPtr pokazivača, već samo vraća memoriju koja je prethodno bila povezana s ovim pokazivačem u hrpu. Međutim, ponovna primjena procedure na slobodni pokazivač će rezultirati greškom u toku izvođenja. Programer može označiti oslobođeni pokazivač rezervisanom riječju nil.

1.5 Tip pseudonima

Za bilo koji tip, možete deklarisati onoliko alijasa koliko želite. Na primjer:

TMyInteger = Integer;

U budućnosti, alias se može koristiti na isti način kao i osnovni tip:

Mylnt: TMyInteger;

Mylnt: = 2 * Okrugla (pi);

Ove vrste aliasa se obično koriste kako bi kod bio čitljiviji. Međutim, u Object Pascalu, možete deklarirati jako upisane alijase dodavanjem rezerviranog tipa riječi ispred imena osnovnog tipa:

TMyIntegerType = tip Integer;

MylntVar: TMyIntegerType;

Sa tačke gledišta kompajlera, ukucani aliasi su kompatibilni sa osnovnim tipom u različitim vrstama izraza, ali u stvari deklarišu novi tip podataka, tako da se ne mogu koristiti kao formalni parametri poziva potprograma umesto osnovnog tipa. Ako je, na primjer, deklarirana procedura

funkcija MylntFunc (APar: cijeli broj): Integer;

onda takav apel na nju

MylntFunc (MylntVar)

kompajler će smatrati pogrešnim.

Strogo tipizirani aliasi uzrokuju da kompajler generiše informacije o tipu vremena izvršavanja (RTTI). Ove informacije obično koristi Delphi okruženje za podršku funkcionisanju različitih vrsta uređivača.

Kada opisujete varijablu, morate navesti njen tip. Tip varijable opisuje skup vrijednosti koje može poduzeti i radnje koje se mogu izvršiti na njoj. Opis tipa definira identifikator koji označava tip.

Jednostavni tipovi se dijele na standardne (redne) i nabrojane (ograničene) tipove.

Standardni tipovi

Turbo Pascal ima četiri ugrađena standardna tipa: integer, real, boolean i char.

Integer type

Turbo Pascal ima pet ugrađenih tipova cijelih brojeva: shortint, integer, longint, byte i word. Svaki tip označava određeni podskup cijelih brojeva, kao što je prikazano u sljedećoj tabeli.

Ugrađeni cjelobrojni tipovi.

Domet

Format

8 bitova sa predznakom

16 potpisanih bitova

2147483648 +2147483647

Potpisana 32 bita

8 neoznačenih bitova

16 neoznačenih bitova

Aritmetičke operacije nad operandima cjelobrojnog tipa izvode se u skladu sa sljedećim pravilima:

  1. Tip cjelobrojne konstante je ugrađeni cjelobrojni tip s najmanjim rasponom koji uključuje vrijednost te cjelobrojne konstante.
  2. U slučaju binarne operacije (operacija koja koristi dva operanda), oba operanda se konvertuju u svoj zajednički tip prije nego što se na njih djeluje. Uobičajeni tip je ugrađeni cjelobrojni tip s najmanjim rasponom koji uključuje sve moguće vrijednosti oba tipa. Na primjer, zajednički tip za cijeli broj dužine bajta je cijeli broj, a zajednički tip za cijeli broj dužine riječi i cijeli broj je dug cijeli broj. Akcija se izvodi prema preciznosti generičkog tipa, a tip rezultata je generički tip.
  3. Izraz s desne strane u iskazu dodjeljivanja se evaluira bez obzira na veličinu varijable s lijeve strane.

Operacije koje se izvode nad cijelim brojevima:

“+” - dodavanje

“-“ - oduzimanje

"*" - množenje

SQR - kvadratura

DIV - nakon dijeljenja, odbacuje razlomak

MOD - dobivanje cjelobrojnog ostatka nakon dijeljenja

ABS - broj modula

RANDOM (X) - dobijanje slučajnog broja od 0 do X

A: = 100; b: = 60; a DIV b rezultat - 1 a MOD b rezultat - 40

Varijable cjelobrojnog tipa su opisane na sljedeći način:

var lista varijabli: tip;

Na primjer: var a, p, n: cijeli broj;

Pravi tip (pravi)

Realni tip je podskup realnih brojeva koji se mogu predstaviti u formatu s pomičnim zarezom s fiksnim brojem cifara. Pisanje vrijednosti s pomičnim zarezom obično uključuje tri vrijednosti - m, b i e - tako da je m * b e, gdje je b uvijek 10, a m i e su cijeli brojevi u rasponu realnog tipa. Ove m i e vrijednosti dalje definiraju raspon i preciznost stvarnog tipa.

Postoji pet vrsta pravih tipova: real, single, duble, exnende, comp. Realni tipovi se razlikuju po opsegu i preciznosti pridruženih vrijednosti

Opseg i decimalne cifre za realne tipove

Domet

Brojevi

2,9x10E-39 do 1,7x10E 38

1,5x10E-45 do 3,4x10E 38

5,0x10E-324 do 1,7x10E 308

3,4x10E-493 do 1,1x10E 403

2E 63 do 2E 63

Operacije koje se izvode nad realnim brojevima:

  • Sve operacije su važeće za cijele brojeve.
  • SQRT (x) je kvadratni korijen broja x.
  • GRIJEH (X), COS (X), ARKTAN (X).
  • LN (X) -prirodni logaritam.
  • EXP (X) -eksponent X (ex x).
  • EXP (X * LN (A)) - eksponencijacija (A x).
  • Funkcije konverzije tipa:
    • TRUNC (X) - odbacuje frakcijski dio;
    • ROUND (X) - zaokruživanje.
  • Neka pravila aritmetičkih operacija:
    • Ako se u aritmetičkoj operaciji nađu brojevi tipa real i integer, rezultat će biti tipa real.
    • Svi sastavni dijelovi izraza su napisani u jednom redu.
    • Koriste se samo zagrade.
    • Ne možete staviti dva aritmetička znaka u niz.

Varijable realnog tipa su opisane kako slijedi:

var lista varijabli: tip;

Na primjer:

var d, g, k: realna;

Vrsta karaktera (char)

Tip char uključuje sve znakove zatvorene u apostrofe. Da biste apostrof predstavili kao simboličku varijablu, morate ga staviti u apostrof: '' '' .

Svaki simbol ima svoj kod i broj. Redni brojevi cifara 0.1..9 sortirani su uzlaznim redom. Serijski brojevi slova su također u rastućem redoslijedu, ali ne moraju nužno da slijede jedan za drugim.

Znakovi za poređenje primjenjivi su na znakovne podatke:

> , < , >=, <=, <> .

Na primjer: 'A'< ‘W’

Funkcije koje se primjenjuju na simboličke varijable:

  1. ORD (X) - definira redni broj znaka X. Red (‘a’) = 97;
  2. CHR (X) - definira znak brojem. chr (97) = 'a';
  3. PRED (X) - vraća znak koji prethodi znaku X. Pred (‘B’) = ‘A’;
  4. SUCC (X) - vraća znak nakon znaka X. succ (‘A’) = ‘B’;

Nabrojani tip

Nabrojani tip podataka je tako nazvan jer je specificiran kao nabrajanje konstanti u strogo definiranom redoslijedu i u strogo definiranoj količini. Nabrojani tip se sastoji od liste konstanti. Varijable ovog tipa mogu poprimiti vrijednost bilo koje od ovih konstanti. Opis nabrojanog tipa je:

Tip<имя типа>= (lista konstanti); Var<имя переменной>:<имя типа>;

gdje<список констант>je posebna vrsta konstanti razdvojenih zarezima koje imaju svoj redni broj, počevši od 0.

Na primjer:

smjer tipa = (sjever, jug, zapad, istok); mjesec = (jun, jul, avgust, januar); kapacitet = (kanta, bure, kanister, rezervoar); var turn: smjer; polazak: mjesec; zapremina: kapacitet; var turn: (sjever, jug, zapad, istok); polazak: (jun, jul, avgust, januar); zapremina: (kanta, bure, kanister, rezervoar);

Možete izvršiti sljedeće operatore dodjele:

Skretanje: = jug; polazak: = avgust; zapremina: = rezervoar;

ali mješoviti zadaci se ne mogu obavljati:

Polazak: = jug; zapremina: = avgust;

Sljedeće funkcije se primjenjuju na nabrojane varijable:

1. ORD - serijski broj

2. PRED je prethodni element

3. SUCC je element praćenja.

PRED (bačva) = kanta; SUCC (jug) = zapad; ORD (juli) = 1;

Varijable nabrojanog tipa se mogu porediti jer su poredane i numerisane. Dakle, izrazi: sjever< юг, июнь < январь имеют значения TRUE, а юг>west and buck<бочка значение FАLSE.

Ograničeni tip

Ako varijabla ne prihvaća sve vrijednosti svog tipa, već samo u određenom rasponu, onda se može smatrati varijablom ograničenog tipa. Svaki ograničeni tip je specificiran nametanjem ograničenja na osnovne tipove.

Opisuje se ovako:

TYPE<имя типа>= konstanta1 .. konstanta2

U ovom slučaju potrebno je poštovati sljedeća pravila:

  1. Obje ograničene konstante moraju biti istog tipa.
  2. Bilo koji jednostavni tip osim realnog može se koristiti kao osnovni tip.
  3. Početna vrijednost pri definiranju ograničenog tipa ne smije biti veća od konačne vrijednosti.
indeks tipa = 0 ..63; slovo = 'a' .. 'z'; var char1, char2: slovo; a, g: indeks;

Možete ga opisati direktno u odjeljku opisa varijable:

var a, g: 0 ..63; char1, char2: 'a' .. 'z'. Osnove programiranja
Svaki profesionalac je nekada bio čajnik. Sigurno vam je poznato stanje kada “ne znate kako da počnete razmišljati da biste došli do ovoga”. Verovatno ste naišli na situaciju u kojoj jednostavno ne znate odakle da počnete. Ova knjiga je namenjena upravo onim ljudima koji bi želeli da postanu programeri, ali uopšte ne znaju kako da krenu ovim putem. ...

Gotovo svi cjelobrojni tipovi podataka su. Ovi tipovi podataka predstavljaju cijele brojeve u određenom rasponu. Tačni nazivi cjelobrojnih tipova i raspona vrijednosti ovise o specifičnom programskom jeziku, o kompajleru i načinu kompilacije. Saznajte više o tome u dokumentaciji kompajlera.

Na primjer, tip podataka Integer u Delphiju ima raspon od -2147483648 ... 2147483647, dok je u Turbo Pascalu tip podataka Integer predstavlja brojeve u rasponu -35768 ... 32767. U Free Pascal-u, raspon vrijednosti kao što je Integer određuje odabrani način rada.

Pošto Lazarus koristi Free Pascal kompajler, ono što je rečeno o tipovima podataka u vezi sa Free Pascal važi i za Lazarus.

Dakle, besplatni Pascal integer tipovi podataka su navedeni u tabeli 13.1.

Tabela 13.1. Besplatni Pascal (Lazarus) cjelobrojni tipovi podataka.

Tip Veličina, bajtovi Raspon vrijednosti
Byte 1 0…255
Shortint 1 -128…127
Smallint 2 -35768…32767
Riječ 2 0…65535
Integer 2 ili 4 Zavisi od načina kompilacije
Kardinal 4 0…4294967295
Longint 4 -2147483648…2147483647
Duga reč 4 0...4294967295
Int64 8 -9223372036854775808...9223372036854775807
QWord 8 0...18446744073709551615

BILJEŠKA
U Free Pascal, tipovi Int64 i QWord nisu! To znači da ih ne možete koristiti, na primjer, za indeksne varijable u petljama. Međutim, donio sam ih ovdje, kako ih ubuduće ne bih posebno opisivao i skupio na jednom mjestu sve cjelobrojne tipove Free Pascal-a. Ako ne razumijete neke od riječi, nemojte se uznemiravati. U dogledno vrijeme ću vam reći o svemu detaljnije.

A sada nekoliko objašnjenja za tabelu.

U koloni A TYPE daju se identifikatori tipova podataka (ključne riječi koje indiciraju kompajleru kojem tipu pripada ovaj ili onaj podatak). Naučit ćete kako koristiti ove identifikatore u sljedećim lekcijama.

U koloni VELIČINA naznačena je veličina koju tip podataka zauzima u memoriji računara. Na primjer, pozitivan cijeli broj može biti predstavljen različitim tipovima: Byte, Riječ, Kardinal itd. Međutim, broj poput Kardinalće zauzeti 4 bajta u memoriji, dok će broj kao Byte- samo 1 bajt. Stoga, ako sigurno znate da broj s kojim radite nikada neće uzeti vrijednost veću od 255, onda je bolje da ga definirate kao tip Byte, jer će to uštedjeti prostor u memoriji računara. Iako ovdje sve nije tako jednostavno (nijanse dodjele memorije i drugih računarskih resursa su izvan dosega).

U koloni RANGE naveden je raspon vrijednosti na kojima tip podataka radi. Na primjer, broj kao Byte može imati vrijednosti od 0 do 255.

Sada vježbajte. Napišimo program koji prikazuje opsege vrijednosti svih cjelobrojnih tipova podataka. Izvorni kod za ovaj program je prikazan ispod:

Listing 13.1. Program za prikaz raspona cijelih brojeva. program td; ($ mod objfpc) ($ H +) koristi ($ IFDEF UNIX) ($ IFDEF UseCThreads) cthreads, ($ ENDIF) ($ ENDIF) Klase (možete dodati jedinice nakon ovoga); započeti Writeln ("Byte:", Low (Byte), "..", High (Byte)); Writeln ("Shortint:", Low (Shortint), "..", High (Shortint)); Writeln ("Smallint:", Nisko (Smallint), "..", Visoko (Smallint)); Writeln ("Riječ:", Niska (Riječ), "..", Visoka (Riječ)); Writeln ("Integer:", Low (Integer), "..", High (Integer)); Writeln ("Cardinal:", Low (Cardinal), "..", High (Cardinal)); Writeln ("Longint:", Nisko (Longint), "..", High (Longint)); Writeln ("Duga riječ:", Niska (Duga riječ), "..", Visoka (Duga riječ)); Writeln ("Int64:", Nisko (Int64), "..", Visoko (Int64)); Writeln ("QWord:", Nisko (QWord), "..", Visoko (QWord)); Readln; kraj.

Standardna funkcija Nisko definira minimalnu vrijednost tipa podataka. Funckia Visoko definira maksimalnu vrijednost. Sa funkcijama WriteLn i ReadLn već ste pomalo upoznati. O potprogramima (procedurama i funkcijama) ćemo detaljnije govoriti u odgovarajućem odjeljku.

Na kraju, reći ću vam kako se cijeli broj podataka zapisuje u programu. I kao i svugdje drugdje - samo napišite broj, bez navodnika i dodatnih znakova. Na primjer, tako

10
178
35278

Istina, ovo se odnosi na brojeve u sistemu decimalnog zapisa. Vjerovatno već znate da postoje i drugi sistemi. Najviše se koriste binarni, decimalni i heksadecimalni sistemi brojeva.

Free Pascal podržava četiri formata cijelih brojeva:

  1. Decimalni zapis... Samo broj kao 10.
  2. Heksadecimalni zapis... Broj sa prefiksom $. Na primjer, heksadecimalni $ 10 jednako je decimalni 16.
  3. Oktalna notacija... Broj sa prefiksom &. Na primjer, oktal & 10 jednako je decimalnom broju 8.
  4. Binarna notacija... Broj sa prefiksom%. Na primjer, binarni broj% 10 jednak je decimalnom broju 2.

Zadaća:

Kreirajte program koji prikazuje raspon cjelobrojnih vrijednosti (listing 13.1). Sastavite program i pokrenite ga. Uvjerite se da ove vrijednosti odgovaraju onima prikazanim u tabeli 13.1.

U izvornom kodu programa pronađite liniju koja postavlja način kompilacije:

($ način objfpc) ($ H +)

U ovom redu, umjesto riječi objfpc napiši reč tp... Odnosno, rezultirajuća linija bi trebala izgledati ovako:

($ mod tp) ($ H +)

Pokrenite program. Pogledajte raspon vrijednosti poput Integer... Izvucite zaključke.

Naučite da razmišljate kao programer, odnosno logički. Niko neće sve prežvakati dok ne odeš u penziju, kao što ja radim sada. Morate se naviknuti da mislite svojom glavom. U suprotnom ćete skliznuti u "majmunski princip učenja", a onda će vam se šanse da postanete odličan programer približiti nuli. Da ne biste skliznuli u nivo "trpanja", povremeno ću ostavljati praznine u vašem treningu kako biste pokušali sami shvatiti neke stvari.

Mnogo je bolje ako i sami mislite na pogrešna odluka, sami ćete pronaći grešku i sami je popraviti, nego ćete uvijek koristiti tuđa ispravna rješenja i glupo ih kopirati.

PREDAVANJE 2

Osnove programiranja.

Uvod u Pascal. Tipovi podataka. Operacije.

Abeceda jezikaPascal

Svaki prirodni jezik sastoji se od elemenata kao što su simboli, riječi, fraze, rečenice. Programski jezik također ima slične elemente: simbole, riječi, izraze (fraze), operatore (rečenice).

Riječi se formiraju iz zbirke simbola. Izrazi - ovo su grupe riječi i operatori - ovo su kombinacije riječi i izraza. Jezički simboli - postoje elementarni znakovi (slova) koji se koriste za sastavljanje neke vrste teksta. Dakle, skup ovih simbola čini abecedu jezika.

Pascal alfabet se sastoji od:

1. Velika i mala slova latinice, koja uključuju sljedeće znakove:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - velika slova;

A b c d e f g h i j k l m n o p q r s t u v w x y z - mala slova;

2. Decimalni arapski brojevi: 0 1 2 3 4 5 6 7 8 9;

3. heksadecimalne cifre (izgrađene od decimalnih cifara i slova od A do F);

4. 32 velika i mala slova ruskog alfabeta;

5.posebni znakovi:

Kombinacije specijalnih znakova mogu formirati složene znakove:

: = zadatak;

< >nije jednako;

> = veće ili jednako;

<= меньше или равно;

Raspon vrijednosti;

(* *) ili () - komentar.

Struktura Pascal programa

Da bi Pascal-kompajler ispravno shvatio koje se radnje od njega očekuju, vaš program mora biti formatiran u potpunom skladu sa sintaksom (pravilima za izgradnju programa) ovog jezika.

Bilo koji Pascal program može se sastojati od sljedećih blokova (u daljem tekstu opcionalni dijelovi su označeni uglastim zagradama):

program<имя_программы>;

[koristi<имена_подключаемых_модулей>;]

[oznaka<список_меток>;]

[konst<имя_константы> = <значение_константы>;]

[vrsta<имя_типа> = <определение_типа>;]

[var<имя_переменной> : <тип_переменной>;]

[procedura<имя_процедуры> <описание_процедуры>;]

[funkcija<имя_функции> <описание_функции>;]

početak (početak glavnog dijela programa)

<операторы>

kraj. (* kraj glavnog dijela programa *)

Kasnije verzije Pascal kompajlera više ne zahtevaju navođenje imena programa, odnosno linijskog programa<имя_программы>; može se izostaviti. Ali to je moguće samo ako je cijeli program sadržan u jednoj datoteci modula. Ako se program sastoji od nekoliko nezavisnih dijelova - modula, onda svaki od njih mora imati zaglavlje (program ili jedinica).

Bilo koji od navedenih opcionih sekcija može se pojaviti više puta u tekstu programa, njihov opšti redosled se takođe može promeniti, ali se uvek mora poštovati glavno pravilo Pascal jezika: pre nego što se objekat upotrebi, on mora biti deklarisan i opisan.

Pascal prevodioci ne razlikuju mala i velika slova i zanemaruju razmake, tako da se programski tekst može strukturirati tako da je najpogodniji za čitanje i otklanjanje grešaka.

Direktive kompajlera

Red koji počinje simbolima ($, nije komentar, već direktiva kompajlera - posebna komanda od koje zavisi proces kompajliranja i izvršavanja programa. Razmotrićemo direktive u onim odeljcima na koje se odnose "po značenju".

Na primjer, linija ($ I-, Q +) onemogućuje I/O validaciju, ali omogućava kontrolu prelivanja računala.

Identifikatori

Imena koja se daju programskim objektima (konstante, tipovi, varijable, funkcije i procedure i cijeli program u cjelini) nazivaju se identifikatori. Mogu se sastojati samo od brojeva, latiničnih slova i znaka "_" (podvlaka). Međutim, cifra ne može započeti ime. Identifikatori mogu biti bilo koje dužine, ali ako dva imena imaju ista prva 63 znaka, onda se takva imena smatraju identičnima.

Programskim objektima možete dati bilo koja imena, ali trebate da se razlikuju od rezerviranih riječi koje koristi jezik Pascal, jer kompajler ionako neće prihvatiti varijable sa "stranim" imenima.

Evo liste najčešće rezerviranih riječi:

implementacija niza shl

niz interfejsa slučaja

const oznaka onda

koristi pokazivač datoteke

daleko procedura var

za program dok

naprijed zapis sa

funkcija ponavljanje xor

Varijable i tipovi podataka

Varijabla je programski objekat čija se vrijednost može promijeniti dok je program pokrenut.

Tip podataka je karakteristika raspona vrijednosti koje varijable ovog tipa podataka mogu uzeti.

Sve varijable koje se koriste u programu moraju biti opisane u posebnom odjeljku var prema sljedećem obrascu:

var<имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;

<имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;

Pascal jezik ima veliki skup različitih tipova podataka, ali sada ćemo navesti samo neke od njih. O svim vrstama podataka ćemo dalje govoriti.

Konstante

Konstanta je objekat čija je vrijednost poznata čak i prije nego što program počne raditi.

Konstante su neophodne za dizajn vizualnih programa, nezamjenjive su pri korištenju više puta ponavljanih vrijednosti u tekstu programa, zgodne su ako je potrebno promijeniti te vrijednosti odjednom u cijelom programu.

U Pascalu postoje tri vrste konstanti:

Neimenovane konstante (brojevi i brojevi, simboli i nizovi, skupovi);

Imenovane netipizirane konstante;

Imenovane tipizirane konstante.

Neimenovane konstante

Neimenovane konstante nemaju imena i stoga ih ne treba opisivati.

Tip neimenovane konstante se automatski određuje prema zadanim postavkama:

Bilo koji niz brojeva (možda kojem prethodi znak "-" ili "+", ili prekinut jednom tačkom) prevodilac tumači kao neimenovanu konstantu - broj (cijeli ili realni);

Svaki niz znakova zatvoren u apostrofe tretira se kao neimenovana konstanta - niz;

Svaki niz cijelih brojeva ili znakova odvojenih zarezima, okružen uglastim zagradama, doživljava se kao neimenovana konstanta - skup.

Osim toga, postoje dvije posebne konstante true i false, koje se odnose na boolean tip podataka.

Primjeri korištenja neimenovanih konstanti uključuju sljedeće operatore:

real2: = 12,075 + x;

string4: = "abc" + string44;

set5: = * set55;

boolean6: = istina;

Netipizirane konstante

Imenovane konstante, kao što njihovo ime govori, moraju imati ime. Stoga se ova imena moraju prijaviti kompajleru, odnosno opisati u posebnom odeljku const.

Ako ne navedete tip konstante, onda će po njenom izgledu kompajler sam odrediti kojem (baznom) tipu pripada. Bilo koja već opisana konstanta može se koristiti prilikom deklarisanja drugih konstanti, varijabli i tipova podataka. Evo nekoliko primjera opisa netipiziranih imenovanih konstanti:

Otkucane konstante

Ukucane imenovane konstante su varijable (!) Sa početnom vrijednošću koja je već poznata do trenutka kada program počne. Stoga, prvo, tipizirane konstante se ne mogu koristiti za definiranje drugih konstanti, tipova podataka i varijabli, a drugo, njihove vrijednosti se mogu mijenjati dok je program pokrenut.

Opis ukucanih konstanti slijedi sljedeći obrazac:

konst<имя_константы> : <тип_константы> = <начальное_значение>;

Primjeri u nastavku pokazuju kako se to radi:

const n: cijeli broj = -10;

b: boolean = istina;

Navest ćemo primjere tipiziranih konstanti drugih tipova dok proučavamo odgovarajuće tipove podataka.

Pascal tipovi podataka

Pascal prevodioci zahtijevaju da se informacije o količini memorije potrebne za pokretanje programa daju prije pokretanja programa. Da biste to učinili, u odjeljku koji opisuje varijable (var), trebate navesti sve varijable koje se koriste u programu. Osim toga, također morate reći kompajleru koliko memorije će svaka od ovih varijabli zauzeti.

Sve se to može prenijeti programu jednostavnim specificiranjem tipa buduće varijable. Imajući informacije o tipu varijable, kompajler "razumije" koliko bajtova mora biti dodijeljeno za nju, koje radnje se mogu izvršiti s njom i u kojim konstrukcijama može učestvovati.

Za praktičnost programera, postoji mnogo standardnih tipova podataka u jeziku Pascal, plus mogućnost kreiranja novih tipova podataka na osnovu postojećih (standardnih ili, opet, definisanih od strane samog programera), koji se nazivaju konstruisanim.

Podjela na osnovne i konstruirane tipove podataka u Pascalu prikazana je u tabeli:

Redni (diskretni) tipovi podataka

Adresni tipovi podataka

Strukturirani tipovi podataka

Aritmetički tipovi podataka

Osnovni tipovi podataka

Logično

karakter

Real

Atypisi

indeksirani pokazivač

Konstruisani tipovi

Enumerable

sedmica = (su, mo, ut, we, th, fr, su);

Otkucani pokazivač

Niz

String string

Record record

Proceduralni

Objekat

Interval (raspon)

Tipovi podataka koje je konstruisao programer

Redni tipovi podataka

Među osnovnim tipovima podataka ističu se redni tipovi. Ovaj naziv se može opravdati na dva načina:

1. Svaki element rednog tipa može biti povezan sa jedinstvenim (rednim) brojem. Vrijednosti se numeriraju počevši od nule. Izuzetak su tipovi podataka shortint, integer i longint. Njihova numeracija se poklapa sa vrijednostima elemenata.

2. Osim toga, na elementima bilo kojeg rednog tipa definira se red (u matematičkom smislu riječi), koji direktno zavisi od numeracije. Dakle, za bilo koja dva elementa ordinalnog tipa možete sa sigurnošću reći koji je od njih manji, a koji veći.

Standardne rutine koje rukuju rednim tipovima podataka

Za vrijednosti samo rednih tipova definirane su sljedeće funkcije i procedure:

1. Funkcija ord (x) vraća redni broj vrijednosti varijable x (u odnosu na tip kojem varijabla x pripada).

2. Funkcija pred (x) vraća vrijednost koja prethodi x (nije primjenjivo na prvi element tipa).

3. Funkcija succ (x) vraća vrijednost nakon x (nije primjenjivo na posljednji element tipa).

4. Procedura inc (x) vraća vrijednost nakon x (za tipove aritmetičkih podataka, ovo je ekvivalentno operatoru x: = x + 1).

5. Procedura inc (x, k) vraća k-tu vrijednost nakon x (za tipove aritmetičkih podataka, ovo je ekvivalentno operatoru x: = x + k).

6.Procedura dec (x) vraća vrijednost koja prethodi x (za tipove aritmetičkih podataka, ovo je ekvivalentno operatoru x: = x-1).

7.Procedura dec (x, k) vraća k-tu vrijednost koja prethodi x (za tipove aritmetičkih podataka, ovo je ekvivalentno operatoru x: = x-k).

Na prvi pogled se čini da se rezultat korištenja inc (x) procedure potpuno poklapa s rezultatom korištenja succ (x) funkcije. Međutim, razlika između njih se pojavljuje na granicama dozvoljenog raspona. Funkcija succ (x) je neprimjenjiva na maksimalni element tipa, ali inc (x) procedura neće generirati nikakvu grešku, ali će, djelujući prema pravilima strojnog sabiranja, dodati još jednu jedinicu broju elementa. Broj će, naravno, izaći iz opsega i zbog skraćivanja će se pretvoriti u broj minimalne vrijednosti raspona. Ispostavilo se da procedure inc () i dec () percipiraju bilo koji redni tip kao da je "zatvoren u prsten": odmah iza posljednjeg opet dolazi prva vrijednost.

Objasnimo sve što je rečeno na primjeru. Za tip podataka

tip šesnaest = 0..15;

pokušaj sabiranja 1 do 15 će proizvesti sljedeći rezultat:

Početna jedinica će biti isečena, i stoga inc (15) = 0.

Slična situacija na donjoj granici dozvoljenog raspona proizvoljnog rednog tipa podataka uočena je za dec (x) proceduru i pred (x) funkciju:

dec (min_element) = max_element

Tipovi podataka koji se odnose na redni

1. Boolean tip ima dvije vrijednosti: false i true, a za njih su istinite sljedeće jednakosti:

ord (netačno) = 0, ord (tačno) = 1, netačno

pred (tačno) = netačno, succ (lažno) = istina,

inc (tačno) = netačno, inc (lažno) = istina,

dec (true) = lažno, dec (false) = istina.

2. Tip karaktera char sadrži 256 znakova proširene ASCII tablice (na primjer, "a", "b", "i", "7", "#"). Broj karaktera koji vraća ord () isti je kao broj karaktera u ASCII tabeli.

3. Cjelobrojni tipovi podataka su sažeti u tabeli:

Tip podataka

Broj bajtova

Domet

2147483648..2147483647

4. Nabrojani tipovi podataka su specificirani u sekciji tipa eksplicitnim nabrajanjem njihovih elemenata. Na primjer:

tip sedmica = (ned, pon, uto, sre, čet, pet, sub)

Podsjetimo da za ovaj tip podataka:

inc (sat) = sunce, dec (sun) = sub.

5. Intervalni tipovi podataka su specificirani samo granicama njihovog raspona. Na primjer:

tip mjesec = 1..12;

budni = pon..fri;

6. Tipovi podataka, koje je konstruisao programer, opisani su u odjeljku tipova prema sljedećem šablonu:

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

Na primjer:

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

Osnovni tipovi podataka su standardni, tako da nema potrebe opisivati ​​ih u odjeljku tipova. Međutim, ako želite, možete i to učiniti, na primjer, davanjem kratkih imena dugim definicijama. Recimo uvođenjem novog tipa podataka

tip int = cijeli broj;

možete malo skratiti tekst programa.

Pravi tipovi podataka

Podsjetimo da su ovi tipovi podataka aritmetički, ali ne i redni.

Tip podataka

Broj bajtova

Raspon (apsolutna vrijednost)

1.5*10-45..3.4*1038

2.9*10-39..1.7*1038

5.0*10-324..1.7*10308

3.4*10-4932..1.1*104932

Konstruisani tipovi podataka

Ove tipove podataka (zajedno sa operacijama definisanim za njih) ćemo dalje razmatrati kroz nekoliko predavanja.

Operacije i izrazi

Aritmetičke operacije

Hajde da razgovaramo o operacijama - standardnim radnjama dozvoljenim za varijable jednog ili drugog osnovnog tipa podataka. Osnovu će činiti aritmetičke i logičke operacije.

Napomena: Sve sljedeće operacije (osim unarnog "-" i ne) zahtijevaju dva operanda.

1. Logičke operacije (i - logičko AND, ili - logičko ILI, ne - logičko NE, xor - ekskluzivno OR) primjenjive su samo na vrijednosti tipa boolean. Oni također rezultiraju vrijednostima tipa boolean. Evo tablica vrijednosti za ove operacije:

istina netačno istina

false false false

tačno netačno netačno

2. Operacije poređenja (=,<>, >, <, <=, >=) primjenjivi su na sve tipove baza. Njihovi rezultati su također logičke vrijednosti.

3. Operacije cjelobrojne aritmetike primjenjive su samo na cjelobrojne tipove. Njihov rezultat je cijeli broj, čiji tip ovisi o tipu operanada.

a div b - cijelo dijeljenje a sa b (vjerovatno nema potrebe podsjećati da je dijeljenje sa 0 zabranjeno, pa u takvim slučajevima operacija generiše grešku). Rezultat će biti tip podataka koji je zajednički tipovima kojima operandi pripadaju.

Na primjer, (kratki div bajt = cijeli broj). Ovo se može objasniti na sljedeći način: integer je minimalni tip, čiji su i bajt i shortint podskupovi.

a mod b - uzimanje ostatka pri dijeljenju a sa b u potpunosti. Tip rezultata, kao iu prethodnom slučaju, određen je tipovima operanada, a 0 je zabranjena vrijednost za b. Za razliku od moda matematičke operacije, koji uvijek rezultira nenegativnim brojem, predznak rezultata moda operacije "programer" određen je predznakom njegovog prvog operanda. Dakle, ako je u matematici (-2 mod 5) = 3, onda imamo (-2 mod 5) = -2.

a shl k - pomera vrednost a za k bitova ulevo (ovo je ekvivalentno množenju vrednosti varijable a sa 2k). Rezultat operacije će biti istog tipa kao i prvi operand(i).

a shr k - pomjeri vrijednost a za k bitova udesno (ovo je ekvivalentno potpunom dijeljenju vrijednosti varijable a sa 2k). Rezultat operacije će biti istog tipa kao i prvi operand(i).

i, ili, ne, xor su binarne aritmetičke operacije koje rade s bitovima binarnog prikaza cijelih brojeva, prema istim pravilima kao i njihove odgovarajuće logičke operacije.

4. Opšte aritmetičke operacije (+, -, *, /) su primjenjive na sve aritmetičke tipove. Njihov rezultat pripada tipu podataka koji je zajednički za oba operanda (jedini izuzetak je operacija razlomka /, čiji je rezultat uvijek pravi tip podataka).

Ostale operacije

Postoje i druge operacije koje su specifične za vrijednosti nekih od standardnih Pascal tipova podataka. Ove operacije ćemo razmotriti u odgovarajućim odjeljcima:

#, in, +, *,: vidi predavanje 5 “Simboli. Strings. setovi "

@, ^: vidi predavanje 7, "Adrese i pokazivači"

Standardne aritmetičke funkcije

Standardne aritmetičke funkcije su također povezane s aritmetičkim operacijama. Donosimo njihovu listu sa kratkim opisom u tabeli.

Funkcija

Opis

Vrsta argumenta

Vrsta rezultata

Apsolutna vrijednost (modul) broja

Aritmetika

Odgovara tipu argumenta

Arc tangenta (u radijanima)

Aritmetika

Real

kosinus (u radijanima)

Aritmetika

Real

izlagač (bivši)

Aritmetika

Real

Uzimanje razlomka broja

Aritmetika

Real

Uzimanje cijelog broja

Aritmetika

Real

Prirodni logaritam (baza e)

Aritmetika

Real

Provjera neparnog broja

Značenje broja

Real

Zaokruživanje na najbliži cijeli broj

Aritmetika

Zaokruživanje naniže - na najbliži manji cijeli broj

Aritmetika

sinus (u radijanima)

Aritmetika

Real

Kvadratura

Aritmetika

Real

Ekstrakcija kvadratnog korijena

Aritmetika

Real

Aritmetički izrazi

Sve aritmetičke operacije se mogu kombinovati jedna s drugom - naravno, uzimajući u obzir tipove podataka dozvoljene za njihove operande.

Operandi bilo koje operacije mogu biti varijable, konstante, pozivi funkcija ili izrazi zasnovani na drugim operacijama. Sve zajedno se zove izraz.

Primjeri aritmetičkih izraza:

(x<0) and (y>0) je izraz čiji je rezultat logičkog tipa;

z shl abs (k) - drugi operand je standardni poziv funkcije;

(x mod k) + min (a, b) + trunc (z) - kombinacija aritmetičkih operacija i poziva funkcija;

odd (okruglo (x / abs (x))) je izraz na više nivoa.

Red kalkulacije

Ako se u izraz stave zagrade, onda se proračuni izvode po redoslijedu: što je manja dubina ugniježđenja zagrada, kasnije se izračunava operacija koja je u njima sadržana. Ako nema zagrada, tada se prvo izračunavaju vrijednosti operacija s višim prioritetom, a zatim onih s nižim prioritetom. Nekoliko uzastopnih operacija istog prioriteta se računa u nizu "slijeva na desno".

Tabela 2.1. Prioriteti (za sve) Pascal operacija

Top srodni članci