Enkla typer. Ordinaltyp


I Pascal variabler kännetecknas av deras typ... En typ är en egenskap hos en variabel, genom vilken en variabel kan anta en mängd olika värden som tillåts av denna typ och delta i en mängd olika operationer som är tillåtna på en given typ.

Typ definierar en uppsättning acceptabla värden som variabeln tar av denna typ... Den definierar också uppsättningen tillåtna operationer på en variabel av en given typ och definierar representationen av data i random access minne dator.

Till exempel:

n: heltal;

Pascal är ett statiskt språk, av detta följer att typen av en variabel bestäms under dess beskrivning och inte kan ändras. Språket Pascal har ett utvecklat system av typer - all data måste ägas i förväg känd typ data (antingen en standardtyp skapad under språkdesign eller en användardefinierad typ som programmeraren definierar). Programmeraren kan skapa sina egna typer med en godtycklig komplexitetsstruktur baserad på standardtyper, eller redan användardefinierade typer. Antalet skapade typer är obegränsat. Anpassade typer i programmet deklareras i avsnittet TYPE efter format:

[namn] = [typ]

Systemet med standardtyper har en förgrenad, hierarkisk struktur.

Primära i hierarkin är enkla typer... Dessa typer finns i de flesta programmeringsspråk och kallas enkla, men i Pascal har de en mer komplex struktur.

Strukturerade typerär byggda enligt vissa regler fr.o.m enkla typer.

Pekare bildad av enkla arter och används i program för att ställa in adresser.

Procedurtyperär nya för Turbo Pascal, och de tillåter subrutiner att behandlas som variabler.

Objektär också nya, och de är utformade för att använda språket som ett objektorienterat språk.

Det finns 5 typer av heltalstyper i Pascal. Var och en av dem kännetecknar intervallet av accepterade värden och deras upptagna minnesutrymme.

När du använder heltal bör du vägledas av kapslingen av typer, d.v.s. typer med ett mindre intervall kan kapslas inom typer med ett större intervall. Byte-typen kan kapslas i alla typer som är 2 och 4 byte långa. Samtidigt kan Short Int-typen, som upptar 1 byte, inte kapslas in i Word-typen, eftersom den inte har negativa värden.

Det finns 5 riktiga typer:

Heltalstyper representeras helt exakt i datorn. Till skillnad från heltalstyper bestäms värdet av verkliga typer av godtyckligt antal endast med viss ändlig precision, beroende på talets format. Reella tal representeras i en dator med fast eller flyttal.

2358.8395

0.23588395*10 4

0,23588395 * E 4

En speciell position i Pascal upptas av typen Comp, i själva verket är det ett stort signerat heltal. Denna typ är kompatibel med alla verkliga typer och kan användas för stora heltal. När man representerar reella tal med flyttal, antyds alltid decimalkomma före den vänstra eller höga mantissan, men när man agerar med ett tal förskjuts den åt vänster eller höger.

Ordinaltyper

Ordinaltyper kombinerar flera enkla typer. Dessa inkluderar:

  • alla heltalstyper;
  • teckentyp;
  • boolesk typ;
  • intervalltyp;
  • uppräknad typ.

Gemensamma egenskaper för ordningstyper är: varje typ har ett ändligt antal möjliga värden; värdet av dessa typer kan beställas på ett visst sätt och ett visst nummer kan associeras med varje nummer, vilket är ett ordningsnummer; angränsande värden av ordinaltyper skiljer sig med ett.

Funktionen ODD (x) kan tillämpas på ordningsvärden, som returnerar serienummer argument x.

PRED (x) funktion - Returnerar det föregående värdet av ordningstypen. PRED (A) = 5.

SUCC (x) funktion - Returnerar nästa värde av ordningstypen. SUCC (A) = 5.

Karaktärstyp

Teckentypsvärden är 256 tecken från den uppsättning som tillåts av kodtabellen på den dator som används. Startområdet för denna uppsättning, det vill säga intervallet från 0 till 127, motsvarar uppsättningen ASCII-koder, där alfabettecken, arabiska siffror och specialtecken laddas. Tecknen i startområdet finns alltid på PC-tangentbordet. Seniorområde kallas alternativ, den innehåller symboler av nationella alfabet och olika specialtecken, och pseudografiska symboler som inte motsvarar ASCII-koden.

Ett teckentypvärde upptar en byte i RAM. I programmet är värdet inneslutet i apostrof. Värden kan också ställas in i form av dess ASCII-kod. I detta fall måste #-tecknet placeras före siffran med teckenkoden.

C: = 'A'

boolesk typ

Det finns två booleska värden: True och False. Variabler av denna typ är inställda serviceord BOOLEAN. Booleska värden upptar en byte i RAM. Värden True och False motsvarar de numeriska värdena 1 och 0.

Räckviddstyp

Det finns en delmängd av dess bastyp, som kan vara vilken ordningstyp som helst. Områdestyp definieras av gränser inom bastypen.

[minimum-värde]... [maximum-värde]

Områdestypen kan anges i sektionen Typ som en specifik typ, eller direkt i sektionen Var.

När du definierar en intervalltyp måste du vägledas av:

  • den vänstra gränsen bör inte överskrida den högra gränsen;
  • range-type ärver alla egenskaper av bastypen, men med begränsningar relaterade till dess lägre kardinalitet.

Uppräknad typ

Denna typ tillhör ordningstyper och specificeras av en uppräkning av de värden som den kan räkna upp. Varje värde namnges av någon identifierare och finns i listan inramad inom parentes. En uppräknad typ anges i Typ:

Folk = (män, kvinnor);

Det första värdet är 0, det andra värdet är 1, och så vidare.

Maximal effekt 65535 värden.

Strängtyp

Strängtypen tillhör gruppen strukturerade typer och består av bastypen Char. Strängtypen är inte en ordningstyp. Den definierar en uppsättning teckensträngar med godtycklig längd på upp till 255 tecken.

I programmet deklareras strängtypen av ordet String. Eftersom String är bastyp, beskrivs den i språket och deklarationen av en variabel av typen String utförs i Var. När du deklarerar en variabel av en strängtyp bakom en sträng, är det lämpligt att ange längden på strängen inom hakparenteser. Ett heltal från 0 till 255 används för att indikera.

Fam: String;

Genom att specificera stränglängden kan kompilatorn allokera ett specificerat antal byte i RAM för variabeln. Om stränglängden inte är specificerad kommer kompilatorn att tilldela maximalt möjliga antal byte (255) för värdet på denna variabel.

Ordinaltyper

Ämne 3. Datatypers struktur. Standardprocedurer och funktioner tillämpliga på heltal, reella tal. Boolean, tecken, uppräknade typer, intervall-typ. Exempel.

Datatyper

Eventuella uppgifter, dvs. konstanter, variabler, funktionsvärden eller uttryck kännetecknas av sina typer. En typ definierar uppsättningen av giltiga värden som ett objekt kan ha, såväl som uppsättningen av giltiga operationer som är tillämpliga på det. Dessutom bestämmer typen också formatet för den interna representationen av data i PC-minnet.

Turbo Pascal kännetecknas av en grenad datatypstruktur.

Enkla typer

1. Ordinaltyper skiljer sig åt genom att var och en av dem har ett ändligt antal möjliga värden. Dessa värden kan beställas på ett visst sätt och därför kan ett visst antal associeras med var och en av dem - värdets ordningsnummer.

2. Reella typer har strängt taget också ett ändligt antal värden, vilket bestäms av formatet för den interna representationen av det reella talet.

Ordinaltyper

Ordinaltyper inkluderar heltal, boolean, tecken, uppräknad och intervall. Funktionen ORD (X) returnerar ordningsvärdet för uttrycket X och tillämpas på valfri ordningstyp. För heltalstyper returnerar funktionen själva värdet X, dvs. ORD (X) = X för X av valfri heltalstyp.

ORD (X) för en teckentyp ger ett heltal i intervallet från 0 till 255, för en uppräknad typ ger ORD (X) ett tal i intervallet från 0 till 65535. Områdestypen behåller alla egenskaper för basordinaltypen , därför beror resultatet av att tillämpa ORD-funktionen på den (X) på egenskaperna hos denna typ. Du kan också tillämpa funktioner på ordningstyper:

PRED (X) - returnerar det tidigare värdet av ordningstypen, dvs. ORD (PRED (X)) = ORD (X) -1;

SUCC (X) - returnerar nästa ordningsvärde (som motsvarar ordningens ORD (X) +1), d.v.s.

Enkla typer

Ordinal

Verklig

Datum Tid

hjärngymnastik

Karaktär

Uppräknad

Räckviddstyp

Figur 1 - Enkla datatyper

Ordinaltyper

Ordinaltyper skiljer sig åt genom att var och en av dem har ett ändligt antal möjliga värden. Dessa värden kan beställas på ett visst sätt och därför kan något heltal jämföras - värdets ordningsnummer.

Funktioner utformade för att fungera med ordningstyper visas i Tabell 1.

Tabell 1 - Funktioner för att arbeta med ordningstyper.

Heltalstyper

Omfånget av möjliga värden för heltalstyper beror på deras interna representation, som kan vara en, två, fyra eller åtta byte. Tabell 2 listar de grundläggande heltalstyperna.

Tabell 2 - Heltalstyper

namn

Längd, byte

Värdeintervall

2147483648 … +2147483647

0 … 2147483647

0 … 4294967295

263 … 263 -1

notera att Object Pascal utför automatisk typgjutning. Till exempel, där en Word-variabel kan användas som ett argument, kan en Byte-variabel användas, men inte vice versa. Allmän regel det vill säga, istället för en typ av en heltalsvariabel kan du använda en annan typ av en heltalsvariabel om deras värdeområden är kapslade i varandra

till en vän.

Tabell 3 listar några funktioner för att arbeta med heltalsvariabler.

Tabell 3 - Funktioner för att arbeta med heltal

När man arbetar på heltal kommer typen av resultat att motsvara typen av operander, och om operanderna är av olika heltalstyper, den allmänna typen, som inkluderar båda operanderna. Till exempel, för typerna ShortInt och Word är den vanliga typen heltal.

Som standard genererar inte kompilatorn valideringskod som styr möjlig utväg värden från det tillåtna området, vilket kan leda till felaktig användning av programmet. Till exempel, när du kör programmet i Lista 1, visar skärmen noll istället för 65536.

Lista 1

($ IFDEF FPC) ($ MODE DELPHI)

($ APPTYPE KONSOL) program InOutPrg; var x: Ord; Börja

För att aktivera spillkontroll måste du ange ett kompilatordirektiv ($ Q +) för att inaktivera spillkontroll - ($ Q-).

Istället för ($ Q +) kan du använda ($ OVERFLOWCHECKS ON), och istället för ($ Q-) ($ OVERFLOWCHECKS OFF)

Ändra programmet i Lista 1 så att det inkluderar ($ Q +) direktivet på den första raden. Kör det för körning, programmet bör krascha.

För heltalsvariabler är det säkrast att använda heltalstypen, eftersom intervallet

värden av denna typ är tillräckligt stora för en bred klass av problem. Det är bättre att inaktivera kontrollen utanför intervallet i den slutliga versionen av programmet, eftersom det saktar ner programmets prestanda.

booleska typer

En boolesk variabel kan bara ta två värden True och False. Logiska typer visas i tabell 4.

Tabell 4 - Booleska typer

För att arbeta med booleska typer, använd den booleska typen, andra typer har lagts till i Object Pascal för kompatibilitet med program skrivna på andra programmeringsspråk.

Karaktärstyp

En teckentyp, som namnet antyder, är utformad för att lagra en teckenkod. Typens interna struktur är densamma som den interna strukturen för heltal utan tecken. Object Pascal stöder två teckentyper AnsiChar och WideChar. Egenskaperna för dessa typer visas i tabell 5.

Tabell 5 - Teckentyper

Beskrivning

ANSI teckenkod. Teckentabellen för denna standard

består av 256 tecken, med de första 128 tecknen hårdkodade

definieras av standarden, och de återstående 128 kan innehålla alla

symboler. Den andra delen av kodtabellen placeras vanligtvis

symboler för nationella alfabet. Nackdelen med detta

representation av symboler är att det är omöjligt att visa

fler tecken på en gång

än 2 alfabet.

UNICODE-tecken. Symboltabellen innehåller 65536

tecken. Den här tabellen innehåller symbolerna för alla alfabet.

Char1

Är ett alias för AnsiChar-typen

För att konvertera en teckenkod till ett tecken, använd följande funktion

funktion chr (X: byte): char

För den inversa transformationen, använd funktionen

1 I Object Pascal är Char den primära typen. V följande versioner Char-typen kan bli ett alias för WideChar-typen.

funktion ord (X: char): byte;

En teckenkonstant kan anges på två sätt. Ange ett tecken inom enkla citattecken eller ange en teckenkod. Följande två poster är likvärdiga.

ch: = "A";

ch: = # 97; // 97 - teckenkod "A".

Till exempel

var ch: char; kod: byte;

börja ch: = "A";

ch: = chr (32); // 32 - matchar koden för mellanslagstangenten

slutet.

Uppräknad typ

En uppräknad typ specificeras av en uppräkning av de värden som den kan ta emot. Varje värde namnges av någon identifierare och finns i en lista omgiven av parenteser.

<имя типа>= (id, id, id, ...);

Här är "typnamn" Object Pascal-identifieraren, "id" är Object Pascal-identifieraren.

Till exempel en typ som beskriver någon fast uppsättning färger

Användningen av uppräknade typer gör programmen mer beskrivande och ökar programmens tillförlitlighet. Låt följande typer definieras:

typ TColors = (röd, grön, vit, gul);

TDays = (måndag, tisdag, onsdag);

Variabler definierade

var col: TColors;

då är följande operatörer tillåtna

col: = Succ (grön);

dag: = Pred (tisdag);

men inte tillåtet

Det maximala antalet värden att räkna upp är implementeringsberoende. För närvarande är storleken på en variabel av en uppräknad typ 4 byte, vilket motsvarar 232 olika värden, det vill säga i sin interna representation är en uppräknad typ en LongWord-typ.

Som nämnts ovan kan du till exempel sätta typdefinitionen direkt efter kolon

var col: (röd, grön, vit, gul); dag: (måndag, tisdag, onsdag);

Räckviddstyp

En intervalltyp är en delmängd av någon grundläggande ordningstyp. Områdestypen specificeras av gränserna för dess värden.

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

D Pascal utökar CF Pascal avsevärt genom att lägga till nya datatyper till symboler och filer. Ordinaldatatyper beskriver enkla, odelbara objekt. En uppräknad typ innehåller en fast uppsättning namngivna objekt. Den booleska typen har bara två objekt - TRUE och FALSE. Heltalstyp implementerar positiva och negativa heltal. Slutligen kan typdelen också vara en typ, en intervalltyp. Typer inkluderar naturligtvis operationer som definierar vad som kan göras med objekt. För logiskt, helt osv. dessa operationer förstås väl intuitivt.

Datatyper beskriver uppsättningar av värden och de operationer som kan tillämpas på dem. Datatyperna som introduceras av CF Pascal är CHAR och TEXT. Värden av typen CHAR är uppsättningen av giltiga Pascal-maskintecken och operationer på dessa värden är jämförelseoperatorer:

= < > <= >= <>

vars värden är motsvarande matematiska operationer, vilket återspeglar de olika positionerna för tecknen i den alfabetiska sekvensen. Värden av TEXT-datatypen är sekvenser av strängar, varje sträng är en sekvens av tecken. Operationer på sådan data:

ÅTERSTÄLL OM SKRIV LÄS SKRIV SKRIV N OEF EOLN

Datatyper erbjuder fördelar abstraktioner, replikering och autentisering.

Datatyper abstrakt viktiga egenskaper data. Till exempel för att förstå jämförelsen

'A'< ‘B’

det finns inget behov av att veta hur dessa symboler representeras i Pascal-maskinen. Sorteringssekvensen bestämmer innebörden av dessa operationer. Användaren behöver inte veta antalet bitar som representerar teckenvärdet, vad som händer med de redundanta bitarna är bitvärdet för tecknet giltigt B mer än för A etc.

Moduler implementerar ett slags dataabstraktion, men datatyper erbjuder mer. Meddelande variabler av typ data låter dig lagra och manipulera valfritt antal värden av typen genom dessa variabler. Varje användning av en variabel i ett program garanterar att endast giltiga operationer kommer att tillämpas på den.

Kontexten för en operand i ett program antyder typen av operanden, denna underförstådda typ är redundant information som kan kontrolleras mot den deklarerade typen av operanden för att förhindra operationer på värden av fel typ. Tänk på följande programkod:

PROGRAM Typex (INPUT, OUTPUT);

Eftersom operatorn = är definierad i CF Pascal endast för teckenoperander, innebär utseendet av Ch och F som operander att de båda är av typen CHAR. Ch har en giltig typ och F deklareras som TEXT, så en inkonsekvens kommer att upptäckas.


D Pascal har två varianter av datatyper: enkla datatyper och aggregerade datatyper. Värden av enkla typer kan inte bestå av mindre delar som kan manipuleras separat. CHAR är en enkel typ. Värden av komplexa datatyper bildas genom att kombinera värden av enkla typer. TEXT är en sammansatt typ eftersom filsträngar består av tecken.

Värden av enkla typer är beställda, det vill säga för varje värdepar av denna typ x, y är endast ett av alternativen möjligt: ​​x< y, x = y, x >y. Därför kallas dessa typer ordinal.

Pascal innehåller tre fördefinierade ordningstyper, som identifieras av identifierarna CHAR, INTEGER och BOOLEAN. Förutom de fördefinierade ordningstyperna tillhandahåller Pascal två metoder för programmeraren att definiera nya ordningstyper, nämligen:

  1. Uppräknade typer vars värden är unika identifierare.
  2. Områdestyper vars värden är sekventiella värden av en annan ordningstyp.

Det vill säga, nya ordningsdatatyper kan definieras genom att räkna upp typkonstanter eller genom att specificera att värdena för typen är ett underområde av värden. befintlig typ... Syntaxen för att beteckna sådana ordningstyper är följande:

<обозначение типа> ::= <идентификатор типа> | <ny typ>

<идентификатор типа> ::= <идентификатор>

<новый тип> ::= <перечислимый тип> | <тип диапазон>

Beskriva metoder för<перечислимый тип>och<тип диапазон>kommer att ges i motsvarande avsnitt nedan.

När en ny typ definieras kan den ges ett namn i typdeklarationen. Denna deklaration måste föregå deklarationen av blockvariabler.

<блок> ::= <раздел объявлений типов> <раздел объявлений переменных>

<раздел объявлений процедур> <раздел операторов>

<раздел объявлений типов>:: = TYP<объявления типов> |

Denna regel visar det<раздел объявлений типов>kan vara tom (som var fallet i alla program tidigare av denna plats)

<объявления типов> ::= <объявления типов> <объявление типа> | <объявление типа>

<объявление типа> ::=<идентификатор > = <обозначение типа>

Kontextregeln som åtföljer dessa syntaxregler säger att endast vissa identifierare är det<объявлением типа>:

CR Används som<идентификатор типа>, <идентификатор>borde ha dykt upp tidigare<объявлениях типов>.

Alltså för

och T1 och T2 är typidentifierare och kan användas i det aktuella blocket för att deklarera variabler och formella parametrar som tidigare använts av CHAR.

Ordinaltyper är typer som motsvarar data som stödjer begreppen "föregående värde" och "efterföljande värde". Till exempel, för ett heltal 5 kan du definitivt säga att det föregås av siffran 4, och nästa efter det är talet 6. Å andra sidan är det omöjligt att säga vilket tal som omedelbart föregår riktigt nummer 5.0.

Object Pascal definierar följande ordinaltyper:

- heltalstyper;

- teckentyper;

- booleska typer;

- begränsade typer.

För ordningstyper definieras ett antal funktioner som återspeglar dessa datas särdrag. En lista över dessa funktioner visas i Tabell 6.1.

Tabell 6.1 - Funktioner för ordningsdatatyper

Fortsättning av tabell 6.1

6.1.1.1 Heltalsdatatyper

Heltalsdatatyper används för att representera heltal. Typer som tillhandahåller maximal prestandaär Heltal och Kardinal... Båda typerna upptar 4 byte i minnet och tar värden i intervallet: för heltal -2147483648..2147483647, för Cardina l 0..4294967295. I de fall du behöver ett större antal nummer kan du använda typen int64.

Man bör komma ihåg att aritmetiska operationer med heltal har sina egna särdrag. För division används operationen div som utför heltalsdelning. Resten av en heltalsdivision med något heltal kan hittas med hjälp av operationen mod.

För heltalsdata kan du även använda logiska operationer, som t.ex och, eller, xor... Resultatet kommer att bestämmas genom att tillämpa lämplig operation på varje par av motsvarande bitar i den binära representationen av tal. När man utför sådana operationer används ofta hexadecimal representation av tal. Tecknet för ett hexadecimalt tal är $-tecknet framför talet, till exempel matchar $ FF decimal- 255, och $ 100 motsvarar decimal 256.

Du kan också använda operationerna för att flytta binära koder för ett tal till vänster ( shl) eller höger ( shr) för ett givet antal siffror. En förskjutning åt höger med en siffra motsvarar heltalsdivisionen av ett tal med 2. En förskjutning åt vänster med en siffra motsvarar multiplikation med 2. Till exempel som ett resultat av att utföra instruktionen $ FF shr 4, vi får resultatet $0F.

6.1.1.2 Teckendatatyper

Teckentyper är avsedda att representera tecken. Det finns två varianter av symboler som Object Pascal kan använda:

- Char-typen motsvarar en uppsättning av 256 tecken, där tecknen är ordnade enligt ANSI (American National Standardkod för Informationsutbyte). Varje tecken av denna typ upptar 1 byte. Överensstämmelsen mellan koden och dess motsvarande tecken ges av den så kallade teckenkodningstabellen. Den första halvan av tabellen (koder från 0 till 127) används för kontrolltecken, siffror, latinska bokstäver och de vanligaste symbolerna som skiljetecken, märken matematiska operationer etc. Den andra halvan av tabellen (koder från 128 till 255) används för nationella alfabet och andra symboler.

– WideChar-typen motsvarar många Unicode-tecken, där varje tecken är 2 byte, och naturligtvis kan denna teckentabell innehålla mycket stor lista tecken. De motsvarar koder i intervallet från 0 till 65535. De första 256 tecknen i denna uppsättning motsvarar ANSI-tecken med motsvarande koder.

I vår laboratoriearbete vi kommer bara att använda Char-typen. Ett fragment av teckenkodningstabellen presenteras nedan, i tabell 6.2.

Tabell 6.2 - Kodning av vissa ANSI-tecken

Symbol Koda Binär representation Hexadecimal representation
Saknas symbol 0000 0000 $00
Plats 0010 0000 $20
! 0010 0001 $21
0011 0000 $30
0011 0001 $31
0011 0010 $32
0011 0011 $33
A 0100 0001 $41
B 0100 0010 $42
C 0100 0011 $43
a 0110 0001 $61
b 0110 0010 $62
A $ C0
B $ C1
a 1110 0000 $ E0
b 1110 0001 $ E1
jag är 1111 1111 $ FF

Var uppmärksam på ordningen på symbolerna i tabellen. Denna ordning låter dig beställa ord och identifierare i alfabetisk ordning med hjälp av en teckenkod.

Symboliska konstanter kan skrivas olika sätt... För de flesta karaktärer kan du använda en bild av den karaktären, omgiven av enstaka citattecken. Till exempel '1', 'z', '*'. Särskilda symboler det är bekvämt att representera med deras kod, som ett heltal, föregås av ett #-tecken. Till exempel # 0, # 8, # 13. Dessutom kan vilket tecken som helst hämtas med hjälp av chr ()-funktionen, som skickas med teckenkoden som ett argument. Till exempel returnerar chr (65) den latinska stora bokstaven "A", och chr (255) returnerar liten bokstav"Jag är kyrillisk.

Den omvända konverteringen, det vill säga konvertera ett tecken till kod, kan göras med hjälp av funktionen ord (). Till exempel kommer ord ('0') att returnera 48.

Vid inmatning av enskilda tecken från komponenter i TEdit-klassen måste man komma ihåg att textegenskap av dessa komponenter returnerar inte ett tecken, utan en sträng av tecken. För att få ett enstaka tecken i denna sträng, använd ordningsnumret för tecknet i strängen, skriv det inom hakparenteser efter namnet på teckensträngen. Till exempel Edit1.text.

Alla jämförelser gäller karaktärer. Detta jämför teckenkoderna. Därför är 'b'> 'B' och 'a' i det kyrilliska alfabetet större än det latinska 'a'.

De teckengrupper som motsvarar bokstäver är ordnade på ett sådant sätt att konverteringen underlättas stora bokstäver till små och vice versa. Skillnaden i kodningen av stora och små bokstäver och de latinska och ryska alfabeten är $ 20 eller 32. Därför, för att förvandla en liten bokstav till en versal, räcker det att subtrahera 32 från dess kod. Siffran 32 kanske inte är komma ihåg, eftersom det kan erhållas genom att subtrahera koden stor bokstav från koden för motsvarande gemener. Till exempel, ord(z) - ord(Z), eller оrd(a) - ord(A).

Det speciella med kodningen av siffror är att den minst signifikanta biten av siffrans karaktär motsvarar dess numeriskt värde i binär notation. Detta gör det enkelt att konvertera teckenkoden för siffrorna till motsvarande siffror med logisk operation och och masker $ 0F. Till exempel som ett resultat av operationen ord(‘5’) och$0F får du siffran 5.

För att konvertera tecknen i siffrorna till motsvarande siffror kan du använda det faktum att tecknen i siffrorna följer varandra i kodningstabellen i stigande ordning av värdena för dessa siffror.

Nedan finns två alternativ för en sådan konvertering.

Det första alternativet använder skillnaden i koder på noll och den valda siffran, vilket motsvarar det numeriska värdet av siffran

var c: kol; n: heltal;

n: = ord (c) - 48; // som är samma som ord (c) –ord ('0');

Den andra varianten av denna transformation använder operationen och$0F med mask $0F.

konst maska ​​= $ 0F; // konstant lika binärt tal 00001111

var c: kol; n: heltal;

n: = ord(c) och maska; // mask tar bort hög nagg

6.1.1.3 Begränsad datatyp.

För ordningstyper kan du ange ett underområde av deras möjliga värden - detta kommer att vara den begränsade typen.

Värdeintervallet av en begränsad typ ges av ett uttryck av formen:<минимальное значение>..<максимальное значение>.

Till exempel:

typ TCaps = 'A' .. 'Z';

var bigLetter: TCaps; månad: 1..12;

I dessa exempel kan variabeln bigLetter endast acceptera latinska versaler, och variabeln månad kan acceptera värden från 1 till 12.

Begränsade typer används till exempel vid deklarering av arrayer.

Object Pascal-kompilatorn har ett alternativ för att aktivera områdeskontroll när man tilldelar ett värde till en variabel av gränsad typ - ($ R +)... Den kan slås på på den plats för ditt program där du måste börja kontrollera räckvidden och stänga av den var som helst med alternativet ($ R-)... Om ett försök görs att tilldela ett värde utanför det angivna underintervallet till en variabel av en begränsad typ, kommer ett undantag med meddelandet "Range check error" att genereras.

En intervalltyp kan användas för att specificera en uppsättning data av denna typ genom att innesluta intervallet i hakparentes... Till exempel kan en uppsättning ryska avfallsbokstäver specificeras på detta sätt ["a" .. "i"]. För att avgöra om en symbol tillhör en så definierad mängd kan man använda operationen i som återkommer Sann, om symbolen tillhör uppsättningen och falsk om den inte gör det. Till exempel resultatet av att utvärdera uttrycket '5' i['0' .. '9'] kommer Sann.







2021 gtavrl.ru.