PDA

View Full Version : آموزش: پیاده سازی عملیات های مختلف ریاضی در ویژوال بیسیک



mohanad1993
یک شنبه 28 آبان 1391, 01:09 صبح
درووووود:لبخندساده:
فکر کردم که یه تاپیکی باشه واسه شبیه سازی و پیاده سازی عملیات های ریاضی یه زیان ویژوال بیسیک بد نیست
اما ابتدا از عملیات های ساده ی ریاضی(عدد تام، اول و ...) شروع می کنم و کم کم به مباحث پیشرفته تر می پردازم:بامزه::لبخند:

mohanad1993
یک شنبه 28 آبان 1391, 01:42 صبح
اولین برنامه ای که میزارم برنامه محاسبه عدد اوله.
توی این برنامه یه عدد یه تکست باکس میدیم که از عدد یک تا خود عدد مشخص میکنه کدوم عدد اوله
اینم کد برنامه
راستی هرکدوم از دوستان کدی سریعتر از کد من داره بزاره


Dim isAval As Boolean = True
ListBox1.Items.Clear()

ListBox1.Items.Add(2)
For i = 3 To System.Convert.ToInt32(TextBox1.Text) Step 2
For j = 3 To i / 2 Step 2
If i Mod j = 0 Then
isAval = False
Exit For
End If
Next
If isAval = True Then
ListBox1.Items.Add(i)
End If
isAval = True
Next


حالا توضیح کدها
تو خط اول که یه متغیر منطقی تعریف کردم که چند خط جلوتر دقیق توضیح میدم که چیکار میکنه
توی خط بعدیش که لیست باکس رو خالی از داده میکنم

خط بعدی عدد دو رو به لیست باکس اضافه میکنم(تنها عدد زوح اول)
توی خط بعد که اولین حلقمو تعریف کردمه شمارنده رو از ۳ شروع میکنم تا مقدار عددی موحود در تکسباسم. حالا چرا از ۳
چون عدد یک عدد اول نیست و عدد دو رو هم قبلا اضافه کرده بودم و از عدد سه شروع میکنم. و بجز اون با قرار دادن استپ روی مقدار دو کلا اعداد زوج وارد حلقه نمیشن و با این کار سرعت انجام کد دوبرابر میشه

خط بعدیش توی حلقه دوم هم باز از عدد ۳ شروع میکنم و تا نصف عدد جاری (چون هیچ عددی مقسوم عله ای بزرگ تر از نصف خودش نداره) با استپ دو تعریف کردمه. دلیل اینکه استپ عدد دو هست اینه که هیچ عدد فردی مقسوم علیه زوج نداره. این دو کار باعث میشه کد از نظر سرعت چهار برابر سریع تر بشه
.
توی خط یعدش با یه بلوک شرط چک میکنم که این عدد مفسوم علیه داره یا نه اگر حلقه تمام شد و از شرط برقرار نشد که در ادامه توضیح میدم. اما اگر شرط برقرلر شد . توی حلقه همون متغیر منطقیمون برابر false میشه و از حلقه خارج میشیم. این خارج شدن از حلقه هم تقربا سرعت اجرا کد رو دوبرابر میکنه
.
وقتی کار حلقه دوم تمام شد با یه بلوک شرط چک میکنیم که عدد اول یوده یانه اگه اول بود که به لیست اضافه میشه.
آخرشم دوباره عددمون به طور پیشفرض اول فرض میشه

mohanad1993
دوشنبه 06 آذر 1391, 13:02 عصر
عدد کامل یا تام

Dim temp As Long = 0
ListBox1.Items.Clear()


For i = 2 To System.Convert.ToInt32(TextBox1.Text) Step 2
For j = 1 To i / 2
If i Mod j = 0 Then
temp += j
End If
Next
If temp = i Then
ListBox1.Items.Add(i)
End If
temp = 0
Next

توضیح

عدد تام عددیه که مجموع مقسوم علیه هاش دوبرابر خود عدد مثل عدد ۶ که مقسوم علیه هاش ۱،۲،۳،۶ هستند که مجموعشون میشه ۱۲ که دوبرابر عدد ۶ هستش

در این کد من یه متغیر کمکی برای نگه داشتن مقدار مقسوم علیه ها تعریف کردم
تنها نکته ای که هست اینه که چون هیچ عدد فردی نمی تونه تام بشه با شروع حلقه از دو و قرار دادن گام هر حلقه روی ۲ دیگه اعداد فرد رو حساب نمی کنم.
توی حلقه دوم هم کل مقسوم عله های عدد رو بدست میارم. (بجز خود عدد چون حلقه تا نصف عدد بیشتر نمیره. بدلیل اینکه هیچ عددی مقسوم عله هش از نصف خودش بزرگ تر نیست) وقتی تمام این کارها انجام شد با یه شرط چک میکنم که مقدار مقسوم علیه های جمع شده با عدد برابر هستند(چون خود عدد رو جز مقسوم علیه هاش حساب نکردم از علامت مساوی استفاده میشه) عدد تامه.

mohanad1993
دوشنبه 06 آذر 1391, 13:07 عصر
اینم یه کد برای بدست اوردن مقسوم علیه های یک عدد

For i = 1 To CInt(TextBox1.Text) / 2
If CInt(TextBox1.Text) Mod i = 0 Then
ListBox1.Items.Add(i)
End If
Next
ListBox1.Items.Add(TextBox1.Text)

mohanad1993
دوشنبه 06 آذر 1391, 13:09 عصر
محاسبه فاکتوریول با استفاده از توابع بازگشتی

Private Function Fact(ByVal Num As Integer) As Double
Dim temp As Double

If Num = 1 Then
temp = 1
Else
temp = Num * Fact(Num - 1)
End If

Return temp
End Function

mohanad1993
دوشنبه 06 آذر 1391, 13:13 عصر
محاسبه فاکتوریول با استفاده از حلقه

Private Function Fact(ByVal Num As Integer) As Double
Dim temp As Double = 1

For i = 1 To Num
temp = temp * i
Next

Return temp
End Function

Balanar
دوشنبه 06 آذر 1391, 14:35 عصر
سلام
سری فیبوناچی همراه با توضیح هم اگه ممکنه بزار

mohanad1993
پنج شنبه 09 آذر 1391, 17:37 عصر
سلام
سری فیبوناچی همراه با توضیح هم اگه ممکنه بزار

سلام
خود سری فیبوناجی به صورت زیر هست
1و1و2و3و5و8و13و21و.....
که در اون یه عدد از جمع دو عدد قبلش بدست میاد
این هم یه تابه واسه بدست اوردن دنباله فیبوناچی به تعداد مشخص شده

Private Function list_of_fib(ByVal count As Int32) As List(Of Double)
Dim temp As New List(Of Double)
Dim first As Double = 1
Dim second As Double = 1
Dim hold As Double = 0

temp.Add(first)
temp.Add(second)

Do While temp.Count < count

hold = first + second
first = second
second = hold

temp.Add(hold)
Loop

Return temp
End Function

اینم روش فراخونی تابع

Dim fib As New List(Of Double)
fib = list_of_fib(20)

mohanad1993
پنج شنبه 09 آذر 1391, 17:48 عصر
اینجا رو هم یه نگاهی بکن
Click (http://fa.wikipedia.org/wiki/%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF_%D9%81%DB%8C%D8%A8% D9%88%D9%86%D8%A7%DA%86%DB%8C)

atefe70
دوشنبه 04 دی 1391, 09:51 صبح
بازم ببخشید

من میخوام تعداد مقسوم علیه های اول یه برنامه رو بدست بیارم ... اونم با تابع زمانی که فقط باید یه حلقه کلا داشته باشه :

چجوری میتونم برنامم رو درست تر کنم ؟


for i=2 to n/2
if (isprim(i) and (n mod i=0))then
print(i)




public sub isprim(byval n as integer)
dim i as integer
for i=2 to n/2
if (n mod i != 0) then
print(i)
else
print(0)

shadow+98
جمعه 04 بهمن 1392, 18:40 عصر
عدد کامل یا تام

Dim temp As Long = 0
ListBox1.Items.Clear()


For i = 2 To System.Convert.ToInt32(TextBox1.Text) Step 2
For j = 1 To i / 2
If i Mod j = 0 Then
temp += j
End If
Next
If temp = i Then
ListBox1.Items.Add(i)
End If
temp = 0
Next



درود بر شما دوست عزیز
این کد برای ویژوال بیسیک 6 نیست روش کار نمیده
ارور های مختلفی میگیره
میشه برنامه رو بنویسید و برای دانلود قرار بدهید
دوستان دیگر هم اگر توانستند انجام دهند
این یکی از سوالات مسابقات المپیاد بوده من خیلی دنبالش بودم. اینجا هم که خرابه !!
اگه خوده برنامه بتواند اعداد تام رو برام بنویسه بهتره
با تشکر
بدرود.

Namazi1343
یک شنبه 13 بهمن 1392, 12:58 عصر
براحتی میشه اثبات کرد که اگه عددی اول نباشه حتما یه مقسوم علیه کوچکتر یا مساوی جذرش داره. پس اگه حد بالای حلقه دومی رو جزء صحیح جذر عدد مورد نظر بذاری سرعت خیلی بالا میره. مثلا فرض کن میخوای عدد 101 رو امتحان کنی. با روش شما حلقه دوم تا 50 باید بره اما تنها کافیه که این حلقه تا 10 یعنی جزء صحیح جذر 101 بچرخه

amini-blog
سه شنبه 16 اردیبهشت 1393, 22:09 عصر
سلام، آقا من یه برنامه نوشتم با استفاده از حلقه for اما دبیرمون گفته که باید با حلقه do-loop بنویسید.
این سورسی هست که من نوشتم، هرکی میتونه برام با حلقه Do بنویسه. ممنون میشم.

Dim a As Double

Private Sub Command1_Click()
Cls
n = InputBox("Input repeat for")
a = InputBox("Input Number")
For i = 1 To n

b = a Mod 10
a = a \ 10
Print b
Next i
End Sub

amini-blog
سه شنبه 16 اردیبهشت 1393, 22:24 عصر
سلام من روز پنجشنبه 18 اردیبهشت 93 امتحان ویژوال بیسیک دارم. تورو خدا کمکم کنید. این سوالات تو امتحان میاد. اما نمیتونم بنویسم.
لطفا راهنمایی کنید.
سوالات:
1. برنامه ای بنویسید که اعدادی که بین 1 تا 1000 که بر 2 و 4 بخش پذیر باشند را چاپ کند.
2. برنامه ای بنویسید که جدول ضرب را نمایش دهد.
3. برنامه ای بنویسید که تعداد نامحدود عدد را جمع کرده و میانگین آنهارا چاپ کند.
4. برنامه ای بنویسید که فاکتور یک عدد را چاپ کند.
5. برنامه ای بنویسید که اعداد سه رقمی که دو عدد 5 دارند را چاپ کند.
6. برنامه ای بنویسید که اعداد سه رقمی که در آنها عدد 5 است را چاپ کند.
7. برنامه ای بنویسید که رشته فیبوناچی را تا جمله 50 چاپ کند.
ممنون میشم کسی جواب بده.
با تشکر

mohsen ab
یک شنبه 02 آذر 1393, 20:18 عصر
سلام من یه پروژه ویژوال بیسیک دارم هر کاری میکنم نمیتونم انجام بدم لطفا کمک کنید
پروژم اینه:با زدن یک دکمه اعداد آینه ای 2رقمی،3رقمی،4رقمی،5رقمی رو در یک لیست نشون بده
ممنون

soheil021
جمعه 24 اردیبهشت 1395, 17:04 عصر
این ها همه ویژوال بیسیک 6
ببخشید من امتحان فاینالم هستش فردا من سه تا سوال دارم اگه میشه به من باد بدین به ترتیب مینویسم
1. یک ساب پروسیژری بنویسید با دو پارامتر x و y که به تعدادx + چاپ کنه و تعداد y * چاپ کنه + توی یک خط * توی یک خط


2. x و y را بخوانید فرض کنید x>yاین عبارت را محاسبه کنید.
1 - سه تابع را صدا کنید call (x) , call (y) , call (x - y)
2 - این! x
! y ! (x - y)

3 . تابع ای که n را به عنوان پارامتر ورودی دریافت کند که تعداد 0 های ان برگرداند
و نام تابع را
function zero
برای نمونه print zero (1002) که 2 چاپ کنه print zero (123) که 0 را چاپ کنه print zero (102300) که 3 را چاپ کنه
مرسی اگه میشه سریعتر به من بر سونین.
:گریه::اشتباه::قهقهه:

soheil021
شنبه 25 اردیبهشت 1395, 09:16 صبح
جواب من رو میشه الان بدین خواهش می کنم جواب بال رو

soheil021
شنبه 25 اردیبهشت 1395, 11:52 صبح
میشه دوست عزیز جواب ما رو بدین همانی که نوشتم اخر جواب بالا رو بدین خواهش میکنم فردا امتحان فاینال دارم ازتون خواهش کردم