Enkla datatyper i pascal. Variabeltyper i Pascal: beskrivning, egenskaper, exempel

När du beskriver en variabel måste du ange dess typ. Typen av en variabel beskriver den uppsättning värden som den kan vidta och de åtgärder som kan utföras på den. Typbeskrivningen definierar en identifierare som anger typen.

Enkla typer delas in i standard (ordinarie) och uppräknade (begränsade) typer.

Standardtyper

Turbo Pascal har fyra inbyggda standardtyper: heltal, riktigt, booleskt och char.

Heltals typ

Turbo Pascal har fem inbyggda heltalstyper: shortint, heltal, longint, byte (byte) och word (word). Varje typ betecknar en specifik delmängd av heltal, som visas i följande tabell.

Inbyggda heltalstyper.

Räckvidd

Formatera

8 signerade bitar

16 signerade bitar

2147483648 +2147483647

Signerade 32 bitar

8 osignerade bitar

16 osignerade bitar

Aritmetiska operationer på operander av en heltalstyp utförs i enlighet med följande regler:

  1. Heltals konstant typ är inline heltalstyp med det minsta intervallet som inkluderar värdet på denna heltalskonstant.
  2. I fallet med en binär operation (en operation som använder två operander) omvandlas båda operanderna till sin vanliga typ innan de ageras. Den vanliga typen är den inbyggda heltalstypen med det minsta intervallet som innehåller alla möjliga värden av båda typerna. Till exempel är den vanliga typen för ett byte-längd heltal och heltal heltal, och den vanliga typen för ett ord-längd heltal och heltal är ett långt heltal. Åtgärden utförs enligt precisionen hos den generiska typen och typen av resultat är den generiska typen.
  3. Uttrycket till höger i uppdragsutredningen utvärderas oavsett storleken på variabeln till vänster.

Operationer utförda på heltal:

“+” - tillägg

“-” - subtraktion

“*” - multiplikation

SQR - kvadrering

DIV - efter delning, kasserar den bråkdel

MOD - får ett heltal kvar efter delning

ABS - nummermodul

RANDOM (X) -mottagande slumpmässigt nummer från 0 till X

A: \u003d 100; b: \u003d 60; a DIV b resultat - 1 a MOD b resultat - 40

Variabler av heltalstyp beskrivs enligt följande:

var lista över variabler: typ;

Till exempel: var a, p, n: heltal;

Verklig typ (riktig)

En riktig typ är en delmängd av reella tal som kan representeras i flytande punktformat med ett fast antal siffror. Att skriva ett flytpunktsvärde innehåller vanligtvis tre värden - m, b och e - så att m * b e, där b alltid är 10 och m och e är heltal i det verkliga området. Dessa värden m och e definierar vidare intervallet och precisionen för den verkliga typen.

Det finns fem typer av riktiga typer: verkliga, singlar, dubblar, exnende, komp. Verkliga typer skiljer sig åt i intervallet och precisionen för deras associerade värden

Räckvidd och decimalsiffror för riktiga typer

Räckvidd

Tal

2.9x10E-39 till 1.7x10E 38

1,5x10E-45 upp till 3,4x10E 38

5.0x10E-324 till 1.7x10E 308

3,4x10E-493 till 1,1x10E 403

2E 63 till 2E 63

Åtgärder utförda på verkliga siffror:

  • Alla operationer är giltiga för heltal.
  • SQRT (x) är kvadratroten av talet x.
  • SIN (X), COS (X), ARCTAN (X).
  • LN (X) -naturlig logaritm.
  • EXP (X) -eksponent X (ex x).
  • EXP (X * LN (A)) - exponentiering (A x).
  • Typkonverteringsfunktioner:
    • TRUNC (X) - kasserar bråkdelen;
    • VARV (X) - avrundning.
  • Några regler för aritmetiska operationer:
    • Om i aritmetisk operation det finns antal typ real och heltal, resultatet blir av typ real.
    • Alla beståndsdelar i uttrycket är skrivna på en rad.
    • Endast parenteser används.
    • Du kan inte lägga två aritmetiska tecken i rad.

Variabler av verklig typ beskrivs enligt följande:

var lista över variabler: typ;

Till exempel:

var d, g, k: real;

Karaktärstyp (röd)

Alla karaktärer som är inneslutna i apostrofer är av typ char. För att representera en apostrof som en symbolvariabel, måste du bifoga den i en apostrof: '' '' '

Varje symbol har sin egen kod och sitt nummer. Sekventiella siffror 0,1..9 sorteras i stigande ordning. Bokstävernas serienummer är också i stigande ordning men följer inte nödvändigtvis varandra.

Jämförelsetecken är tillämpliga på teckendata:

> , < , >=, <=, <> .

Till exempel: 'A'< ‘W’

Funktioner som gäller symbolvariabler:

  1. ORD (X) - definierar ordet för X-tecknet Ord (‘a’) \u003d 97;
  2. CHR (X) - definierar ett tecken efter nummer. chr (97) \u003d 'a';
  3. PRED (X) - returnerar tecknet före X-tecknet Pred ('B') \u003d 'A';
  4. SUCC (X) - returnerar tecknet efter tecknet X. succ (‘A’) \u003d ’B’;

Uppräknad typ

Den uppräknade datatypen heter så eftersom den anges som en uppräkning av konstanter i en strikt definierad ordning och i en strikt definierad mängd. En uppräknad typ består av en lista med konstanter. Variabler av denna typ kan ta värdet av någon av dessa konstanter. Beskrivningen av den uppräknade typen är:

Typ<имя типа>\u003d (lista över konstanter); Var<имя переменной>:<имя типа>;

var<список констант> är en speciell typ av kommaseparerade konstanter som har sitt eget serienummer från 0.

Till exempel:

typriktning \u003d (norr, söder, väst, öst); månad \u003d (juni, juli, augusti, januari); kapacitet \u003d (skopa, fat, kapsel, tank); var sväng: riktning; avgång: månad; volym: kapacitet; var tur: (norr, söder, väst, öst); avgång: (juni, juli, augusti, januari); volym: (hink, fat, kapsel, tank);

Du kan utföra följande uppdragsoperatörer:

Sväng: \u003d söder; avgång: \u003d augusti; volym: \u003d tank;

men du kan inte utföra blandade uppdrag:

Avgång: \u003d söder; volym: \u003d augusti;

Följande funktioner gäller för uppräknade variabler:

1. ORD - serienummer

2. PRED är föregående element

3. SUCC är nästa element.

PRED (fat) \u003d hink; SUCC (söder) \u003d väster; ORD (juli) \u003d 1;

Variabler av en uppräknad typ kan jämföras eftersom de är ordnade och numrerade. Så uttryck: norr< юг, июнь < январь имеют значения TRUE, а юг>väster och bock<бочка значение FАLSE.

Begränsad typ

Om en variabel inte accepterar alla värden av sin typ, men bara inom ett visst område, kan den betraktas som en variabel av en begränsad typ. Varje begränsad typ specificeras genom att införa en begränsning för bastyperna.

Det beskrivs så här:

TYP<имя типа>\u003d konstant1 .. konstant2

I detta fall måste följande regler följas:

  1. Båda begränsade konstanterna måste vara av samma typ.
  2. Vilken enkel typ som helst kan användas som bastyp, förutom real (real).
  3. Det initiala värdet när du definierar den avgränsade typen får inte vara större än det slutliga värdet.
typindex \u003d 0 ..63; bokstav \u003d 'a' .. 'z'; var char1, char2: letter; a, g: index;

Du kan beskriva det direkt i avsnittet om variabelbeskrivning:

var a, g: 0 ..63; char1, char2: 'a' .. 'z'.

Pascal datatyper

Alla data (konstanter, variabler, funktionsvärden eller uttryck) i Turbo Pascal kännetecknas av sina typer. En typ definierar den uppsättning giltiga värden som ett objekt kan ha, samt den uppsättning giltiga operationer som är tillämpliga på det. Typen avgör också formatet för den interna representationen av data i datorns minne.

Följande datatyper finns i Turbo Pascal.

1) Enkla typer:

- verklig;

- symboliskt;

- boolean (logisk);

- räknas;

- begränsat (intervall).

2) Sammansatta (strukturerade) typer:

- vanligt (arrays);

- kombinerat (register);

- fil;

- flera olika;

- sträng;

- objekt.

3) Referenstyper (typade och otypade pekare).

4) Procedurella typer.

Turbo Pascal tillhandahåller en mekanism för att skapa nya datatyper, varigenom det totala antalet typer som används i programmet kan vara så stort som önskat.

Heltals typ... Heltalsvärden är elementen i en delmängd av heltal. Det finns fem heltalstyper i Turbo Pascal. Deras namn, värdena, längden på representationen i byte anges i tabellen. 6.

Tabell 6

Heltalsdatatyper

Heltalsvariabler beskrivs med ovanstående reserverade ord:

i, j, k: heltal;

Heltalsdata lagras exakt i minnet. Heltalsvariabler upptar till exempel 2 byte (16 bitar) i minnet, som allokeras enligt följande: 1 bit tilldelas för att lagra tecknet på numret (0 om numret är positivt och 1 om numret är negativt) och 15 bitar för att lagra numret i det binära systemet beräkning. Det maximala decimaltal som kan skrivas som 15-bitars binärt är 32767.

När man använder procedurer och funktioner med heltalsparametrar bör man vägledas av "kapsling" av typer, dvs. varhelst ord används, byte är tillåtet (men inte tvärtom), longint "anger" heltal, vilket i sin tur innehåller shortint.

För en heltalstyp definieras fem grundläggande operationer som också resulterar i ett heltal: +, -, *, div, mod (addition, subtraktion, multiplikation, heltaldelning och resten av heltaldelning). I aritmetiska uttryck har *, div, mod-operationerna företräde framför +, - operationerna. Exempel på skrivuttryck:

Listan över procedurer och funktioner som är tillämpliga på heltalstyper ges i tabellen. 7. Bokstäverna b, s, w, i, l betecknar uttryck för byte-, shortint-, word-, heltal- och longintypen; x är ett uttryck av någon av dessa typer; identifierare vb, vs, vw, vi, vl, vx betecknar variabler av motsvarande typer. En valfri parameter anges inom hakparenteser.

Tabell 7

Standardprocedurer och funktioner som är tillämpliga på heltalstyper

Överklagande Resultattyp spela teater
Abs (x) x Returnerar modulen x
Chr (b) Röding Returnerar ett tecken med dess kod
Dec (vx [, i]) - Minskar värdet på vx med i, och i frånvaro av i - med 1
Inc (vx [, i]) - Ökar värdet på vx med i, och i frånvaro av i - med 1
Hej (i) Byte Returnerar argumentets höga byte
Hej (i) Byte Också
Lo (i) Byte Returnerar argumentets minst betydande byte
Lo (w) Byte Också
Udda (l) Byte Returnerar sant om argumentet är ett udda tal
Slumpmässig (w) Samma som parameter Returnerar ett pseudoslumpmässigt nummer jämnt fördelat i intervallet 0 ... (w-1)
Sqr (x) x Returnerar kvadraten för argumentet
Byt (i) Heltal
Byt (w) Ord Byt byte i ett ord
Succ (x) Samma som parameter Returnerar nästa heltal, dvs. x + 1
Pred (x) Samma som parameter Returnerar föregående heltal, dvs. x-1

För operationer med heltal kommer typen av resultat att motsvara typen av operand, och om operanderna har olika heltalstyper, den typ av operand som har det maximala värdet. Möjliga resultatöverflöden kontrolleras inte, vilket kan leda till programfel.

Verklig typ. Värden av verkliga typer definierar ett godtyckligt tal med viss begränsad precision, beroende på det interna formatet på det verkliga numret. Det finns fem riktiga typer i Turbo-Pascal (tabell 8).

Tabell 8

Verkliga datatyper

Verkliga variabler beskrivs med ovanstående reserverade ord:

Ett verkligt antal i datorminnet består av tre delar:

Signerad siffra för ett nummer;

Exponentiell del;

Mantissa siffror.

Mantissa har en längd på 23 (Single) till 63 (Extended) binära siffror, vilket ger en noggrannhet på 7-8 för Single och 19-20 för Extended decimal siffror. Decimalpunkten (komma) antyds före den vänstra (mest betydelsefulla) biten av mantissan, men när man manipulerar ett tal flyttas dess position till vänster eller höger i enlighet med den binära ordningen på numret som är lagrat i den exponentiella delen, därför kallas operationer på reella tal för flytpunktsaritmetik (komma) ...

Enkel-, dubbel- och utökad typ kan endast nås under speciella kompileringslägen. Välj menyalternativet för att aktivera dessa lägen alternativ, Kompilator ... och aktivera alternativet 8087/80287 i grupp Numerisk bearbetning.

En speciell position i Turbo Pascal är upptagen av Comp-typen, som behandlas som ett verkligt antal utan exponentiella och bråkdelar. Faktum är att Comp är ett stort signerat heltal som lagrar 19 ... 20 signifikanta decimalsiffror. Samtidigt är Comp fullt kompatibel med alla andra verkliga typer i uttryck: alla verkliga operationer definieras över den, den kan användas som ett argument för matematiska operationer etc.



Verkliga tal anges i decimalnotation i en av två former.

I fast punktform posten består av hela och bråkdelar, åtskilda från varandra med en punkt, till exempel:

0.087 4.0 23.5 0.6

I flytpunkt posten innehåller bokstaven E, som betyder "multiplicera med tio till kraften", och kraften är ett heltal, till exempel:

7E3 6.9E-8 0.98E-02 45E + 04

Följande operationer definieras på objekt av verklig typ: +, -, *, /.

Operationerna "*" och "/" har högre prioritet än operationerna "+" och "-".

Om minst en operand är verklig, leder operationerna +, -, *, / till ett verkligt resultat. Divisionsoperatören / leder till ett verkligt resultat i fallet med två heltal operander, till exempel: 9/3 \u003d 3.0.

För att arbeta med verkliga data kan matematiska standardfunktioner användas som presenteras i tabellen. 9. Resultatet av dessa funktioner är också verkligt.

Tabell 9

Matematiska funktioner som arbetar med verkliga data

Det är förbjudet att använda variabler och konstanter av REAL-typen:

- i funktionerna pred (x), succ (x), ord (x);

- som matrisindex;

- som etiketter i kontrollöverföringsoperatörer,

- som kontrollvariabler (cykelparametrar).

För att konvertera ett reellt tal till ett heltal kan du använda funktionerna:

trunc (x) - heltal del av x (x är verklig);

runda (x) - runda till närmaste heltal (x är verkligt).

Karaktärstyp. Symbolvariabler beskrivs med hjälp av det reserverade ordet:

Värden av denna typ väljs från en ordnad uppsättning tecken (från ASCII-uppsättningen) på 256 tecken. Ett heltal från intervallet 0..255 tilldelas varje tecken. Till exempel har stora bokstäver i det latinska alfabetet A..Z koder 65..90 och små bokstäver har koder 97..122.

Värdet på en teckenvariabel är ett tecken som omges av apostrofer, till exempel:

'F' '8' '*'

Symbolvariabler kan jämföras med varandra och symbolkoder jämförs.

Det finns funktioner som skapar en överensstämmelse mellan en symbol och dess kod:

ord (с) - ger karaktärens nummer med;

chr (i) - producerar tecknet med siffran i.

Dessa funktioner är inversa till varandra.

Boolesk typ... Booleska variabler beskrivs med det booleska reserverade ordet:

p1, p2: boolean;

Booleska variabler tar två värden: sann (Sann), falsk (Liggande).

Dessa värden ordnas enligt följande: falskt< true. false имеет порядковый номер 0, true имеет порядковый номер 1.

Booleska variabler kan antingen tilldelas ett värde direkt eller använda ett booleskt uttryck. Till exempel,

a, d, g, b: boolean;

Förhållande operationer (<, <=, >, >=, =, <>) tillämpas på heltal, verkliga och symboliska variabler ger ett logiskt resultat.

Booleska operationer på operander av en boolsk typ ger också ett booleskt resultat (operationer listas i fallande prioritetsordning) (för mer information, se tabeller 3 och 5):

inte - negation (INTE drift);

och - logisk multiplikation (OCH-operation);

eller - logisk tillägg (ELLER-operation);

xor - exklusivt ELLER.

Uttrycket (inte a) har motsatt betydelse av a.

Uttryck (a och b) utvärderas till sant om både a och b är sanna, annars är uttrycket falskt.

Uttrycket (a eller b) utvärderas till falskt om både a och b är falska, annars är resultatet sant.

Uppräknad typ... En icke-standardiserad uppräknad typ specificeras av en uppräkning i form av värdenamn som en variabel kan ta. Varje värde namnges av någon identifierare och finns i en lista omgiven av parenteser. Allmän bild av beskrivningen av en uppräknad typ:

x \u003d (w1, w2, ..., wn);

där x är namnet på typen, w1, w2, ..., wn är värdena som en variabel av typen x kan ta.

Dessa värden ordnas w1

Följande standardfunktioner gäller för det uppräknade typargumentet w:

succ (w), pred (w), ord (w).

färg \u003d (röd, svart, gul, grön)

ww \u003d (vänster, upp, höger, ner);

f: array av ww;

succ (d) \u003d gul;

Variablerna a och b är av typen w. de kan ta ett av tre värden och vidare

För värden av den uppräknade typen gäller förhållandena: \u003d,<>, <=, >=, <, >.

Det är tillåtet att ange konstanter av uppräknad typ direkt i avsnittet var utan att använda en sektion typ, t.ex

c, d: (röd, svart, gul, grön);

Räckviddstyp (begränsad)... När du definierar en begränsad typ specificeras de initiala och slutliga värden som en variabel av en intervalltyp kan ta. Värdena är åtskilda av två punkter.

Beskrivningen av den begränsade typen är

Här är namnet på typen, min, max är konstanter.

När du anger en begränsad typ måste följande regler följas:

- båda gränskonstanterna min och max måste vara av samma typ;

- en begränsad typ skapas från data från bastypen, som kan vara ett heltal, tecken eller en uppräknad typ. Till exempel:

kol \u003d röd .. gul;

bokstav \u003d 'a' .. 'f';

- variabler av begränsad typ kan beskrivas i var-avsnittet utan att hänvisa till typavsnittet:

- en begränsad typ ärver alla egenskaper hos den bastyp från vilken den skapas;

- mingränsen måste alltid vara mindre än maxgränsen.

Arrayer... En array är en komplex typ som är en struktur som består av ett fast antal komponenter av samma typ. Komponenttypen kallas bastypen. Alla komponenter i en array kan enkelt beställas och någon av dem kan nås genom att helt enkelt ange dess sekvensnummer. Beskrivning av matrisen i avsnittet var ser ut som:

a: array av t2;

där a är namnet på matrisen, array, av - tjänstord (betyder "array från ..."), t1 - indextyp; t2 - komponenttyp (bastyp).

Antalet index bestämmer dimensionen för matrisen. Index kan vara av heltal (annat än longint), karaktär, booleskt, uppräknat och intervall. Index avgränsas med komma och omges av hakparenteser. Array-komponenter kan vara av vilken typ som helst utom filtyp.

Exempel 1. Tänk på en endimensionell matris C, vars värden är fem reella tal:

4.6 6.23 12 -4.8 0.7

Beskrivningen av denna array är som följer:

c: array of real;

Med ett specifikt indexvärde kan du välja en specifik komponent i matrisen (till exempel betyder C det tredje elementet i C-matrisen, dvs. nummer 12)

Exempel 2. Betrakta en tvådimensionell matris B (matris B), vars värde är en heltalstabell:

Beskrivningen av denna array ser ut så här:

b av heltal;

Här är b namnet på matrisen, det första indexet är radnumret och tar värden från 1 till 2, det andra är kolumnnumret och tar värden från 1 till 4. För specifika värden för indexen kan du välja en specifik komponent i matrisen (till exempel betyder b betyder tabellelementet i första raden och tredje kolumnen, dvs. nummer -4).

Index kan vara godtyckliga uttryck som motsvarar typen av index från matrisbeskrivningen:

a: array of real;

a [(i + 1) * 2]: \u003d 24;

Uppsättningen av operationer på arrayelement bestäms helt av typen av dessa element.

Sträng typ... En strängtyp är en uppsättning teckensträngar med godtycklig längd (från noll till ett givet nummer). Variabler av strängtyp beskrivs med hjälp av ett serviceord sträng:

b: sträng ;

Funktioner:

- värdet på en strängvariabel kan anges med tangentbordet, tilldelat i en tilldelningsoperator, läst från en fil. I det här fallet kan längden på den angivna strängen vara vilken som helst (mindre än den angivna storleken, lika med storleken eller mer, i det senare fallet kastas extra tecken bort); a: \u003d ‘Resultat’;

- det är tillåtet att använda sammanlänkningsoperationen i tilldelningsoperatören, eftersom strängar dynamiskt kan ändra längden: a: \u003d a + 'beräkning';

- den maximala längden på en strängvariabel är 255 tecken, denna längdindikering kan utelämnas:

a: sträng;

a1: sträng ;

Variablerna a och a1 är desamma (motsvarande beskrivning).

- minne för variabler av strängtyp tilldelas maximalt, men endast en del av minnet används som faktiskt upptas av strängtecken just nu. För att beskriva en strängvariabel med längden n används n + 1 byte minne: n byte - för att lagra strängtecken, n + 1 –th byte - för att lagra aktuell längd.

- jämförelseoperationer definieras över värden för strängtyper:< <= > >= = <>... En kort sträng är alltid kortare än en lång. Om strängarna har samma längd jämförs teckenkoderna.

- det är möjligt att komma åt enskilda element i en sträng på samma sätt som åtkomst till arrayelement: a, a. Hakparenteserna anger radelementets nummer.

Strängorienterade procedurer och funktioner.

concat (s1, s2, ...) - linjesammanfogningsfunktion, s1, s2,... - linjer, antalet rader kan vara godtyckliga. Resultatet av funktionen är en sträng. Om den resulterande strängens längd är mer än 255 tecken trunkeras den till 255 tecken.

kopia (r, index, antal) - funktion för att välja en rad från den ursprungliga raden s längd räkna tecken som börjar med tecknet under numret index.

ta bort (s, indexera, räkna) Är proceduren för att ta bort en längdsträng från strängen s räkna tecken från tecken med nummer index.

infoga (s1, s2, index) - radinsättningsprocedur s1 i kö s2börjar med tecknet med numret index.

längd (ar) - funktion för att bestämma den aktuella stränglängden, returnerar ett tal som är lika med den aktuella stränglängden.

pos (s1, s2) - strängsökfunktion s2 underlag s1... ger positionsnumret för det första tecknet i en substring s1 i kö s2 (eller 0 om denna rad inte finns).

val (st, x, kod) - proceduren för att konvertera en sträng till ett heltal eller verklig variabel x... Parameter koda innehåller 0 om konverteringen lyckades (och i x omvandlingsresultatet placeras) eller linjens positionsnummer där felaktigt tecken hittades (i detta fall värdet x ändras inte).

Kompatibilitet och typkonvertering... Turbo Pascal är ett skrivspråk. Den är byggd på grundval av strikt efterlevnad av begreppet typer, i enlighet med vilken alla operationer som används på språket endast definieras på operander av kompatibla typer.

Två typer anses vara kompatibla om:

- båda är av samma typ;

- båda är verkliga;

- båda är hela;

- en typ är intervalltypen för den andra typen;

- båda är intervalltyper av samma bastyp;

- båda är uppsättningar som består av element av samma bastyp;

- båda är packade strängar (definierade med ordet packat föregående) av samma maximala längd;

- den ena är strängtyp och den andra är sträng eller typ;

- en typ är vilken som helst pekare och den andra är en pekare till ett relaterat objekt;

- båda är procedurtyper med samma resultattyp (för en funktionstyp), antalet parametrar och typen av ömsesidigt motsvarande parametrar.

Typkompatibilitet får särskild betydelse för uppdragsoperatörer. Låt t1 vara typen av variabeln, och t2 typen av uttrycket, det vill säga tilldelningen t1: \u003d t2 utförs. Denna uppgift är möjlig i följande fall:

- t1 och t2 är av samma typ, och den här typen gäller inte för filer, filmatriser, poster som innehåller filfält eller matriser av sådana poster;

- t1 och t2 är kompatibla ordinarie typer, och värdet av t2 ligger inom intervallet av möjliga värden för t1;

- t1 och t2 är verkliga typer, och värdet av t2 ligger inom intervallet av möjliga värden för t1;

- t1 - verklig typ och t2 - heltalstyp;

- t1 är en sträng och t2 är ett tecken;

- t1 är en sträng och t2 är en packad sträng;

- t1 och t2 - kompatibla packade strängar;

- t1 och t2 är kompatibla uppsättningar och alla medlemmar i t2 tillhör uppsättningen möjliga värden för t1;

- t1 och t2 är kompatibla pekare;

- t1 och t2 är kompatibla procedurtyper;

- t1 är ett objekt och t2 är dess barn.

I ett program kan data av en typ konverteras till data av en annan typ. Denna omvandling kan vara uttrycklig eller implicit.

Explicit typkonvertering kallar speciella konverteringsfunktioner vars argument är av en typ och värden för en annan. Ett exempel är de funktioner ord, trunc, round, chr som redan beaktats.

Implicit konvertering är endast möjlig i två fall:

- i uttryck som består av verkliga och heltal variabler omvandlas de senare automatiskt till en riktig typ, och hela uttrycket blir en riktig typ;

- samma minnesområde tolkas växelvis som innehåller data av en eller annan typ (kombinerar data av olika typer i minnet).

Kunskap och förståelse för datatyper är en viktig del av programmeringen.

I denna handledning kommer vi att presentera dig för datatyper i programmeringsspråket Turbo Pascal.

I Pascal är alla objekt, d.v.s. konstanter, variabler, funktionsvärden eller uttryck kännetecknas av deras typer. En typ definierar en uppsättning giltiga värden för ett objekt, samt en uppsättning operationer som är tillämpliga på det. Dessutom bestämmer typen formatet på den interna datarepresentationen i datorminnet. Pascal är ett statiskt språk när det gäller objekttyper. Detta betyder att typen av ett objekt, till exempel en variabel, bestäms under dess beskrivning och inte kan ändras senare.

Strukturen för datatyper i Pascal:

Enkla språktyper
Enkla typer inkluderar ordinal, real, sträng och adress (pekare). De definierar alla typen av endast ett distinkt värde.

Vanliga typer kännetecknat av det faktum att var och en av dem har ett begränsat antal möjliga värden, bland vilka en linjär ordning upprättas. Var och en av värdena kan associeras med något heltal - dess ordningsnummer.

Heltals typer - beteckna uppsättningar av heltal i olika intervall. Det finns fem heltalstyper som skiljer sig åt i intervallet av giltiga värden och storleken på minnet som används. Heltals typer anges med identifierare: Byte, ShortInt, Word, Integer, LongInt; deras egenskaper visas i följande tabell.

Värden på heltalstyper skrivs i programmet på vanligt sätt:
123 4 -3 +345 -699
Förekomsten av en decimal i ett heltal är inte tillåten. Det skulle vara ett misstag att skriva ett heltal så här:
123.0
Förutom den vanliga decimalteckningen är det tillåtet att skriva heltal i hexadecimalt format med $ prefixet, till exempel:
$ 01AF $ FF $ 1A $ F0A1B
Fallet med bokstäverna A, B, ..., F spelar ingen roll.

Tillåtna operationer:

  • - uppdrag;
  • - all aritmetik: +, -, *, /, div, mod (med den vanliga divisionen [/] är resultatet verkligt!);
  • - jämförelse<, >, >=, <=, <>, =.
Boolesk typ - består av endast två värden: Falskt (falskt) och Sant (sant). Orden Falskt och sant definieras på språket och är i själva verket logiska konstanter. Fallet med bokstäver i deras skrivning är obetydligt: \u200b\u200bFALSE \u003d false. Värden av denna typ är resultatet av att utvärdera villkorliga och logiska uttryck och delta i alla slags villkorliga uttalanden på språket.
Tillåtna operationer:
  • - uppdrag;
  • - jämförelse:<, >, >=, <=, <>, =;
  • - logiska operationer: NOT, OR, AND, XOR
Karaktärstyp (Char) är en datatyp som består av ett tecken (tecken, bokstav, kod). Char-värdet kan vara vilket ASCII-tecken som helst. Om en karaktär har en grafisk framställning, skrivs den i programmet i enstaka citat (apostrofer), till exempel:
"f" "s" "." "*" "" - (Plats)
För att representera själva apostrofen fördubblas dess bild: "" "".
Om tecknet inte har någon grafisk representation, till exempel en flik eller ett vagnretur, kan du använda motsvarande form för att skriva ett teckenvärde, bestående av # prefixet och ASCII-koden för tecknet:
#9 #32 #13
Tillåtna operationer:
  • - uppdrag;
  • - jämförelse:<, >, >=, <=, <>, \u003d. Den större karaktären är den med högre ASCII-nummer.
Strängtyp (Sträng, Sträng [n]) - den här datatypen definierar teckensekvenser - strängar. Parametern n anger det maximala antalet tecken i strängen. Om det inte anges antas n \u003d 255. Ett värde av typen "sträng" i programmet skrivs som en sekvens av tecken som omges av enstaka citat (apostrofer), till exempel
"Detta är en sträng"
"1234" är också en sträng, inte ett tal
"" - tom rad

Tillåtna operationer:
  • - uppdrag;
  • - tillägg (sammanfogning, sammanslagning); till exempel S: \u003d "Vinter" + "" + "har kommit!";
  • - jämförelse:<, >, >=, <=, <>, \u003d. Strängar betraktas lika om de har samma längd och motsvarar tecken för tecken.
Verkliga typer - beteckna en uppsättning reella tal i olika intervall. Det finns fem riktiga typer, som skiljer sig åt i området för acceptabla värden och storleken på det minne som används. Verkliga typer anges med identifierare: Real, Single, Double, Extended, Comp; deras egenskaper visas i följande tabell.

Comp-typ även om det tillhör verkliga typer är det faktiskt ett heltal med ett mycket stort antal värden.
Värden av verkliga typer kan skrivas i ett program på flera sätt:
1.456 0.000134 -120.0 65432
+345 0 -45 127E + 12
-1,5E-5 -1,6E + 12 5E4 0,002E-6

Det skulle vara ett misstag att skriva ett riktigt nummer så här:
.5 (rätt 0.5)
12. (12.0 eller 12 är korrekt)

Ett verkligt tal i flytande punktform (exponentiell form) skrivs som ett par
<мантисса> E<порядок>
Denna beteckning förstås som "mantissan multiplicerad med tio i kraften lika med ordningen." Till exempel,
-1,6E + 12 motsvarar -1,61012

Tillåtna operationer:
- uppdrag;
- all aritmetik: +, -, *, /;
- jämförelse:<, >, >=, <=, <>, =.

När man jämför reella tal bör man komma ihåg att på grund av felaktigheten i deras representation i datorns minne (med tanke på avrundningens oundviklighet) bör försök att bestämma den strikta likheten mellan två verkliga värden undvikas. Det finns en chans att jämlikheten visar sig vara falsk, även om den faktiskt inte är den.

Område eller (begränsad typ) är inte en fördefinierad språktyp (som heltal eller Char) och därför motsvarar ingen identifierare den. Denna typ är användarinmatad. Med den kan vi definiera en ny typ som bara innehåller värden från ett begränsat underområde av någon bastyp. Bastypen kan bara vara en heltalstyp, en Char-typ (tecken) och vilken som helst av de uppräknade typerna som introducerats av programmeraren.

För att införa en ny typ - ett intervall - måste du ange namnet på inmatningstypen och intervallgränserna i TYPE-typbeskrivningsblocket genom specialområdesymbolen ".."
TYP
Århundrade \u003d 1..21; (underområde för nummertyp)
CapsLetters \u003d "A" .. "I"; (underordning av typen Char)

Strukturerade språktyper

De strukturerade typerna inkluderar: array, post, set, fil, etc. De definierar alla typen (eller typerna) av någon datastruktur.

Array - en ordnad struktur av samma typ av data, som lagrar dem sekventiellt. Matrisen har nödvändigtvis dimensioner som avgör hur många element som lagras i strukturen. Varje element i matrisen kan nås med dess index.

Arraytypen bestäms av konstruktionen:
Array [range] of ItemType;

Området inom hakparenteser anger indexvärdena för det första och sista elementet i strukturen. Exempel på deklareringstyper och variabler:

TYP Vector \u003d array av Real; VAR V1: vektor; V2: array av byte;
Här definieras variabeln V1 med användning av vektortypen som beskrivs ovan; typen av variabeln V2 konstrueras direkt i beskrivningsfasen.

Som typ av arrayelement kan du också ange en array och därigenom bilda flerdimensionella strukturer. Till exempel skulle en beskrivning av en tvådimensionell struktur (matris) se ut så här:
VAR M1: array av array av Byte; Detsamma kan skrivas mycket mer kompakt: VAR M2: array of Byte;
Här har matriserna M1 och M2 exakt samma struktur - en 3x3 kvadratmatris.

Ett arrayelement nås genom att specificera dess index, till exempel:

Writeln (V1); (visning av det första elementet i array V1) readln (M2); (inmatning av det tredje elementet i den andra raden i matris M2)
Detta slutför lektionen om datatyper, texten kopierades nästan fullständigt och klistrades in (länken kommer att finnas nedan), sedan Jag ser ingen anledning att berätta detta material med mina egna ord. Om skillnaden mellan datatyper till och med är lite tydlig är det redan bra.

Grunderna för programmering
Varje professionell var en gång en tekanna. Visst är du bekant med tillståndet när "du vet inte hur man ska börja tänka för att komma på detta". Du har antagligen stött på en situation där du bara inte vet var du ska börja. Den här boken riktar sig bara till de människor som vill bli programmerare, men som inte vet hur de ska börja. ...

Nästan alla heltal datatyper är. Dessa datatyper representerar heltal i ett visst intervall. De exakta namnen på heltalstyper och värdena beror på det specifika programmeringsspråket, på kompilatorn och på kompileringsläget. Läs mer om detta i kompileringsdokumentationen.

Till exempel datatypen Heltal i Delphi har den ett intervall på -2147483648 ... 2147483647, medan datatypen i Turbo Pascal är Heltal representerar siffror i intervallet -35768 ... 32767. I Free Pascal, en rad värden som Heltal bestäms av det valda läget.

Eftersom Lazarus använder Free Pascal-kompilatorn gäller vad som har sagts om datatyper i förhållande till Free Pascal också för Lazarus.

Så datatyperna för Free Pascal är listade i tabell 13.1.

Tabell 13.1. Gratis Pascal (Lazarus) heltal datatyper.

En typ Storlek, byte Värdeintervall
Byte 1 0…255
Shortint 1 -128…127
Smallint 2 -35768…32767
Ord 2 0…65535
Heltal 2 eller 4 Beror på kompileringsläge
Kardinal 4 0…4294967295
Longint 4 -2147483648…2147483647
Longword 4 0...4294967295
Int64 8 -9223372036854775808...9223372036854775807
QWord 8 0...18446744073709551615

NOTERA
I Free Pascal, typer Int64 och QWord är inte! Det betyder att du inte kan använda dem till exempel för indexvariabler i loopar. Men jag tog dem hit för att inte beskriva dem separat i framtiden och samla alla heltalstyper av Free Pascal på ett ställe. Om du inte förstår några ord, var inte orolig. I god tid berättar jag mer om allt.

Och nu några förklaringar till tabellen.

I en kolumn EN TYP identifierare av datatyper ges (nyckelord som indikerar kompilatorn vilken typ den här eller den informationen tillhör). Du lär dig hur du använder dessa identifierare i följande lektioner.

I en kolumn STORLEKEN anger storleken som datatypen upptar i datorns minne. Till exempel kan ett positivt heltal representeras av olika typer: Byte, Ord, Kardinal etc. Ett nummer som Kardinal kommer att uppta 4 byte i minnet, medan ett nummer som Byte - bara 1 byte. Om du säkert vet att numret du arbetar med aldrig tar ett värde större än 255, är det bättre att definiera det som en typ Byte, eftersom detta sparar plats i datorns minne. Även om allt inte är så enkelt här (nyanserna med att fördela minne och andra datorresurser ligger utanför räckvidden).

I en kolumn RÄCKVIDD det intervall för värden som datatypen arbetar på anges. Till exempel ett nummer som Byte kan ta värden från 0 till 255.

Öva nu. Låt oss skriva ett program som visar värdena för alla heltal datatyper. Källkoden för detta program visas nedan:

Listning 13.1. Ett program för att visa intervall av heltal. program td; ($ mode objfpc) ($ H +) använder ($ IFDEF UNIX) ($ IFDEF UseCThreads) cthreads, ($ ENDIF) ($ ENDIF) Klasser (du kan lägga till enheter efter detta); börja Writeln ("Byte:", Low (Byte), "..", High (Byte)); Writeln ("Shortint:", Low (Shortint), "..", High (Shortint)); Writeln ("Smallint:", Low (Smallint), "..", High (Smallint)); Writeln ("Word:", Low (Word), "..", High (Word)); Writeln ("Integer:", Low (Integer), "..", High (Integer)); Writeln ("Cardinal:", Low (Cardinal), "..", High (Cardinal)); Writeln ("Longint:", Low (Longint), "..", High (Longint)); Writeln ("Longword:", Low (Longword), "..", High (Longword)); Writeln ("Int64:", Low (Int64), "..", High (Int64)); Writeln ("QWord:", Low (QWord), "..", High (QWord)); Readln; slutet.

Standardfunktion Låg definierar minimivärdet för datatypen. Funckia Hög definierar det maximala värdet. Med funktioner SkrivLn och LäsLn du är redan lite bekant. Vi kommer att prata mer detaljerat om underrutiner (procedurer och funktioner) i motsvarande avsnitt.

Slutligen kommer jag att berätta hur heltalsdata skrivs i ett program. Liksom överallt - skriv bara numret utan citattecken och ytterligare tecken. Till exempel så

10
178
35278

Det är sant att detta gäller siffror i decimalnotationssystemet. Du vet förmodligen redan att det finns andra system. De mest använda är binära, decimala och hexadecimala talsystem.

Gratis Pascal stöder fyra heltalsnoteringsformat:

  1. Decimal notation... Bara ett nummer som 10.
  2. Hexadecimal notation... Ett nummer som är prefixerat med $. Exempelvis är hexadecimal $ 10 lika med decimal 16.
  3. Oktal notation... Ett nummer prefixat med &. Exempelvis är oktal och 10 lika med decimal 8.
  4. Binär notation... Ett tal prefixerat med%. Till exempel är binärt tal% 10 lika med decimal 2.

Läxa:

Skapa ett program som visar intervall med heltalsvärden (Listing 13.1). Kompilera programmet och kör det. Se till att dessa värden matchar de som visas i tabell 13.1.

I källkoden för programmet hittar du raden som ställer in kompileringsläget:

($ mode objfpc) ($ H +)

I den här raden, istället för ordet objfpc skriv ett ord tp... Det vill säga den resulterande raden ska se ut så här:

($ mode tp) ($ H +)

Kör programmet. Titta på värdena som Heltal... Dra slutsatser.

Lär dig att tänka som en programmerare, det vill säga logiskt. Ingen tuggar på allt fram till pensionen, som jag gör nu. Du måste vänja dig vid att tänka själv. Annars kommer du att glida in i "apa-principen om att lära", och då kommer dina chanser att bli en bra programmerare närma sig noll. För att hjälpa dig att hålla dig på "cramming" -nivån kommer jag regelbundet att lämna luckor i din träning så att du försöker lista ut några saker själv.

Det är mycket bättre om du själv tänker upp fel beslut, du kommer själv att hitta felet och fixa det själv, än att du alltid kommer att använda andras rätta lösningar och kopiera dem dumt.

3.2. Enkla datatyper i Turbo Pascal 7

En enkel typ definierar en ordnad uppsättning parametervärden. Turbo Pascal har följande grupper av enkla typer:

  • heltalstyper;
  • boolesk typ;
  • karaktärstyp;
  • uppräknad typ;
  • intervall typ;
  • riktiga typer.

Alla enkla typer, med undantag för verkliga, kallas ordinaltyper. För värden av ordinarie typer definieras standardprocedurer och funktioner: Dec, Inc, Ord, Pred, Succ (se avsnitt 13.1).

3.2.1. Heltals typer

Till skillnad från Pascal, där en enda heltalstyp definieras, har Turbo Pascal fem vanliga heltalstyper: Shortint, Integer, Longint, Byte, Word. Kännetecknen för dessa typer anges i tabellen. 2.

Tabell 2. Heltalsdatatyper

En typ Räckvidd Formatera Storlek i byte
Shortint -128 .. 127 Ikonisk 1
Heltal -32768 .. 32767 Ikonisk 2
Longint -2147483648 .. 2147483647 Ikonisk 4
Byte 0 .. 255 Osignerad 1
Ord 0 .. 65535 Osignerad 2

3.2.2. Boolesk typ

Den booleska standardtypen (storlek - 1 byte) är en datatyp, av vilken alla element bara kan ha två värden: sant och falskt. I detta fall gäller följande villkor:
False Ord (False) \u003d 0
Ord (True) \u003d 1
Succ (False) \u003d Sant
Pred (True) \u003d Falskt

Turbo Pascal 7.0 lägger till ytterligare tre booleska typer ByteBool (storlek 1 byte), WordBool (storlek 2 byte) och LongBool (storlek 4 byte). De introducerades för förening med andra programmeringsspråk och med Windows-miljön. De skiljer sig från den booleska standardtypen i det verkliga värdet på parametern av denna typ, vilket motsvarar värdet True. För alla booleska typer motsvarar det falska värdet antalet 0, skrivet i motsvarande antal byte. Värdet True för den booleska typen motsvarar numret 1, skrivet i sin byte, och för andra typer motsvarar True något annat än noll (även om Ord-funktionen i detta fall ger värdet 1).

3.2.3. Karaktärstyp

Standardtypen Char definierar en komplett uppsättning ASCII-tecken. Ord-funktionen från ett värde av typen Char ger koden för motsvarande symbol. Värdena av den symboliska typen jämförs med deras koder.

3.2.4. Uppräknad typ

Den uppräknade typen är inte standard och bestäms av en uppsättning identifierare som parametervärdena kan matcha. Listan över identifierare anges inom parentes, identifierarna är separerade med kommatecken:

typ
= ();)

Det är viktigt i vilken ordning identifierarna listas när en typ definieras, eftersom den första identifieraren tilldelas sekvensnummer 0, den andra osv. Samma identifikator kan användas i definitionen av endast en uppräknad typ. Ordfunktionen för ett uppräknat värde ger ordningens värde.

Exempel. En uppräknad typ.

typ Operat \u003d (Plus, Minus, Mult, Divide);

Boolesk typ är ett specialfall av uppräknad typ:

typ Boolean \u003d (False, True);

3.2.5. Räckviddstyp

I vilken ordinär typ som helst kan du välja en delmängd av värden som bestäms av minimi- och maximivärdet, som inkluderar alla värden av den ursprungliga typen som ligger inom dessa gränser, inklusive själva gränserna. En sådan delmängd definierar en intervalltyp. Områdestypen specificeras genom att ange minimi- och maxvärden, åtskilda av två perioder:

typ \u003d. ... ;

Minimivärdet vid definiering av denna typ bör inte överstiga maxvärdet.

Exempel. Definition av intervalltyper.

typ
Dussin \u003d 1..12; (siffror från 1 till 12)
AddSub \u003d Plus..Minus; (addition och subtraktion)

3.2.6. Verkliga typer

Till skillnad från Pascal-standarden, där endast en riktig typ definieras, har Real, Turbo Pascal fem vanliga riktiga typer: Real, Single, Double, Extended, Comp. För egenskaperna hos dessa typer, se tabell. 3. Tabell 3. Verkliga datatyper

En typ Räckvidd Antal signifikanta siffror Storlek i byte
Verklig 2.9*10-39..1.7*1038 11-12 6
Enda 1.5*10-45..3.4*1038 7-8 4
Dubbel 5.0*10-324.-1.7*10308 15-16 8
Utökad 3.4*10-4932..1.1*104932 19-20 10
Komp -263+1..263-1 19-20 8

Comp är faktiskt ett heltalstyp för utökat intervall, men det anses inte vara ordinarie.

Typerna Single, Double, Extended och Comp kan endast användas i program om det finns en aritmetisk coprocessor eller när coprocessoremulatoren är aktiverad (se avsnitt 17.5.8 och 17.7.1).

Dela detta