|
جوتی
پسر/دختر بابالنگدراز |
||
|
My Favorites:
bbgoal lamp far-near ashoob miladkdz rohmamiya acetaminophen debug smartdevice farstec khak aaab nochagh persiangirl parsmedia w3schoolsir azemat sargardoon mahoordad techopedia My Programs: BlogClient MinsweeperRobot Calculator CalcWebSrvc 2unicode HuffmanCode FileValidator ConvexHall2D FSProject IISLog Options: No CSS CSS Layout |
ماشین حساب
ماشین حساب قبل از اینکه بروم دانشگاه یکی از هدف های بزرگم این بود که ماشین حسابی بنویسم که فرمول های ریاضی را محاسبه کند. و آخرسر وقتی دانشگاه رفتم این کار را کردم. میدونید که چه جور ماشین حسابی رو میگم ؟ یه چیزی که این عبارت رو محاسبه کنه : 4+12*569+4^10 و حتی از این بهتر اینکه بتوان برای آن متغیر تعریف کرد. این برنامه از سه بخش تشکیل شده یک فایل اجرایی که فقط رابط کاربر است و کارهای محاسباتی را انجام نمیدهد و با دلفی نوشته شده. دو فایل dll که نام یکی از آنها stack و دیگری Infix است. stack.dll همانطور که از اسمش مشخص است این فایل یک پشته درست میکند. با ویژوال بیسیک 6 نوشته شده و در پیاده سازی آن از آرایه استفاده شده است. البته با استفاده از redim و این جور چیزا اندازه آن دینامیک است. اگر با C مینوشتم حتما از لیست پیوندی link list برای درست کردن پشته استفاده میکردم. سورس این فایل فقط 58 خط است! (برای یک پشته زیادم هست!) کمی هم توضیح درباره پشته : پشته ساختماد داده ای است که بیشتر از هر چیز شبیه سینی هایی است که روی هم گذاشته شده باشند. به این معنی که اولین داده ای که وارد آن میشود آخرین داده ای است که خارج میشود First In Last Out(FIFO) . دو تابع اصلی این ساختمان داده push و pop هستند. تابع push یک عنصر به بالای پشته اضافه میکند و pop یک عنصر از بالای پشته حذف میکند و مقدار آن را برمیگرداند. infix.dll این فایل وظیفه اصلی را انجام میدهد. تبدیل کردن عبارت infix به postfix و سپس محاسبه کردن عبارت postfix و برگرداندن نتیجه. برای استفاده از این dll باید یک شی از کلاس CInfix ایجاد کنید و عبارت ریاضی خودتان را به پروپرتی Infix بدهید. اگر متغیری هم دارید مقدار آنها را با فرمت value;"=varname" به پروپرتی VariableList بدهید. مانند زیر: VariableList="y=10;x=3;varvarvari=3.23" حالا فقط کافی است تابع claculate را صدا کنید تا مقدار محاسبه شده را به شما برگرداند.اگر خطایی اتفاق بیفتند شماره آن خطا را میتوانید با GetLastError بگیرید. لیست شماره خطاها در زیر آمده : NO_ERROR = 0 PARANTEZBAZ_REQUIRED = 1 PARANTEZBASTEH_REQUIRED = 2 VARIABLE_NOTDEFINE = 4 OVERFLOW = 6 WRONG_VARIABLE_LIST = 8 VARIABLE_VALUE_ISWRONG = 16 DIVID_BY_ZERO = 32 OPERATOR_NOT_DEFINED = 64 INVALID_CALL_OF_LOG = 65 INVALID_STATMENT = 99 UNKNOWN_ERROR = 200 اما روش کار این کلاس : ابتدا عبارت infix (عبارتی که در آن عملگر بین عملوندها است) به postfix (عبارتی که در آن عملگر بعد از عملوندها میآید) تبدیل میشود. برای مثال عبارت x+y تبدیل به xy+ میشود و عبارت (x+y)*z تبدیل به عبارت xy+z* میشود. سپس عبارت postfix ارزیابی میشود. که شبه کد آن در زیر آمده است. for i=0 to len(infix) if infix[i] is operand then stack.push(infix[i]) else x=stack.pop y=stack.pop stack.push(y operator x) end if next return stack.pop این کلاس از عملگرهای منها، منفی، ضرب، جمع، توان(^)، پرانتز ، ln، sin، cos، tan، atn و فاکتوریل(!) پشتیبانی میکند. هزینه اضافه کردن یک عملگر جدید زیاد نیست و با کمی دقت میتوانید یک عملگر دیگر اضافه کنید. البته به دلیل یکی بودن کاراکتر منها و منفی تقریبا با تقلب کار میکند. به این معنی که در ابتدا تمام منفی ها تشخیص داده میشود و به یک کاراکتر دیگر(`) تبدیل میشود. اجرای فایل exe اجرا کردن این فایل کمی دردسر دارد. اول باید دو dll را در ویندوز خودتان رجیستر کنید: regsvr32 dllPathName برای مثال :regsvr32 d:\infix.dll امیدوارم که از این برنامه خوشتان بیاید و کد آن را بهتر کنید و برای من بفرستید. بیخودی که opensource نیست. استفاده کردن از dll ها کاملا آزاد است. فکر میکنم خیلی جاها میشود از این dll ها استفاده کرد. موفق و پیروز باشید برای گرفتن برنامه همراه کد هر سه بخش آن اینجا کلیک کنید. جوتی حاشیه : اگه جا کم بیارم پاکش میکنم.
|
آرشیو ماهیانه:
مهر 81 آبان 81 آذر 81 دی 81 بهمن 81 اسفند 81 فروردین 82 اردیبهشت 82 خرداد 82 تیر 82 امرداد 82 شهریور 82 مهر 82 آبان 82 آذر 82 دی 82 بهمن 82 اسفند 82 فروردین 83 اردیبهشت 83 خرداد 83 تیر 83 امرداد 83 شهریور 83 مهر 83 آبان 83 آذر 83 دی 83 بهمن 83 اسفند 83 فروردین 84 اردیبهشت 84 خرداد 84 تیر 84 امرداد 84 شهریور 84 مهر 84 آبان 84 آذر 84 دی 84 بهمن 84 اسفند 84 فروردین 85 اردیبهشت 85 خرداد 85 تیر 85 امرداد 85 شهریور 85 مهر 85 آبان 85 آذر 85 دی 85 بهمن 85 اسفند 85 فروردین 86 اردیبهشت 86 خرداد 86 تیر 86 امرداد 86 شهریور 86 مهر 86 آبان 86 آذر 86 دی 86 بهمن 86 اسفند 86 فروردین 87 اردیبهشت 87 خرداد 87 تیر 87 امرداد 87 شهریور 87 مهر 87 آبان 87 آذر 87 دی 87 بهمن 87 اسفند 87 فروردین 88 اردیبهشت 88 خرداد 88 تیر 88 امرداد 88 شهریور 88 مهر 88 آبان 88 آذر 88 دی 88 بهمن 88 اسفند 88 فروردین 89 اردیبهشت 89 خرداد 89 تیر 89 امرداد 89 شهریور 89 آرشیو سالیانه: سال 1381 سال 1382 سال 1383 سال 1384 سال 1385 سال 1386 سال 1387 سال 1388 سال 1389 قصههای من: گرگ قسمت اول گرگ قسمت دوم موش کور باغبان جزیره آتشفشان کرم ابریشم توپ قصههای کامپیوتری کتاب VB.NET مقدماتی جزوه ویژوال بیسیک رمزگذاری-رمزگشایی |
|
تمام حقوق این سایت متعلق به امیر احسانی است.
شما حق دارید از مطالب این سایت هرطور که مایل هستید استفاده کنید بشرط اینکه برای آنها هیچ گونه وجهی دریافت نکنید. اگر منبع را هم ذکر کنید ممنون میشم. jooti [at] ehsani [dot] org |
||