تبلیغات
Pro4 programming - Tabulation method

نویسنده :Pourya Alinezhad
تاریخ:1388/12/3-15:20

Tabulation method

اول پست قبلی را بخوانید بعدش بیایید اینجا…

برای پروژه ی مدار منطقی می خواستم برنامه ی قبلی رو (مبدل کدها) رو بنویسم.خوب نوشتمش.اما یه جورایی ازش خوشم نیومد.بیشتر به درد برنامه نویسی و مخصوصا اسمبلی می خورد.برای همین این برنامه رو نوشتم.

خوب تو درس مدار منطقی (فصل سوم-کتاب مانور) برای ساده سازی توابع بولین دو راه پیشنهاد شده.یکی استفاده از جدول Karnaugh  که برای توابعی با تعداد متغیر کمتر از 5 تا به درد می خوره. و دومین روش که برنامه اش رو نوشتم،( Quine-McCluskey ) که برای توابعی با تعداد متغییر های زیاد به کار

 می رود.

خوب قبل از شروع به نوشتن این برنامه یه search کردم تا ببینم قبلا این برنامه نوشته شده یا نه؟

قبل از من چند نفر این برنامه رو نوشته بودند (به زبان های Delphi و Qbasicو vb)  اما هر کدوم مشکلات و یا محدودیت هایی داشتند.کار با برنامه ای که به زبان Qbasic  نوشته شده بود بسیار مشکل بود و اصلا User friendly  نبود.و فقط توانایی مینیمم کردن توابعی با تعداد متغییر کمتر از 26 را داشت.(به دلیل عدم توانایی اخذ حافظه از سیستم برای توابعی با تعداد متغیر بیشتر)

برنامه ای که با vb  نوشته شده بود کاملا classified بود و توسط آقای Allaedin Hallak در دانشگاه  Computer Science, University of Science & Technology نوشته شده بود.این برنامه از

 list-link برای اخذ حافظه از سیستم استفاده می کرد و نسبتا برنامه ی خوبی بود.اما یه مشکل بزرگ داشت!! الگوریتمش غلط بود.اولش که این برنامه رو دیدم ناامید شدم و با خودم گفتم که دیگه نوشتن یک برنامه که قبلا نوشته شده فایده ای نداره اما وقتی چند تا عدد (Minterm) به برنامه دادم و دیدم که Error  داد یه جورایی خوشحال شدم.(مشکل برنامه عدم توانای در تشخیص انتخاب های نخستینی که تکرار شده بودند است.) خوب پس با این که برنامه رو خیلی خوب نوشته بود ولی برنامه ای که غلط باشه که به درد نمی خوره!!!! در ضمن در این برنامه برای وارد کردن اعداد راه مناسبی پیش بینی نشده بود،یعنی کاربر برای وارد کردن 2000  مینترم باید همه ی آنها را یکی یکی وارد می کرد (خیلی خسته کننده است! و امکان اشتباه در ورود اعداد بالا می باشد).تازه بالفرض که هر 2000 تاش رو وارد می کردیم و فقط یک عدد رو اشتباهی دو بار وارد می کردیم.حالا تازه برنامه error می داد که عدد تکراری وارد شده،کاربر باید بشینه و همه ی اعدادی رو که وارد کرده رو از اول بینه تا اون عدد تکراری پیدا بشه.خلاصه   اصول مهندسی نرم افزار رعایت نشده بود.

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

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

1-توانایی برنامه در اخذ حافظه از سیستم برای توابعی تا 180 متغییر.(فکرش رو کنید برای تابع 180 متغیره باید 2^180=1.5324955408658888583583470271503e54 خانه ی حافظه برای ذخیره ی متغییر ها (مینترم ها) از سیستم اخذ شود.تازه عدد بالا رو باید ضرب در 2 هم کنیم.(برای ذخیره ی هر متغییر از نوع عدد صحیح 2 بایت فضا لازم است.)

2-توانایی وارد کردم بازه ای از اعداد.برای مثال برای وارد کردن مینترم های 1000 تا 2000 لازم نیست که این اعداد را تک تک وارد کنیم.در این برنامه دو راه برای ورود داده ها پیش بینی شده است.

3-هوشمند بودن برنامه.این برنامه قابلیت تشخیش و کنترل ورودیها را دارد.کاربر فقط توانایی وارد کردن اعداد در بازه ی مشخص را دارد.همچنین برنامه وارد کردن اعداد تکراری را نمی پذیرد.(امتحان کنید.!)

امکان وارد کردن کاراکتر های غیر مجاز (مانند حروف الفبا و یا اعداد اعشاری) از کاربر گرفته شده و برنامه اجرازه ی وارد کردن این ورودی ها را نمی دهد.

نوشتن این برنامه حدود 10 روز زمان برد و 2 روز هم از چشم درد افتاده بودم تو خونه!!

خوب برای  دانلود برنامه اینجا کلیک کنید.(فایل اجرایی هر سه برنامه ی دیگر نیز در این پوشه وجود دارد)