زمان کنونی: ۳۱ فروردین ۱۴۰۳, ۱۲:۴۵ ق.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

راهنمایی در مورد مبحث "کنترل ترتیب اجرای برنامه"

ارسال:
  

samaneh_aftab پرسیده:

راهنمایی در مورد مبحث "کنترل ترتیب اجرای برنامه"

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

این مبحث "کنترل ترتیب اجرای برنامه"را توی کتاب پارسه درست نمیفهمم. میشه از جزوه پرات یا دکتر نوراله یا هرکس دیگه که میدونید خوب گفته، این مبحث را برام بذارید؟
نقل قول این ارسال در یک پاسخ

۳
ارسال:
  

csharpisatechnology پاسخ داده:

راهنمایی در مورد مبحث "کنترل ترتیب اجرای برنامه"

دو نوع کنترل داریم:
* یکی صریح(explicit) هست که توسط برنامه نویس انجام میشه.مثل وارد کردن پرانتز در عبارت ریاضی و استفاده از دستور gotoو...

*یکی ضمنی(implicit)که توسط زبان برنامه نویسی انجام میشه.
----
کنترل ترتیب اجرای دستورات محاسباتی و ریاضی به دو صورت انجام میشه که میشه اونا رو به هم تبدیل کرد:

۱-ساختار درختی عبارت ریاضی:
ریشه ی درخت نمایانگر عمل اصلی جهت ارزشیابی عبارت است.برگهای درخت عملوندها هستند و بقیه ی درخت بین ریشه تا برگ ها ،محاسبات میانی را نمایش می دهند.

۲-ساختار نحوی یا دستوری عبارت ریاضی: به سه روش تقسیم میشه : پیشوندی+پسوندی+میانوندی
-----------------------
کنترل در بین دستورات خودش به چند بخش تقسیم میشه:
مثلا کنترل ترتیب به کمک دستورات پرشی:
مثلا وقتی میخوایم اجرای برنامه رو پاس بدیم به فلان خط میایم از برچسب و goto یا loop و .... استفاده می کنیم.

استفاده از دستورات switch و select case و این حفا یا حلقه های for و غیره هم توی این بخش مورد بحث قرار می گیرن

---
یه جا دیگه هم کنترل ترتیب توی زیر برنامه ها رو داریم که بحث اجرای زیربرنامه های تو در تو یا فراخوانی و برگشت هست که با call و return و از این حرفا کنترلشو تو دست می گیریم.
بازهم از دید پیاده سازی این بخش یه سری نکته هست :
یک فعالیت شامل دو قسمت سگمنت کد و سگمت فعالیت است.
قسمت سگمنت کد در طی اجرا ثابت است.
به ازای هر call یک رکورد فعالیت بوجود میآید.با دستور return آن رکورد فعالیت از بین می رود.
دو متغیر زیر برای کنترل ترتیب زیربرنامه نگهداری میشن:
الف-اشاره گر فعلی دستور(CIP=current instruction pointer): اشاره به دستوری می کند که در حال اجراست.
ب-اشاره گر فعلی محیط(CEP=current environment pointer) : اشاره به رکورد فعالیتی می کند که فعال می شود.
---
CIP از نگاه سخت افزاری مفهومی شبیه PC یا شمارنده ی برنامه داره که توی درس معماری بحث شد.
---
در زیربرنامه های بازگشتی و غیربازگشتی از جهت پیاده سازی هر دو اشاره گر CIP و CEP باید استفاده بشن.
-------
توی برنامه های بازگشتی به ازای هر call مقدار اشاره گرهای مذکور توی پشته یا stack ذخیره میشه و به ازای هر return از پشته pop میشن.
-----
طی عملیات کنترل ترتیب،زنجیره ای از رکوردهای فعالیت روی پشته تشکیل می شوند.این زنجیره از پیوندها را زنجیر پویا(dynamic chain) گویند.
--------------------------
یه سری زیر برنامه هم داریم به اسم زیربرنامه های برنامه ریزی شده:
در این نوع زیربرنامه ها دیگه از call و return نمیشه زیربرنامه رو کنترل کرد بلکه بوسیله ی زمانبندی کنترل میشن.
انواع مختلف زمانبندها:

الف-قبل و یا بعد از زیربرنامه های دیگه
مثال :
call b after b

ب-برقراری شرایط حاص:
مثال:
(call b when (x=5) and (z>0

ج-براساس زمان(نسبی)
مثال:
call b at time=25
call b at time=current time+10

د-طبق یک اولویت:
مثال:
call b whith priority 7

از نظرپیاده سازی در برنامه main باید لیستی از زیربرنامه های فعال زمانبندی شوندوکنترل زیربرنامه هااز طریق main انجام می شود.
================================
نکته ی آخر اینکه:یک تست از این بخش اومده بود:
مهندسی کامپیوتر سال ۷۵ :
برای انتخاب ۱۰ دستور برای اجرا یک بار از دستورات تودرتوی if then else استفاده کردیم و یک بار از case با توجه به اینکه کامپایلر مورد استفاده case را با روش جدول پرش پیاده سازی کرده است. هزینه ی اجرا و هزینه ی ترجمه ی دو روش را مقایسه کنید.

پاسخ :
هزینه ی اصلی case کمتر و هزینه ی آن بیشتر است.
توضیح :در هنگام اجرای دستور case با استفاده از جدول پرش فقط یک پرش غیر مستقیم به شروع مربوط به آن انجام میگیرد و سپس آدرس دستورات از ردیف مربوطه در جدول با یک تفاوت مکان بدست میآید. برا یدستورات if then else شرطهای زیادی در زمان اجرا باید چک شود که هزینه ی ارای آن را بالا می برند. در دستور case تشکیل جدول پرش در زمان کامپایلر هزینه ی بیشتر نسبت به کامپایلر دستور if then else دارد.
--------
منبع :
تایپ شده از روی کتاب راهیان ارشد
نقل قول این ارسال در یک پاسخ



موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  کمک برای شروع برنامه نویسی seyed ehsn ۲۱ ۱۴,۲۱۵ ۲۴ بهمن ۱۴۰۲ ۰۵:۱۰ ب.ظ
آخرین ارسال: maryamjafari63
  مبحث جستجوهای محلی Elham_tm ۷ ۳,۹۶۳ ۱۷ اسفند ۱۴۰۰ ۰۵:۴۳ ب.ظ
آخرین ارسال: KB2000
  رودمپی برای برنامه نویسی Doctorwho ۱ ۱,۷۶۸ ۲۵ آذر ۱۴۰۰ ۰۳:۰۲ ق.ظ
آخرین ارسال: one hacker alone
  استخدام برنامه نویس یا کارآموز برنامه نویسی سی شارپ Hesitant_Girl ۰ ۱,۴۸۳ ۲۰ شهریور ۱۴۰۰ ۱۲:۰۲ ب.ظ
آخرین ارسال: Hesitant_Girl
  رودمپی برای یادگیری برنامه نویسی Doctorwho ۰ ۱,۵۶۷ ۲۳ اردیبهشت ۱۴۰۰ ۱۱:۲۲ ق.ظ
آخرین ارسال: Doctorwho
  درخواست برنامه برای اردینو در iot seokheiry ۱ ۲,۹۷۳ ۱۳ بهمن ۱۳۹۹ ۱۲:۵۵ ب.ظ
آخرین ارسال: iot-programer
  کدام زبان برنامه‌نویسی بهترین انتخاب است؟ elecomco ۲ ۲,۷۶۲ ۱۰ شهریور ۱۳۹۹ ۰۵:۱۶ ب.ظ
آخرین ارسال: kilookiloo
Sad مشکل در برنامه نویسی شیء گرا Xialu ۰ ۱,۹۵۹ ۰۵ شهریور ۱۳۹۹ ۱۲:۰۰ ب.ظ
آخرین ارسال: Xialu
  برای آموزش مبانی برنامه نویسی چکار کنیم؟ elecomco ۰ ۲,۳۰۱ ۱۹ تیر ۱۳۹۹ ۱۲:۰۵ ق.ظ
آخرین ارسال: elecomco
  همکار در حوزه speech recognition و برنامه نویسی اندروید pasargad7788 ۰ ۱,۹۶۱ ۳۱ خرداد ۱۳۹۹ ۰۹:۰۶ ب.ظ
آخرین ارسال: pasargad7788

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close