Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Pogreš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 utječu na tijek događaja u programu tijekom njegovog izvođenja. Na primjer, ako nismo naveli 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 se pohraniti nečije ime, u drugoj - godina rođenja, u trećoj - visina itd. Takve različite podatke računalo 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 se podaci prezentiraju računalom određen je njegovim tip... Osim toga, tip podataka određuje koje su radnje dopuštene na tim podacima.

Sljedeće su glavne standardne vrste podataka Turbo-Pascal jezika:

  1. CIJELI- cjelobrojni podaci u rasponu od –32768 do 32767, zauzimaju dva bajta u memoriji;
  2. STVARAN- 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. NIZ- niz znakova, broj znakova u nizu (dužina niza) ograničen je na broj N u uglatim zagradama, zauzima N + 1 bajt (ako broj N nije naveden, tada je maksimalna duljina niza 255 znakova) ;
  5. BOOLEAN- boolean tip, ima dvije vrijednosti: FALSE (false) i TRUE (true), jedan bajt.

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

Kao što se vjerojatno sjećate, kada se opisuje varijable, 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: niz; S_1: niz; t: boolean;

a, b, c: cijeli broj;

zbroj: realan;

Alfa, Beta: char;

S: niz [25];

S_1: niz;

t: boolean;

Imajte na umu da je S_1 niz znakova, ali ne navodi duljinu kada ga opisuje. U ovom slučaju, sam prevodilac postavlja najveću moguću duljinu - 255 znakova.

Postoje i druge unaprijed definirane vrste podataka za pohranjivanje cijelih i realnih brojeva. Njihove karakteristike prikazane su u tablicama u nastavku. Usporedite ove tipove s tipovima INTEGER i REAL, također prikazanim u tablicama.

Domet

Veličina u bajtovima

SHORTINT
CIJELI
DUGA

2147483648 .. 2147483647

BAJT
RIJEČ

Stvarne vrste podataka

Domet

Značajne znamenke

Veličina u bajtovima

STVARAN

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

SINGL

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

DVOSTRUKO

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

Koju vrstu podataka koristiti

Toliko različitih vrsta, kažete, a koju biste trebali koristiti?
Ovisi o zadatku koji vam je dodijeljen. Na primjer, potrebna vam je varijabla u koju ćete pohraniti visinu određene osobe (stvarnu vrijednost): u ovom slučaju dovoljno je koristiti tip SINGLE. Ako neku varijablu koristite za prebrojavanje određenih objekata (pozitivna cjelobrojna vrijednost), onda razmislite može li taj broj 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 vrstama, pritisnite Shift + F1 u Turbo-Pascal okruženju (pojavit će se prozor s indeksom pomoći), a zatim odaberite objekt koji vas zanima (na primjer, upišite 'type' ili 'real').

Federalna agencija za obrazovanje

sažetak

"VRSTE PODATAKA U PASCAL-u"

1. Vrste podataka

Bilo koji podatak, tj. konstante, varijable, svojstva, vrijednosti funkcija ili izrazi karakterizirani su svojim tipovima. Tip definira skup valjanih vrijednosti koje objekt može imati, kao i skup valjanih operacija koje su na njega primjenjive. Osim toga, tip također određuje format internog prikaza podataka u memoriji računala.

Općenito, jezik Object Pascal karakterizira razgranana struktura tipova podataka (slika 1.1). Jezik pruža mehanizam za stvaranje 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 tijekom izvršavanja programa.

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

Doslovna nema identifikator i predstavljen je u tekstu programa izravno vrijednošću.

Vrsta definira skup vrijednosti koje elementi podataka mogu preuzeti i skup operacija dopuštenih na njima.

Sve vrste su detaljno opisane u ovom i sljedeća č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. Te se vrijednosti mogu sortirati na određeni način (otuda naziv tipova) i stoga se svakoj od njih može pridružiti neki cijeli broj - redni broj vrijednosti.

Pravi tipovi, strogo govoreći, također imaju konačan broj vrijednosti, što je određeno formatom internog 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.

Vrsta datum-vrijeme namijenjeno za pohranjivanje datuma i vremena. Zapravo, koristi pravi format za te svrhe.

1.1.1 Redni tipovi

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


Riža. 1.1 - Struktura tipa podataka

Za cijeli vrsta, 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 logično , simboličan i nabrojiv vrste daje pozitivan cijeli broj u rasponu od 0 do 1 ( boolean tip), od 0 do 255 ( simbolički), od 0 do 65535 ( nabrojiv). Vrsta rasponačuva sva svojstva osnovnog rednog tipa, pa rezultat primjene funkcije ord (x) na njega ovisi o svojstvima ovog tipa.

Funkcije možete primijeniti i na redne vrste:

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, tj. ord (Succ (h)) = ord (h) + 1.

Na primjer, ako program definira varijablu

tada će funkcija PRED (c) vratiti znak "4", a funkcija SUCC (c) 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 funkcija pred (x) nije definirana za lijevu, 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. Stol 1.1 navodi nazive cjelobrojnih tipova, duljinu njihove interne reprezentacije u bajtovima i raspon mogućih vrijednosti.

Tablica 1.1 - Cjelobrojni tipovi

Ime Duljina, bajtovi Raspon vrijednosti
Kardinal 4 0. .. 2 147 483 647
Bajt 1 0...255
Shortint 1 -128...+127
Smallint 2 -32 768...+32 767
Riječ 2 0...65 535
Cijeli broj 4
Longint 4 -2 147 483 648...+2 147 483 647
Int64 8 -9*1018...+9*1018
Duga riječ 4 0. . .4 294 967 295

Vrste Duga riječ i Int64 prvi put su predstavljeni u verziji 4, a vrste 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 .

Pri korištenju procedura i funkcija s cjelobrojnim parametrima treba se voditi “gniježđenjem” tipova, tj. gdje god se može koristiti riječ, upotreba je dopuštena Bajt(ali ne i obrnuto), u Longint"Uključeno" Smallintšto pak uključuje Shortint .

Popis postupaka i funkcija primjenjivih na cjelobrojne tipove dat je u tablici. 1.2. Slova b, s, w, i, l označavaju izraze tog tipa Bajt , 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. Neobavezni parametar je naveden u uglastim zagradama.

Tablica 1.2 – Standardne procedure i funkcije primjenjive na cjelobrojne tipove

Apel Vrsta rezultata Akcijski
trbušnjaci (x) x Vraća modul x
hr (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
bok (w) Bajt Vraća luk višeg reda argumenta
Zdravo, ja) Također Vraća treći bajt
lo (i) Vraća najmanje značajan bajt argumenta
niska (w) Također
neparan (l) Boolean Vraća True ako je argument neparan broj
Nasumično (w) Isto kao i parametar Vraća pseudoslučajni broj ravnomjerno raspoređen u rasponu 0 ... (w-l)
sqr (x) x Vraća kvadrat argumenta
zamijeniti (i) Cijeli broj Mijenja bajtove u jednoj riječi
zamijeniti (w) Riječ Isto

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 djeluje sa kratak i riječ zajednički će biti tip cijeli broj... U zadanim postavkama, Delphi prevodilac ne generira kod koji kontrolira mogućnost provjere je li vrijednost izvan raspona, što može dovesti do zabune.

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

Budući da je boolean tip redni tip, može se koristiti u operatoru petlje prebrojivog tipa. U Delphiju 32 for Boolean značenje

Ord (True) = +1, dok za ostale vrste ( Bool, WordBool itd.)

Ord (True) = -1, stoga 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 niti jednom:

za L: = Netočno do Točno učiniti

ShowMessage ("-);

Zamijenimo li tip parametra petlje L u prethodnom primjeru sa Boolean, ciklus će se pokrenuti i poruka će se pojaviti dvaput na ekranu. [Za Delphi verzije 1 i 2, ord (True) = + 1 za bilo koji booleov tip.]

Vrsta lika ... Vrijednosti tipa znakova skup su 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 polovica PC znakova s ​​kodovima 0 ... 127 odgovara tablici 1.3. Druga polovica znakova s ​​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.

Tablica 1.3 - Kodiranje znakova prema ANSI standardu

Kod Simbol Kod. Simbol Kod. Simbol Kod 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 S 99 S
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 ja 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 DO 107 k
12 FF 44 F 76 L 108 1
13 CR 45 - 77 M 109 m
14 TAKO 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 P 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 LIMENKA 56 8 88 x 120 x
25 EM 57 9 89 Y 121 Imati
26 POD 58 : 90 Z .122 z
27 ESC 59 ; 91 t 123 {
28 FS 60 < 92 \ 124 1
29 GS 61 = 93 ] 125 }
30 Rs 62 > 94 L 126 ~
31 NAS 63 F 95 127 r

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

Upisati čar Primjenjive su operacije odnosa, kao i ugrađene funkcije:

šar (u)- funkcionirati kao čar; pretvara izraz u tip Bajt na simbol i vraća ga s njegovom vrijednošću;

Velika velika (CH)- funkcionirati kao čar; vraća veliko slovo ako je ch malo latinično slovo, inače vraća znak ch (za ćirilicu vraća izvorni znak).

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

boje = (crvena, bijela, plava);

Korištenje nabrojanih tipova čini programe jasnijim.

Korespondencija između vrijednosti nabrojanog tipa i rednih brojeva tih vrijednosti utvrđuje se redoslijedom nabrajanja: prva vrijednost na popisu dobiva redni 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 odjednom grupe cjelobrojnih konstanti s vrijednostima 0, 1 itd.

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

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

Vrsta raspona je postavljena granicama njegovih vrijednosti unutar osnovnog tipa:

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

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

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

Prilikom definiranja vrste raspona morate se voditi sljedećim pravilima:

dva znaka ".." tretiraju se kao jedan znak, tako da nisu dopušteni razmaci između njih; lijeva granica raspona ne smije prelaziti njegovu desnu granicu.

Tip raspona 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 točno predstavljene, vrijednosti realnih tipova definiraju proizvoljan broj samo s određenom konačnom preciznošću, ovisno o interni format realnog broja.

Tablica 1.4 - Stvarni tipovi

U prethodnim verzijama Delphija 1 ... 3 tipa Stvaran 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 Stvaran, trebate navesti direktivu kompajlera (SREALCOMPATIBILITY ON).

Kao što možete vidjeti iz tablice. 1.4, realni broj u Object Pascalu zauzima od 4 do 10 susjednih bajtova i ima sljedeću strukturu u memoriji računala.

Ovdje je s predznaka broja; e - eksponencijalni dio; sadrži binarni poredak; m je mantisa broja.

Kazaljka m ima duljinu od 23 (za singl) do 63 (za Prošireno) binarnih znamenki, što osigurava točnost od 7 ... 8 for singl i 19 ... 20 for Prošireno decimalne znamenke. Decimalna točka (zarez) podrazumijeva se ispred lijevog (najznačajnijeg) bita mantise, ali kada se manipulira brojem, njegova pozicija se pomiče ulijevo ili udesno u skladu s binarnim redoslijedom broja pohranjenog u eksponencijalnom dijelu, stoga se operacije nad realnim brojevima nazivaju aritmetički s pomičnim zarezom (zarez) ...

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

Tipovi zauzimaju posebno mjesto u Object Pascalu. komp i Valuta, koji se tretiraju kao realni brojevi s razlomcima fiksne duljine: in komp frakcijski dio ima duljinu od 0 znamenki, odnosno jednostavno je odsutan, u valuta duljina razlomka je -4 decimalna mjesta. Zapravo, obje vrste definiraju veliki cijeli broj s predznakom koji pohranjuje 19 ... 20 značajnih decimalnih znamenki (interno zauzimaju 8 susjednih bajtova). Istovremeno, u izrazima komp i valuta potpuno su kompatibilni s bilo kojim drugim stvarnim tipovima: nad njima su definirane sve stvarne operacije, mogu se koristiti kao argumenti matematičkih funkcija itd. Najprikladnije polje primjene ovih tipova su računovodstveni izračuni.

1.1.3 Vrsta datum-vrijeme

Tip datum-vrijeme određen je 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 s fiksnim razlomkom: datum je pohranjen u cijelom dijelu broja, a vrijeme je pohranjeno u razlomku. Datum je definiran kao broj dana koji je prošao od 30. prosinca 1899., a vrijeme je definirano kao djelić dana od 0 sati, tako da vrijednost 36444.837 odgovara datumu 11.10.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 Kristova) zanemaruju se funkcije pretvorbe datuma u niz.

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

Budući da je tip TDateTime kompatibilan s formatom realnih brojeva, lako možete odrediti datum koji je nekoliko dana ispred ili unatrag od zadanog datuma: za to je dovoljno zbrojiti ili oduzeti željeni cijeli broj od zadanog datuma, odnosno.

1.2 Strukturirani tipovi

Bilo koji od strukturiranih tipova (a u Object Pascalu ih ima četiri: nizovi, zapisi, skupovi i datoteke) karakterizira mnogostrukost elemenata koji tvore ovaj tip. Svaki element, zauzvrat, može pripadati strukturiranom tipu, što nam omogućuje da govorimo o mogućem ugniježđenju tipova. Object Pascal dopušta proizvoljnu dubinu ugniježđenja tipova, ali ukupna duljina bilo kojeg od njih u internom prikazu ne smije biti veća od 2 GB.

Radi kompatibilnosti sa standardnim Pascalom, Object Pascalu je dopušteno da prethodi deklaraciji strukturiranog tipa s rezerviranom riječi upakiran, upućivanje prevoditelja da spremi memoriju dodijeljenu za objekte strukturiranog tipa što je više moguće; ali prevodilac zapravo zanemaruje ovaj savjet: "pakiranje" podataka u Object Pascal obavlja se automatski kad god je to moguće.

1.2.1 Nizovi

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

Opis tipa polja definiran je kako slijedi:

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

Ovdje<имя типа>- ispravan identifikator; niz, od- rezervirane riječi (niz, iz);<сп.инд.типов>- popis jedne ili više vrsta indeksa, odvojenih zarezima; uglaste zagrade oko popisa su sintaksni zahtjev;<тип>- bilo koja vrsta Object Pascal.

Kao tipove indeksa u Object Pascalu možete koristiti sve redne tipove koji imaju kardinalnost ne veću od 2 GB (tj. osim Duga riječ i Int64)

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

U Object Pascalu možete proslijediti sve elemente jednog niza drugom nizu istog tipa s jednim operatorom dodjeljivanja.

1.2.2 Zapisi

Snimanje je struktura podataka sastavljena od fiksnog broja komponenti zvanih 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 vrste zapisa je sljedeća:

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

Ovdje<имя типа>- ispravan identifikator; zapis / kraj- rezervirane riječi (zapis, kraj);<сп.полей>- popis polja; je slijed dijelova zapisa s točkom i zarezom između njih.

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

Rečenica slučaj ... od, koji otvara varijantni dio, izgleda kao odgovarajući operator odabira, ali zapravo igra samo ulogu svojevrsne službene riječi koja označava početak varijantnog dijela. Zato na kraju varijantnog dijela ne treba stavljati kraj kao par za slučaj ... od... (Budući da je varijantni dio uvijek zadnji u zapisu, i dalje slijedi kraj, ali samo kao par za snimanje). Ključ za odabir u prijedlogu slučaj ... od je zapravo zanemaren od strane prevoditelja: jedini zahtjev za to u Object Pascalu je da ključ definira neki standardni ili unaprijed deklarirani redni tip.

Nazivi polja moraju biti jedinstveni unutar zapisa gdje su deklarirani, međutim, ako zapisi sadrže polja zapisa, odnosno ugniježđena su jedno u drugo, imena se mogu ponavljati na različitim razinama ugniježđenja.

1.2.3 Setovi

Setovi su skupovi iste vrste objekata međusobno logički povezanih. Prirodu veza između objekata samo implicira programer i Object Pascal je ne kontrolira ni na koji način. 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 skup je uključen u bilo koji drugi.

Opis vrste skupa je sljedeći:

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

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

Za definiranje skupa koristi se takozvani konstruktor skupa: popis specifikacija elemenata skupa, međusobno odvojenih zarezima; popis je okružen uglastim zagradama. Specifikacije elemenata mogu biti konstante ili izrazi osnovnog tipa, kao i tip raspona iste osnovne vrste.

Unutarnja struktura skupa je takva da je svakom njegovom elementu dodijeljena jedna binarna znamenka (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 prevodilac skupovima dodijelio jedan bajt, a kao rezultat toga, kardinalnost svakog od njih postala je 8 elemenata. Maksimalna kardinalnost skupa je 256 elemenata. Za takve skupove prevodilac dodjeljuje 16 susjednih bajtova.

I još jedan eksperiment: promijenite raspon osnovne vrste na 1..256. Iako je kardinalnost ovog tipa 256 elemenata, pri pokušaju kompajliranja programa prevodilac će prijaviti pogrešku: Skupovi mogu imati najviše 256 elemenata (Skupovi ne smiju imati više od 256 elemenata) od numeriranja elemenata skupa počinje od nule bez obzira na donju granicu deklariranu u programu ... Prevoditelj dopušta korištenje kao osnovnog tipa cjelobrojnog tipa raspona s minimalnom granicom od 0 i maksimalno 255, ili bilo kojeg nabrojanog tipa s ne više od 256 elemenata (maksimalna kardinalnost nabrojanog tipa je 65536 elemenata).

1.3 Žice

Za obradu teksta u Object Pascalu koriste se sljedeće vrste:

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

duga linija niz ;

široki niz WideString ;

null-terminirani niz pchar .

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 se izvodi: za niz [n], duljina niza varira od 0 do n , za niz i pchar- od 0 do 2 GB.

Standardni Pascal koristi samo kratke nizove Niz [n]... U memoriji se takvom nizu dodjeljuje n + i bajtova, prvi bajt sadrži trenutnu duljinu niza, a sami znakovi se nalaze počevši od 2. bajta. Budući da je u ovom slučaju jedan bajt dodijeljen za duljinu niza, maksimalna duljina kratkog niza ne može biti veća od 255 znakova. Za deklariranje kratkog niza maksimalne duljine namijenjen je standardni tip Kratki niz(ekvivalent Niz).

Windows naširoko koristi null-terminirane nizove, koji su znakovni nizovi omeđeni znakom # o. Maksimalna duljina takvog niza ograničena je samo dostupnom memorijom i može biti vrlo velika.

Delphi 32-bit uvodi novi tip niz kombinirajući pogodnosti obje vrste. Kada radite s ovom vrstom, memorija se dodjeljuje po potrebi (dinamički) i ograničena je dostupnom memorijom koja je dostupna programu.

1.4 Pointeri i memorija hrpe

1.4.1 Dinamička memorija

Dinamička memorija- ovo je RAM računala koji se daje programu kada je pokrenut. Dinamička alokacija podataka znači korištenje dinamičke memorije izravno dok program radi. Za razliku od toga, statičku dodjelu obavlja Object Pascal prevodilac tijekom kompilacije programa. Kod dinamičke dodjele, ni vrsta ni količina podataka za dodjelu nisu unaprijed poznati.

1.4.2 Pokazivači

PC RAM je skup ćelija za pohranu informacija – bajtova, od kojih svaki ima svoj broj. Ti se brojevi nazivaju adresama, omogućuju vam pristup bilo kojem bajtu memorije. Object Pascal omogućuje programeru fleksibilni alat za upravljanje memorijom hrpe - takozvane pokazivače. Pokazivač 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 Pascalu u hrpu. Samo nekoliko njih ( Byte, Char, ShortInt, Boolean) zauzimaju jedan bajt u internom prikazu, a ostatak - nekoliko susjednih. Stoga, zapravo, pokazivač adresira samo prvi bajt podataka.

Obično je pokazivač povezan s nekom vrstom podataka. Takve ćemo pokazivače nazvati upisanim. Da biste deklarirali upisani pokazivač, koristite simbol ^ koji se nalazi ispred odgovarajućeg tipa.

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

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

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

1.4.3 Dodjela i oslobađanje dinamičke memorije

Sva memorija hrpe u Object Pascalu tretira se 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 upisani pokazivač. Kao rezultat poziva, pokazivač dobiva vrijednost koja odgovara adresi s koje se podaci mogu postaviti. Vrijednost na koju pokazuje pokazivač, odnosno stvarni podaci dodijeljeni na hrpi, označeni su simbolom ^ koji se postavlja odmah iza pokazivača. Ako iza pokazivača nema simbola ^, to znači adresu na kojoj se nalaze podaci. Ima smisla ponovno 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 dereferencirajućim pokazivačem).

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

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

Odlagati (pJ);

Odložiti (pR);

vratit će u hrpu memoriju koja je prethodno bila dodijeljena pokazivačima pJ i pR (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 postupka na slobodni pokazivač rezultirat će pogreškom tijekom izvođenja. Programer može označiti oslobođeni pokazivač rezerviranom riječju nil.

1.5 Aliasi vrsta

Za bilo koju vrstu, možete deklarirati onoliko aliasa koliko želite. Na primjer:

TMyInteger = cijeli broj;

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

Mylnt: TMyInteger;

Mylnt: = 2 * Okrugli (pi);

Ove vrste aliasa se obično koriste kako bi kod bio čitljiviji. Međutim, u Object Pascalu možete deklarirati jako upisane aliase dodavanjem rezervirane vrste riječi ispred naziva osnovne vrste:

TMyIntegerType = tip Integer;

MylntVar: TMyIntegerType;

Sa stajališta prevoditelja, upisani aliasi su kompatibilni s osnovnim tipom u različitim vrstama izraza, ali zapravo deklariraju novi tip podataka, tako da se ne mogu koristiti kao formalni parametri poziva potprograma umjesto osnovnog tipa. Ako se npr. proglasi postupak

funkcija MylntFunc (APar: cijeli broj): Integer;

onda takav apel na nju

MylntFunc (MylntVar)

prevodilac će smatrati pogrešnim.

Strogo upisani aliasi uzrokuju da prevodilac generira informacije o tipu vremena izvođenja (RTTI). Ove informacije obično koristi Delphi okruženje za podršku funkcioniranju raznih vrsta urednika.

Kada opisujete varijablu, morate odrediti 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.

Standardne vrste

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

Cjelobrojni tip

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

Ugrađeni cjelobrojni tipovi.

Domet

Format

8 bitova s ​​predznakom

16 bitova s ​​predznakom

2147483648 +2147483647

Predpisani 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 se operanda pretvaraju 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 duljine bajta je cijeli broj, a zajednički tip za cijeli broj duljine riječi i cijeli broj je dugi cijeli broj. Radnja se izvodi prema preciznosti generičkog tipa, a tip rezultata je generički tip.
  3. Izraz s desne strane u iskazu o dodjeli vrednuje se bez obzira na veličinu varijable s lijeve strane.

Operacije koje se izvode nad cijelim brojevima:

“+” - zbrajanje

“-“ - oduzimanje

"*" - množenje

SQR - kvadratura

DIV - nakon dijeljenja, odbacuje razlomak

MOD - dobivanje cjelobrojnog ostatka nakon dijeljenja

ABS - broj modula

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

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

Varijable cjelobrojnog tipa opisane su kako slijedi:

var popis 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 znamenki. 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 stvarnom rasponu. Ove m i e vrijednosti dalje definiraju raspon i preciznost stvarnog tipa.

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

Raspon i decimalne znamenke za stvarne vrste

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 izvedene nad realnim brojevima:

  • Sve operacije vrijede 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 pretvorbe vrsta:
    • TRUNC (X) - odbacuje frakcijski dio;
    • ROUND (X) - zaokruživanje.
  • Neka pravila aritmetičkih operacija:
    • Ako se u aritmetičkoj operaciji susreću brojevi tipa real i integer, rezultat će biti tipa real.
    • Svi sastavni dijelovi izraza napisani su u jednom retku.
    • Koriste se samo zagrade.
    • Ne možete staviti dva aritmetička znaka u niz.

Varijable realnog tipa opisane su kako slijedi:

var popis varijabli: tip;

Na primjer:

var d, g, k: stvarna;

Vrsta znaka (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. Brojevi u nizu znamenki 0.1..9 poredani su uzlaznim redoslijedom. Redni brojevi slova također su u rastućem redoslijedu, ali ne slijede nužno jedan za drugim.

Znakovi za usporedbu 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’;

Nabrojana vrsta

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 popisa konstanti. Varijable ovog tipa mogu poprimiti vrijednost bilo koje od ovih konstanti. Opis nabrojanog tipa je:

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

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

Na primjer:

smjer tipa = (sjever, jug, zapad, istok); mjesec = (lipanj, srpanj, kolovoz, siječanj); kapacitet = (kanta, bačva, kanister, rezervoar); var okret: smjer; polazak: mjesec; volumen: kapacitet; var okret: (sjever, jug, zapad, istok); polazak: (lipanj, srpanj, kolovoz, siječanj); volumen: (kanta, bačva, kanister, spremnik);

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

Skretanje: = jug; polazak: = kolovoz; volumen: = spremnik;

ali mješoviti zadaci se ne mogu izvoditi:

Polazak: = jug; volumen: = kolovoz;

Sljedeće funkcije primjenjuju se 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 (srpanj) = 1;

Varijable nabrojanog tipa mogu se usporediti jer su poredane i numerirane. Dakle izrazi: sjever< юг, июнь < январь имеют значения TRUE, а юг>zapad i dolar<бочка значение 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 specificiran je primjenom ograničenja na osnovne tipove.

Opisuje se ovako:

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

U tom slučaju potrebno je poštivati ​​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 izravno u odjeljku opisa varijable:

var a, g: 0 ..63; znak1, znak2: 'a' .. 'z'. Osnove programiranja
Svaki je profesionalac nekada bio čajnik. Sigurno vam je poznato stanje kada “ne znate kako početi razmišljati da biste ovo smislili”. Vjerojatno ste naišli na situaciju u kojoj jednostavno ne znate odakle početi. Ova knjiga namijenjena je upravo onim ljudima koji bi željeli postati programer, ali uopće ne znaju kako krenuti tim putem. ...

Gotovo svi cjelobrojni tipovi podataka su. Ove vrste podataka predstavljaju cijele brojeve u određenom rasponu. Toč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 Cijeli broj u Delphiju ima raspon od -2147483648 ... 2147483647, dok je u Turbo Pascalu tip podataka Cijeli broj predstavlja brojeve u rasponu -35768 ... 32767. U Free Pascalu, niz vrijednosti poput Cijeli broj određuje odabrani način rada.

Budući da Lazarus koristi Free Pascal prevodilac, ono što je rečeno o tipovima podataka u vezi sa Free Pascalom vrijedi i za Lazarus.

Dakle, Free Pascal cjelobrojni tipovi podataka navedeni su u tablici 13.1.

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

Vrsta Veličina, bajtovi Raspon vrijednosti
Bajt 1 0…255
Shortint 1 -128…127
Smallint 2 -35768…32767
Riječ 2 0…65535
Cijeli broj 2 ili 4 Ovisi o načinu kompilacije
Kardinal 4 0…4294967295
Longint 4 -2147483648…2147483647
Duga riječ 4 0...4294967295
Int64 8 -9223372036854775808...9223372036854775807
QWord 8 0...18446744073709551615

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

A sada nekoliko objašnjenja za tablicu.

U koloni VRSTA daju se identifikatori tipova podataka (ključne riječi koje prevoditelju ukazuju kojoj vrsti 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 vrsta podataka zauzima u memoriji računala. Na primjer, pozitivan cijeli broj može biti predstavljen različitim tipovima: Bajt, Riječ, Kardinal itd. Međutim, broj poput Kardinalće zauzeti 4 bajta u memoriji, dok će broj poput Bajt- samo 1 bajt. Stoga, ako sigurno znate da broj s kojim radite nikada neće uzeti vrijednost veću od 255, onda ga je bolje definirati kao tip Bajt, jer će to uštedjeti prostor u memoriji računala. Iako ovdje sve nije tako jednostavno (nijanse dodjele memorije i drugih računalnih resursa su izvan dosega).

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

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

Listing 13.1. Program za prikaz raspona cijelih brojeva. program td; ($ način 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 ("Kardinal:", Nisko (Kardinal), "..", Visoko (Kardinal)); Writeln ("Longint:", Nisko (Longint), "..", Visoko (Longint)); Writeln ("Duga riječ:", Niska (Duga riječ), "..", Visoka (Duga riječ)); Writeln ("Int64:", Niska (Int64), "..", Visoka (Int64)); Writeln ("QWord:", Nisko (QWord), "..", Visoko (QWord)); Readln; kraj.

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

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

10
178
35278

Istina, to se odnosi na brojeve u sustavu decimalnog zapisa. Vjerojatno već znate da postoje i drugi sustavi. Najviše se koriste binarni, decimalni i heksadecimalni brojevni sustavi.

Free Pascal podržava četiri formata cijelih brojeva:

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

Domaća zadaća:

Napravite program koji prikazuje raspon cjelobrojnih vrijednosti (listing 13.1). Sastavite program i pokrenite ga. Provjerite odgovaraju li ove vrijednosti onima prikazanim u tablici 13.1.

U izvornom kodu programa pronađite redak koji postavlja način kompilacije:

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

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

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

Pokrenite program. Pogledajte raspon vrijednosti poput Cijeli broj... Izvucite zaključke.

Naučite razmišljati kao programer, odnosno logično. Nitko neće sve prožvakati dok ne odeš u mirovinu, kao što ja radim sada. Moraš se naviknuti misliti svojom glavom. Inače ć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 razinu "trpanja", povremeno ću ostavljati praznine u vašem treningu kako biste neke stvari pokušali shvatiti sami.

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. Vrste podataka. Operacije.

Jezična abecedaPascal

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 - to su grupe riječi i operatori - to su kombinacije riječi i izraza. Jezični simboli – postoje elementarni znakovi (slova) koji služe za sastavljanje neke vrste teksta. Dakle, skup ovih simbola čini abecedu jezika.

Pascal abeceda se sastoji od:

1. Velika i mala slova latinske abecede koja uključuje 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 znamenke (izgrađene od decimalnih znamenki i slova od A do F);

4. 32 velika i mala slova ruske abecede;

5.posebni znakovi:

Kombinacije posebnih znakova mogu tvoriti složene znakove:

: = zadatak;

< >nejednak;

> = veće ili jednako;

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

Raspon vrijednosti;

(* *) ili () - komentar.

Struktura Pascal programa

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

Svaki Pascal program može se sastojati od sljedećih blokova (u daljnjem tekstu opcijski dijelovi označeni su uglastim zagradama):

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

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

[označiti<список_меток>;]

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

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

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

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

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

početi (početak glavnog dijela programa)

<операторы>

kraj. (* kraj glavnog dijela programa *)

Kasnije verzije Pascal prevoditelja više ne zahtijevaju navođenje naziva 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 neovisnih dijelova - modula, tada svaki od njih mora imati zaglavlje (program ili jedinica).

Bilo koji od navedenih neobaveznih odjeljaka može se pojaviti više puta u tekstu programa, njihov opći slijed se također može promijeniti, ali se uvijek mora poštivati ​​glavno pravilo Pascal jezika: prije nego što se objekt koristi, mora biti deklariran i opisan.

Pascal prevoditelji ne razlikuju mala i velika slova i zanemaruju znakove razmaka, pa se tekst programa može strukturirati tako da je najprikladniji za čitanje i otklanjanje pogrešaka.

Smjernice prevoditelja

Redak koji počinje simbolima ($, nije komentar, već direktiva kompajlera - posebna naredba o kojoj ovisi proces prevođenja i izvršavanja programa. Razmotrit ćemo direktive u onim odjeljcima na koje se odnose "po značenju".

Na primjer, linija ($ I-, Q +) onemogućuje I/O provjeru valjanosti, ali omogućuje kontrolu računalnog preljeva.

Identifikatori

Imena koja se daju programskim objektima (konstante, tipovi, varijable, funkcije i procedure, te cijeli program u cjelini) nazivaju se identifikatori. Mogu se sastojati samo od brojeva, latiničnih slova i znaka "_" (podvlaka). Međutim, znamenka ne može započeti ime. Identifikatori mogu biti bilo koje duljine, ali ako dva imena imaju ista prva 63 znaka, tada se takvi nazivi 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 prevodilac ionako neće prihvatiti varijable sa "stranim" imenima.

Ovdje je popis najčešćih rezerviranih riječi:

implementacija niza shl

niz sučelja slučaja

const oznaka tada

datotečni pokazivač koristi

daleko postupak var

za program dok

naprijed zapis sa

funkcija ponoviti xor

Varijable i vrste podataka

Varijabla je programski objekt č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 dalje ćemo govoriti.

Konstante

Konstanta je objekt čija je vrijednost poznata i prije nego što se program pokrene.

Konstante su potrebne za dizajn vizualnih programa, nezamjenjive su pri korištenju više puta ponavljanih vrijednosti u tekstu programa, prikladne su ako je potrebno mijenjati 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 upisane konstante.

Neimenovane konstante

Neimenovane konstante nemaju imena, pa ih stoga ne treba opisivati.

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

Bilo koji niz brojeva (moguće kojem prethodi znak "-" ili "+", ili prekinut jednom točkom) prevodilac tumači kao neimenovanu konstantu - broj (cijeli ili realan);

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

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

Osim toga, postoje dvije posebne konstante true i false, koje su povezane s booleovim tipom 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 im ime govori, moraju imati ime. Stoga se ta imena moraju prijaviti prevoditelju, odnosno opisati u posebnom odjeljku const.

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

Upisane konstante

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

Opis upisanih konstanti slijedi sljedeći obrazac:

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

Primjeri u nastavku pokazuju kako to učiniti:

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 prevoditelji 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 prevoditelju koliko memorije će svaka od ovih varijabli zauzeti.

Sve se to može prenijeti programu jednostavnim navođenjem vrste buduće varijable. Imajući informacije o tipu varijable, prevodilac "razumije" koliko bajtova mora biti dodijeljeno za nju, koje se radnje s njom mogu izvesti i u kojim konstrukcijama može sudjelovati.

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

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

Redni (diskretni) tipovi podataka

Vrste podataka o adresi

Strukturirani tipovi podataka

Aritmetički tipovi podataka

Osnovni tipovi podataka

Logično

Lik

Stvaran

Atypisi

indeksirani pokazivač

Konstruirani tipovi

Nabrojiv

tjedan = (su, mo, tu, we, th, fr, sa);

Upisani pokazivač

Niz

String string

Snimak rekorda

Proceduralni

Objekt

Interval (raspon)

Tipovi podataka koje je izradio 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 pridružen jedinstvenom (rednom) broju. Vrijednosti se numeriraju počevši od nule. Iznimka su tipovi podataka shortint, integer i longint. Njihovo numeriranje podudara se s vrijednostima elemenata.

2. Osim toga, na elementima bilo kojeg rednog tipa definira se red (u matematičkom smislu riječi), koji izravno ovisi o numeraciji. Dakle, za bilo koja dva elementa rednog 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 postupci:

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

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 zadnji 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 pojavljuje se na granicama dopuštenog raspona. Funkcija succ (x) je neprimjenjiva na maksimalni element tipa, ali inc (x) procedura neće generirati nikakvu pogrešku, već će, djelujući prema pravilima strojnog zbrajanja, dodati još jednu jedinicu broju elementa. Broj će, naravno, izaći iz raspona 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 posljednje opet dolazi prva vrijednost.

Pojasnimo sve što je rečeno na primjeru. Za vrstu podataka

tip šesnaest = 0..15;

pokušaj zbrajanja 1 do 15 rezultirat će sljedećim rezultatom:

Početna jedinica bit će odrezana, pa će stoga inc (15) = 0.

Slična situacija na donjoj granici dopuštenog raspona proizvoljnog rednog tipa podataka opaža se za postupak dec (x) i funkciju pred (x):

dec (min_element) = max_element

Tipovi podataka koji se odnose na redni

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

ord (lažno) = 0, ord (točno) = 1, netočno

pred (true) = lažno, succ (false) = istina,

inc (true) = lažno, inc (false) = istina,

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

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

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

Vrsta podataka

Broj bajtova

Domet

2147483648..2147483647

4. Nabrojani tipovi podataka navedeni su u odjeljku tipa eksplicitnim nabrajanjem njihovih elemenata. Na primjer:

tip tjedan = (ned, pon, uto, sri, čet, pet, sub)

Podsjetimo da za ovu vrstu podataka:

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

5. Intervalni tipovi podataka određeni su samo granicama njihovog raspona. Na primjer:

vrsta mjesec = 1..12;

budni = pon..fri;

6. Tipovi podataka, koje je izradio programer, opisani su u odjeljku vrsta prema sljedećem predlošku:

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

Na primjer:

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

Osnovni tipovi podataka su standardni, pa ih nema potrebe opisivati ​​u odjeljku vrsta. Međutim, ako to želite, možete i to učiniti, na primjer, davanjem dugih definicija kratkim nazivima. Recimo uvođenjem nove vrste podataka

tip int = cijeli broj;

možete malo skratiti tekst programa.

Stvarne vrste podataka

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

Vrsta 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

Konstruirani tipovi podataka

Ove vrste podataka (zajedno s operacijama definiranim za njih) ćemo dalje razmatrati kroz nekoliko predavanja.

Operacije i izrazi

Aritmetičke operacije

Razgovarajmo o operacijama - standardnim radnjama dopuštenim za varijable jedne ili druge osnovne vrste 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 I, 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 lažno istina

false false false

istinito netočno netočno

2. Operacije usporedbe (=,<>, >, <, <=, >=) primjenjivi su na sve vrste baza. Njihovi rezultati su također booleove 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 (vjerojatno ne treba podsjećati da je dijeljenje s 0 zabranjeno, pa u takvim slučajevima operacija generira pogrešku). Rezultat će biti tipa podataka zajedničkog tipovima kojima operandi pripadaju.

Na primjer, (kratki div bajt = cijeli broj). To 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 cijelosti. Tip rezultata, kao iu prethodnom slučaju, određen je tipovima operanada, a 0 je zabranjena vrijednost za b. Za razliku od matematičkog moda 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 - pomaknite vrijednost a za k bitova ulijevo (ovo je ekvivalentno množenju vrijednosti varijable a sa 2k). Rezultat operacije bit će istog tipa kao i prvi operand(i).

a shr k - pomaknite vrijednost a za k bitova udesno (ovo je ekvivalentno potpunom dijeljenju vrijednosti varijable a s 2k). Rezultat operacije bit će 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će aritmetičke operacije (+, -, *, /) primjenjive su na sve aritmetičke vrste. Njihov rezultat pripada tipu podataka zajedničkom za oba operanda (jedina iznimka 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. Te ćemo operacije razmotriti u odgovarajućim odjeljcima:

#, in, +, *,: vidi predavanje 5 “Simboli. Žice. Setovi "

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

Standardne aritmetičke funkcije

Standardne aritmetičke funkcije također se odnose na aritmetičke operacije. Donosimo njihov popis s kratkim opisom u tablici.

Funkcija

Opis

Vrsta argumenta

Vrsta rezultata

Apsolutna vrijednost (modulus) broja

Aritmetika

Odgovara tipu argumenta

Arc tangent (u radijanima)

Aritmetika

Stvaran

kosinus (u radijanima)

Aritmetika

Stvaran

izlagač (ex)

Aritmetika

Stvaran

Uzimanje razlomka broja

Aritmetika

Stvaran

Uzimanje cjelobrojnog dijela broja

Aritmetika

Stvaran

Prirodni logaritam (baza e)

Aritmetika

Stvaran

Provjera neparnog broja

Značenje broja

Stvaran

Zaokruživanje na najbliži cijeli broj

Aritmetika

Zaokruživanje prema dolje - na najbliži manji cijeli broj

Aritmetika

sinus (u radijanima)

Aritmetika

Stvaran

Kvadratura

Aritmetika

Stvaran

Ekstrakcija kvadratnog korijena

Aritmetika

Stvaran

Aritmetički izrazi

Sve aritmetičke operacije mogu se međusobno kombinirati – naravno, uzimajući u obzir vrste podataka dopuštene za njihove operande.

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

Primjeri aritmetičkih izraza:

(x<0) and (y>0) je izraz čiji je rezultat booleovog 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;

neparan (okruglo (x / abs (x))) je izraz na više razina.

Redoslijed izračuna

Ako se u izraz stave zagrade, tada se izračuni izvode redoslijedom: što je manja dubina ugniježđenja zagrada, to se kasnije izračunava operacija koja je u njima zatvorena. 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 izračunava se nizom "slijeva na desno".

Tablica 2.1. Prioriteti (za sve) Pascal operacija

Vrhunski povezani članci