آیا تئوری و ریاضیات در زندگی ما کاربردی دارد؟
تقریبا همهی ما، یا بهتره که بگوییم همهی ما، جامعهی فارغالتحصیلان کمابیش سوار تاکسی، مهمانی و خلاصه اینور اونور شنیدیم که درس دیگه فایده نداره و الان همهی درس خوندهها بیکار هستن و … قسمت دوم سخن این عزیزان تا حدودی هم قابلدرک و ملموس، هم باتوجهبه بعضی آمارو ارقام میشه صحت موضوع را بررسی کرد. مثلا جامعه شاغلین افرادی که مدرک تحصیلی دیپلم دارند بیشتر از جامعه شاغلینی است که مدرک تحصیلی لیسانس دارند. و اما قسمت اول سخن این عزیزان؟ اینکه بیکاری در جامعه تحصیلکردهها روزبهروز، البته در کشورما، داره بیشترو بیشتر میشه، حتی نمیتواند کوچکترین دلیل برای این موضوع باشد که درسخواندن فایدهای ندارد. سخن این عزیزان را بههرنحوی که ممکنبود با خونو دل پذیرفتیم. اما یه موضوعی هست که هرچی فکر میکنیم دقیقا نمیدونیم کجای دلمون بزاریمش، اونم اینکه مهرانمدیری در یکیاز دورهمیهاش میگه که: من علت ریاضیات در جهان را نمیدونم! و بهعقیده ایشان ریاضیات فقط درحد یک جمعو تفریق مفید است! ما این حرف آقای مدیری را میزاریم به حساب شوخی و جواب این سوال که واقعا چرا بیکاری در جامعه تحصیلکردهها بیداد میکنه و خود تحصیلکردهها تا چه حد در این امر مقصرند را بهعهده خودتون میگذاریم و اگر اجازهبدهید برویم سراغ موضوعاصلی و جذاب این مقاله، شاید بتوانید در بین خطوط جواب سوالی که بهعهدتون گذاشتیم را پیداکنید. ولی قبلش اینو بهتون بگم که بحث ما مشخصا درمورد یک موضوع تخصصی خواهد بود و تخصصما جامعهشناسی نیست. این هنر شماست که در بین خطوط جواب سوالتان را پیدا کنید.
چالش کاربرد تئوری و ریاضیات در برنامهنویسی
اصولا در یک کار حرفهای قبلاز اینکه بخواهیم سریع کامپیوترمان را روشنکنیم و شروعبه کدنویسی کنیم، بایداز قبل حداقل یک الگوریتم که روندکلی پروژه را مشخص میکند داشتهباشیم. تاثیر ریاضیات در این الگوریتم خود بهتنهایی وزن زیادی خواهدداشت. حتی بعداز این مرحله و درهنگام کدنویسی، اگر قرار است شما یک کد حرفهای داشتهباشید، باید خدمتتان عرضکنم که ریاضیات یار دیرین و همیشگی شما خواهد بود.
حرفکلیما در این مقاله این خواهد بود که اگر نمیخواهید با ریاضیات رابطه خوبی برقرارکنید، شما درنهایت مجبورخواهیدبود یا پروژهتان را نیمهکاره رها کنید، یا اگر با هزار زحمت و سعی و خطا توانستید پروژه را تکمیلکنید، به احتمالزیاد یک جای کار میلنگد. این لنگانبودن کار گاها میتواند هزینه پروژه را تا چندین برابر افزایش دهد، که اتفاقا مقاله ما به این موضوع خواهد پرداخت. پس با ما همراه باشید.
سیستم متمم ۲
اگر از درس مدارمنطقی بهخاطر داشتهباشید، میدانید که درنهایت این سیستم بهعنوان بهینهترین سیستم به ما معرفیشد و خیلیاز دردسرهایی که سیستم متمم۱ و سیستم علامت و مقدار داشتند را نداشت. در ورای تئوری و توضیحات سیستم متمم۲ ، ما میخواهیم به یک نکته نهفته در دل این سیستم اشارهکنیم که به احتمال زیاد تاالان نشنیدهاید، یا اگر شنیدهاید از اهمیت و کاربرد این موضوع بیخبر بودید. و یااینکه از کل آن چیزیکه قرار است ما درادامه این مقاله بیانکنیم بهطورکامل باخبر بودید و اشراف کامل بر کاربرد این موضوع دارید، که در این صورت بهاحتمالزیاد خواندن ادامه این مقاله برایشما تکراریخواهدبود.
سیستم متمم۲ تضمین میکند که اگر ما چندین عدد را باهم جمعو تفریق کنیم، درصورتیکه درهنگام عملیات(نه پایان عملیات) سرریزی (overflow) رخ بدهد، اما رنج یا محدوده نتیجه نهایی، از تعداد بیتهایی که ما برای اعداد درنظرگرفتیم بیشتر نشود، مشکلی بهوجود نمیآید. و نیازیبه درنظرگرفتن بیتهای اضافی، برای سرریز، نخواهد بود.
شاید اگر منم بودم و یکدفعه با این جمله گنگ و نامفهوم مواجهه میشدم، چیزی از کلیت موضوع دستگیرم نمیشد. پس با دقت به ساعت زیر بنگرید.
شما برای تست، میتوانید بااستفادهاز ساعت ، چندین عدد، که فقط بعضی از آنها در محدوده هستند را باهم جمعکنید و ببینید که درهنگام عملیات باوجوداینکه چندینبار سرریز رخ میدهد، اما نتیجهنهایی صحیح میباشد. البته بهیاد داشتهباشید که مجموع این اعداد باید در محدوده باشد. و همچنین توجهداشتهباشید که برای جمع در جهت ساعتگرد و برای تفریق درجهت پادساعتگرد حرکت کنید.
بهعنوانمثال میخواهیم نتیجه عبارت ۱۴-۱۲+۶ را بااستفادهاز این سیستم بدستآوریم. همانطورکه مشاهده میکنید دو عدد ۱۴- و ۱۲ در محدوده اعداد چهاربیتی سیستم متمم۲ نیستند، اما نتیجه حاصلجمع در محدوده این سیستم میگنجد. ابتدا از عدد ۶ شروع میکنیم و درجهت ساعتگرد ۱۲واحد حرکت میکنیم، به عدد۲ خواهیمرسید. سپس ۱۴واحد بهصورت پادساعتگرد حرکت میکنیم، به عدد۴ خواهیمرسید که همان جواب مسئله میباشد. اگر توجهکردهباشید درطول این عملیات در مجموع چهاربار Overflow و Underflow رخدادهاست اما نتیجهنهایی صحیح میباشد!
متخصصین دیجیتالی که ایده سیستم متمم۲ به ذهنشان خطور کرد و زحمت کشیدند سیستم به این خوبی را تدوین کردند، قطعا فقط برای بازی با اعداد روی کاغذ، شبیه کاری که ما در بالا انجام دادیم نبود. بلکه هدفشان فراتر از این بود و خواستند چالشهایی که مدارات دیجیتال در عمل با آن روبهرو بودند را برطرفکنند. حقیقتا موفق هم بودند و چالش دو ۰ وجود داشتن، پیچیدگی مدار تفریقکننده و … در سیستمهای قبلی را برطرفکردند. نگراننباشید ماهم قرارنیست که فقط کاغذبازی کنیم، بلکه با یک مثال عملی همراهشما خواهیم بود.
ما برای اثبات ادعای خود، مباحث مطرحشده را در بستر یک سختافزار پیادهسازی خواهیمکرد. برای این کار یک میکروکنترلر AVR که رجیسترهای این نوع میکروکنترلر ۸بیتی میباشند را درنظر میگیریم. سپس چهارمتغیر ۸بیتی علامتدار تعریفخواهیمکرد. قرار است نتیجه یک عملیات جبری بین سه متغیر را، به متغیر چهارم انتسابدهیم. سناریو به این صورت میباشد که سه کلید ورودی خواهیمداشت که با فشردن کلید اول، ۱۰واحد به مقدار متغیر اول و با فشردن کلید دوم، ۱۰واحد به مقدار متغیر دوم افزوده خواهد شد. و همچنین با فشردن کلید سوم، ۱۰واحد از مقدار متغیرسوم کم خواهد شد. حال مجموع این سه متغیر در متغیر چهارم جایخواهدگرفت. بهعنوانمثال اگر مجموع دو عدد اول عددی بین ۱۲۸- تا ۱۲۷ باشد، و حال اگر حاصلجمع دوعدد قبل را با عددسوم جمعکنیم و سرریزی رخ ندهد، مشکلی نخواهیمداشت و نکتهی جدیدی هم نخواهد بود که ما خدمتشما عرضکنیم. اما ما بااستفادهاز کلیدهای ورودی بهنحوی متغیرها را مقداردهی میکنیم که مجموع دو متغیر اول و دوم از محدوده ۱۲۸- تا ۱۲۷ خارج باشد و اصطلاحا سرریز یا overflow رخبدهد. اگر یادتانباشد گفتیم که با هربار فشردن کلید سوم، ۱۰واحد از این متغیر کم خواهد شد پس با چندبار فشردن این کلید، کاری میکنیم که مجموع سه متغیر درنهایت در محدوده ۱۲۸- تا ۱۲۷ جای بگیرد. مجموع اعداد را برروی LCD نمایشخواهیمداد. مشاهده میکنیم که نتیجه حاصل صحیح میباشد!
مگر درحین عملیات سرریز رخ نداد، پس چرا نتیجهنهایی صحیح است؟ این دقیقا یکیاز خواص کمتر شناختهشده، سیستم متمم۲ میباشد که تضمین میکند اگر درحین عملیات سرریزی رخ بدهد، ولی نتیجهنهایی در محدوده جای بگیرد، هیچ مشکلی بهوجود نخواهد آمد و نیازیبه درنظرگرفتن بیتهای اضافی نمیباشد. در این رابطه در محیط CodeVision کدی نوشتیم که در پایین همین مقاله میتوانید دانلود نمایید. در پروژهی پیوست، برایاینکه خودتان بتوانید از کد موردنظر تست بگیرید فایل پروتئوسی نیز وجود دارد. و نکته دیگر اینکه کل کد مربوطبه این عملیات کلا یکی دو خط میباشد، بقیه کد صرفا برای گرفتن بانز کلید به صورت نرمافزاری میباشد تا اگر خودتان خواستید درعمل روی یک تراشه avr با رجیسترهای ۸بیتی تستبگیرید مشکلی بهوجود نیاید. کد بانز کلید نیز بهصورتی نوشتهشدهاست که با برداشتن دست از روی کلید عملخواهدکرد.
نتیجهگیری
شاید هنوز هم بااینکه موضوع را بهخوبی کنکاش کردیم، ارزش اینکار برایتان ملموس نباشد. پس اجازه بدهید یک بررسی کوتاه، حول محور اقتصادی این موضوع نیز داشتهباشیم. فرضکنید شما بهعنوان طراح در یک پروژه، برای کارهای پردازشی خاصی، عرض بیتهای متفاوتی درنظر میگیرید و از خواص سیستم متمم۲ استفاده نمیکنید. اگر پروژهی شما کل حجم تراشه موردنظرتان را دربرنگیرد مشکلینخواهیدداشت ولی درصورتیکه حجم پروژه شما بیشتر از حجم تراشه موردنظر باشد، مجبور میشوید تراشه خود را عوضکنید و تراشهای تهیهکنید که میزان حجمش از تراشه قبلی بیشتر باشد. فکر نکنید که رعایتنکردن این موضوع فقط درحد درصد خیلیکمیاز حجم کل تراشه تفاوت ایجاد خواهد کرد و شما میتوانید تقریبا با همان هزینه یک تراشه دیگر جایگزین کنید. بلکه در خیلیاز پروژهها، رعایتکردن این موضوع میتواند حجمکد را بهشدت کاهشدهد.
اما این موضوع چهربطی به اقتصاد پیدا میکند؟ اگر تفاوت قیمت دو تراشه فقط ۱۰درصد باشد شاید مشکل چندانی ایجاد نکند. اما درنظربگیرید که قرار است از پروژه شما تولید انبوه شود، در اینصورت شما باید ۱۰درصد را، در nمحصولی که قرار است تولید شود، ضربکنید. قطعا مبلغ بسیارزیادی خواهد بود و توجیهاقتصادی نخواهدداشت.
پس اینجاست که میتوان فهمید مفاهیم تئوری و ریاضیات میتوانند تا چه اندازه ارزشمند باشند و چه نقشی را ایفا کنند. این مقاله ادامهدار خواهد بود. پس با ما همراه باشید.
دانلود فایلهای پروژه پیوست:
منبع: سیسوگ