PDA

View Full Version : حل مسئله ریاضی در ویژال بسیک



mahdi.manian
جمعه 09 فروردین 1392, 22:49 عصر
با سلام.

دوستان استادمون 20 سوال داده گفته الگوریتم و برنامه شو بنویسید. من توی دوتاش گیر کردم.

اولی این است:
برنامه ای بنویسید که ضرایب معادله ای درجه دوم را بگیرد و ریشه های آن را بر روی فرم چاپ کند.

اصلا ضرایب معادله ای درجه دوم چی هست؟ ممنون میشم اگه دوستان راهنمایی کنند و در صورت امکان الگوریتم و کد های برنامه ی این مسئله را قرار دهند.

سوال دوم:
برنامه ای بنویسید که یک عدد 4 رقمی را از ورودی دریافت کند و اگر آن عدد با مقلوب خود برابر بود، کلمه yes و اگر برابر نبود کلمه no را چاپ کند.

این سوال دوم را فهمیدم باید چکار کنم. مثلا اگه عدد 4004 بود باید چاپ کند yes و مثلا اگه 1234 بود چون مقلوب آن 4321 میشه باید چاپ کند no. ممنون میشم اگه دوستان برنامه و الگوریتم این مسئله را هم دارند قرار دهند.

مسئله اولی برام از دومی مهمتره چون اولی را هیچی ازش نفهمیدم ولی دومی را یکم فهمیدم.

خیلی خیلی خیلی ممنون از راهنمایی دوستان.
خیلی هم عجله دارم چون باید فردا پروژه را تحویل بدم.

با تشکر. منتظرم.

mehran901
جمعه 09 فروردین 1392, 23:12 عصر
دوست عزیز خیلی سادس اینا ، اولی که منظور از ضرایب معادله درجه دوم a b c در ax ^ 2 + bx + c هست! واسه به دست آوردن ریشه چندین و چند راه داری!
راه حل کلی استفاده از روش دلتا هست که مطمئنا در صورت وجود ، جواب به دست میاد
ابتدا کاری که میکنین عبارت b ^ 2 - 4 * a * c یا همون دلتا رو محاسبه کنین اگه منفی شد معادله فاقد جواب اگه صفر ، معادله دارای جواب مضاعف x = - b / a و اگه مثبت شد 2 جواب داره که عبارتند از :

b + radikal(delta)/ 2 * a-
b - sqr(delta) / 2 * a-

به همین سادگی !

واسه سوال دوم هم که روش مسخرش اینه که مقدار عدد ورودیت رو با مقدار strrevers برابر شد مشخص کنه ،
If a = StrReverse(a) Then MsgBox "ok"
!!
خب مطمئنا این روش رو استادتون بهش نمره نمیده چون باید الگوریتم برعکس کردن عدد روبنویسین...! نه استفاده از تابع آماده...! ولی خب الگوریتمش هم سادس
مثلا وقتی میخوای عدد 12 رو برعکس کنی اول بر 10 تقسیم کن براکت بگیر(یک میشه رقم دهگان) حاصل رو در 10 ضرب کن جوابش میشه رقم دهگان یعنی 10! حالا 12 رو ازش کم کن تا یکانش هم به دست بیاری...! حالا ارقام رو داری و میتونی چک کنی آیا عکسش با اصلش یکیه یا نه!!

mahdi.manian
جمعه 09 فروردین 1392, 23:13 عصر
دوستان مشکل حل شد.

با تشکر.

mehran901
جمعه 09 فروردین 1392, 23:14 عصر
اینم ی الگوریتم کلی واسه مقلوب کردن...
ین الگوریتم اگر عددی مانند 685 رابگیرد عدد 586 را به شما خواهد داد.



حال الگوریتم را در زیر دنبال کنید.

0- شروع

1- a را از ورودی بگیر.

2- c <----- 0

3- ادامه بده تا زمانی که a>0

الف- b <----- [a/10] *integer

ب- d<-----a-(b*10) *Remain

پ- a <----- b

ت- c <-----(c*10) +d

4- c را چاپ کن.

5- پایان

mahdi.manian
جمعه 09 فروردین 1392, 23:28 عصر
دوست عزیز خیلی سادس اینا ، اولی که منظور از ضرایب معادله درجه دوم a b c در ax ^ 2 + bx + c هست! واسه به دست آوردن ریشه چندین و چند راه داری!
راه حل کلی استفاده از روش دلتا هست که مطمئنا در صورت وجود ، جواب به دست میاد
ابتدا کاری که میکنین عبارت b ^ 2 - 4 * a * c یا همون دلتا رو محاسبه کنین اگه منفی شد معادله فاقد جواب اگه صفر ، معادله دارای جواب مضاعف x = - b / a و اگه مثبت شد 2 جواب داره که عبارتند از :

b + radikal(delta)/ 2 * a-
b - sqr(delta) / 2 * a-

به همین سادگی !


متوجه نشدم! ممنون میشه اگه بیشتر توضیح بدید.

با تشکر.

mehran901
جمعه 09 فروردین 1392, 23:42 عصر
چیز خاصی نیس ... کافیه مقادیر ضرایب که گفتم رو 2 بار تو فرمول زیر ( ی بار + ی بار - ایش جاگذاری کنی )
http://upload.wikimedia.org/math/8/e/4/8e4fef5352eb498b3534af481c8c4fd4.png

mahdi.manian
جمعه 09 فروردین 1392, 23:55 عصر
خب اینکه همون روش دلتا برای حل معادلات درجه دو هست...

سوال من اینه که این که میگه: ضرایب معادله ای درجه دوم را بگیرد و ریشه های آن را بر روی فرم چاپ کند

این اصلا یعنی چه؟ چطوری باید بگیریمش؟ ریشه هاش منظورش این هست که اگر منفی شد، ریشه ندارد، اگر 1 شد، یک ریشه و اگر بیشتر از 1 شد، دو جواب دارد؟ منظور این هست؟

خیلی ممنون.

mehran901
شنبه 10 فروردین 1392, 00:16 صبح
اولا اگه بیشتر صفر شد دوجواب کمتر صفر بی جواب و صفر جواب مضاعف داره :p
دوما نحوه گرفتن ، ساده ترین حالتش اینه شما به شکل زیر عمل کنید

dim a%,b%,c%
a = InputBox("enter ur first coefficient which is pointing to a", "", "", 50, 50)
b = InputBox("enter ur second coefficient which is pointing to b", "", "", 50, 50)
c = InputBox("enter ur third coefficient which is pointing to c", "", "", 50, 50)
If ((b ^ 2 - 4 * a * c) < 0) Then MsgBox "no result "
)If ((b ^ 2 - 4 * a * c) = 0) Then MsgBox val( - b /( 2 * a )

مثال بالا فقط حالت بدون جواب و مضاعف رو بررسی می کنه ، میتونی کدت رو حرفه ای تر بنویسی با استفاده از حلقه و حذف متغییر های اضافه