Nabrojani tip. Svi tipovi podataka i najčešće korišteni Pascal enum tip

Nabrojani tip se specificira direktno nabrajanjem svih vrijednosti koje varijabla može uzeti. ovog tipa. Svaka vrijednost je konstanta svog tipa i može pripadati samo jednom od nabrojanih tipova definiranih u programu. Nabrojani tip je opisan u odjeljku deklaracije tipa, koji počinje tipom ključne riječi. Svaka vrijednost je imenovana nekim identifikatorom i nalazi se na listi zatvorenoj u zagradama, na primjer:

Tip Boje = (crvena, bijela, plava); Dani = (pon, uto, sre, čet, pet, sub, ned);

Programer kombinuje u jednu grupu, u skladu sa nekom karakteristikom, čitav skup vrednosti koje čine nabrojani tip. Upotreba nabrojanih tipova čini programe čitljivijim. Nabrojani tipovi povećavaju pouzdanost programa tako što mogu kontrolirati vrijednosti koje primaju odgovarajuće varijable.

Varijable bilo kojeg nabrojanog tipa mogu se deklarirati bez prethodnog deklariranja tog tipa, na primjer:

Var TextColor: (crna, bijela, zelena);

Vrijednosti u nabrojanom tipu su konstante. Radnje na njima poštuju pravila koja se primjenjuju na konstante. Numerirani su počevši od 0 redoslijedom kojim se pojavljuju u opisu. Relacijski operatori su primjenjivi na sve nabrojane tipove (ako su oba operanda istog tipa). Redoslijed je uspostavljen redoslijedom u kojem se konstante nabrajaju.

Za argumente rednih tipova postoje sljedeće unaprijed definirane funkcije:

  • succ(X) - pored X
  • pred(X) - prethodni X
  • ord(X) – redni broj X

Obrnuta konverzija je takođe dozvoljena: bilo koji izraz tipa WORD može se konvertovati u vrednost nabrojanog tipa, sve dok vrednost celobrojnog izraza ne prelazi kardinalnost nabrojanog tipa. Ova konverzija se postiže korištenjem automatski deklarirane funkcije s nabrojanim imenom tipa.

U program se mogu uvesti i varijable bilo kojeg tipa koje se ne podudaraju ni sa jednim od standardnih tipova. Takav tip je specificiran nabrajanjem vrijednosti u deklaraciji tipa; bilo koju od ovih vrijednosti može preuzeti varijabla ovog tipa koja je deklarirana kasnije u programu. Opšti oblik opisa nabrojanog tipa:

tip nm = (riječ1, riječ2, …, riječN) ; varw:nm;

ovdje je nm identifikator tipa (proizvoljan), word1, word2… su specifične vrijednosti koje varijabla w koja pripada tipu nm može uzeti. Vrijednosti ovog tipa smatraju se naređenim, tj. deklaracija tipa istovremeno uvodi redosled riječi1< word2 < wordN. Порядковые значения отсчитываются с 0.

Funkcije ord, pred, succ i inc i dec procedure mogu se primijeniti na varijable tipa enum.

Relacijske operacije su primjenjive na sve varijable istog skalarnog tipa: =,<>, <=, >=, <, >.

Karakteristika varijabli tipa enum je da se njihove vrijednosti ne mogu unijeti s tastature i prikazati na ekranu (ali se mogu koristiti pri radu s ukucanim datotekama).

Primjer 1. tip boja = (crvena, žuta, zelena, plava);
Ovdje je definirano to crveno< yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

funkcija succ(x)

S obzirom na element x, određuje se uređena sekvenca kojoj x pripada, a vraća se element nakon x u ovom nizu.

Primjer 2. Neka je niz slova dat po abecednom redu. Tada je succ(A) B; succ(L) je M, i tako dalje.

Na primjer 1, succ(crveno) je žuto.

funkcija pred(x)

S obzirom na element x, određuje se niz kojem x pripada i vraća se prethodni element ovog niza.

Primjer 3. pred(F) je E; pred(Z) je Y, i tako dalje.

ord(x) funkcija

Vraća se broj elementa x u nizu.

Primjer 4. ord(crveno) je 0, a ord(zeleno) je 2.


Algoritam Pascal jezika je konstruisan na takav način da za rad sa varijablama obično morate navesti njihov tip. Štaviše, opis tipa za svaku promenljivu mora biti napravljen pre nego što se program izvrši (u odeljku var). To jest, kada se kompajler pokrene, program prvo prima informacije o tome s kojim tipovima podataka će raditi i tek onda izvodi bilo kakve radnje.
Dakle, u Pascalu postoje 3 glavna tipa: jednostavan, strukturiran i pokazivač. Međutim, svaki tip ima svoje podtipove. Radi praktičnosti, navedeni su svi tipovi podataka.

Svaki tip ima svoj raspon vrijednosti. Ispod su rasponi za jednostavno tip

Najčešće korištene vrste cijeli broj,pravi,longint,bajt,string,boolean i char budući da obično u zadacima nije naznačeno koje specifične vrste treba koristiti za rješavanje. Budite oprezni kada koristite tipove i pazite na dozvoljene opsege za svaku vrstu. Na primjer, razlomcima se ne može dodijeliti cjelobrojni tip, a tip char može biti samo jedan znak (na primjer, varijabla f:=gfgfgf ne može biti char)
Sada o tome kako opisati tip. Kao što je već spomenuto, operatorima se dodjeljuje tip na samom početku programa (to čak možete reći i prije početka programa). Dakle, tipovi su opisani u odjeljku var, koji se nalazi prije početka programa (odnosno prije početka). Razmotrite jednostavan primjer
varx,u,yu,i:integer;
s,f:real;
g:string;
početi
....
kraj. Kao što možete vidjeti iz primjera, predložak opisa tipa izgleda ovako
operator1, operator2: tip; Kao što ste već primijetili, nema potrebe opisivati ​​svaki operator, ako je tip opći, dovoljno je navesti ih odvojene zarezima. Takođe nema potrebe da se prebacujete u novi red posle svakog tipa, to se ovde radi jednostavno radi lakšeg čitanja koda. Općenito, kod bi trebao biti čitljiv i dobro percipiran, stoga se savjetuje kombiniranje generičkih operatora tipa i pisanje svakog tipa iz novog reda.

Opis i upotreba

Nabrojani tip je definisan kao skup identifikatora koji, sa jezičke tačke gledišta, igraju istu ulogu kao regularne imenovane konstante, ali su pridruženi tom tipu. Klasičan opis tipa nabrajanja u Pascalu je sljedeći:

Tip Cardsuit = (tref, dijamanti, srca, pikovi) ;

Ovdje se deklarira tip podataka Cardsuit, čije vrijednosti mogu biti bilo koja od četiri navedene konstante. Varijabla tipa Cardsuit može uzeti jednu od vrijednosti klubova, dijamanata, srca, pika, dozvoljeno je upoređivati ​​vrijednosti tipa enum za jednakost ili nejednakost, kao i koristiti ih u naredbama za odabir (u Pascalu - case) kao vrijednosti koje identifikuju opcije.

Korišćenje enuma vam omogućava da uradite izvorni kodovi programi su čitljiviji, jer vam omogućavaju da zamijenite "magične brojeve" koji kodiraju određene vrijednosti čitljivim imenima.

Na osnovu enumeracija u nekim jezicima mogu se kreirati skupovi tipova. U takvim slučajevima, skup se shvata (i opisuje) kao neuređena kolekcija jedinstvenih vrednosti tipa enum.

Nabrojani tip se može koristiti u deklaracijama varijabli i formalnih parametara funkcija (procedura, metoda). Vrijednosti nabrojanog tipa mogu se dodijeliti odgovarajućim varijablama i proslijediti kroz parametre odgovarajućih tipova u funkcijama. Osim toga, uvijek je podržano poređenje nabrojanih vrijednosti za jednakost i nejednakost. Neki jezici također podržavaju druge operatore poređenja za vrijednosti nabrojanih tipova. Rezultat poređenja dvije nabrojane vrijednosti u takvim slučajevima se u pravilu određuje redoslijedom ovih vrijednosti u deklaraciji tipa - vrijednost koja se javlja ranije u deklaraciji tipa smatra se "manjom" od vrijednosti koju javlja kasnije. Ponekad se nabrojani tip ili neki raspon vrijednosti nabrojanog tipa također može koristiti kao tip indeksa za niz. U ovom slučaju, postoji jedan element u nizu za svaku vrijednost odabranog raspona, i pravi red redoslijed elemenata odgovara redoslijedu vrijednosti u deklaraciji tipa.

Implementacija

Normalno, tokom kompilacije, vrijednosti nabrajanja se predstavljaju pomoću cijelih brojeva. Ovisno o specifičnom programskom jeziku, takva reprezentacija može biti ili potpuno skrivena od programera, ili mu dostupna korištenjem određenih "zaobilaznih rješenja" (na primjer, prisilna konverzija vrijednosti tipa enum u vrijednost tipa "cijeli broj"), ili čak kontrolira programer (u takvim slučajevima, programer ima priliku eksplicitno specificirati kojim brojevima će sve ili neke vrijednosti tipa enum biti kodirane. Sve opcije imaju svoje pozitivne i negativne strane. S jedne strane, mogućnost korištenja numeričkih vrijednosti konstanti koje čine tip nabrajanja, posebno kada se zloupotrebljava, uskraćuje upotrebu ovih tipova i stvara opasnost od grešaka (kada se koriste numeričke vrijednosti za za koje nema odgovarajućih konstanti u tipu). S druge strane, eksplicitno upravljanje vrijednostima pruža neke dodatne karakteristike. Na primjer, dozvoljava korištenje enum tipova prilikom organiziranja sučelja s modulima napisanim na drugim jezicima, ako koriste ili vraćaju vrijednosti kodirane cijelim brojevima iz nekog unaprijed definiranog skupa.

Druga mogućnost koju nabrojani tipovi pružaju na nivou implementacije jezika je ušteda memorije. Sa malim tipom enuma, nekoliko bitova je dovoljno za pohranjivanje vrijednosti ovog tipa (gornji tip Cardsuit zahtijeva samo dva bita po vrijednosti, dok standardni cijeli broj na najčešće korištenim arhitekturama traje 32 bita - 16 puta više), a kompajler može iskoristiti ovu činjenicu za kompaktno skladištenje podataka u memoriji. Ovo može biti posebno važno ako je više vrijednosti enum tipova pohranjeno u jednom zapisu - zbijanje zapisa prilikom obrade velikog broja njih može osloboditi puno memorije. Međutim, treba napomenuti da kompajleri obično ne implementiraju ovu mogućnost, barem u novije vrijeme, kada je memorija računala postala mnogo jeftinija.

Kritika

Tip nabrajanja je tradicionalan za razvijene programske jezike, koristi se dosta široko i često se uzima zdravo za gotovo. Međutim, ni ovaj tip nije bez kritika od strane teoretičara i praktičara programiranja. Dakle, prilikom razvoja programskog jezika Oberon, nabrojani tipovi su uključeni u listu karakteristika koje su uklonjene iz jezika. Niklaus Wirth, dizajner jezika, naveo je sljedeće razloge:

S druge strane, na primjer, u Javi, koja u početku nije sadržavala nabrojani tip, ovaj tip je kasnije uveden iz razloga ne samo pogodnosti, već i pouzdanosti: problem korištenja grupa imenovanih konstanti umjesto enumeracija je taj što postoji nema kontrolu od strane kompajlera u pogledu jedinstvenosti vrijednosti konstanti, kao i mogućnost nasumične dodjele vrijednosti varijablama koje ne odgovaraju nijednoj od ovih konstanti.

Opis enuma na raznim jezicima

Ada

Enum cardsuit (KLUBOVI, DIJAMANTI, SRCA, PIK) ;

Dinamički, slabo kucani jezici sa sintaksom sličnom C (npr. perl ili JavaScript) uglavnom nemaju enume.

C++

C#

Enum Cardsuit (bafovi, dijamanti, pikovi, srca) ;

Java

Enum Cardsuit ( trefanje, dijamanti, pikovi, srca )

Haskell

U nekim programskim jezicima (npr. Haskell), enumeracije se mogu emulirati pomoću algebarskih tipova. Na primjer, Boolean tip koji sadrži dva identifikatora za predstavljanje istinitih vrijednosti je kodiran ovako:

Podaci Bool = False | Istinito

Bilješke


Wikimedia fondacija. 2010 .

Wikipedia

Iz tehničkih razloga, Bool preusmjerava ovdje. O Boolu možete pročitati ovdje: stdbool.h. Boolean (eng. Boolean ili logički tip podataka) tip podataka je primitivni tip podataka u računarstvu koji može uzeti dva moguća ... Wikipedia

U teoriji programiranja, bilo koji tip čije su vrijednosti vrijednosti nekog drugog tipa umotane u konstruktore algebarskog tipa. Drugim riječima, algebarski tip podataka ima skup konstruktora tipa, od kojih svaki ... ... Wikipedia

Integer, cjelobrojni tip podataka (engleski Integer), u računarstvu, jedan od najjednostavnijih i najčešćih tipova podataka u programskim jezicima. Koristi se za predstavljanje cijelih brojeva. Skup brojeva ovog tipa je ... ... Wikipedia

Primitivni (ugrađeni, osnovni) tip je tip podataka koji pruža programski jezik kao osnovna ugrađena jedinica jezika. Ovisno o jeziku i njegovoj implementaciji, skup takvih tipova može uvelike varirati. Određuje ... ... Wikipedia

Ovaj izraz ima druga značenja, pogledajte Skup (značenja). Skup je vrsta i struktura podataka u računarskoj nauci, implementacija je matematičkog skupa objekata. Postavljeni tip podataka vam omogućava pohranjivanje ograničenog broja vrijednosti... ... Wikipedia

Neki programski jezici daju poseban tip podataka za kompleksne brojeve. Prisutnost ugrađenog tipa pojednostavljuje pohranu složenih vrijednosti i izračunavanja na njima. Sadržaj 1 Aritmetika nad kompleksom 2 Podrška na jezicima ... Wikipedia

Za poboljšanje ovog članka informacione tehnologije poželjno?: Pronađite i uredite u obliku fusnota linkove ka autoritativnim izvorima koji potvrđuju napisano. Nakon što ste zapisali fusnote, učinite preciznijim na ... Wikipediji

Kako je organiziran Pascalov nabrojani i intervalni tip podataka? Svaki strukturirani tip podataka u jeziku Pascal karakterizira skup njegovih sastavnih elemenata. Konstanta ili varijabla ovog tipa uvijek sadrži nekoliko komponenti, od kojih svaka može biti i strukturiranog tipa. Ovo nas podsjeća na ugniježđenje tipova.

Pascal jezik uključuje sljedeće strukturirane tipove: nizove, nizove, zapise, skupove, datoteke. Ali prije nego što pređemo na proučavanje ovih tipova, razmotrit ćemo dva redni tipa podataka - nabrojani i intervalni.

Pascal nabrojani tip:

Nabrojani tip podataka je uređeni niz skalarnih konstanti koje čine taj tip. Kao vrijednost svake od konstanti koristimo njeno ime. Imena različitih konstanti su odvojena zarezima, a skup konstanti koje imaju nabrojani tip stavlja se u zagrade.

U procesu kreiranja programa, možda ćemo morati da kombinujemo u jednu grupu, prema nekom kriterijumu, skup vrednosti nabrojanog tipa. Na primjer, tip enuma ZnakZodiaka (Znak zodijaka) uključuje skalarne vrijednosti Oven, Strelec, Kozerog, Bliznecy, Vesy (Ovan, Strijelac, Jarac, Blizanci, Vaga); Nabrojani tip Planeta (Planeta) kombinuje skalarne vrijednosti Merkur, Venera, Zemlja, Mars (Merkur, Venera, Zemlja, Mars). Deklaracija nabrojanog tipa javlja se u odjeljku deklaracije tipa:

ZnakZodiaka=(Peć,Strelec,Kozerog,Bliznecy,Vesy);

Varijable skalarnog tipa deklarirane u odjeljku tipa deklariraju se korištenjem imena tipa:

Planeta = (Merkur, Venera, Zemlja, Mars); var Solnsystem: Planeta;

Dakle, varijabla Solnsystem može poprimiti sljedeće vrijednosti: Merkur, Venera, Zemlja ili Mars. Takođe, varijable nabrojanog tipa mogu se deklarisati u sekciji var:

Solnsistem: Merkur, Venera, Zemlja, Mars;

Kao što možemo vidjeti, imena tipova ovdje više nisu prisutna, a varijable su zbirka nabrojanih vrijednosti tipa. Operator dodjeljivanja ":=" može se primijeniti na varijable dotičnog tipa

Solnsistem:= Merkur;

Niz vrijednosti nabrojanog tipa se numerira automatski, počevši od nule:

Planeta = (Merkur, Venera, Zemlja, Mars);

U ovom primjeru Merkur je 0, Venera je 1, Zemlja je 2, Mars je 3.

Pascal interval tipa podataka:

Raspon vrijednosti koje imaju bilo koji redni tip definiran je kao intervalni tip podataka. Segment se postavlja u rasponu od minimalne vrijednosti konstanti do maksimalne, koje su međusobno odvojene dvotočkom "..". Konstante mogu biti cjelobrojne, karakterne, logičke ili nabrojane konstante. Osnovni tip je skalarni tip na kojem je segment specificiran.