Lloji i numëruar. Të gjitha llojet e të dhënave dhe lloji Pascal enum më i përdorur

Një lloj i numëruar specifikohet drejtpërdrejt duke numëruar të gjitha vlerat që mund të marrë një ndryshore. të këtij lloji. Çdo vlerë është një konstante e llojit të saj dhe mund t'i përkasë vetëm njërit prej llojeve të numëruara të përcaktuara në program. Një lloj i numëruar përshkruhet në seksionin e deklarimit të tipit, i cili fillon me llojin e fjalës kyçe. Çdo vlerë emërtohet nga një identifikues dhe ndodhet në një listë të mbyllur në kllapa, për shembull:

Lloji Ngjyrat = (e kuqe, e bardhë, blu); Ditë = (e hënë, e martë, e mërkurë, e enjte, e premte, e shtunë, e diel);

Programuesi kombinon në një grup, në përputhje me disa veçori, të gjithë grupin e vlerave që përbëjnë llojin e numëruar. Përdorimi i llojeve të numëruara i bën programet më të lexueshëm. Llojet e numëruara rrisin besueshmërinë e programeve duke qenë në gjendje të kontrollojnë vlerat që marrin variablat përkatës.

Variablat e çdo lloji të numëruar mund të deklarohen pa deklaruar më parë atë lloj, për shembull:

Var TextColor: (e zezë, e bardhë, jeshile);

Vlerat në një lloj të numëruar janë konstante. Veprimet mbi to u binden rregullave të zbatueshme për konstantet. Ato numërohen duke filluar nga 0 sipas renditjes që shfaqen në përshkrim. Operatorët relacionalë janë të zbatueshëm për të gjitha llojet e numëruara (nëse të dy operandët janë të të njëjtit lloj). Rendi vendoset nga sekuenca në të cilën numërohen konstantet.

Për argumentet e llojeve rendore, ekzistojnë funksionet e mëposhtme të paracaktuara:

  • succ(X) - pranë X
  • pred(X) - X e mëparshme
  • ord(X) – numri rendor i X

Lejohet gjithashtu konvertimi i kundërt: çdo shprehje e tipit WORD mund të konvertohet në një vlerë të një lloji të numëruar, për sa kohë që vlera e shprehjes së numrit të plotë nuk e kalon kardinalitetin e tipit të numëruar. Ky konvertim arrihet duke përdorur një funksion të deklaruar automatikisht me një emër tipi të numëruar.

Variablat e çdo lloji që nuk përputhen me asnjë nga llojet standarde mund të futen gjithashtu në program. Një lloj i tillë specifikohet duke numëruar vlerat në deklaratën e tipit; ndonjë nga këto vlera mund të merret nga një variabël i këtij lloji të deklaruar më vonë në program. Forma e përgjithshme e përshkrimit të tipit të numëruar:

lloji nm = (fjala1, fjala2, …, fjalaN); varw:nm;

këtu nm është një identifikues i tipit (arbitrar), word1, word2… janë vlera specifike që mund të marrë ndryshorja w që i përket llojit nm. Vlerat e këtij lloji konsiderohen të porositura, d.m.th. deklarata e tipit paraqet njëkohësisht renditjen e fjalës1< word2 < wordN. Порядковые значения отсчитываются с 0.

Funksionet ord, pred, succ dhe procedurat inc dhe dec mund të aplikohen për variablat e tipit enum.

Operacionet relacionale janë të zbatueshme për të gjitha variablat e të njëjtit lloj skalar: =,<>, <=, >=, <, >.

Një tipar i variablave të tipit enum është se vlerat e tyre nuk mund të futen nga tastiera dhe të shfaqen në ekran (por mund të përdoren kur punoni me skedarë të shtypur).

Shembulli 1. lloji ngjyra = (e kuqe, e verdhë, jeshile, blu);
Këtu përcaktohet se e kuqe< yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

funksioni succ(x)

Duke pasur parasysh elementin x, përcaktohet sekuenca e renditur së cilës i përket x dhe kthehet elementi pas x në këtë sekuencë.

Shembulli 2. Le të jepet një sekuencë shkronjash sipas rendit alfabetik. Atëherë succ(A) është B; succ(L) është M, e kështu me radhë.

Për shembull 1, succ(e kuqe) është e verdhë.

funksioni pred(x)

Duke pasur parasysh elementin x, përcaktohet sekuenca së cilës i përket x dhe kthehet elementi i mëparshëm i kësaj sekuence.

Shembulli 3. pred(F) është E; pred(Z) është Y, e kështu me radhë.

funksioni ord(x).

Elementi numër x në sekuencë kthehet.

Shembulli 4. ord(e kuqe) është 0 dhe ord(e gjelbër) është 2.


Algoritmi i gjuhës Pascal është ndërtuar në atë mënyrë që për të vepruar në variabla, zakonisht duhet të specifikoni llojin e tyre. Për më tepër, përshkrimi i llojit për çdo variabël duhet të bëhet përpara se programi të ekzekutohet (në seksionin var). Kjo do të thotë, kur përpiluesi niset, programi së pari merr informacion në lidhje me llojet e të dhënave me të cilat do të punojë dhe vetëm atëherë kryen ndonjë veprim.
Pra, në Pascal ka 3 lloje kryesore: i thjeshtë, i strukturuar dhe tregues. Sidoqoftë, çdo lloj ka nëntipet e veta. Për lehtësi, renditen të gjitha llojet e të dhënave.

Çdo lloj ka gamën e vet të vlerave. Më poshtë janë vargjet për thjeshtë lloji

Llojet më të përdorura numër i plotë,reale,mallëngjyer,bajt,varg,logjike dhe karakter pasi zakonisht në detyra nuk tregohet se cilat lloje specifike duhet të përdoren për zgjidhje. Jini të kujdesshëm kur përdorni lloje dhe mbani një sy të ngushtë në diapazonin e lejuar për secilin lloj. Për shembull, numrave thyesorë nuk mund t'u caktohet lloji i numrit të plotë dhe tipi char mund të jetë vetëm një karakter (për shembull, ndryshorja f:=gfgfgf nuk mund të jetë char)
Tani për mënyrën se si të përshkruani llojin. Siç u përmend më lart, operatorëve u caktohet një lloj që në fillim të programit (mund të thuash edhe para fillimit të programit). Pra, llojet përshkruhen në seksionin var, i cili ndodhet para fillimit të programit (d.m.th., para fillimit). Konsideroni një shembull të thjeshtë
varx,u,yu,i:integer;
s,f:real;
g:string;
fillojnë
....
fund. Siç mund ta shihni nga shembulli, modeli i përshkrimit të llojit duket kështu
operatori1, operatori2: lloji; Siç e keni vënë re tashmë, nuk ka nevojë të përshkruani secilin operator, nëse lloji është i përgjithshëm, mjafton t'i renditni të ndara me presje. Gjithashtu nuk ka nevojë të kaloni në një rresht të ri pas çdo lloji, kjo bëhet këtu thjesht për leximin më të lehtë të kodit. Në përgjithësi, kodi duhet të jetë i lexueshëm dhe i perceptuar mirë, prandaj këshillohet të kombinohen operatorët e tipit gjenerik dhe të shkruhet çdo lloj nga një linjë e re.

Përshkrimi dhe përdorimi

Një tip i numëruar përkufizohet si një grup identifikuesish që, nga pikëpamja gjuhësore, luajnë të njëjtin rol si konstantet me emër të rregullt, por që lidhen me atë lloj. Përshkrimi klasik i një lloji numërimi në Pascal është si më poshtë:

Lloji Cardsuit = (klub, diamante, zemra, lopata) ;

Këtu deklarohet lloji i të dhënave Cardsuit, vlerat e të cilit mund të jenë ndonjë nga katër konstantet e listuara. Një variabël i tipit Cardsuit mund të marrë një nga vlerat klube, diamante, zemra, lopata, lejohet të krahasohen vlerat e tipit enum për barazi ose pabarazi, si dhe t'i përdorin ato në deklaratat e përzgjedhjes (në rastin Pascal) si vlerat që identifikojnë opsionet.

Përdorimi i enums ju lejon të bëni kodet burimore programet janë më të lexueshme, pasi ju lejojnë të zëvendësoni "numrat magjikë" që kodojnë vlera të caktuara me emra të lexueshëm.

Mbi bazën e numërimeve në disa gjuhë, mund të krijohen tipe-bashkësi. Në raste të tilla, një grup kuptohet (dhe përshkruhet) si një koleksion i parregulluar i vlerave unike të një lloji enum.

Një lloj i numëruar mund të përdoret në deklarimet e variablave dhe parametrave formalë të funksioneve (procedurat, metodat). Vlerat e një lloji të numëruar mund t'u caktohen variablave përkatës dhe të kalohen përmes parametrave të llojeve përkatëse në funksione. Përveç kësaj, krahasimi i vlerave të numëruara për barazi dhe pabarazi mbështetet gjithmonë. Disa gjuhë mbështesin gjithashtu operatorë të tjerë krahasimi për vlerat e llojeve të numëruara. Rezultati i krahasimit të dy vlerave të numëruara në raste të tilla përcaktohet, si rregull, nga renditja e këtyre vlerave në deklaratën e tipit - vlera që ndodh më herët në deklaratën e tipit konsiderohet "më e vogël" se vlera që ndodh më vonë. Ndonjëherë një lloj i numëruar ose një varg vlerash të një lloji të numëruar mund të përdoret gjithashtu si një lloj indeksi për një grup. Në këtë rast, ekziston një element në grup për secilën vlerë të diapazonit të zgjedhur, dhe rend real rendi i elementeve korrespondon me renditjen e vlerave në deklaratën e tipit.

Zbatimi

Normalisht, gjatë përpilimit, vlerat e numërimit përfaqësohen duke përdorur numra të plotë. Në varësi të gjuhës specifike të programimit, një paraqitje e tillë ose mund të fshihet plotësisht nga programuesi, ose në dispozicion të tij duke përdorur "zgjidhje" të caktuara (për shembull, konvertimi i detyruar i një vlere të llojit enum në një vlerë të tipit "integer"), ose madje. e kontrolluar nga programuesi (në raste të tilla, programuesi ka mundësinë të specifikojë në mënyrë eksplicite se me cilat numra do të kodohen të gjitha ose disa vlera të llojit enum. Të gjitha opsionet kanë të mirat dhe të këqijat e tyre. Nga njëra anë, aftësia për të përdorur vlerat numerike të konstantave që përbëjnë llojin e numërimit, veçanërisht kur abuzohet me të, privon përdorimin e këtyre llojeve dhe krijon rrezikun e gabimeve (kur përdoren vlerat numerike për të cilat nuk ka konstante përkatëse në lloj). Nga ana tjetër, menaxhimi i qartë i vlerës ofron disa veçori shtesë. Për shembull, lejon përdorimin e llojeve enum kur organizoni një ndërfaqe me module të shkruara në gjuhë të tjera, nëse ato përdorin ose kthejnë vlera të koduara me numra të plotë nga një grup i paracaktuar.

Një mundësi tjetër që ofrojnë llojet e numëruara në nivelin e zbatimit të gjuhës është ruajtja e memories. Me një lloj të vogël enum, mjaftojnë disa bit për të ruajtur një vlerë të këtij lloji (lloji Cardsuit më sipër kërkon vetëm dy bit për vlerë, ndërsa një numër i plotë standard në arkitekturat më të përdorura merr 32 bit - 16 herë më shumë), dhe përpiluesi mund ta përdorë këtë fakt për të kompaktuar ruajtjen e të dhënave në memorie. Kjo mund të jetë veçanërisht e rëndësishme nëse vlera të shumta të llojeve enum ruhen në një rekord të vetëm - kompaktimi i të dhënave kur përpunohet një numër i madh i tyre mund të çlirojë shumë memorie. Megjithatë, duhet theksuar se kompajlerët zakonisht nuk e zbatojnë këtë veçori, të paktën kohët e fundit, kur memoria e kompjuterit është bërë shumë më e lirë.

Kritika

Lloji i numërimit është tradicional për gjuhët e programimit të zhvilluara, përdoret mjaft gjerësisht dhe shpesh merret si i mirëqenë. Megjithatë, ky lloj nuk është gjithashtu pa kritika nga teoricienët dhe praktikuesit e programimit. Kështu, gjatë zhvillimit të gjuhës së programimit Oberon, llojet e numëruara u përfshinë në listën e veçorive që u hoqën nga gjuha. Niklaus Wirth, projektuesi i gjuhës, përmendi arsyet e mëposhtme:

Nga ana tjetër, për shembull, në Java, e cila fillimisht nuk përmbante një lloj të numëruar, ky lloj u prezantua më pas për arsye jo vetëm komoditeti, por edhe besueshmërie: problemi i përdorimit të grupeve të konstanteve të emërtuara në vend të numërimeve është se atje nuk ka kontroll nga përpiluesi përsa i përket veçantisë së konstantave të vlerave, si dhe mundësinë e caktimit të rastësishëm të vlerave në variabla që nuk korrespondojnë me asnjë nga këto konstante.

Përshkrimi i enumeve në gjuhë të ndryshme

Ada

kostume kartoni enum (KLUB, DIAMANTE, ZEMRA, LOKATA);

Gjuhët dinamike, të shtypura dobët me sintaksë të ngjashme me C (p.sh. perl ose JavaScript) në përgjithësi nuk kanë enum.

C++

C#

Enum Cardsuit (klube, diamante, lopata, zemra);

Java

Veshje me kartona (klube, diamante, lopata, zemra)

Haskell

Në disa gjuhë programimi (p.sh. Haskell), numërimet mund të imitohen duke përdorur lloje algjebrike. Për shembull, një lloj Boolean që përmban dy identifikues për të përfaqësuar vlerat e së vërtetës është i koduar si kjo:

Data Bool = False | E vërtetë

Shënime


Fondacioni Wikimedia. 2010 .

Wikipedia

Për arsye teknike, Bool ridrejton këtu. Mund të lexoni për Bool këtu: stdbool.h. Lloji i të dhënave Boolean (eng. Boolean ose logjik i të dhënave) është një lloj i të dhënave primitiv në shkencën kompjuterike që mund të marrë dy të mundshme ... Wikipedia

Në teorinë e programimit, çdo lloj, vlerat e të cilit janë vlera të një lloji tjetër të mbështjellë me konstruktorë të tipit algjebrik. Me fjalë të tjera, një lloj i të dhënave algjebrike ka një grup konstruktorësh të tipit, secili prej të cilëve ... ... Wikipedia

Integer, integer type of data (English Integer), në shkencat kompjuterike, një nga llojet më të thjeshta dhe më të zakonshme të të dhënave në gjuhët e programimit. Përdoret për të paraqitur numra të plotë. Grupi i numrave të këtij lloji është ... ... Wikipedia

Një lloj primitiv (i integruar, bazë) është një lloj i të dhënave i ofruar nga një gjuhë programimi si një njësi bazë e integruar e gjuhës. Në varësi të gjuhës dhe zbatimit të saj, grupi i llojeve të tilla mund të ndryshojë shumë. Përcaktohet nga ... ... Wikipedia

Ky term ka kuptime të tjera, shih Set (kuptimet). Një grup është një lloj dhe strukturë e të dhënave në shkencën kompjuterike, është një zbatim i grupit të objekteve matematikore. Lloji i caktuar i të dhënave ju lejon të ruani një numër të kufizuar vlerash... ... Wikipedia

Disa gjuhë programimi ofrojnë një lloj të veçantë të dhënash për numrat kompleks. Prania e një lloji të integruar thjeshton ruajtjen e vlerave komplekse dhe llogaritjet mbi to. Përmbajtja 1 Aritmetika mbi komplekse 2 Mbështetje në gjuhët ... Wikipedia

Për të përmirësuar këtë artikull teknologjia e informacionit e dëshirueshme?: Gjeni dhe rregulloni në formën e fusnotave lidhje me burime autoritare që konfirmojnë atë që është shkruar. Pasi të keni vendosur fusnotat, bëni më të sakta në ... Wikipedia

Si organizohet lloji i të dhënave të numëruara dhe intervali i Pascal-it? Çdo lloj i strukturuar i të dhënave në gjuhën Pascal karakterizohet nga një grup elementesh përbërëse. Një konstante ose ndryshore e këtij lloji përmban gjithmonë disa komponentë, secili prej të cilëve mund të jetë gjithashtu i një lloji të strukturuar. Kjo na kujton llojin e foleve.

Gjuha Pascal përfshin llojet e mëposhtme të strukturuara: vargje, vargje, regjistrime, grupe, skedarë. Por, para se të vazhdojmë me studimin e këtyre llojeve, do të shqyrtojmë dy lloje të dhënash rendore - të numëruara dhe intervale.

Lloji i numëruar i Pascal:

lloji i të dhënave të numëruaraështë një sekuencë e renditur e konstantave skalare që përbëjnë atë tip. Si vlerë e secilës prej konstanteve, ne përdorim emrin e saj. Emrat e konstantave të ndryshme ndahen me presje dhe grupi i konstantave që kanë një tip të numëruar vendoset në kllapa.

Në procesin e krijimit të një programi, mund të na duhet të kombinojmë në një grup, sipas disa kritereve, një grup vlerash të një lloji të numëruar. Për shembull, lloji enum ZnakZodiaka (shenja e zodiakut) përfshin vlerat skalare Oven, Strelec, Kozerog, Bliznecy, Vesy (Dashi, Shigjetari, Bricjapi, Binjakët, Peshorja); Lloji i numëruar Planeta (Planet) kombinon vlerat skalare Merkuri, Venera, Toka, Marsi (Merkuri, Venusi, Toka, Marsi). Deklarata e numëruar e tipit ndodh në seksionin e deklarimit të tipit:

ZnakZodiaka=(Furrë,Strelec,Kozerog,Bliznecy,Vesy);

Variablat e tipit skalar të deklaruar në seksionin tip deklarohen duke përdorur emrat e tipave:

Planeta = (Mërkuri, Venera, Toka, Marsi); var Solnsystem: Planeta;

Kështu, ndryshorja Solnsystem mund të marrë vlerat e mëposhtme: Mërkuri, Venera, Toka ose Marsi. Gjithashtu, variablat e një lloji të numëruar mund të deklarohen në seksionin var:

Sistemi Soln: Mërkuri, Venera, Toka, Marsi;

Siç mund ta shohim, emrat e tipave nuk janë më të pranishëm këtu, dhe variablat janë një koleksion vlerash tipash të numëruara. Operatori i caktimit ":=" mund të aplikohet për variablat e llojit në fjalë

Solnsystem:= Mërkuri;

Sekuenca e vlerave të një lloji të numëruar numërohet automatikisht, duke filluar nga zero:

Planeta = (Mërkuri, Venera, Toka, Marsi);

Në këtë shembull Mërkuri është 0, Venera është 1, Toka është 2, Marsi është 3.

Lloji i të dhënave të intervalit paskal:

Një varg vlerash që kanë çdo lloj rendor përcaktohet si një lloj i të dhënave intervali. Segmenti vendoset në intervalin nga vlera minimale e konstanteve në maksimum, të cilat ndahen nga njëra-tjetra me një dy pika "..". Konstantet mund të jenë konstante me numra të plotë, karaktere, boolean ose të numëruara. Lloji bazë është lloji skalar në të cilin është specifikuar segmenti.