Kezdőoldal » Számítástechnika » Programozás » Pascal: Saját típusnak megadot...

Pascal: Saját típusnak megadott típus miért nem viselkedik sorszámozott típusként (más értékeket is felvesz, túlcsordul)?

Figyelt kérdés

Definiálok egy saját típust, ez miért nem válik automatikusan olyanná, hogy értékkészletéből csak a definiált értékeket vehesse fel, semmi mást? (mint pl. a byte, amely 0..255 értéket vehet fel, vagy összes többi sorszámozott típust említhetném)...


Range check bekapcsolásával kiakad, ezt értem, de miért nem szabályozza le a fordító, hogy csak bizonyos értékeket vehessen fel a változó?

FPC fejlesztőinek ezt nem lenne érdemes javasolni, vagy ez teljesen jó így és én értek félre valamit?


Én logikám szerint úgy kellene működnie, hogy hiába növelem, az 1,2,3 értékeken kívül mást nem vehetne fel és így menne körbe-körbe...


program pelda;


type

valtozotip = 1..3;


var

v : valtozotip;

i : byte;

begin

v := 1;

for i := 1 to 14 do

inc(v);

WriteLn(v);

v := 1;

for i := 1 to 14 do

v:=succ(v);

WriteLn(v);

ReadLn;

end.



2017. dec. 27. 19:37
 1/6 anonim ***** válasza:

Ezt nem, így kell.

Intervallum tipusra keress rá.

2017. dec. 27. 19:51
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
"Pascal interval type" kifejezésre keresve nem kapok releváns találatokat.
2017. dec. 27. 20:06
 3/6 A kérdező kommentje:
Ha visszanézel és van kedved, írhatsz erről bővebben is.
2017. dec. 27. 20:15
 4/6 anonim ***** válasza:
2017. dec. 27. 22:00
Hasznos számodra ez a válasz?
 5/6 sharkxxx ***** válasza:

A résztartomány típusú (subrange type) változók annyi helyet foglalnak, amennyi a legkisebb megcímezhetõ memória.


Például:

type valtozotip = 1..3;

var v : valtozotip;

A "valtozotip" típusú változók 1 bájton lesznek tárolva. Vagyis úgy lesznek tárolva, mint a "Byte" típusú változók.


Attól függ, hogy mennyi bájton, és milyen beépített típusként lesznek tárolva, hogy milyen intervallumot adsz meg. Lásd a következõ táblázatot:


  Byte    = 0..255; 

  Shortint = -128..127; 

  Word    = 0..65535;

  Integer  = -32768..32767; 

  Longint  = $80000000..$7fffffff; 


A {$R+} direktívával bekapcsolhatod a futás idejû tartomány ellenõrzést.

Például:


type

  valtozotip = 1..3;

var

  v : valtozotip;

  i : byte;

begin

  {$R+}

  try

    v := 1;

    for i := 1 to 14 do

      Inc(v);

    WriteLn(v);

  except

    WriteLn('Variable is out of range. (',v,')');

  end;

  ReadLn;

end.

2017. dec. 27. 22:10
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Köszönöm, így már értem.
2017. dec. 27. 22:37

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!