نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

شرح انواع داده ها در پاسکال. اعداد صحیح در پاسکال

مهمترین عناصر یک برنامه متغیرها هستند. آنها بر روند وقایع برنامه در طول اجرای آن تأثیر می گذارند. به عنوان مثال، اگر مقدار متغیر Name را در تعیین نکرده باشیم، خروجی تبریک برنامه خطاب به چه کسی خواهد بود؟

متغیرها می توانند حاوی داده های کاملاً متفاوتی باشند. به عنوان مثال، یک متغیر ممکن است نام شخصی را ذخیره کند، متغیر دیگری می تواند سال تولد او را ذخیره کند، متغیر سوم می تواند قد او را ذخیره کند و غیره. چنین داده های متفاوتی توسط یک کامپیوتر به روش های مختلف نمایش داده می شود. نام یک رشته کاراکتر است، سال تولد یک عدد صحیح است، ارتفاع یک عدد واقعی است (به عنوان مثال، ارتفاع 1.72 متر است).

نحوه نمایش داده ها توسط رایانه توسط آنها تعیین می شود نوع. علاوه بر این، نوع داده تعیین می کند که چه اقداماتی مجاز است روی این داده ها انجام شود.

انواع داده های استاندارد اصلی توربو پاسکال در زیر فهرست شده اند:

  1. عدد صحیح- داده های عدد صحیح در محدوده -32768 تا 32767، دو بایت در حافظه اشغال می کنند.
  2. واقعی- اعداد واقعی در محدوده 2.9´10 -39 (2.9E-39) تا 1.7´10 38 (1.7E38)، شش بایت را اشغال می کنند.
  3. CHAR- یک کاراکتر، یک بایت؛
  4. STRING- یک رشته از کاراکترها، تعداد کاراکترهای یک رشته (طول رشته) با عدد N در پرانتز محدود می شود، N + 1 بایت را اشغال می کند (اگر عدد N مشخص نشده باشد، حداکثر طول رشته 255 است. شخصیت ها)؛
  5. بولین– نوع منطقی، دو مقدار دارد: FALSE (نادرست) و TRUE (درست)، یک بایت.

توجه داشته باشید که انواع INTEGER، CHAR و BOOLEAN به آن اشاره دارد ترتیبی انواع (انواع ترتیبی).

همانطور که احتمالاً به یاد دارید، هنگام اعلان یک متغیر، یک دونقطه بعد از نام آن قرار می گیرد و سپس نوع آن مشخص می شود. اگر چندین متغیر دارای یک نوع باشند، نام آنها را می توان با کاما از هم جدا کرد.

نمونه ای از توصیف متغیرها از انواع مختلف:

دلفی/پاسکال

var a, b, c: عدد صحیح; جمع: واقعی آلفا، بتا: char; S: رشته S_1: رشته t: بولی؛

a , b , c : عدد صحیح ;

جمع : واقعی ;

آلفا , بتا : char ;

S : رشته [ 25 ] ;

S_1: رشته

t : بولی ;

توجه داشته باشید که متغیر S_1 یک رشته کاراکتری است، اما توضیحات آن طولی را مشخص نمی کند. در این مورد، خود کامپایلر حداکثر طول ممکن را تعیین می کند - 255 کاراکتر.

انواع داده های از پیش تعریف شده دیگری برای ذخیره اعداد صحیح و اعداد واقعی وجود دارد. مشخصات آنها در جداول زیر نشان داده شده است. این انواع را با انواع INTEGER و REAL که در جداول ذکر شده است مقایسه کنید.

دامنه

اندازه بر حسب بایت

کوتاه
عدد صحیح
LONGINT

2147483648 .. 2147483647

BYTE
کلمه

انواع داده های واقعی

دامنه

تعداد ارقام قابل توجه

اندازه بر حسب بایت

واقعی

2.9´10 -39 .. 1.7´10 3 8

تنها

1.5´10 - 45 .. 3.4´10 3 8

دو برابر

5.0´10 -3 24 .. 1.7´10 3 08

تمدید شده

3.4´10 -4932 .. 1.1´10 49 32

COMP

2 63 +1 .. 2 63 -1

از چه نوع داده ای استفاده کنید

شما می گویید انواع مختلفی از آن وجود دارد و از کدام یک استفاده کنیم؟
بستگی به وظیفه ای دارد که به شما محول شده است. به عنوان مثال، شما به متغیری نیاز دارید که قد یک فرد خاص را در آن ذخیره کنید (مقدار واقعی): در این حالت، کافی است از نوع SINGLE استفاده کنید. اگر متغیری توسط شما برای شمارش تعداد اشیاء خاص استفاده می شود (یک مقدار صحیح مثبت)، سپس در نظر بگیرید که آیا این عدد می تواند بزرگتر از 255 باشد، اگر نه، از BYTE استفاده کنید، اگر می تواند، نمی توانید بدون WORD انجام دهید، و در برخی موارد LONGINT نیز ممکن است مورد نیاز باشد.

برای کسب اطلاعات بیشتر در مورد انواع مختلف، Shift+F1 را در محیط Turbo Pascal فشار دهید (یک پنجره فهرست راهنمای ظاهر می شود) و سپس شی مورد نظر خود را انتخاب کنید (به عنوان مثال، نوع "نوع" یا "واقعی" را تایپ کنید).

آژانس فدرال آموزش

چکیده

"انواع داده در پاسکال"

1. انواع داده ها

هر گونه داده، به عنوان مثال ثابت ها، متغیرها، خواص، مقادیر تابع یا عبارات با انواع آنها مشخص می شوند. یک نوع مجموعه ای از مقادیر معتبری را که یک شی می تواند داشته باشد و همچنین مجموعه ای از عملیات معتبری که می تواند روی آن اعمال شود را تعریف می کند. علاوه بر این، نوع نیز فرمت نمایش داخلی داده ها در حافظه رایانه شخصی را تعیین می کند.

به طور کلی، زبان Object Pascal با ساختار شاخه ای از انواع داده مشخص می شود (شکل 1.1). این زبان مکانیسمی را برای ایجاد انواع جدید فراهم می کند، به طوری که تعداد کل انواع مورد استفاده در برنامه می تواند به طور دلخواه زیاد باشد.

داده های پردازش شده در برنامه به متغیرها، ثابت ها و لفظ ها تقسیم می شوند:

ثابت ها داده هایی هستند که مقادیر آنها در قسمت اعلان ثابت تنظیم شده و در طول اجرای برنامه تغییر نمی کند.

متغیرها در قسمت اعلان متغیرها اعلان می شوند، اما برخلاف ثابت ها، مقادیر خود را از قبل در حین اجرای برنامه دریافت می کنند و این مقادیر قابل تغییر هستند. ثابت ها و متغیرها را می توان با نام اشاره کرد.

تحت اللفظی هیچ شناسه ای ندارد و مستقیماً با مقدار موجود در متن برنامه نشان داده می شود.

تایپ کنیدمجموعه مقادیری را که عناصر داده می توانند بگیرند و مجموعه عملیات مجاز روی آنها را تعریف می کند.

این و چهار فصل بعدی شرح مفصلی از هر نوع ارائه می دهند.

1.1 انواع ساده

انواع ساده شامل انواع ترتیبی، واقعی و تاریخ-زمان هستند.

انواع ترتیبیاین تفاوت در این است که هر یک از آنها دارای تعداد محدودی از مقادیر ممکن است. این مقادیر را می توان به روش خاصی مرتب کرد (از این رو نام انواع) و بنابراین، هر یک از آنها را می توان با یک عدد صحیح - عدد ترتیبی مقدار - مرتبط کرد.

انواع واقعیبه بیان دقیق، تعداد محدودی از مقادیر نیز دارند که با فرمت نمایش داخلی یک عدد واقعی تعیین می شود. با این حال، تعداد مقادیر ممکن انواع واقعی آنقدر زیاد است که نمی توان یک عدد صحیح (تعداد آن) را با هر یک از آنها مرتبط کرد.

نوع تاریخ و زمانطراحی شده برای ذخیره تاریخ و زمان در واقع از قالب واقعی برای این اهداف استفاده می کند.

1.1.1 انواع ترتیبی

انواع ترتیبی عبارتند از (به شکل 1.1 مراجعه کنید) عدد صحیح، بولی، کاراکتر، enum و محدوده. برای هر یک از آنها تابع Ord(x) قابل اعمال است که عدد ترتیبی مقدار عبارت X را برمی گرداند.


برنج. 1.1 - ساختار انواع داده ها

برای کلنوع، تابع ord(x) مقدار خود x را برمی گرداند، یعنی Ord(X) = x برای x متعلق به هر کلنوع اعمال دستور (x) به منطقی , نمادین و برشماری شده است type یک عدد صحیح مثبت در محدوده 0 تا 1 می دهد ( نوع بولی، از 0 تا 255 ( نمادین، از 0 تا 65535 ( قابل شمارش). محدوده نوعتمام خصوصیات نوع ترتیبی پایه را حفظ می کند، بنابراین نتیجه اعمال تابع ord(x) به آن به ویژگی های آن نوع بستگی دارد.

توابع را می توان برای انواع ترتیبی نیز اعمال کرد:

پیش بینی (x)- مقدار قبلی نوع ترتیبی را برمی گرداند (مقداری که مطابق با ord ترتیبی (x) -1 است، یعنی ord(pred(x)) = ord(x) - 1؛

succ(x)- مقدار بعدی از نوع ترتیبی را برمی‌گرداند که با ord(x) + 1 مطابقت دارد، یعنی ord(Succ(x)) = ord(x) + 1.

به عنوان مثال، اگر برنامه یک متغیر را تعریف کند

سپس تابع PRED(c) کاراکتر "4" و تابع SUCC(c) کاراکتر "6" را برمی گرداند.

اگر هر نوع ترتیبی را به عنوان مجموعه‌ای مرتب از مقادیر تصور کنیم که از چپ به راست افزایش می‌یابد و بخش خاصی را در محور عدد اشغال می‌کند، تابع pred (x) برای انتهای چپ تعریف نمی‌شود و succ (x) - برای انتهای سمت راست این بخش

انواع عدد صحیح . محدوده مقادیر ممکن برای انواع عدد صحیح به نمایش داخلی آنها بستگی دارد که می تواند یک، دو، چهار یا هشت بایت باشد. روی میز. 1.1 نام انواع اعداد صحیح، طول نمایش داخلی آنها بر حسب بایت و محدوده مقادیر ممکن را فهرست می کند.

جدول 1.1 - انواع عدد صحیح

نام طول، بایت محدوده ارزش
اصلی 4 0. .. 2 147 483 647
بایت ها 1 0...255
کوتاه 1 -128...+127
اسمالینت 2 -32 768...+32 767
کلمه 2 0...65 535
عدد صحیح 4
Longint 4 -2 147 483 648...+2 147 483 647
int64 8 -9*1018...+9*1018
کلمه طولانی 4 0. . .4 294 967 295

انواع کلمه طولانیو int64اولین بار در نسخه 4 معرفی شد و انواع اسمالینتو اصلیاز دست رفته در دلفی 1. تایپ کنید عدد صحیحبرای این نسخه، 2 بایت طول می کشد و دارای محدوده ای از مقادیر -32768 تا +32767 است، یعنی همان اسمالینت .

هنگام استفاده از رویه ها و توابع با پارامترهای عدد صحیح، باید با "تودرتو" انواع هدایت شود، به عنوان مثال. هر جا که بتوان از آن استفاده کرد کلمه، استفاده از آن مجاز است بایت ها(اما نه برعکس) Longint"وارد می شود" اسمالینت، که به نوبه خود شامل می شود کوتاه .

لیست رویه ها و توابع قابل اعمال برای انواع عدد صحیح در جدول آورده شده است. 1.2. حروف b، s، w، i، l به ترتیب بیانگر عباراتی از نوع هستند بایت ها , Shortint، Word، Integer و Longint ,

x بیانی از هر یک از این انواع است. حروف vb، vs، vw، vi، vl، vx متغیرهایی از انواع مربوطه را نشان می دهند. یک پارامتر اختیاری در پرانتز نشان داده شده است.

جدول 1.2 - رویه ها و توابع استاندارد قابل اعمال برای انواع عدد صحیح

درخواست نوع نتیجه عمل
شکم (x) ایکس ماژول x را برمی گرداند
chr(b) Char یک کاراکتر را با کد آن برمی گرداند
dec(vx[, i]) - مقدار vx را با i و در صورت عدم وجود i - 1 کاهش می دهد
inc(vx[,i]) - مقدار vx را i و در غیاب i - 1 افزایش می دهد
سلام بایت ها بالاترین کمان استدلال را برمی‌گرداند
سلام (من) یکسان بایت سوم را برمی گرداند
Lo(i) بایت کم آرگومان را برمی گرداند
کم) یکسان
فرد (ل) بولی اگر آرگومان یک عدد فرد باشد، True را برمی‌گرداند
تصادفی (w) به عنوان پارامتر یک عدد شبه تصادفی را برمی‌گرداند که به طور مساوی در محدوده 0...(w-l) توزیع شده است.
sqr(x) ایکس مربع استدلال را برمی گرداند
مبادله (I) عدد صحیح بایت ها را در یک کلمه عوض کنید
مبادله (w) کلمه هم

هنگام کار بر روی اعداد صحیح، نوع نتیجه با نوع عملوندها مطابقت دارد، و اگر عملوندها از انواع مختلف اعداد صحیح هستند، با یک نوع مشترک که شامل هر دو عملوند است، مطابقت دارد. به عنوان مثال، هنگام بازیگری با کوتاهو کلمهرایج نوع خواهد بود عدد صحیح. به طور پیش‌فرض، کامپایلر دلفی کدی را تولید نمی‌کند که کنترل کند آیا یک مقدار خارج از محدوده است یا خیر، که می‌تواند منجر به سردرگمی شود.

انواع بولی . انواع بولی هستند Boolean، ByteBool، Bool، wordBoolو لانگبول. در پاسکال استاندارد فقط نوع تعریف می شود بولی، انواع Boolean دیگر در Object Pascal برای سازگاری با ویندوز معرفی شده اند: انواع بولیو ByteBoolهر بایت را اشغال کنید، بولو wordbool- 2 بایت، لانگبول- 4 بایت مقادیر بولی می تواند یکی از ثابت های از پیش اعلام شده False (false) یا True (true) باشد.

از آنجایی که نوع بولی یک نوع ترتیبی است، می توان از آن در یک دستور حلقه نوع شمارش استفاده کرد. در دلفی 32 برای بولیمعنی

ترتیب (درست) = 1+، در حالی که برای انواع دیگر ( بول، وردبولو غیره.)

Ord (True) = -1، بنابراین این نوع عملگرها باید با احتیاط استفاده شوند! به عنوان مثال، برای نسخه دلفی 6، دستور اجرایی showMessage (" ---") در حلقه زیر برایهرگز اجرا نخواهد شد:

برای L: = False to True انجام دهید

ShowMessage("--);

اگر پارامتر حلقه نوع L در مثال قبل را با بولی، حلقه اجرا می شود و پیام دو بار روی صفحه ظاهر می شود. [برای نسخه 1 و 2 دلفی ord (درست) =+1 برای هر نوع بولی.]

نوع کاراکتر . مقادیر نوع کاراکتر مجموعه تمام کاراکترهای PK هستند. به هر کاراکتر یک عدد صحیح در محدوده 0...255 اختصاص داده شده است. این عدد به عنوان کد نمایش داخلی کاراکتر عمل می کند و توسط تابع ord برگردانده می شود.

رمزگذاری ویندوز از کد ANSI استفاده می کند (به نام مؤسسه استاندارد ملی آمریکا، مؤسسه استانداردهای آمریکایی که این کد را پیشنهاد کرده است). نیمه اول کاراکترهای PC با کدهای 0...127 مطابق با جدول 1.3 است. نیمه دوم کاراکترها با کدهای 128...255 برای فونت های مختلف تغییر می کند. فونت های استاندارد ویندوز Arial Cyr، Courier New Cyr و Times New Roman برای نمایش نویسه های سیریلیک (بدون حروف "ё" و "Ё") از 64 کد آخر (از 192 تا 256): "А"... "Я" استفاده می کنند. مقادیر کدگذاری شده 192..223، "a"... "i" - 224...255 هستند. کاراکترهای "Ё" و "ё" به ترتیب دارای کدهای 168 و 184 هستند.

جدول 1.3 - رمزگذاری کاراکتر بر اساس استاندارد ANSI

کد نماد کد. نماد کد. نماد کد نماد
0 NUL 32 BL 64 @ 96 "
1 ZON 33 ! 65 ولی 97 آ
2 STX 34 66 AT 98 ب
3 ETX 35 # 67 با 99 با
4 EOT 36 $ 68 دی 100 د
5 ENQ 37 % 69 E 101 ه
6 ACK 38 & 70 اف 102 f
7 BEL 39 " 71 جی 103 د
8" لیسانس 40 ( 72 اچ 104 ساعت
9 HT 41 ) 73 من 105 من
10 LF 42 * 74 جی 106 j
11 VT 43 + 75 به 107 ک
12 FF 44 اف 76 L 108 1
13 CR 45 - 77 م 109 متر
14 بنابراین 46 78 ن 110 n
15 SI 47 / 79 0 111 در باره
16 DEL 48 0 80 آر 112 پ
17 DC1 49 1 81 س 113 q
18 DC2 50 2 82 آر 114 r
19 DC3 51 3 83 اس 115 س
20 DC 4 52 4 84 تی 116 تی
21 NAK 53 5 85 U 117 تو
22 SYN 54 6 86 V 118 v
23 ETB 55 7 87 دبلیو 119 دبلیو
24 می توان 56 8 88 ایکس 120 ایکس
25 EM 57 9 89 Y 121 در
26 زیر 58 : 90 ز .122 z
27 خروج 59 ; 91 تی 123 {
28 FS 60 < 92 \ 124 1
29 جی اس 61 = 93 ] 125 }
30 RS 62 > 94 L 126 ~
31 ایالات متحده 63 اف 95 127 r

نمادهای با کدهای 0...31 به کدهای سرویس مراجعه می کنند. اگر این کدها در متن نمادین یک برنامه استفاده شوند، فضا محسوب می شوند.

برای تایپ کردن کاراکترعملیات رابطه ای و همچنین توابع داخلی قابل اجرا هستند:

کاراکتر (در)- تابع نوع کاراکتر; عبارت را به نوع تبدیل می کند بایت هابه یک نماد تبدیل می شود و آن را با مقدار آن برمی گرداند.

UpCase (CH)- تابع نوع کاراکتر; اگر сн یک حرف لاتین کوچک باشد، یک حرف بزرگ را برمی‌گرداند، در غیر این صورت، خود کاراکتر сн را برمی‌گرداند (برای سیریلیک، نماد اصلی را برمی‌گرداند).

نوع برشماری شده . یک نوع شمارش شده با برشمردن مقادیری که می تواند دریافت کند، تعریف می شود. هر مقدار توسط یک شناسه نامگذاری می شود و در لیستی قرار دارد که در داخل پرانتز قرار دارد، به عنوان مثال:

رنگ ها = (قرمز، سفید، آبی)؛

استفاده از انواع برشمرده شده باعث خوانایی بیشتر برنامه ها می شود.

مطابقت بین مقادیر یک نوع شمارش شده و اعداد ترتیبی این مقادیر با ترتیب شمارش ایجاد می شود: مقدار اول در لیست شماره ترتیبی 0، دوم - 1 و غیره را دریافت می کند. کلمهو می توان آن را به عنوان یک اعلان فشرده از یک گروه از ثابت های صحیح با مقادیر 0، 1 و غیره به طور همزمان مشاهده کرد.

استفاده از انواع برشمرده شده با کنترل مقادیری که متغیرهای مربوطه دریافت می کنند، قابلیت اطمینان برنامه ها را افزایش می دهد. در Object Pascal، تبدیل معکوس مجاز است: هر نوع عبارتی کلمهرا می توان به مقداری از نوع شمارش شده تبدیل کرد، تا زمانی که مقدار عبارت عدد صحیح از کاردینالیته آن نوع تجاوز نکند. این تبدیل با استفاده از یک تابع اعلام شده خودکار با نام نوع شمارش شده به دست می آید.

محدوده نوع . نوع محدوده زیرمجموعه ای از نوع پایه آن است که می تواند هر نوع ترتیبی به جز نوع محدوده باشد.

یک نوع محدوده با مرزهای مقادیر آن در نوع پایه تعریف می شود:

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

اینجا<мин. знач. >- حداقل مقدار محدوده-نوع.<макс. знач. >- حداکثر مقدار آن

نیازی نیست که نوع محدوده در بخش type توضیح داده شود، اما می توان آن را مستقیماً هنگام اعلام یک متغیر مشخص کرد.

هنگام تعریف یک نوع محدوده، قوانین زیر باید رعایت شود:

دو کاراکتر ".." به عنوان یک کاراکتر در نظر گرفته می شوند، بنابراین هیچ فاصله ای بین آنها مجاز نیست. انتهای سمت چپ محدوده نباید از انتهای سمت راست آن تجاوز کند.

یک نوع محدوده تمام خصوصیات نوع پایه خود را به ارث می برد، اما با محدودیت هایی به دلیل کاردینالیته پایین تر. به ویژه، اگر متغیری تعریف شده باشد.

کتابخانه استاندارد Object Pascal شامل دو تابع است که از کار با انواع محدوده پشتیبانی می کند:

بالا (x)- حداکثر مقدار محدوده نوع که متغیر x به آن تعلق دارد را برمی گرداند.

کم (x)- حداقل مقدار محدوده-نوع را برمی گرداند.

1.1.2 انواع واقعی

بر خلاف انواع ترتیبی که مقادیر آنها همیشه با یک سری اعداد صحیح مقایسه می شود و بنابراین در رایانه شخصی کاملاً دقیقاً نشان داده می شود ، مقادیر انواع واقعی بسته به قالب داخلی فقط با دقت محدودی یک عدد دلخواه را تعریف می کنند. از عدد واقعی

جدول 1.4 - انواع واقعی

در نسخه های قبلی دلفی 1...3 نوع واقعی 6 بایت را اشغال کرده و دارای محدوده ای از 2.9*10-39 تا 1.7*1038 بود. در نسخه های 4 و 5 این نوع معادل تیپ می باشد دو برابر. در صورت نیاز (به دلایل سازگاری) از 6 بایت استفاده کنید واقعی، باید یک دستورالعمل کامپایلر (SREALCOMPATIBILITY ON) را مشخص کنید.

همانطور که از جدول مشخص است. 1.4، یک عدد واقعی در Object Pascal از 4 تا 10 بایت به هم پیوسته می گیرد و ساختار زیر را در حافظه PC دارد.

در اینجا s بیت علامت عدد است. e بخش نمایی است. شامل نظم باینری است. m مانتیس عدد است.

مانتیسامتر دارای طول از 23 (برای تنها) تا 63 (برای تمدید شده) ارقام باینری، که دقت 7...8 را برای تنهاو 19...20 برای تمدید شدهارقام اعشاری نقطه اعشار (کاما) قبل از رقم چپ (مهمترین) آخوندک نشان داده می شود، اما هنگام کار با یک عدد، موقعیت آن مطابق با ترتیب باینری عدد ذخیره شده در قسمت نمایی به چپ یا راست منتقل می شود. بنابراین عملیات روی اعداد حقیقی را محاسبات ممیز شناور (کاما) می نامند.

توجه داشته باشید که پردازشگر محاسباتی همیشه اعداد را در قالب پردازش می کند تمدید شدهو سه نوع واقعی دیگر در این مورد با کوتاه کردن نتایج به اندازه دلخواه به دست می آیند و عمدتاً برای ذخیره حافظه استفاده می شوند.

انواع در Object Pascal جایگاه ویژه ای را اشغال می کنند مقایسهو واحد پول، که به عنوان اعداد واقعی با قطعات کسری با طول ثابت در نظر گرفته می شوند: in مقایسهطول قسمت کسری 0 رقم است، یعنی به سادگی وجود ندارد، در واحد پولطول کسری -4 رقم اعشار. در واقع، هر دو نوع یک عدد صحیح بزرگ امضا شده را تعریف می کنند که 19...20 رقم اعشاری قابل توجه را ذخیره می کند (آنها 8 بایت پیوسته را در داخل اشغال می کنند). در عین حال در عبارات مقایسهو واحد پولکاملاً با هر نوع واقعی دیگر سازگار هستند: تمام عملیات واقعی بر روی آنها تعریف شده است، می توان از آنها به عنوان آرگومان های توابع ریاضی و غیره استفاده کرد. مناسب ترین حوزه این نوع محاسبات حسابداری است.

1.1.3 نوع تاریخ

نوع تاریخ و زمان توسط یک شناسه استاندارد تعریف می شود TDateTimeو برای ذخیره تاریخ و زمان به طور همزمان طراحی شده است. در نمایش داخلی 8 بایت و مانند آن را اشغال می کند واحد پولیک عدد واقعی با یک قسمت کسری ثابت است: قسمت صحیح عدد تاریخ را ذخیره می کند، قسمت کسری زمان را ذخیره می کند. تاریخ به عنوان تعداد روزهای از 30 دسامبر 1899 و زمان به عنوان کسری از روز از ساعت 00:00 تعریف می شود، بنابراین مقدار 36444.837 مطابق با تاریخ 10/11/1999 و زمان 20:05 است. . تعداد روزها نیز می تواند منفی باشد، اما مقادیر کمتر از -693594 (مرتبط با تاریخ 00.00.0000 پس از میلاد) توسط توابع تبدیل تاریخ به رشته نادیده گرفته می شود.

داده های تایپ بیش از حد TDateTimeهمان عملیاتی که روی اعداد واقعی تعریف می‌شود، و عباراتی از این نوع می‌توانند شامل ثابت‌ها و متغیرهایی از انواع صحیح و واقعی باشند.

از آنجایی که نوع TDateTimeسازگار با فرمت اعداد واقعی، می توانید به راحتی تاریخی را تعیین کنید که چند روز جلوتر یا عقب تر از تاریخ داده شده است: برای انجام این کار، کافی است به ترتیب عدد صحیح مورد نظر را از تاریخ داده شده اضافه یا کم کنید.

1.2 انواع ساختار یافته

هر یک از انواع ساختار یافته (و چهار مورد از آنها در Object Pascal وجود دارد: آرایه ها، رکوردها، مجموعه ها و فایل ها) با تعدد عناصر تشکیل دهنده این نوع مشخص می شود. هر عنصر به نوبه خود می تواند به یک نوع ساختاریافته تعلق داشته باشد که به ما امکان می دهد در مورد تودرتوی احتمالی انواع صحبت کنیم. Object Pascal اجازه می دهد تا عمق دلخواه تودرتو انواع را داشته باشد، با این حال، طول کل هر یک از آنها در نمایش داخلی نباید از 2 گیگابایت تجاوز کند.

برای سازگاری با پاسکال استاندارد، Object Pascal به یک کلمه رزرو شده اجازه می دهد قبل از یک اعلان نوع ساختاریافته قرار گیرد. بسته بندی شده، به کامپایلر دستور می دهد، در صورت امکان، حافظه اختصاص داده شده برای اشیاء از نوع ساختار یافته را ذخیره کند. اما کامپایلر در واقع این نشانه را نادیده می گیرد: "بسته بندی" داده ها در Object Pascal تا جایی که امکان دارد به طور خودکار انجام می شود.

1.2.1 آرایه ها

آرایه ها در Object Pascal از بسیاری جهات شبیه به انواع داده های مشابه در سایر زبان های برنامه نویسی هستند. ویژگی متمایز آرایه ها این است که تمام اجزای آنها داده هایی از یک نوع (احتمالاً ساختاریافته) هستند. این قطعات را می توان به راحتی سفارش داد و به سادگی با تعیین شماره ترتیبی به هر یک از آنها دسترسی داشت.

شرح نوع آرایه به شرح زیر است:

<имя типа>= آرایه[<сп.инд.типов>] از<тип>;

اینجا<имя типа>- شناسه صحیح؛ آرایه ای از- کلمات رزرو شده (آرایه، از)؛<сп.инд.типов>- فهرستی از یک یا چند نوع شاخص که با کاما از هم جدا شده اند. پرانتزهای مربع اطراف لیست یک الزام دستوری هستند.<тип>- هر نوع Object Pascal.

به عنوان انواع شاخص در Object Pascal، می توانید از هر نوع ترتیبی استفاده کنید که ظرفیت آن بیش از 2 گیگابایت نباشد (یعنی به جز کلمه طولانیو int64)

عمق تودرتوی انواع ساختار یافته به طور کلی و در نتیجه آرایه ها دلخواه است، بنابراین تعداد عناصر موجود در لیست انواع شاخص (بعد آرایه) محدود نیست، با این حال، طول کل نمایش داخلی هر یک آرایه نمی تواند بیش از 2 گیگابایت باشد. در حافظه رایانه شخصی، عناصر یک آرایه به دنبال یکدیگر می آیند، به طوری که هنگام انتقال از آدرس های پایین تر به آدرس های بالاتر، سمت راست ترین شاخص آرایه سریعتر تغییر می کند.

در Object Pascal می توانید تمام عناصر یک آرایه را با یک عملگر انتساب به آرایه دیگری از همان نوع منتقل کنید.

1.2.2 ورودی ها

در حال ضبط یک ساختار داده متشکل از تعداد ثابتی از اجزا به نام فیلدهای رکورد است. برخلاف آرایه، اجزا (فیلدها) یک رکورد می توانند انواع مختلفی داشته باشند. برای اینکه بتوان به یکی از اجزای رکورد اشاره کرد، فیلدها نامگذاری می شوند.

ساختار یک اعلان نوع رکورد به شرح زیر است:

<имятипа>= رکورد<сп.полей>پایان؛

اینجا<имя типа>- شناسه صحیح؛ ثبت / پایان- کلمات رزرو شده (رکورد، پایان)؛<сп.полей>- لیست فیلدها؛ دنباله ای از بخش های یک رکورد است که با نقطه ویرگول از هم جدا شده اند.

هر بخش از یک رکورد شامل یک یا چند شناسه فیلد است که با کاما از هم جدا شده اند.

پیشنهاد مورد ... از، که قسمت variant را باز می کند، از نظر ظاهری شبیه عملگر انتخاب مربوطه به نظر می رسد، اما در واقع فقط نقش نوعی کلمه کمکی را بازی می کند که ابتدای قسمت متغیر را نشان می دهد. به همین دلیل است که در انتهای قسمت متغیر نباید قرار داد پایانبه عنوان یک زوج به مورد ... از. (از آنجایی که بخش متغیر همیشه آخرین قسمت در رکورد است، پس از آن هنوز یک پایان دارد، اما فقط به عنوان یک جفت برای ضبط). کلید انتخاب در یک جمله مورد… ازبه طور موثر توسط کامپایلر نادیده گرفته می شود: تنها شرط لازم برای آن در Object Pascal این است که کلید نوعی استاندارد یا نوع ترتیبی از پیش اعلام شده را تعریف کند.

نام فیلدها باید در رکوردی که در آن اعلان می شوند منحصر به فرد باشند، با این حال، اگر رکوردها حاوی فیلدهای رکوردی باشند، به عنوان مثال در داخل یکدیگر تودرتو باشند، نام ها می توانند در سطوح مختلف تودرتو تکرار شوند.

1.2.3 مجموعه ها

مجموعه ها - اینها مجموعه ای از اشیاء از یک نوع هستند که از نظر منطقی با یکدیگر مرتبط هستند. ماهیت روابط بین اشیا فقط توسط برنامه نویس ذکر شده است و به هیچ وجه توسط Object Pascal کنترل نمی شود. تعداد عناصر موجود در مجموعه می تواند از 0 تا 256 متغیر باشد (مجموعه ای که حاوی عناصر نباشد خالی نامیده می شود). این تنوع در تعداد عناصر آنهاست که مجموعه ها را از آرایه ها و رکوردها جدا می کند.

دو مجموعه اگر و تنها در صورتی معادل در نظر گرفته می شوند که همه عناصر آنها یکسان باشند و ترتیب عناصر در مجموعه بی تفاوت باشد. اگر تمام عناصر یک مجموعه در مجموعه دیگری نیز گنجانده شود، می گوییم که مجموعه اول در مجموعه دوم گنجانده شده است. مجموعه خالی در هر مجموعه دیگری گنجانده شده است.

شرح یک نوع مجموعه عبارت است از:

<имя типа>= مجموعه ای از<базовый тип>;

اینجا<имя типа>- شناسه صحیح؛ مجموعه ای از- کلمات رزرو شده (مجموعه، از)؛<базовый тип>- نوع پایه عناصر مجموعه که می تواند هر نوع ترتیبی باشد به جز Word، Integer، Longint، Int64 .

برای تعیین یک مجموعه، به اصطلاح سازنده مجموعه استفاده می شود: لیستی از مشخصات عناصر مجموعه، که با کاما از یکدیگر جدا شده اند. لیست در داخل پرانتز قرار داده شده است. مشخصات عنصر می تواند ثابت یا عبارتی از یک نوع پایه یا یک نوع محدوده از همان نوع پایه باشد.

ساختار داخلی مجموعه به گونه ای است که به هر یک از عناصر آن یک رقم باینری (یک بیت) اختصاص داده می شود. اگر عنصر در مجموعه گنجانده شود، بیت مربوطه 1 و در غیر این صورت 0 است. در عین حال، حداقل واحد حافظه یک بایت است که شامل 8 بیت است، بنابراین کامپایلر یک بایت را به مجموعه ها اختصاص می دهد و به عنوان یک در نتیجه توان هر یک از آنها برابر با 8 عنصر شد. حداکثر کاردینالیتی مجموعه 256 عنصر است. برای چنین مجموعه هایی، کامپایلر 16 بایت به هم پیوسته را اختصاص می دهد.

و یک آزمایش دیگر: محدوده نوع پایه را به 1..256 تغییر دهید. اگرچه کاردینالیته این نوع 256 عنصر است، اما وقتی می خواهید برنامه را کامپایل کنید، کامپایلر یک خطا گزارش می دهد: مجموعه ها ممکن است حداکثر 256 عنصر داشته باشند (مجموعه ها حداکثر ممکن است 256 عنصر داشته باشند) زیرا شماره گذاری عناصر مجموعه از صفر شروع می شود. بدون توجه به کران پایینی که در برنامه اعلام شده است. کامپایلر به نوع پایه اجازه می دهد تا یک نوع محدوده عدد صحیح با حداقل کران 0 و حداکثر 255 یا هر نوع شمارش شده با حداکثر 256 عنصر باشد (حداکثر کاردینالیتی یک نوع شمارش شده 65536 عنصر است).

1.3 خطوط

انواع زیر برای پردازش متن در Object Pascal استفاده می شود:

رشته کوتاه shortstringیا رشته[n]، جایی که n<= 255;

رشته بلند رشته ;

رشته پهن WideString ;

رشته تهی ترمینال pchar .

وجه مشترک این انواع این است که هر رشته به عنوان یک آرایه یک بعدی از کاراکترها در نظر گرفته می شود، تعداد کاراکترهایی که در آن می تواند در برنامه در حال اجرا تغییر کند: برای رشته [n]، طول رشته از 0 تا n متغیر است. ، برای رشتهو pchar- از 0 تا 2 گیگابایت

پاسکال استاندارد فقط از رشته های کوتاه استفاده می کند رشته[n]. در حافظه، به چنین رشته ای n + i بایت اختصاص داده می شود، بایت اول شامل طول فعلی رشته است و خود کاراکترها از بایت 2 شروع می شوند. از آنجایی که طول رشته در این مورد یک بایت است، حداکثر طول یک رشته کوتاه نمی تواند از 255 کاراکتر تجاوز کند. نوع استاندارد برای اعلام یک رشته کوتاه با حداکثر طول استفاده می شود. ShortString(معادل رشته).

ویندوز به طور گسترده از رشته های تهی پایانه استفاده می کند، که رشته هایی از کاراکترهایی هستند که با #o محدود شده اند. حداکثر طول چنین رشته ای فقط با حافظه موجود محدود می شود و می تواند بسیار بزرگ باشد.

نوع جدیدی که در نسخه های 32 بیتی دلفی معرفی شده است رشته، ترکیبی از راحتی هر دو نوع. هنگام کار با این نوع، حافظه در صورت نیاز (به صورت پویا) تخصیص می یابد و با حافظه موجود در دسترس برنامه محدود می شود.

1.4 اشاره گرها و حافظه پویا

1.4.1 حافظه پویا

حافظه پویا- این همان رم رایانه شخصی است که در حین کار به برنامه ارائه می شود. تخصیص دینامیک داده به معنای استفاده مستقیم از حافظه پویا هنگام اجرای برنامه است. در مقابل، تخصیص استاتیک توسط کامپایلر Object Pascal در طول کامپایل برنامه انجام می شود. با تخصیص پویا، نه نوع و نه مقدار داده ای که باید تخصیص داده شود از قبل مشخص نیست.

1.4.2 اشاره گر

رم رایانه شخصی مجموعه ای از سلول ها برای ذخیره اطلاعات - بایت ها است که هر کدام از آنها شماره خاص خود را دارند. این اعداد آدرس نامیده می شوند، آنها به شما امکان دسترسی به هر بایت حافظه را می دهند. Object Pascal ابزاری انعطاف پذیر برای مدیریت حافظه پویا در اختیار برنامه نویس قرار می دهد - به اصطلاح اشاره گرها. اشاره گر متغیری است که به عنوان مقدار خود آدرس یک بایت حافظه را دارد. با استفاده از نشانگرها، می توانید هر یک از انواع داده های شناخته شده در Object Pascal را در حافظه پویا اختصاص دهید. فقط برخی از آنها ( Byte، Char، ShortInt، Boolean) یک بایت را در نمایش داخلی اشغال کنید، بقیه - چندین بایت مجاور. بنابراین اشاره گر در واقع فقط اولین بایت داده را نشان می دهد.

به طور معمول، یک اشاره گر با برخی از انواع داده ها مرتبط است. چنین اشاره گرهایی تایپ شده نامیده می شوند. برای اعلام یک اشاره گر تایپ شده، از علامت ^ استفاده کنید که قبل از نوع مربوطه قرار می گیرد.

در Object Pascal، می‌توانید یک اشاره‌گر را بدون مرتبط کردن آن با هیچ نوع داده خاصی اعلام کنید. این نوع استاندارد است اشاره گر، مثلا:

اشاره گر از این نوع نامشخص خواهد بود. از آنجایی که اشاره گرهای تایپ نشده با نوع خاصی مرتبط نیستند، برای تخصیص پویا داده هایی که ساختار و نوع آنها با اجرای برنامه تغییر می کند مفید هستند.

همانطور که قبلا ذکر شد، مقادیر اشاره گرها آدرس متغیرهای حافظه هستند، بنابراین شما انتظار دارید که مقدار یک اشاره گر به دیگری منتقل شود. در واقع، این صحیح نیست. در Object Pascal، شما فقط می توانید مقادیر را بین نشانگرهای مرتبط با همان نوع داده ارسال کنید.

1.4.3 تخصیص و توزیع حافظه پویا

تمام حافظه پویا در Object Pascal به عنوان یک آرایه پیوسته از بایت ها در نظر گرفته می شود که به آن heap می گویند.

حافظه برای هر متغیری که به صورت پویا تخصیص داده شده است توسط رویه New تخصیص داده می شود. پارامتر فراخوانی این رویه یک اشاره گر تایپ شده است. در نتیجه دسترسی، نشانگر مقداری مطابق با آدرسی که داده ها را می توان از آن قرار داد به دست می آورد. مقداری که توسط اشاره گر به آن اشاره می شود، یعنی داده های واقعی تخصیص داده شده روی پشته، با علامت ^ نشان داده می شود که بلافاصله بعد از نشانگر قرار می گیرد. اگر هیچ علامت ^ در پشت نشانگر وجود نداشته باشد، آدرسی که داده ها در آن قرار دارند منظور می شود. منطقی است که دوباره در مورد آنچه گفته شد فکر کنیم: مقدار هر اشاره گر یک آدرس است و برای نشان دادن اینکه ما در مورد یک آدرس صحبت نمی کنیم، بلکه در مورد داده هایی که در این آدرس قرار دارد، یک ^ بعد از آن قرار می گیرد. اشاره گر (گاهی اوقات این را به عنوان نشانگر عدم ارجاع می گویند).

داده‌های تخصیص‌یافته پویا را می‌توان در هر نقطه از برنامه، جایی که برای ثابت‌ها و متغیرهای نوع مربوطه مجاز است، استفاده کرد.

حافظه پویا را نه تنها می توان از پشته برداشت، بلکه به عقب برگرداند. این کار با استفاده از روش Dipose انجام می شود. به عنوان مثال، اپراتورها

Dispose(pJ);

Dispose(pR);

حافظه ای که قبلاً به نشانگرهای pJ و pR اختصاص داده شده بود را به پشته برمی گرداند (به بالا مراجعه کنید).

توجه داشته باشید که رویه Dispose (pPtr) مقدار نشانگر pPtr را تغییر نمی‌دهد، بلکه فقط حافظه‌ای را که قبلاً با این اشاره‌گر مرتبط شده بود به پشته برمی‌گرداند. با این حال، اعمال مجدد رویه روی یک اشاره گر آزاد منجر به خطای زمان اجرا می شود. برنامه نویس می تواند نشانگر آزاد شده را با کلمه رزرو شده صفر علامت گذاری کند.

1.5 نوع نام مستعار

شما می توانید به تعداد دلخواه برای هر نوع نام مستعار اعلام کنید. مثلا:

TMyInteger = عدد صحیح;

سپس نام مستعار را می توان به همان روشی که نوع پایه استفاده کرد:

Mylnt: TMyInteger;

MyInt:= 2*Round(pi);

این نوع نام مستعار معمولا برای افزایش دید کد برنامه استفاده می شود. با این حال، در Object Pascal، می توانید نام مستعار قوی تایپ شده را با اضافه کردن نوع کلمه رزرو شده در مقابل نام نوع پایه اعلام کنید:

TMyIntegerType = نوع Integer;

MylntVar: TMyIntegerType؛

از دیدگاه کامپایلر، نام مستعار تایپ شده در انواع مختلف عبارات با نوع پایه سازگار هستند، اما در واقع یک نوع داده جدید را اعلام می کنند، بنابراین نمی توان از آنها به عنوان پارامترهای رسمی برای فراخوانی زیربرنامه ها به جای نوع پایه استفاده کرد. اگر مثلاً رویه اعلام شود

تابع MyIntFunc(APar: integer): Integer;

سپس چنین درخواستی برای او

MylntFunc (MylntVar)

توسط کامپایلر به عنوان یک خطا در نظر گرفته خواهد شد.

نام مستعار با تایپ قوی باعث می شود کامپایلر اطلاعات نوع زمان اجرا (RTTI) را تولید کند. این اطلاعات معمولاً توسط محیط دلفی برای ارائه انواع ویرایشگرها استفاده می شود.

وقتی متغیری را تعریف می کنید، باید نوع آن را مشخص کنید. نوع متغیر مجموعه مقادیری را که می تواند انجام دهد و اقداماتی را که می توان روی آن انجام داد را توصیف می کند. اعلان نوع یک شناسه را تعریف می کند که نوع را نشان می دهد.

انواع ساده به استاندارد (ترتیبی) و شمارشی (محدود) تقسیم می شوند.

انواع استاندارد

توربو پاسکال دارای چهار نوع استاندارد داخلی است: عدد صحیح (عدد صحیح)، واقعی (واقعی)، بولی (بولی)، و کاراکتر (کاراکتر).

نوع عدد صحیح (عدد صحیح)

توربو پاسکال دارای پنج نوع عدد صحیح داخلی است: shortint (عدد صحیح کوتاه)، عدد صحیح (عدد صحیح)، longint (عدد صحیح طولانی)، بایت (بایت طولانی) و کلمه (طول کلمه). همانطور که در جدول زیر نشان داده شده است، هر نوع نشانگر زیرمجموعه خاصی از اعداد صحیح است.

انواع عدد صحیح داخلی

دامنه

فرمت

8 بیت امضا شده

16 بیت امضا شده

2147483648 +2147483647

32 بیت امضا شده است

8 بیت بدون علامت

16 بیت بدون علامت

عملیات محاسباتی بر روی عملوندهای نوع صحیح طبق قوانین زیر انجام می شود:

  1. نوع ثابت عدد صحیح، نوع عدد صحیح داخلی با کوچکترین محدوده است که مقدار آن ثابت عدد صحیح را شامل می شود.
  2. در مورد یک عملیات باینری (عملیاتی که از دو عملوند استفاده می کند)، هر دو عملوند قبل از انجام عملیات بر روی آنها به نوع مشترک خود تبدیل می شوند. نوع عمومی، نوع انتگرال داخلی با کمترین محدوده است که شامل تمام مقادیر ممکن هر دو نوع است. به عنوان مثال، نوع رایج برای عدد صحیح و عدد صحیح با طول عدد صحیح و نوع رایج برای عدد صحیح و عدد صحیح طول کلمه عدد صحیح طولانی است. عمل با توجه به دقت نوع عمومی انجام می شود و نوع نتیجه آن نوع عمومی است.
  3. عبارت سمت راست در یک دستور انتساب بدون توجه به اندازه متغیر سمت چپ ارزیابی می شود.

عملیات انجام شده روی اعداد صحیح:

"+" - اضافه کردن

"-" - منها کردن

"*" - ضرب

SQR - مربع کردن

DIV - بخش کسری را پس از تقسیم دور می اندازد

MOD - باقیمانده اعداد صحیح را پس از تقسیم بدست آورید

ABS - مدول عدد

تصادفی (X) - گرفتن یک عدد تصادفی از 0 تا X

A: = 100 ; b:=60 ; نتیجه DIV b 1 و نتیجه MOD b 40 است

متغیرهای عدد صحیح به صورت زیر اعلام می شوند:

var لیست متغیرها: type;

به عنوان مثال: var a,p,n:integer;

نوع واقعی (واقعی)

نوع واقعی به زیرمجموعه ای از اعداد واقعی اشاره دارد که می توان آنها را در قالب ممیز شناور با تعداد ثابتی از ارقام نشان داد. یک مقدار ممیز شناور معمولاً شامل سه مقدار m، b و e است - به طوری که m*b e که b همیشه 10 است و m و e مقادیر صحیح در محدوده واقعی هستند. این مقادیر m و e بیشتر محدوده و دقت نوع واقعی را مشخص می کند.

پنج نوع واقعی وجود دارد: واقعی، مجرد، دوگانه، exnende، comp. انواع واقعی در محدوده و دقت مقادیر مرتبط با آنها متفاوت است

محدوده و ارقام اعشاری برای انواع واقعی

دامنه

شماره

2.9x10E-39 تا 1.7x10E 38

1.5x10E-45 تا 3.4x10E 38

5.0x10E-324 تا 1.7x10E 308

3.4x10E-493 تا 1.1x10E 403

2E 63 تا 2E 63

عملیات انجام شده بر روی اعداد واقعی:

  • تمام عملیات برای اعداد صحیح معتبر است.
  • SQRT(x) جذر x است.
  • SIN(X)، COS(X)، ARCTAN(X).
  • LN(X) -لگاریتم طبیعی.
  • EXP(X) -شار X (e x).
  • EXP (X * LN (A)) - توان (A x).
  • نوع توابع تبدیل:
    • TRUNC(X) - بخش کسری را دور می زند.
    • ROUND (X) - گرد کردن.
  • برخی از قوانین برای عملیات حسابی:
    • اگر در یک عملیات حسابی اعدادی از نوع واقعی و صحیح وجود داشته باشد، نتیجه از نوع واقعی خواهد بود.
    • تمام اجزای عبارت در یک خط نوشته می شود.
    • فقط از پرانتز استفاده می شود.
    • شما نمی توانید دو علامت حسابی را پشت سر هم قرار دهید.

متغیرهای واقعی به شرح زیر توصیف می شوند:

var لیست متغیرها: type;

مثلا:

var d,g,k:real ;

نوع کاراکتر (کاراکتر)

نوع کاراکتر هر کاراکتری است که در آپاستروف محصور شده باشد. برای نشان دادن آپوستروف به عنوان یک متغیر کاراکتری، آن را در یک آپاستروف قرار دهید: ''''.

هر کاراکتر کد و شماره مخصوص به خود را دارد. اعداد ترتیبی ارقام 0،1..9 به ترتیب صعودی مرتب شده اند. اعداد ترتیبی حروف نیز به ترتیب صعودی هستند، اما لزوماً به دنبال یکدیگر نیستند.

علائم مقایسه برای داده های کاراکتر اعمال می شود:

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

به عنوان مثال: "A"< ‘W’

توابعی که برای متغیرهای کاراکتری اعمال می شوند:

  1. ORD(X) - عدد ترتیبی کاراکتر X را تعیین می کند. ord ('a') =97 ;
  2. CHR(X) - کاراکتر را با عدد تعیین می کند. chr (97 ) ='a';
  3. PRED(X) - کاراکتری را که قبل از کاراکتر X می آید چاپ می کند. pred('B') ='A';
  4. SUCC(X) - خروجی کاراکتر زیر کاراکتر X. succ('A') ='B';

نوع برشماری شده

یک نوع داده شمارش شده به این دلیل نامیده می شود که به عنوان شمارشی از ثابت ها در یک ترتیب کاملاً تعریف شده و در یک عدد کاملاً تعریف شده مشخص می شود. یک نوع شمارش شده از لیستی از ثابت ها تشکیل شده است. متغیرهایی از این نوع می توانند مقدار هر یک از این ثابت ها را بگیرند. اعلان نوع شمارش شده به صورت زیر است:

نوع<имя типа>=(لیست ثابت ها) ; Var<имя переменной>:<имя типа>;

جایی که<список констант>- این یک نوع خاص از ثابت ها است که با کاما از هم جدا می شوند و شماره سریال خود را دارند که از 0 شروع می شود.

مثلا:

نوع جهت=(شمال، جنوب، غرب، شرق) ; month=(ژوئن، جولای، آگوست، ژانویه) ; ظرفیت = (سطل، بشکه، قوطی، مخزن) ; var rotation:direction; خروج: ماه; حجم: ظرفیت var turn: (شمال، جنوب، غرب، شرق) ; حرکت: (ژوئن، ژوئیه، آگوست، ژانویه)؛ حجم: (سطل، بشکه، قوطی، مخزن) ;

می توانید عملگرهای انتساب زیر را اجرا کنید:

Turn:=South; خروج:=آگوست; حجم:=مخزن;

اما نمی توانید تکالیف مختلط را انجام دهید:

حرکت:=جنوب; volume:=آگوست;

توابع زیر برای متغیرهای نوع شمارش شده اعمال می شود:

1. ORD - شماره سریال

2. PRED - عنصر قبلی

3. SUCC عنصر بعدی است.

PRED (بشکه) = سطل; SUCC (جنوب) = غرب؛ ORD (ژوئیه) =1 ;

متغیرهای نوع شمارش شده را می توان با هم مقایسه کرد زیرا مرتب و شماره گذاری شده اند. پس عبارات: شمال< юг, июнь < январь имеют значения TRUE, а юг>غرب و تانک<бочка значение FАLSE.

نوع محدود

اگر یک متغیر تمام مقادیر نوع خود را نگیرد، بلکه فقط در یک محدوده خاص باشد، می توان آن را به عنوان یک متغیر از نوع محدود در نظر گرفت. هر نوع محدود با اعمال یک محدودیت بر روی انواع پایه تعریف می شود.

اینگونه توصیف شده است:

تایپ کنید<имя типа>=constant1 ..constant2

در این مورد، قوانین زیر باید رعایت شود:

  1. هر دو ثابت محدود باید از یک نوع باشند.
  2. از هر نوع ساده ای به جز واقعی می توان به عنوان نوع پایه استفاده کرد.
  3. مقدار اولیه هنگام تعریف یک نوع محدود نباید از مقدار نهایی بیشتر باشد.
نوع شاخص =0 ..63 ; letter='a'..'z'; varchar1,char2:letter; a,g:index ;

می توانید آن را بلافاصله در بخش اعلام متغیر توضیح دهید:

var a,g:0 ..63 ; char1,char2:'a'..'z'. مبانی برنامه نویسی
هر حرفه ای زمانی یک قوری بود. مطمئناً با حالتی آشنا هستید که "نمی دانید چگونه شروع به فکر کردن کنید تا به این فکر کنید". حتماً برای شما هم پیش آمده است که نمی دانید از کجا شروع کنید. این کتاب دقیقاً برای افرادی است که دوست دارند برنامه نویس شوند اما اصلاً نمی دانند چگونه این مسیر را شروع کنند. ...

تقریباً همه انواع داده های عدد صحیح هستند. این نوع داده ها اعداد صحیح را در محدوده معینی نشان می دهند. نام های خاص انواع اعداد صحیح و محدوده مقادیر به زبان برنامه نویسی خاص، کامپایلر و حالت کامپایل بستگی دارد. برای اطلاعات بیشتر در مورد این، به مستندات مربوط به کامپایلر مراجعه کنید.

به عنوان مثال، نوع داده عدد صحیحدر دلفی دارای محدوده -2147483648…2147483647 است، در حالی که در توربو پاسکال نوع داده آن است. عدد صحیحنشان دهنده اعداد در محدوده -35768…32767 است. در پاسکال رایگان، محدوده مقدار یک نوع عدد صحیحبا حالت انتخاب شده تعیین می شود.

از آنجایی که Lazarus از کامپایلر Free Pascal استفاده می کند، همه چیزهایی که در مورد انواع داده در رابطه با Free Pascal گفته می شود برای Lazarus نیز صادق است.

بنابراین انواع داده های عدد صحیح پاسکال رایگان در جدول 13.1 فهرست شده است.

جدول 13.1. انواع داده های عدد صحیح پاسکال رایگان (لازاروس).

تایپ کنید اندازه، بایت محدوده ارزش
بایت ها 1 0…255
کوتاه 1 -128…127
اسمالینت 2 -35768…32767
کلمه 2 0…65535
عدد صحیح 2 یا 4 بستگی به حالت کامپایل دارد
اصلی 4 0…4294967295
Longint 4 -2147483648…2147483647
کلمه طولانی 4 0...4294967295
int64 8 -9223372036854775808...9223372036854775807
QWord 8 0...18446744073709551615

توجه داشته باشید
انواع پاسکال رایگان int64و QWordنیستند ! این بدان معنی است که شما نمی توانید از آنها برای مثال برای متغیرهای شاخص در حلقه ها استفاده کنید. با این حال، من آنها را در اینجا گنجانده ام تا در آینده آنها را جداگانه توصیف نکنم و همه انواع اعداد صحیح پاسکال رایگان را در یک مکان جمع آوری کنم. اگر برخی از کلمات را متوجه نشدید، نگران نباشید. در زمان مناسب، در مورد همه چیز بیشتر به شما خواهم گفت.

و حالا چند توضیح برای جدول.

در یک ستون تایپ کنیدشناسه های نوع داده داده می شود (کلمات کلیدی که به کامپایلر نشان می دهد که این یا آن داده متعلق به کدام نوع است). نحوه استفاده از این شناسه ها را در درس های بعدی خواهید آموخت.

در یک ستون اندازهاندازه ای که نوع داده در حافظه کامپیوتر اشغال می کند را مشخص می کند. به عنوان مثال، یک عدد صحیح مثبت را می توان با انواع مختلفی نشان داد: بایت ها, کلمه, اصلیو غیره با این حال، تعدادی از نوع اصلی 4 بایت در حافظه اشغال می کند، در حالی که تعدادی از نوع بایت ها- فقط 1 بایت بنابراین، اگر مطمئن هستید که عددی که با آن کار می کنید هرگز مقداری بیشتر از 255 نخواهد داشت، بهتر است آن را به عنوان یک نوع تعریف کنید. بایت ها، زیرا باعث صرفه جویی در فضا در حافظه رایانه شما می شود. اگرچه همه چیز در اینجا چندان ساده نیست (تخصیص تفاوت های ظریف در تخصیص حافظه و سایر منابع رایانه فراتر از محدوده است).

در یک ستون دامنهمحدوده مقادیری که نوع داده روی آن کار می کند مشخص می شود. به عنوان مثال، یک عدد مانند بایت هامی تواند مقادیری از 0 تا 255 بگیرد.

و حالا تمرین کنید. بیایید برنامه ای بنویسیم که محدوده مقادیر انواع داده های صحیح را نمایش دهد. کد منبع این برنامه در زیر نشان داده شده است:

لیست 13.1. برنامه ای برای نمایش محدوده اعداد صحیح.برنامه td; ($mode objfpc)($H+) از ($IFDEF UNIX)($IFDEF UseCTthreads) cthreads، ($ENDIF)($ENDIF) کلاس‌ها استفاده می‌کند (می‌توانید بعد از این واحدها اضافه کنید); شروع Writeln("بایت: "، کم(بایت)، ".."، بالا(بایت)); Writeln("کوتاه: "، کم(کوتاه)، ".."، بالا(کوتاه)); 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; پایان.

عملکرد استاندارد کمحداقل مقدار نوع داده را تعریف می کند. funtskyia بالاحداکثر مقدار را تعیین می کند. با امکانات WriteLnو ReadLnشما قبلاً کمی می دانید در بخش مربوطه با جزئیات بیشتری در مورد زیر روال ها (رویه ها و عملکردها) صحبت خواهیم کرد.

در آخر به شما می گویم که چگونه داده های عدد صحیح در برنامه نوشته می شود. بله، درست مثل همه جاهای دیگر - فقط شماره را بدون نقل قول و هر کاراکتر اضافی بنویسید. به عنوان مثال، بنابراین

10
178
35278

درست است، این برای اعداد در سیستم اعداد اعشاری صدق می کند. احتمالاً می دانید که سیستم های دیگری نیز وجود دارد. پرکاربردترین سیستم های اعداد باینری، اعشاری و هگزادسیمال هستند.

پاسکال رایگان از چهار فرمت عدد صحیح پشتیبانی می کند:

  1. نماد اعشاری. فقط عددی مثل 10
  2. نماد هگزادسیمال. شماره با پیشوند $. به عنوان مثال، 10 دلار در هگزادسیمال برابر با 16 در اعشار است.
  3. نماد هشتی. شماره با پیشوند &. به عنوان مثال، &10 در اکتال برابر با 8 در اعشار است.
  4. نمادگذاری باینری. شماره با پیشوند ٪. برای مثال، عدد باینری %10 برابر با عدد اعشاری 2 است.

مشق شب:

برنامه ای ایجاد کنید که محدوده ای از مقادیر صحیح را نمایش دهد (فهرست 13.1). برنامه را کامپایل و اجرا کنید. مطمئن شوید که این مقادیر با جدول 13.1 مطابقت دارند.

در کد منبع برنامه، خطی را پیدا کنید که حالت کامپایل را تنظیم می کند:

($mode objfpc)($H+)

در این خط به جای کلمه objfpcیک کلمه بنویس tp. یعنی خط نهایی باید به این صورت باشد:

($mode tp) ($H+)

برنامه را اجرا کنید. محدوده مقادیر نوع را مشاهده کنید عدد صحیح. نتیجه گیری خودتان را بگیرید.

یاد بگیرید مثل یک برنامه نویس فکر کنید، یعنی منطقی. هیچکس مثل من تا زمان بازنشستگی همه چیز را برای شما نمی جود. باید عادت کنی که خودت فکر کنی. در غیر این صورت، شما در "اصل میمون یادگیری" قرار می گیرید، و سپس شانس شما برای تبدیل شدن به یک برنامه نویس عالی به صفر نزدیک می شود. برای اینکه به شما کمک کنم در سطح "مجموعه" قرار نگیرید، من به طور دوره ای شکاف هایی در یادگیری شما ایجاد می کنم تا سعی کنید خودتان به برخی چیزها فکر کنید.

خیلی بهتره اگه خودت بفهمی تصمیم اشتباه، خود شما خطا را پیدا می کنید و خودتان آن را اصلاح می کنید تا اینکه همیشه از راه حل های صحیح دیگران استفاده کنید و احمقانه آنها را کپی کنید.

سخنرانی 2

مبانی برنامه نویسی.

آشنایی با پاسکال انواع داده ها عملیات.

الفبای زبانپاسکال

هر زبان طبیعی از عناصری مانند نمادها، کلمات، عبارات، جملات تشکیل شده است. زبان برنامه نویسی نیز عناصر مشابهی دارد: نمادها، کلمات، عبارات (عبارات)، عملگرها (جملات).

کلمات از مجموعه ای از شخصیت ها تشکیل می شوند. اصطلاحات - گروهی از کلمات و عملگرها هستند - اینها ترکیبی از کلمات و عبارات هستند. نمادهای زبان - علائم ابتدایی (حروف) وجود دارد که برای نوشتن برخی متون استفاده می شود. بنابراین مجموعه این کاراکترها الفبای زبان را تشکیل می دهند.

الفبای زبان پاسکال شامل موارد زیر است:

1. حروف بزرگ و کوچک الفبای لاتین که شامل کاراکترهای زیر است:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - حروف بزرگ.

A b c d e f g h i j k l m n o p q r s t u v w x y z - حروف کوچک.

2. اعداد عربی اعشاری: 0 1 2 3 4 5 6 7 8 9;

3. ارقام هگزادسیمال (ساخته شده از ارقام اعشاری و حروف از A تا F).

4. 32 حروف بزرگ و کوچک الفبای روسی.

5. شخصیت های خاص:

ترکیب کاراکترهای خاص می تواند کاراکترهای مرکب را تشکیل دهد:

:= تکلیف;

< >نا برابر؛

>= بزرگتر یا مساوی

<= меньше или равно;

محدوده مقادیر؛

(* *) یا ( ) - نظر دهید.

ساختار یک برنامه پاسکال

برای اینکه کامپایلر پاسکال به درستی درک کند که دقیقاً چه اقداماتی از آن انتظار می رود، برنامه شما باید مطابق با نحو (قوانین ساخت برنامه ها) این زبان قالب بندی شود.

هر برنامه پاسکال می‌تواند شامل بلوک‌های زیر باشد (براکت‌های مربع در اینجا و در زیر قسمت‌های اختیاری را علامت‌گذاری کنید):

برنامه<имя_программы>;

[ استفاده می کند<имена_подключаемых_модулей>;]

[ برچسب<список_меток>;]

[کنست<имя_константы> = <значение_константы>;]

[نوع<имя_типа> = <определение_типа>;]

[var<имя_переменной> : <тип_переменной>;]

[روش<имя_процедуры> <описание_процедуры>;]

[ عملکرد<имя_функции> <описание_функции>;]

شروع (آغاز بدنه اصلی برنامه)

<операторы>

پایان. (* انتهای متن اصلی برنامه *)

نسخه های بعدی کامپایلرهای پاسکال دیگر نیازی به تعیین نام برنامه، یعنی برنامه رشته ای ندارند.<имя_программы>; را می توان حذف کرد. اما این تنها در صورتی امکان پذیر است که کل برنامه در یک فایل ماژول موجود باشد. اگر برنامه از چندین قطعه مستقل - ماژول تشکیل شده باشد، هر یک از آنها باید یک عنوان (برنامه یا واحد) داشته باشد.

هر یک از بخش های اختیاری فهرست شده می تواند بیش از یک بار در متن برنامه رخ دهد، توالی کلی آنها نیز می تواند تغییر کند، اما قانون اصلی زبان پاسکال همیشه باید رعایت شود: قبل از استفاده از یک شی، باید آن را اعلام و توصیف کنید.

کامپایلرهای پاسکال بین حروف کوچک و بزرگ تمایز قائل نمی شوند و کاراکترهای فضای خالی نادیده گرفته می شوند، بنابراین متن برنامه را می توان به گونه ای ساختار داد که خواندن و اشکال زدایی آن راحت تر باشد.

دستورالعمل های کامپایلر

خطی که با نمادها ($) شروع می‌شود یک کامنت نیست، بلکه یک دستور کامپایلر است - یک دستور ویژه که فرآیند کامپایل و اجرای یک برنامه به آن بستگی دارد. .

به عنوان مثال، خط ($I-,Q+) اعتبار سنجی I/O را غیرفعال می کند، اما سرریز را در طول محاسبه فعال می کند.

شناسه ها

نام هایی که به اشیاء برنامه داده می شود (ثابت، انواع، متغیرها، توابع و رویه ها و کل برنامه به عنوان یک کل) شناسه نامیده می شوند. آنها فقط می توانند از اعداد، حروف لاتین و علامت "_" (زیر خط) تشکیل شوند. با این حال، یک عدد نمی تواند یک نام را شروع کند. شناسه ها می توانند از هر طولی باشند، اما اگر دو نام دارای 63 کاراکتر اول یکسان باشند، آنگاه این نام ها یکسان در نظر گرفته می شوند.

شما می توانید به اشیاء برنامه هر نامی بدهید، اما لازم است که آنها با کلمات رزرو شده استفاده شده توسط زبان پاسکال متفاوت باشند، زیرا کامپایلر به هر حال متغیرهایی با نام های "خارجی" را نمی پذیرد.

در اینجا لیستی از رایج ترین کلمات رزرو شده آمده است:

اجرای آرایه shl

رشته رابط مورد

سپس برچسب const

اشاره گر فایل استفاده می کند

دور رویه var

برای برنامه در حالی که

رکورد جلو با

تابع تکرار xor

متغیرها و انواع داده ها

متغیر یک شی برنامه است که مقدار آن می تواند در طول برنامه تغییر کند.

یک نوع داده مشخصه محدوده مقادیری است که متغیرهای آن نوع داده می توانند بگیرند.

تمامی متغیرهای مورد استفاده در برنامه باید در قسمت var مخصوص طبق الگوی زیر اعلان شوند:

var<имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;

<имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;

زبان پاسکال دارای مجموعه بزرگی از انواع داده های مختلف است، اما در حال حاضر تنها تعدادی از آنها را نشان خواهیم داد. در ادامه در مورد انواع داده ها صحبت خواهیم کرد.

ثابت ها

ثابت شیئی است که مقدار آن قبل از شروع برنامه مشخص است.

ثابت ها برای طراحی برنامه های بصری ضروری هستند، هنگام استفاده از مقادیر مکرر در متن برنامه ضروری هستند، و در صورت نیاز به تغییر یکباره این مقادیر در کل برنامه راحت هستند.

سه نوع ثابت در پاسکال وجود دارد:

ثابت های بی نام (اعداد و اعداد، کاراکترها و رشته ها، مجموعه ها)؛

ثابت های تایپ نشده با نام.

ثابت های تایپ شده نامگذاری شده است.

ثابت های بی نام

ثابت های بدون نام نام ندارند و بنابراین نیازی به اعلان ندارند.

نوع یک ثابت بدون نام به طور پیش فرض به طور خودکار تعیین می شود:

هر دنباله ای از ارقام (شاید قبل از علامت "-" یا "+" باشد یا با یک نقطه از هم جدا شده باشد) توسط کامپایلر به عنوان یک ثابت بی نام - یک عدد (صحیح یا واقعی) درک می شود.

هر دنباله ای از کاراکترهای محصور شده در آپستروف ها به عنوان یک ثابت بی نام - یک رشته تلقی می شود.

هر دنباله ای از اعداد صحیح یا کاراکترهایی که با کاما از هم جدا شده اند و با کروشه های مربع قاب شده اند، به عنوان یک ثابت بی نام - یک مجموعه - درک می شود.

علاوه بر این، دو ثابت خاص true و false وجود دارد که به نوع داده بولی اشاره دارد.

نمونه هایی از استفاده از ثابت های بدون نام عملگرهای زیر هستند:

real2:= 12.075 + x;

string4:= "abc" + string44;

set5:=*set55;

boolean6:=true;

ثابت های تایپ نشده

ثابت های نامگذاری شده، همانطور که از نامشان پیداست، باید یک نام داشته باشند. بنابراین، این نام ها باید به کامپایلر گزارش شود، یعنی در قسمت const ویژه توضیح داده شود.

اگر نوع ثابت را مشخص نکنید، کامپایلر با ظاهر آن تعیین می کند که به کدام نوع (پایه) تعلق دارد. هر ثابتی که قبلاً توضیح داده شده است می تواند هنگام اعلام سایر ثابت ها، متغیرها و انواع داده ها استفاده شود. در اینجا چند نمونه از اعلان ثابت های نامی تایپ نشده آورده شده است:

ثابت های تایپ شده

ثابت های نامگذاری شده تایپ شده متغیرهایی هستند (!) با یک مقدار اولیه که تا زمان شروع برنامه از قبل مشخص شده است. بنابراین اولاً نمی توان از ثابت های تایپ شده برای تعریف سایر ثابت ها، انواع داده ها و متغیرها استفاده کرد و ثانیاً می توان مقادیر آنها را در حین اجرای برنامه تغییر داد.

ثابت های تایپ شده بر اساس الگوی زیر توصیف می شوند:

پایان<имя_константы> : <тип_константы> = <начальное_значение>;

مثال های زیر نحوه انجام این کار را نشان می دهد:

const n: عدد صحیح = -10;

b:boolean=true;

با مطالعه انواع داده های مربوطه، نمونه هایی از ثابت های تایپ شده انواع دیگر را ارائه خواهیم داد.

انواع داده پاسکال

کامپایلرهای پاسکال نیاز دارند که اطلاعات مربوط به مقدار حافظه مورد نیاز برای اجرای یک برنامه قبل از اجرای برنامه ارائه شود. برای این کار در قسمت اعلام متغیر (var) باید تمامی متغیرهای مورد استفاده در برنامه را لیست کنید. علاوه بر این، شما همچنین باید به کامپایلر بگویید که هر یک از این متغیرها چقدر حافظه اشغال می کند.

همه اینها را می توان به سادگی با تعیین نوع متغیر آینده به برنامه گفت. با داشتن اطلاعاتی در مورد نوع یک متغیر، کامپایلر می فهمد که چند بایت باید به آن اختصاص داده شود، چه اقداماتی را می توان با آن انجام داد و در چه ساختارهایی می تواند شرکت کند.

برای راحتی برنامه نویسان در زبان پاسکال، انواع داده های استاندارد بسیاری وجود دارد و علاوه بر این، امکان ایجاد انواع داده های جدید بر اساس داده های موجود (استاندارد یا دوباره تعریف شده توسط برنامه نویس) وجود دارد که به آنها ساخته شده می گویند.

تقسیم بندی به انواع داده های پایه و ساخته شده در زبان پاسکال در جدول نشان داده شده است:

انواع داده های ترتیبی (گسسته).

انواع داده آدرس

انواع داده های ساخت یافته

انواع داده های حسابی

انواع داده های پایه

منطقی

نمادین

واقعی

نتی پیزی

نشانگر ثابت

انواع ساخته شده

قابل شمارش

هفته = (su, mo, tu, we, th, fr, sa);

اشاره گر تایپ شده

آرایه

رشته

رکورد

رویه ای

هدف - شی

فاصله (محدوده)

انواع داده های ساخته شده توسط برنامه نویس

انواع داده های ترتیبی

انواع ترتیبی در میان انواع داده های پایه برجسته می شوند. این نام به دو صورت قابل توجیه است:

1. هر عنصر از یک نوع ترتیبی را می توان با یک عدد (ترتیبی) منحصر به فرد مرتبط کرد. شماره گذاری مقادیر از صفر شروع می شود. استثنا انواع داده های shortint، integer و longint است. شماره گذاری آنها با مقادیر عناصر منطبق است.

2. علاوه بر این، روی عناصر از هر نوع ترتیبی، ترتیبی (به معنای ریاضی کلمه) تعریف می شود که مستقیماً به شماره گذاری بستگی دارد. بنابراین، برای هر دو عنصر از نوع ترتیبی، می توان دقیقاً گفت که کدام یک از آنها کمتر و کدام یک بزرگتر است.

روال هایی که انواع داده های ترتیبی را مدیریت می کنند

توابع و رویه های زیر فقط برای مقادیر انواع ترتیبی تعریف شده اند:

1. تابع ord(x) عدد ترتیبی مقدار متغیر x را برمی گرداند (نسبت به نوعی که متغیر x به آن تعلق دارد).

2. تابع pred(x) مقدار قبل از x را برمی‌گرداند (برای عنصر اول نوع قابل اعمال نیست).

3. تابع succ(x) مقدار زیر x را برمی‌گرداند (برای آخرین عنصر نوع کاربرد ندارد).

4. رویه inc(x) مقدار زیر x را برمی گرداند (برای انواع داده های حسابی، این معادل عملگر x:=x+1 است).

5. رویه inc(x,k) مقدار k ام را به دنبال x برمی گرداند (برای انواع داده های حسابی، این معادل عملگر x:=x+k است).

6. رویه dec(x) مقدار قبل از x را برمی گرداند (برای انواع داده های حسابی، این معادل عملگر x:=x-1 است).

7. رویه dec(x,k) مقدار k ام قبل از x را برمی گرداند (برای انواع داده های حسابی، این معادل عملگر x:=x-k است).

در نگاه اول به نظر می رسد که نتیجه اعمال رویه inc(x) دقیقاً همان نتیجه استفاده از تابع succ(x) است. با این حال، تفاوت بین آنها در مرزهای محدوده قابل قبول ظاهر می شود. تابع succ(x) برای ماکزیمم عنصر نوع قابل اجرا نیست، اما رویه inc(x) هیچ خطایی نمی دهد، اما طبق قوانین جمع ماشین، عنصر بعدی را به شماره عنصر اضافه می کند. . عدد البته از محدوده خارج می شود و به دلیل برش به عدد حداقل مقدار محدوده تبدیل می شود. به نظر می رسد که رویه های inc () و dec () هر نوع ترتیبی را به گونه ای درک می کنند که گویی "در یک حلقه بسته شده است": بلافاصله پس از آخرین، اولین مقدار دوباره می آید.

بیایید همه آنچه گفته شد را با یک مثال توضیح دهیم. برای نوع داده

نوع شانزده = 0..15;

تلاش برای اضافه کردن 1 به عدد 15 نتیجه زیر خواهد بود:

واحد اولیه قطع می شود و بنابراین معلوم می شود که inc(15)=0.

وضعیت مشابهی در کران پایین محدوده مجاز یک نوع داده ترتیبی دلخواه برای رویه dec(x) و تابع pred(x) مشاهده می شود:

dec(min_element)= max_element

انواع داده های ترتیبی

1. نوع منطقی بولی دارای دو مقدار false و true است و برابری های زیر برای آنها صادق است:

ord(false)=0، ord(true)=1، false

پیش بینی (درست) = نادرست، succ (نادرست) = درست،

inc(true)=false, inc(false)=true,

dec(true)= false، dec(false)=true.

2. کاراکتر نوع کاراکتر شامل 256 کاراکتر ASCII توسعه یافته است (برای مثال، "a"، "b"، "i"، "7"، "#"). شماره کاراکتر برگردانده شده توسط تابع ord () با عدد آن کاراکتر در جدول ASCII یکسان است.

3. انواع داده های عدد صحیح در یک جدول خلاصه می شوند:

نوع داده

تعداد بایت ها

دامنه

2147483648..2147483647

4. انواع داده های شمارش شده در بخش نوع با شمارش صریح عناصر آنها مشخص می شوند. مثلا:

نوع هفته =(یکشنبه، دوشنبه، سه شنبه، چهارشنبه، پنج شنبه، جمعه، شنبه)

به یاد بیاورید که برای این نوع داده:

inc(sat) = sun, dec(sun) = sat.

5. انواع داده های فاصله ای فقط با مرزهای محدوده آنها تنظیم می شوند. مثلا:

نوع ماه = 1..12;

روز هفته = دوشنبه.. جمعه;

6. انواع داده های ساخته شده توسط برنامه نویس در قسمت type طبق الگوی زیر توضیح داده شده است:

نوع<имя_типа> = <описание_типа>;

مثلا:

نوع lat_bukvy = "a".."z","A".."Z";

انواع داده های پایه استاندارد هستند، بنابراین نیازی به توضیح آنها در بخش نوع نیست. با این حال، در صورت تمایل می توان این کار را نیز انجام داد، برای مثال با دادن نام های کوتاه به تعاریف طولانی. بیایید با معرفی یک نوع داده جدید بگوییم

نوع int = عدد صحیح;

می توانید متن برنامه را کمی کوتاه کنید.

انواع داده های واقعی

به یاد داشته باشید که این نوع داده ها حسابی هستند نه ترتیبی.

نوع داده

تعداد بایت ها

محدوده (مقدار مطلق)

1.5*10-45..3.4*1038

2.9*10-39..1.7*1038

5.0*10-324..1.7*10308

3.4*10-4932..1.1*104932

انواع داده های ساخته شده

این نوع داده ها (به همراه عملیات تعریف شده برای آنها) بعداً در چندین سخنرانی مورد بحث قرار خواهند گرفت.

عملیات و عبارات

عملیات حسابی

بیایید در مورد عملیات صحبت کنیم - اقدامات استاندارد مجاز برای متغیرهای یک یا دیگری نوع داده پایه. مبنای عملیات حسابی و منطقی خواهد بود.

نکته: تمامی عملیات زیر (به استثنای "-" و غیر آنری) به دو عملوند نیاز دارند.

1. عملیات منطقی (و - منطقی AND، یا - منطقی OR، نه - منطقی NOT، xor - OR انحصاری) فقط برای مقادیر بولی قابل اجرا هستند. آنها همچنین به مقادیر بولی منجر می شوند. در اینجا جداول مقادیر این عملیات آمده است:

درست غلط درست است

false false false

درست غلط نادرست

2. عملیات مقایسه (=<>, >, <, <=, >=) برای همه انواع پایه اعمال می شود. نتایج آنها نیز مقادیر بولی است.

3. عملیات حسابی اعداد صحیح فقط برای انواع اعداد صحیح قابل اعمال است. نتیجه آنها یک عدد صحیح است که نوع آن به انواع عملوندها بستگی دارد.

a div b - تقسیم عدد صحیح a بر b (احتمالاً نیازی به یادآوری نیست که تقسیم بر 0 ممنوع است، بنابراین عملیات در چنین مواردی خطا می کند). نتیجه یک نوع داده مشترک با انواعی خواهد بود که عملوندها به آنها تعلق دارند.

به عنوان مثال، (shortint div byte = integer). این را می توان به صورت زیر توضیح داد: عدد صحیح حداقل نوع است که هر دو بایت و کوتاه زیر مجموعه هستند.

a mod b - هنگام تقسیم a بر b به عنوان یک کل، باقیمانده را می گیریم. نوع نتیجه، مانند حالت قبل، با انواع عملوندها تعیین می شود و 0 مقدار ممنوعه برای b است. برخلاف حالت عملیات ریاضی که همیشه یک عدد غیر منفی را به همراه دارد، علامت نتیجه مد عملیات "برنامه نویسی" با علامت اولین عملوند آن تعیین می شود. بنابراین، اگر در ریاضیات (-2 mod 5) = 3، آنگاه (-2 mod 5) = -2 داریم.

a shl k - مقدار a را با k بیت به سمت چپ منتقل کنید (این معادل ضرب مقدار متغیر a در 2k است). نتیجه عملیات از همان نوع عملوند(های) اول آن خواهد بود.

a shr k - مقدار a را با k بیت به سمت راست منتقل کنید (این معادل تقسیم مقدار متغیر a بر 2k بر 2k است). نتیجه عملیات از همان نوع عملوند(های) اول آن خواهد بود.

and,or,not,xor - عملیات حسابی دودویی که با بیت‌های نمایش دودویی اعداد صحیح مطابق قوانین مشابه عملیات منطقی مربوطه کار می‌کنند.

4-عملیات حسابی عمومی (+، -، *، /) برای همه انواع حسابی قابل اجرا هستند. نتیجه آنها متعلق به نوع داده مشترک برای هر دو عملوند است (تنها استثنا عملیات تقسیم کسری / است که نتیجه آن همیشه از نوع داده واقعی است).

سایر عملیات

عملیات دیگری نیز وجود دارد که مختص مقادیر برخی از انواع داده های پاسکال استاندارد است. این عملیات در بخش های مربوطه مورد بحث قرار خواهد گرفت:

#، در، +، *، : به سخنرانی 5 «نمادها» مراجعه کنید. رشته های. مجموعه»

@, ^ : به سخنرانی 7 "آدرس ها و اشاره گرها" مراجعه کنید

توابع حسابی استاندارد

توابع حسابی استاندارد نیز در مجاورت عملیات حسابی قرار دارند. لیست آنها با توضیح مختصر در جدول آورده شده است.

عملکرد

شرح

نوع استدلال

نوع نتیجه

مقدار مطلق (مدول) یک عدد

حسابی

با نوع آرگومان مطابقت دارد

آرکتانژانت (به رادیان)

حسابی

واقعی

کسینوس (به رادیان)

حسابی

واقعی

غرفه دار (سابق)

حسابی

واقعی

گرفتن جزء کسری یک عدد

حسابی

واقعی

گرفتن جزء صحیح یک عدد

حسابی

واقعی

لگاریتم طبیعی (پایه e)

حسابی

واقعی

بررسی اعداد فرد

مقدار عدد

واقعی

گرد کردن به نزدیکترین عدد صحیح

حسابی

گرد کردن "پایین" - به نزدیکترین عدد صحیح کوچکتر

حسابی

سینوس (به رادیان)

حسابی

واقعی

مربع کردن

حسابی

واقعی

استخراج جذر

حسابی

واقعی

عبارات حسابی

همه عملیات های حسابی را می توان با یکدیگر ترکیب کرد - البته با در نظر گرفتن انواع داده های مجاز برای عملوندهای آنها.

عملوندهای هر عملیاتی می توانند متغیرها، ثابت ها، فراخوانی های تابع یا عباراتی باشند که بر اساس عملیات های دیگر ساخته شده اند. همه با هم عبارت نامیده می شود.

نمونه هایی از عبارات حسابی:

(ایکس<0) and (y>0) - عبارتی که نتیجه آن از نوع بولی است.

z shl abs(k) - عملوند دوم یک فراخوانی تابع استاندارد است.

(x mod k) + min(a,b) + trunc(z) - ترکیبی از عملیات حسابی و فراخوانی تابع.

odd(round(x/abs(x))) - عبارت "چند داستانی".

ترتیب محاسبه

اگر براکت ها در عبارت قرار داده شوند، محاسبات به ترتیب انجام می شود: هر چه عمق تودرتو براکت ها کمتر باشد، عملیات محصور در آنها دیرتر محاسبه می شود. اگر پرانتز وجود نداشته باشد، ابتدا مقادیر عملیات با اولویت بالاتر و سپس مقادیر با اولویت کمتر محاسبه می شود. چندین عملیات متوالی با اولویت یکسان به ترتیب "از چپ به راست" محاسبه می شوند.

جدول 2.1. اولویت ها (برای همه) عملیات پاسکال

برترین مقالات مرتبط