Luettelotyyppi. Kaikki tietotyypit ja yleisimmin käytetty Pascal-enum-tyyppi

Luettelotyyppi määritetään suoraan luettelemalla kaikki muuttujan arvot. tämän tyyppistä. Jokainen arvo on oman tyyppinsä vakio ja voi kuulua vain yhteen ohjelmassa määritellyistä tyypeistä. Luettelotyyppi on kuvattu tyyppimääritysosiossa, joka alkaa funktiosanatyypillä. Jokainen arvo on nimetty jollakin tunnisteella ja se sijaitsee luettelossa, joka on ympäröity suluilla, esimerkiksi:

Tyyppi Värit = (punainen, valkoinen, sininen); Päivät = (ma, ti, ke, to, pe, la, su);

Ohjelmoija yhdistää yhdeksi ryhmäksi jonkin ominaisuuden mukaan koko joukon arvoja, jotka muodostavat luetun tyypin. Luettelotyyppien käyttö tekee ohjelmista visuaalisempia. Luetteloidut tyypit lisäävät ohjelmien luotettavuutta antamalla sinun hallita vastaavien muuttujien vastaanottamia arvoja.

Minkä tahansa lueteltujen tyyppien muuttujat voidaan ilmoittaa ilmoittamatta ensin kyseistä tyyppiä, esimerkiksi:

Var TextColor: (musta, valkoinen, vihreä);

Luettelotyyppiin sisältyvät arvot ovat vakioita. Niihin kohdistuvat toimet noudattavat vakioita koskevia sääntöjä. Ne on numeroitu 0:sta alkaen siinä järjestyksessä kuin ne näkyvät kuvauksessa. Relaatiooperaattorit koskevat kaikkia lueteltuja tyyppejä (jos molemmat operandit ovat samaa tyyppiä). Järjestys määräytyy vakioiden listausjärjestyksen mukaan.

Järjestystyyppiin liittyville argumenteille on olemassa seuraavat ennalta määritetyt funktiot:

  • succ(X) – X:n vieressä
  • pred(X) – edellinen X
  • järjestys(X) – X:n järjestysnumero

Myös käänteinen muunnos on mahdollista: mikä tahansa WORD-tyyppinen lauseke voidaan muuntaa enum-tyypin arvoksi, ellei kokonaislukulausekkeen arvo ylitä enum-tyypin kardinaalisuutta. Tämä muunnos saadaan aikaan käyttämällä automaattisesti ilmoitettua funktiota, jossa on lueteltu tyyppi.

Voit myös syöttää ohjelmaan minkä tahansa tyyppisiä muuttujia, jotka eivät vastaa mitään vakiotyyppiä. Tällainen tyyppi määritetään arvojen luettelolla tyyppiä määritettäessä; mikä tahansa näistä arvoista voidaan ottaa tämäntyyppisellä muuttujalla, joka ilmoitetaan myöhemmin ohjelmassa. Luettelotyypin kuvauksen yleinen muoto:

tyyppi nm = (sana1, sana2, …, sanaN) ; var w: nm;

tässä nm on tyyppitunniste (mielivaltainen), sana1, sana2... ovat tiettyjä arvoja, jotka tyyppiin nm kuuluva muuttuja w voi ottaa. Tämän tyyppiset arvot katsotaan tilatuiksi, ts. tyypin kuvaus esittelee samalla sana1:n järjestyksen< word2 < wordN. Порядковые значения отсчитываются с 0.

Voit käyttää ord-, pred-, succ-funktioita sekä inc- ja dec-proseduureja numeraatiotyyppisissä muuttujissa.

Relaatiooperaatioita voidaan soveltaa kaikkiin saman skalaarityypin muuttujiin: =,<>, <=, >=, <, >.

Luettelotyyppien muuttujien erityispiirre on, että niiden arvoja ei voida syöttää näppäimistöltä ja näyttää näytöllä (mutta niitä voidaan käyttää työskennellessäsi kirjoitettujen tiedostojen kanssa).

Esimerkki 1. tyyppi väri = (punainen, keltainen, vihreä, sininen);
Tässä määritellään, että punainen< yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

Funktio succ(x)

Kun elementti x on annettu, määritetään järjestysjono, johon x kuuluu, ja palautetaan tässä sekvenssissä x:tä seuraava elementti.

Esimerkki 2. Esitetään kirjainsarja aakkosjärjestyksessä. Silloin succ(A) on B; succ(L) on M jne.

Esimerkiksi 1 succ(punainen) on keltainen.

funktio pred(x)

Kun elementti x on annettu, määritetään sekvenssi, johon x kuuluu, ja palautetaan tämän sekvenssin edellinen elementti.

Esimerkki 3. pred(F) on E; pred(Z) on Y jne.

Funktio ord(x)

Alkion x lukumäärä sarjassa on annettu.

Esimerkki 4: ord(punainen) on 0 ja ord(vihreä) on 2.


Pascal-kielialgoritmi on suunniteltu siten, että muuttujien kanssa toimiminen edellyttää yleensä niiden tyypin määrittelyä. Lisäksi kunkin muuttujan tyyppikuvaus on tehtävä ennen ohjelman suorittamista (var-osiossa). Toisin sanoen, kun kääntäjä käynnistetään, ohjelma saa ensin tiedon siitä, minkä tietotyyppien kanssa se toimii, ja vasta sitten suorittaa toimintoja.
Joten Pascalissa on 3 päätyyppiä: yksinkertainen, jäsennelty ja osoitin. Jokaisella tyypillä on kuitenkin omat alatyyppinsä. Mukavuuden vuoksi kaikki tietotyypit on esitetty luettelomuodossa.

Jokaisella tyypillä on oma arvoalue. Alla on alueet yksinkertainen tyyppi

Yleisimmin käytetyt tyypit kokonaisluku,todellinen,longint,tavu,merkkijono,boolean Ja hiiltyä koska yleensä tehtävät eivät osoita, mitä tiettyjä tyyppejä ratkaisussa tulisi käyttää. Ole varovainen käyttäessäsi tyyppejä ja kiinnitä erityistä huomiota kunkin tyypin hyväksyttäviin alueisiin. Esimerkiksi murtoluvuille ei voida määrittää kokonaislukutyyppiä, ja char-tyyppi voi olla vain yksi merkki (esimerkiksi muuttuja f:=gfgfgf ei voi olla char)
Nyt siitä, kuinka kuvailla tyyppiä. Kuten edellä mainittiin, operaattoreille määritetään tyyppi aivan ohjelman alussa (voisi jopa sanoa ennen ohjelman alkua). Joten tyypit on kuvattu var-osiossa, joka sijaitsee ennen ohjelman alkua (eli ennen aloitusta). Katsotaanpa yksinkertaista esimerkkiä
var x,u,yu,i:kokonaisluku;
s,f:todellinen;
g:string;
alkaa
....
loppu. Kuten esimerkistä näet, tyypin kuvausmalli näyttää tältä
operaattori1, operaattori2: tyyppi; Kuten olet jo huomannut, jokaista operaattoria ei tarvitse kuvailla, jos tyyppi on yleinen, riittää, että luet ne pilkuilla erotettuina. Jokaisen tyypin jälkeen ei myöskään tarvitse siirtyä uudelle riville, vaan tämä tehdään yksinkertaisesti koodin lukemisen helpottamiseksi. Yleensä koodin tulee olla luettavaa ja ymmärrettävää, joten on suositeltavaa yhdistää yleiset tyyppioperaattorit ja kirjoittaa jokainen tyyppi uudelle riville.

Kuvaus ja käyttö

Luettelotyyppi määritellään joukoksi tunnisteita, joilla on kielellisesti sama rooli kuin tavallisilla nimetyillä vakioilla, mutta jotka liittyvät kyseiseen tyyppiin. Klassinen kuvaus numeraatiotyypistä Pascalissa näyttää tältä:

Tyyppi Cardsuit = (mailat, timantit, sydämet, pata) ;

Tässä ilmoitetaan Cardsuit-tietotyyppi, jonka arvot voivat olla mikä tahansa neljästä luetellusta vakiosta. Cardsuit-tyyppinen muuttuja voi ottaa yhden arvoista clubs, diamonds, hearts, spades; on sallittua verrata numeraatiotyyppien arvoja tasa- tai epätasa-arvoon sekä käyttää niitä valintaoperaattoreissa (Pascalin tapauksessa) vaihtoehdot tunnistavat arvot.

Luetteloiden avulla voit tehdä lähdekoodeja ohjelmat ovat luettavampia, koska niiden avulla voit korvata tiettyjä arvoja koodaavat "maagiset numerot" luettavissa olevilla nimillä.

Joukkotyyppejä voidaan luoda joidenkin kielten luetteloiden perusteella. Tällaisissa tapauksissa joukko ymmärretään (ja kuvataan) luettelointityypin ainutlaatuisten arvojen järjestämättömänä kokoelmana.

Luettelotyyppiä voidaan käyttää muuttujien ja funktioiden muodollisten parametrien (proseduurit, menetelmät) määrittelyssä. Luettelotyyppiset arvot voidaan määrittää vastaaville muuttujille ja välittää vastaavien tyyppisten parametrien kautta funktioille. Lisäksi enum-tyyppisten arvojen tasa- ja epätasa-arvovertailut ovat aina tuettuja. Jotkut kielet tukevat myös muita vertailutoimintoja lueteltujen tyyppien arvojen osalta. Kahden luetun arvon vertailun tulos tällaisissa tapauksissa määräytyy pääsääntöisesti näiden arvojen järjestyksen mukaan tyyppiilmoituksessa - arvoa, joka esiintyy aikaisemmin tyyppiselvityksessä, pidetään "pienempänä kuin" arvo, joka tapahtuu myöhemmin. Joskus enum-tyyppiä tai jotakin enum-tyypin arvoaluetta voidaan käyttää myös taulukon indeksityyppinä. Tässä tapauksessa taulukossa on yksi elementti valitun alueen kullekin arvolle ja todellinen järjestys Elementtien järjestys vastaa tyyppiilmoituksen arvojen järjestystä.

Toteutus

Tyypillisesti luettelointiarvot esitetään kokonaislukuina käännöksen aikana. Tietystä ohjelmointikielestä riippuen tällainen esitys voi olla joko kokonaan piilotettu ohjelmoijalta tai hänen käytettävissään käyttämällä tiettyjä "kiertotapoja" (esimerkiksi pakottamalla luettelon arvon muuntaminen kokonaislukuarvoksi) tai jopa ohjata ohjelmoijalta. ohjelmoija (tällaisissa tapauksissa ohjelmoijalla on mahdollisuus nimenomaisesti määrittää, millä numeroilla kaikki tai osa luettelointityypin arvoista koodataan). Kaikilla vaihtoehdoilla on hyvät ja negatiiviset puolensa. Toisaalta mahdollisuus käyttää luettelointityypin muodostavien vakioiden numeerisia arvoja, varsinkin jos niitä käytetään väärin, kumoaa näiden tyyppien käytön tarkoituksen ja aiheuttaa virheriskin (kun käytetään numeerisia arvoja, joihin tyypissä ei ole vastaavia vakioita). Toisaalta eksplisiittinen arvonhallinta tarjoaa joitain lisäominaisuuksia. Sen avulla voit esimerkiksi käyttää luettelointityyppejä järjestettäessä käyttöliittymää muilla kielillä kirjoitetuilla moduuleilla, jos ne käyttävät tai palauttavat kokonaislukukoodattuja arvoja jostain ennalta määritetystä joukosta.

Toinen mahdollisuus, jonka luetellut tyypit tarjoavat kielitoteutustasolla, on muistin säästö. Pienellä luettelointityypillä muutama bitti riittää tallentamaan kyseisen tyypin arvon (yllä oleva Cardsuit-tyyppi vaatii vain kaksi bittiä arvoa kohden, kun taas tavallinen kokonaisluku useimmissa käytössä olevissa arkkitehtuureissa vie 32 bittiä - 16 kertaa enemmän), ja Kääntäjä voi käyttää tätä seikkaa, joka pakkaa tietojen tallennuksen muistiin. Tämä voi olla erityisen tärkeää, jos yhteen tietueeseen on tallennettu useita enum-tyyppisiä arvoja - tietueiden tiivistäminen niitä suuria määriä käsiteltäessä voi vapauttaa paljon muistia. On kuitenkin huomattava, että kääntäjät eivät yleensä ota käyttöön tätä ominaisuutta ainakaan viime aikoina, kun tietokoneen muisti on huomattavasti halvempi.

Kritiikkiä

Luettelotyyppi on perinteinen kehittyneille ohjelmointikielille, sitä käytetään melko laajalti ja sitä pidetään usein itsestäänselvyytenä. Tämä tyyppi ei kuitenkaan ole vailla kritiikkiä ohjelmointiteoreetikoilta ja -harjoittajilta. Siten Oberon-ohjelmointikielen kehittämisen aikana kielestä poistettujen ominaisuuksien luetteloon sisällytettiin lukemattomia tyyppejä. Kielen kehittäjä Niklaus Wirth esitti seuraavat syyt:

Toisaalta esimerkiksi Javassa, joka alun perin ei sisältänyt numeroitavaa tyyppiä, tämä tyyppi otettiin myöhemmin käyttöön paitsi mukavuussyistä myös luotettavuudesta: nimettyjen vakioryhmien käytön ongelmana numerointien sijaan on se, että kääntäjä ei hallitse arvovakioiden ainutlaatuisuutta ja mahdollisuutta antaa vahingossa arvoja muuttujille, jotka eivät vastaa mitään näistä vakioista.

Luetteloiden kuvaus eri kielillä

Ada

Enum-korttipuku (KLUBIT, TIMANTIT, SYDÄDET, SPADES);

Dynaamisissa, heikosti kirjoitetuissa kielissä, joissa on C-tyyppinen syntaksi (esim. perl tai JavaScript), ei yleensä ole luetteloita.

C++

C#

Enum Cardsuit (kerhot, timantit, pata, sydämet);

Java

Enum Cardsuit (kerhot, timantit, pata, sydämet)

Haskell

Joissakin ohjelmointikielissä (esimerkiksi Haskell) voit emuloida luetteloita käyttämällä algebrallisia tyyppejä. Esimerkiksi Boolen tyyppi, joka sisältää kaksi tunnistetta totuusarvojen esittämiseksi, koodataan näin:

Data Bool = False | Totta

Huomautuksia


Wikimedia Foundation. 2010.

Wikipedia

Teknisistä syistä Bool uudelleenohjataan tänne. Voit lukea Boolista täältä: stdbool.h. Looginen, Boolean (englanniksi Boolean tai logical data type) -tietotyyppi on tietojenkäsittelytieteen primitiivinen tietotyyppi, joka voi sisältää kaksi mahdollista ... Wikipedia

Ohjelmointiteoriassa mikä tahansa tyyppi, jonka arvot ovat joidenkin muiden tyyppien arvoja, jotka on "kääritty" algebrallisen tyypin rakentajien toimesta. Toisin sanoen algebrallisella tietotyypillä on joukko tyyppikonstruktoreja, joista jokainen... ... Wikipedia

Integer, kokonaislukutietotyyppi (englanniksi Integer), tietojenkäsittelytieteen yksi yksinkertaisimmista ja yleisimmistä tietotyypeistä ohjelmointikielissä. Käytetään edustamaan kokonaislukuja. Tämän tyyppinen numerosarja on... ... Wikipedia

Primitiivinen (sisäänrakennettu, perus)tyyppi on tietotyyppi, jonka ohjelmointikieli tarjoaa kielen sisäänrakennetun perusyksikkönä. Kielestä ja sen toteutuksesta riippuen tällaisten tyyppien joukko voi vaihdella suuresti. Sen määrittää... ... Wikipedia

Tällä termillä on muita merkityksiä, katso Aseta (merkityksiä). Joukko, tietojenkäsittelytieteen tyyppi ja tietorakenne, on matemaattisen oliojoukon toteutus. Tietotyyppijoukon avulla voit tallentaa rajoitetun määrän arvoja... ... Wikipedia

Jotkut ohjelmointikielet tarjoavat erityisen tietotyypin kompleksiluvuille. Sisäänrakennetun tyypin läsnäolo yksinkertaistaa monimutkaisten määrien tallentamista ja niiden laskemista. Sisältö 1 Aritmetiikka monimutkaisten kompleksien yli 2 Tuki kielillä... Wikipedia

Parantaaksesi tätä artikkelia tietotekniikka toivottavaa?: Etsi ja järjestä alaviitteiden muodossa linkkejä arvovaltaisiin lähteisiin, jotka vahvistavat kirjoitetun. Alaviitteiden lisäämisen jälkeen lisää tarkempia... Wikipedia

Miten Pascal-enum ja intervallitietotyyppi on järjestetty? Jokaiselle Pascalin strukturoidulle tietotyypille on tunnusomaista joukko elementtejä, jotka muodostavat sen. Tämän tyyppinen vakio tai muuttuja sisältää aina useita komponentteja, joista jokainen voi olla myös strukturoitua tyyppiä. Tämä muistuttaa meitä tyyppipesäkkeestä.

Pascal-kieli sisältää seuraavat rakenteelliset tyypit: merkkijonot, taulukot, tietueet, joukot, tiedostot. Mutta ennen kuin alamme tutkia näitä tyyppejä, tarkastelemme kahta järjestystietotyyppiä - lueteltu ja intervalli.

Enum-tyyppi Pascal:

Luettelo tietotyyppi on järjestys skalaarivakioiden sarja, jotka muodostavat kyseisen tyypin. Käytämme sen nimeä jokaisen vakion arvona. Eri vakioiden nimet erotetaan pilkuilla, ja kokoelma vakioista, joilla on lueteltu tyyppi, sijoitetaan sulkeisiin.

Ohjelmaa luotaessa meidän on ehkä yhdistettävä joukko lueteltuja arvoja yhdeksi ryhmäksi jonkin ominaisuuden mukaan. Esimerkiksi lueteltu tyyppi ZnakZodiaka (horoskooppimerkki) sisältää skalaariarvot Oven, Strelec, Kozerog, Bliznecy, Vesy (Oinas, Jousimies, Kauris, Kaksoset, Vaaka); Enum-tyyppi Planeta yhdistää skalaariarvot Mercury, Venera, Earth, Mars. Luetteloidun tyypin kuvaus löytyy tyypin ilmoitusosiosta:

ZnakZodiaka=(Uuni,Strelec,Kozerog,Bliznecy,Vesy);

Tyyppiosiossa ilmoitetut skalaarityyppiset muuttujat kuvataan tyyppien nimillä:

Planeta = (Merhopea, Venera, Maa, Mars); var Solnsystem: Planeta;

Siten Solnsystem-muuttuja voi saada seuraavat arvot: Mercury, Venera, Earth tai Mars. Myös muuttujat, joilla on lueteltu tyyppi, voidaan ilmoittaa var-osiossa:

Solnsystem: Merkurius, Venera, Maa, Mars;

Kuten näemme, tyyppien nimiä ei enää ole täällä, ja muuttujat ovat kokoelma lueteltuja arvoja. Osoitusoperaattoria “:=” voidaan soveltaa kyseessä olevan tyypin muuttujiin.

Solnsystem: = Elohopea;

Luettelotyypin arvojen sarja numeroidaan automaattisesti nollasta alkaen:

Planeta = (Merhopea, Venera, Maa, Mars);

Tässä esimerkissä Merkuriuksen arvo on 0, Veneran arvo on 1, Maan arvo on 2 ja Marsin arvo on 3.

Intervallitietotyyppi Pascal:

Arvoalue, joka on mitä tahansa järjestystyyppiä, määritellään intervallitietotyypiksi. Segmentti asetetaan alueelle vakioiden minimiarvosta maksimiarvoon, jotka on erotettu toisistaan ​​kaksoispisteellä "...". Vakiot voivat olla kokonaisluku-, merkki-, loogisia tai lueteltuja vakioita. Perustyyppi on skalaarityyppi, jolla segmentti määritetään.