PDA

View Full Version : سوال: نوشتن فرمول محاسباتي بعد از كمپايل برنامه



amiralex
شنبه 07 بهمن 1391, 09:27 صبح
سلام به همه
من يه سوالي دارم

در فرمي كه در زير قرار دادم 4 تا تكست باكس قراردادم با يك دكمه

ميخوام هنگامي كه در مقدار عددي اعدادي رو مثلا عدد 3 و مقدار عددي بعدي عددي مثل 5 رو وارد كردم در قسمت فرمول هم كدي مثل زير رو بنويسم و نتيجه رو در قسمت مربوطه ببينم


Dim A as integer
Dim B as integer
A=txt2
B=txt3
Txt4=A+B




آيا امكانش هست اين كار رو انجام داد؟
بعبارتي ميخوام فرمول رو هنگام اجراي برنامه بنويسم

از دوستان ميخوام راه حلي ارائه بدن

با تشكر

Hashemvp
شنبه 07 بهمن 1391, 09:38 صبح
دوست عزیز بستگی به پیچیدگی فرمولت داره این چیزی رو ک میخوای
و ی طورایی مثل ماشین حساب میمونه باید عمل مورد نظر رو انتخاب کنه و بعد اون هم انجام میده
موفق باشی

amiralex
شنبه 07 بهمن 1391, 09:49 صبح
ممنونم از پاسختون ولي اگه ميشه يه مثالي در فرم آپلود شدم ارائه بديد بهتر متوجه ميشم

ممنونم

Hashemvp
شنبه 07 بهمن 1391, 10:29 صبح
این هم ی نمونه پر از ایراد!!!!!!!!!!!!

ولی خوب بهر حال ی نمونه است دیگه بیشتر از این نباید انتظار داشت ازش:لبخند:

Private Sub Command_Click()
Dim HLines$()
Dim H As Long
Dim V As Long
Dim P As Long
Dim HvP As String
Dim HSP(5) As String
Dim HF(5) As String
Dim HIndex As Integer
HIndex = 0
txt1.Text = txt1.Text + vbNewLine + Replace(txt1.Text, "A", txt2.Text)
txt1.Text = txt1.Text + vbNewLine + Replace(txt1.Text, "B", txt3.Text)
HLines$ = Split(txt1.Text, vbCrLf)
For Hfor = 1 To Len(HLines$(3)) 'براي محاسبه دوباره بهتره ک همه خط ها بجز خط اول پاک کنی ک محاسبه جديد رو انجام بده
HvP = Mid(HLines$(3), Hfor, 1)
If HvP <> "+" And HvP <> "-" Then
HSP(HIndex) = HSP(HIndex) + HvP
Else
HF(HIndex) = HvP
HIndex = HIndex + Val(1)
End If
Next
txt4.Text = Val(HSP(0)) + Val(HSP(1)) 'بفرض اينکه اولين فرمول هم جمع .!!!! کلک رشتي زدم
For Hfor1 = 1 To UBound(HF)
Select Case HF(Hfor1)
Case "+"
txt4.Text = Val(txt4.Text) + Val(HSP(Hfor1 + Val(1)))
Case "-"
txt4.Text = Val(txt4.Text) - Val(HSP(Hfor1 + Val(1)))
End Select
Next
End Sub

ببخشید دیگه همین الان نوشتمش زیاد حال نداشتم خیلی قوی و به قول معروف هوش مصنوعیشو قوی کنم:متعجب:
امیدوارم کمکی کرده باشه بهت
موفق باشی

amiralex
شنبه 07 بهمن 1391, 12:17 عصر
ممنونم از شما كاملا مفيد بود
روي متغير Hfor و Hfor1 ارور ميداد كه من اونا رو از نوع Integer تعريف كردم

ولي ايكاش راه ساده تري بود تا من كه خيلي هنوز مثل شماها وارد نيستم هم سر در بيارم

باز هم متشكرم از زحمتي كه كشيديد

Hashemvp
شنبه 07 بهمن 1391, 12:44 عصر
راه ساده تری نیست این هم ک در بالا گذاشتم خیلی ناقصه
چون باید برسی کنی ک فرمول مقداری رو داخل پرانتز داره یا
اولویت بندی کنی
و اینکه خیلی از فرمول های ریاضی باید تبدیل بشن و .....................
و اینکه این مثال بالا تا 6 مقدار رو بیشتر نمیتونه محاسبه کنه بخاطر اینکه مقدار ارایه رو پایین گرفتم
کار سنگینی هست اینکاری ک شما میخوای انجام بدی و اینکه حتما باید از قبل فرمول ها ساختار پایه اش توی نرم افزار تعریف شده باشه
منظورم مثل عمل جمع و ضرب و تقیسم و تفریق هست
حالا بخوای لوگاریتم هزار تا چیز دیگه رو ب دست بیاری ک دردسری دارن برای خودشون اونا
خلاصه موفق باشی

امین مستانی
شنبه 07 بهمن 1391, 13:11 عصر
سلام

با اجازه آقا هاشم :

من این تابع رو از یک سایت خارجی پیدا کردم قبلا در این تاپیک قرار دادم :
http://barnamenevis.org/showthread.php?364042-%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D9%87-%D9%85%D9%82%D8%AF%D8%B1-%D9%88%D8%B1%D9%88%D8%AF%DB%8C&p=1606951&viewfull=1#post1606951

حالا مطابق خواسته شما تغییرش دادم :

99020

موفق باشید

amiralex
یک شنبه 08 بهمن 1391, 07:48 صبح
آقاي امين مستاني ازتون ممنونم واقعا همون چيزي بود كه ميخواستم متشكرم از شما

البته در اون تابع با اجازه اساتيد يه تغييري انجام دادم چون عمليات تفريق رو انجام نميداد

باز هم ممنون

Hashemvp
یک شنبه 08 بهمن 1391, 08:15 صبح
آقاي امين مستاني ازتون ممنونم واقعا همون چيزي بود كه ميخواستم متشكرم از شما

البته در اون تابع با اجازه اساتيد يه تغييري انجام دادم چون عمليات تفريق رو انجام نميداد

باز هم ممنون

دوست عزیز این یک خط کد توی ماژول رو عوض کن
startpos = InStr(1, exp, "+")
بجاش اینو بذار
startpos = InStr(1, exp, "-")

خوب دقت کن همه رو عوض نکنی ها فقط اینی ک مربوط ب تفریق علامت + رو بکن - درست میشه
موفق باشی

amiralex
یک شنبه 08 بهمن 1391, 11:05 صبح
ممنونم از راهنماييهاتون

در واقع هدفم از اين كار استفاده از اين فرمول دربرنامه ايي همانند برنامه حقوق و دستمزد ميباشد به طوري كه خود كاربر بتونه فرمول هاي محاسباتي حقوق رو تعيين كنه

اين فرمول تا حدي خوبه ولي فقط يك مورد رو ميشه از اون استفاده كرد

به طور مثال تنها براي محاسبه اضافه كار ميشه استفاده كرد اگه بخواي براي محاسبه غيبت و يا ساير عوامل استفاده كرد تنها مورد آخر رو در محاسباتش مياره

در ضمن در فرمول هاي حقوق احتياج به استفاده از دستور هاي شرطي هم داره كه قاعدتا با اين كار نميشه انجام داد

من برنامه حقوق دستمزدي كه در محيط كار باهاش كار ميكنم اين ويزگي رو داره يعني به راحتي انگار قسمت كد نويسي جلوته و هر كاري ميتوني تو عوامل حقوق انجام بدي

آيا كامپونت يا چيزي مشابه وجود داره كه در فرم بتونيم به قسمت كد نويسي برنامه دسترسي داشت تا بشه اين كار رو انجام داد؟

امین مستانی
یک شنبه 08 بهمن 1391, 12:32 عصر
سلام مجدد

شما باید فرمول ها رو تو برنامه پیش بینی کنید .

این ضمیمه یک نمونه اجرای کد در برنامه کامپایل شده هست.
اما تمام دستورات رو نمیتونه اجرا کنه !

موفق باشید

MahmoodGH
یک شنبه 08 بهمن 1391, 15:55 عصر
داداش من خودم واسه برنامه ی خودم از همین Module که دوستمون گذاشتن استفاده کردم. فقط ی خورده حوصله می خواد و خلاقیت. حالا من یه نمونه کد رو برات ضمیمه میکنم ایشالله کارت را بیوفته.

99087

amiralex
دوشنبه 09 بهمن 1391, 07:56 صبح
اقا محمود بسيار ممنونم شما و دوستان ديگه كمك خوبي كرديد

آيا امكان استفاده از دستورات شرطي هم در اين فايل ضميمه شما هم ميتونه باشه؟

ببخشيد دوستان يه سوال كلي ديگه هم دارم

فرض كنيد در يك فرم ما سه تكست باكس داريم
در تكست باكس اولي يك عدد در تكست باكس دومي عدد ديگه و بخوايم در تكست باكس سوم جمع اون دو تا رو نشون بديم. راهش رو هم بلدم بايد از دستور Val و يا تعريف متغير و غيره استفاده كرد. خلاصه بگم احتياج به كد نويسي داره

سوالم اينجاست... آيا ميشه اين دستورات رو در يك فايل Notpad يا مشابه ريخت و با يك كليد كه در فرم قرار ميديم عمليات مثلا جمع اون دو تكست باكس يا هر نوع كار ديگه ايي كه به طور معمول در VB انجام ميديم رو انجام بده؟؟

نميدونم تونستم منظورمو برسونم يا نه

پيشاپيش از راهنمايي دوستان ممنونم

Hashemvp
دوشنبه 09 بهمن 1391, 08:11 صبح
فرض كنيد در يك فرم ما سه تكست باكس داريم
در تكست باكس اولي يك عدد در تكست باكس دومي عدد ديگه و بخوايم در تكست باكس سوم جمع اون دو تا رو نشون بديم. راهش رو هم بلدم بايد از دستور Val و يا تعريف متغير و غيره استفاده كرد. خلاصه بگم احتياج به كد نويسي داره

سوالم اينجاست... آيا ميشه اين دستورات رو در يك فايل Notpad يا مشابه ريخت و با يك كليد كه در فرم قرار ميديم عمليات مثلا جمع اون دو تكست باكس يا هر نوع كار ديگه ايي كه به طور معمول در VB انجام ميديم رو انجام بده؟؟

نميدونم تونستم منظورمو برسونم يا نه

پيشاپيش از راهنمايي دوستان ممنونم

اینکار میشه
و اینکه باید یکسری چیزها رو برای برنامه تعریف کنید
مثلا اگر تویاون فایل متنی نوشته بود
2+3;4+5
برنامه وقتی به کاراکتر ; رسید متوجه بشه ک ی محاسبه دیگه رو باید انجام بده یا هر طوری ک نیاز شماست تغییر کنه
و بهمین روش هم میشه پاسخ رو تیو اون فایل با نوشتن داخل اون فایل ذخیره کرده

این چیز هایی ک شما میخوای شدنی هست همه شون شدنی
منتها وقت بسیار میخواد و ی الگوریتم درست و حسابی
حتی میتونی ی زبان محاسباتی برای برنامه ات درست کنی
چند سال پیش یادمه ی کسی با همین ویبی 6 ی زبان برنامه نویسی خیلی ساده ب پارسی نوشته بود
موفق باشی

amiralex
دوشنبه 09 بهمن 1391, 08:51 صبح
آقا هاشم ممنونم از راهنماييتون. ميشه بگيد بعد از اينكه اون فايل مثلا نوت پد رو كه الگو.ريتم محاسباتي رو توش نوشتم در ويبي فراخوانيش كنم ( بعبارتي در كاماند بوشن چي بايد بنويسم كه دستورات از اون فايل تكست دريافت بشه؟)

مثلا ميشه من در اون فايل متني اينطوري بنويسم:




Dim i As Integer
i = txt1.Text
If i > 2 Then
txt2.Text = i * 8
Else
txt2.Text = i * 5
End If




و اين دستور رو بعد از ذخيره سازي در فايل متني از طريقي يك دكمه كه در فرم كه txt1 و txt2 هم در آن قرار دارند فراخواني كرد تا دستور مورد نظر اجرا بشه؟

متشكر و سپاسگذارم

Hashemvp
دوشنبه 09 بهمن 1391, 09:42 صبح
دیگه طریقه ی نوشتن داخل نت پد با خودته ک چطور راحت تر میتونی بنویسی
هر کسی از ی روش استفاده میکنه مثل زبان های برنامه نویسی دلفی ی طور دات نت ی طوره
در مورد کار کردن با فایل ها و خوندن و نوشتن داخل ی فایل تکس و یا هر چیز دیگه ای
مقاله ی زیر رو بخون کامله
http://www.programming.rozfa.ir/post/453
موفق باشید

amiralex
چهارشنبه 11 بهمن 1391, 09:09 صبح
سلام مجدد به همه و آقا هاشم
من لينك بالا رو خوندم ولي فقط نحوه كار با فايل رو نشون ميده....
من در فايل پيوستي اين كار رو انجام دادم

سوالم از شما و اساتيد ديگه اينه
چطور ميتونم محتويات فايل تكست رو كه در txt4 نشون دادم رو بعنوان فرمول يا بعبارتي كد نويسي برنامه در كامند بوشن قبول كنه و عمليات مورد نظر انجام بشه

فايل و پيوست ميكنم لطفا اگه امكانش هست برام اصلاحش كنيد

با تشكر و قبلي

Hashemvp
چهارشنبه 11 بهمن 1391, 10:01 صبح
سلام
دوست عزیز اگر به پست شماره 4 دقت کنی ی نمونه نوشتم این هم مثل همونه
ولی این رو بهت بگم اگه میخوای به این روش استفاده کنی خیلی کار خودتو پیچیده میکنی
فرض کن فرمولت از کاراکتر A استفاده کرده باشه
اونوقت باید ب برنامه بفهمونی ک هر Aای اون A نیست
موفق باشی

amiralex
چهارشنبه 11 بهمن 1391, 12:33 عصر
ممنونم از شما ولي آقا هاشم خيلي از پست 4 شما چيزي سر در نميارم
شايد البته منظورمو بد رسوندم
در واقع ميخوام تمام آنچه كه در فايل تكست هست به عنوان كد در كامند بوشن قرار بگيره و عمل كنه
مثل اين كه به طور دستي خودمون در متد كليك اون كامند بوشن كد نويسي كنيم
در صورتي كه براتون مقدور هست رو ضميمه راهنمايي كنيد تا من كه تازه كارم يه چيزايي بفهمم.

متشكرم

Hashemvp
چهارشنبه 11 بهمن 1391, 12:57 عصر
خیلی چیز عجیب غریبی میخوای
فکر نکنم اصلا بشه موقع اجرا همچنین کاری کرد
مگر ی کامپایلر بسازی ک بعد از اینکه دستورات رو وارد کرد ی فایل اجرایی جدا بسازه و اون کارها رو انجام بده
مثل نرم افزار های تروجان ساز
موفق باشی

MahmoodGH
چهارشنبه 11 بهمن 1391, 13:46 عصر
بزودی نمونه ی کاملی رو براتو میزارم. دارم سعی می کنم یادم بیاد چند سال پیش چیکار کردم برای نرم افزارم. ولی روال کار رو بهت میگم که اگه خواستی بری سرچ کنی . من از کنترل Microsoft Script Control استفاده کردم. این کنترل این قابلیت رو داره که اسکریپت نویسی کنی به زبان های VBA و JavaScript . خب روال کار هم اینطوره که باید اول یک Function برای ScriptControl تعریف کنیم (در حالت RunTime ) و بعد اون Function رو توی محل کد نویسی فراخوانی کنیم.
من این متد رو در نرم افزار ArcMap قسمت Calculate دیدم که جمع ستون ها رو نشون میداد. قسمت کد نویسی هم داشت. خب حالا واسه اینکه حرفایی که زدم کمی ملموس تر بشه برات چندتا نمونه از خود مایکروسافت میزارم :


http://support.microsoft.com/kb/184740


http://support.microsoft.com/kb/184745

منم هر وقت سورس مورد نظرم رو پیدا کردم تیکه ی مربوط به بحث شما رو میزارم تا متوجه حرفام بشین.(باید وقت بزارین روش)