اینجا هستید : safarionline.ir / books / pumr / ch06

فصل ۶ − Structured Types in General - The Array Type in Particular

➡ فهرست

  1. فصل ۶ − Structured Types in General - The Array Type in Particular
  2. packed reserved word
  3. the array type
  4. string types
  5. pack and unpack
  6. مطالعه‌ی بیشتر

نوع‌های ساده، یعنی انواع oridnal و Real، نوع‌های بدون ساختار هستند. نوع‌های دیگری که در پاسکال وجود دارند نوع‌های ساختاریافته و نوع‌های اشاره‌گر هستند. همان طور که structured statement ها ترکیبی از statement های دیگرند، structured type ها هم ترکیبی از type های دیگر هستند. نوع مولفه‌های سازنده، و به طور خیلی مهم‌تر، شیوه‌ی ساختاربندی، شخصیت یا کاراکتر یک نوع ساخت‌یافته را تعیین می‌کند. طبقه‌بندی سلسله‌مراتبی انواع داده‌ی ساختاریافته را در زیر مشاهده می‌کنید:

سینتکس دیاگرام structured type نیز به این صورت است:

🔴 پس به طور خلاصه ۴ تا structured data type داریم:

  1. Array data type
  2. File data type
  3. Set data type
  4. Record data type

packed reserved word

گزینه‌ای که برای همه‌ی روش‌های ساختاربندی می‌توان استفاده کرد، انتخاب نحوه‌یِ ترجیحیِ نمایشِ داخلیِ داده‌هاست. تعریف یک structured type که با پیشوند packed آمده باشد به کامپایلر می‌فهماند که در اختصاص فضای ذخیره‌سازی اقتصادی عمل کند، حتی اگر این کار به قیمت افزایش زمان اجرا و یا اضافه شدن حجم کد، به خاطر عملیات لازم برای pack کردن و از pack درآوردن، منجر شود. این مسئولیت شماست که بفهمید آیا این معاوضه‌ی بین فضای حافظه‌ی کمتر و زمان اجرای بیشتر را نیاز دارید یا نه. تاثیر واقعی روی کارآمدی، و کاهش فضای ذخیره‌سازی وابسته به پیاده‌سازی یا اصطلاحا implementation dependent است و در واقع ممکن است عملا هیچ اثری نداشته باشد.

the array type

یک نوعِ آرایه از تعداد ثابتی مولفه یا عنصرِ سازنده، که در هنگام تعریف آرایه مشخص می‌شوند، تشکیل شده است. تمام عناصر آرایه از یک نوع هستند که به آن، component type یا نوعِ مولفه می‌گویند. هر مولفه می‌تواند صراحتا نشانه‌گذاری شود و مستقیما به وسیله‌ی نام متغیرِ آرایه همراه با اندیس آرایه که در داخل square bracket، [] می‌آید مورد دسترسی قرار گیرد. اندیس‌ها قابل محاسبه هستند (یعنی می‌توانند یک expression باشند) و به نوع آن‌ها index type می‌گویند. علاوه بر این زمانی که برای دسترسی به یک مولفه‌ی آرایه مورد نیاز است به مقدار اندیس بستگی ندارد، از این رو به آرایه، ساختاری با دسترسی تصادفی (random access structure) می‌گویند. امروزه در علوم کامپیوتر این مفهوم با O(1) بیان می‌شود.

تعریفِ یک نوعِ جدیدِ آرایه هم index type را مشخص می‌کند و هم component type را. ساختار کلی تعریف آرایه به صورت زیر است:

TYPE
    A = Array [T1] OF T2;

در تعریف بالا، A یک type identifier جدید است؛ T1، index type است که باید ordinal باشد، و T2، component type است و می‌تواند هر نوعی باشد.

آرایه‌ها ابزاری فراهم می‌کنند تا بتوانیم چندین متغیر را، که ویژگی‌های شخصیتی یکسانی دارند، در ذیل یک نام واحد گروه‌بندی کنیم. اعلانِ متغیرِ آرایه، یک نام به کل ساختار آرایه می‌دهد. دو عملیات معتبر برای همه‌ی متغیرهای آرایه assignment و access یا انتخاب مولفه هستند. با نوشتن نام متغیر آرایه همراه با یک expression که نتیجه‌ای از نوع ordinal برمی‌گرداند و در درون [] محصور شده است، می‌توان به یک مولفه‌ی آرایه دسترسی پیدا کرد. عملیاتی که مجاز به انجام آن روی یک مولفه یا اندیس آرایه هستیم همان‌هایی هستند که برای متغیرهایی از نوع component type آن نوع آرایه مجاز به انجام آنیم.

مثال‌های زیر را ببینید:

VAR
    Memory: Array[0..MAX] OF Integer;
    Sick: PACKED Array[Days] OF Boolean;
...
    Memory[I+J] := X;       { assignment }
    Sick[Mon] := True;      { assignment }

مثال 6.1

مثال. همان مثال بالا به صورت ساده‌تر و جامع‌تر

مثال 6.2. این برنامه را با برنامه‌ی مثال 4.7 مقایسه کنید.

⚪ از آنجایی که T2 می‌تواند از هر نوعی باشد، مولفه‌های آرایه ممکن است از نوع ساختاریافته یا structured باشند. به صورت ویژه، اگر T2 هم از نوع آرایه باشد در این صورت گفته می‌شود که آرایه‌ی اصلی A، آرایه‌ای چند بعدی است. پس اعلان آرایه‌ی چند بعدی M به صورت زیر فرموله می‌شود:

VAR
    M: Array [A..B] OF Array [C..D] OF T;

در این صورت M[I][J] بیانگر مولفه یا اندیس J (از نوع T) از اندیس I آرایه‌ی M است.

مثال جدول ضرب ۱۰×۱۰

⚪ مرسوم است که برای ایجاد آرایه‌های چند بعدی از اختصارهای زیر استفاده کنیم:

VAR
    M: Array [A..B, C..D] OF T;

M را به عنوان یک ماتریس در نظر می‌گیریم و می‌گوییم M[I,J] یعنی اندیس یا مولفه‌ی J از مولفه یا اندیسِ I از ماتریس M.

⚪ آرایه‌ها محدود به دو بعد یا dimension نیستند و لذا T دوباره می‌تواند یک نوع ساختاریافته باشد. سینتکس دیاگرام array type (به فرمت abbreviated) دارد به صورت زیر است:

اگر n عدد، index type مشخص شده باشد، می‌گوییم که آرایه n بعدی است و یک مولفه با n، index expression بیان می‌گردد.

⚪ اگر A و B متغیرهای آرایه‌ای از یک نوع باشند در این صورت assignment statement A := B در صورتی مجاز است که مولفه‌های متناظر دو آرایه به صورت مولفه به مولفه قابل انتساب باشند، یعنی A[i] := B[i] برای هر مقدار i از نوع اندیس معتبر باشد. در واقع دستور A := B شکل خلاصه شده‌ی انتساب تک‌تک مولفه‌های متناظر دو آرایه است.

مثال 6.3

💡 در مثال 6.3 توجه کنید که index type آرایه‌های A و B و C ثابت هستند. اگر بخواهیم یک زیربرنامه‌ی عمومی یا generalized برای یک کتابخانه بنویسیم که کار ضرب ماتریس‌ها را انجام دهد، نیاز به قابلیتی داریم که امکان تنظیم index type را به ما بدهد. پاسکال برای این منظور conformant-array parameters را فراهم کرده است که در فصل ۱۱ با آن آشنا می‌شویم. خواهیم دید که این امکان به مانند وصله‌ای است که به زبان اضافه شده است و به شیوه‌ای «جادویی» مشکل را حل می‌کند.

string types

string ها را قبلا به عنوان یک توالی از کاراکترها که بین دو single quote محصور شده‌اند، معرفی کردیم. string هایی که تنها از یک کاراکتر ساخته شده‌اند constant هایی از نوع استاندارد Char هستند؛ آن‌هایی که N کاراکتری هستند و N > 1، ثوابتی از یک نوع هستند که به صورت زیر تعریف می‌شوند:

PACKED Array [1..N] OF Char

به چنین نوعی، string type می‌گویند.

عمل انتساب A := E، وقتی که متغیر آرایه‌ای A و expression داده شده یعنی E از نوع string باشند و تعداد مولفه‌های آن‌ها یکی باشد، صحیح است. به طور مشابه عملگرهای رابطه‌ای = ، <> ، < ، <= ، > و >= می‌توانند برای مقایسه‌ی دو string که تعداد مولفه‌های یکسانی دارند مورد استفاده قرار گیرند؛ عملیات مرتب‌سازی فرض می‌گیرد که اولین عنصر (A[1]) مهم‌ترین عنصر است و ترتیب آن‌ها بر اساس ترتیبِ نوعِ از پیش تعریف شده‌ی Char تعیین می‌شود.

pack and unpack

مطالعه‌ی بیشتر

  1. syntax diagram for component variable
  2. syntax diagram for array type
© کلیه‌ی حقوق برای safarionline.ir محفوظ است.