function در vb.net

وضعیت
موضوع بسته شده است.

sinaeslami

Member
سلام خدمت دوستای عزیز
اگه ممکن منو تو این برنامه در vb.net کمک کنین و برام توضیح بدین
برنامه بنویسید که عدد n را از ورودی گرفته و سری زیر را به کمک function محاسبه کند
1.JPG

 

the_king

مدیرکل انجمن
سلام خدمت دوستای عزیز
اگه ممکن منو تو این برنامه در vb.net کمک کنین و برام توضیح بدین
برنامه بنویسید که عدد n را از ورودی گرفته و سری زیر را به کمک function محاسبه کند
1.JPG


فرمول مشابه فرمول محاسبه عدد طبیعی e است (2.7182818284590452353602874713527) با این تفاوت
که فرمول درخواستی شما یک واحد از آن کوچکتر است (حدودا 1.7182818284590452353602874713527)

کد:
Module Module1

    Function MyFunction(ByVal n As Long) As Double
        Dim i As Long, fact As Long = 1
        For i = 1 To n
            fact = fact * i
            MyFunction = MyFunction + 1 / fact
        Next
    End Function

    Sub Main()
        Dim n As Long
        Console.Write("Please enter n : ")
        n = Val(Console.ReadLine)
        Console.WriteLine("S = {0}", MyFunction(n))
        Console.ReadKey(True)
    End Sub

End Module

MyFunction نام تابعی است که محاسبه در آن انجام می شود که یک پارامتر ورودی دارد که مقدار n را مشخص
می سازد.
ابتدا متغیر های fact و i (متغیر حلقه) را تعریف می کنیم :
کد:
        Dim i As Long, fact As Long = 1
مقدار اولیه fact بایستی 1 باشد.

در داخل حلقه، فاکتوریل (متغیر fact) را برای هر کدام از کسر ها محاسبه می کنیم :
کد:
            fact = fact * i
چون مقدار فاکتوریل i با ضرب کردن مقدار i در فاکتوریل i - 1 بدست می آید، کافیست که در هر بار اجرای حلقه،
مقدار قبلی fact را در مقدار جدید i ضرب کنیم.

در متغیر MyFunction مقدار کسر ها را جمع می کنیم :
کد:
            MyFunction = MyFunction + 1 / fact
مقدار MyFunction در انتهای اجرای تابع برگردانده می شود.

در تابع اصلی Main ابتدا متغیر n را تعریف می کنیم :
کد:
        Dim n As Long

و سپس پیغامی برای دریافت آن می دهیم :
کد:
        Console.Write("Please enter n : ")

و سپس مقدار n را از ورودی می خوانیم :
کد:
        n = Val(Console.ReadLine)

سپس مقدار S را با استفاده از تابع MyFunction بدست آورده و در خروجی نمایش می دهیم :
کد:
        Console.WriteLine("S = {0}", MyFunction(n))

و در انتها منتظر می شویم تا کاربر کلیدی را فشار دهد تا برنامه خاتمه یابد :
کد:
        Console.ReadKey(True)
 

sinaeslami

Member
سلام the_king جان
امروز رفتم این برنامه که شما نوشتی ارائه دادم
ازونجایی که استاد چشم نداره منو ببین 100 بار گیر داد هی گفت تو ننوشتی
آخرش دید که هیچ راهی نداره و برنامه کاملا درست هستش یهو گفت بجای
MyFunction = MyFunction + 1 / fact باید از
1.JPG
استفاده میکردی و اشتباه نوشتی و بخاطر همین بهم نمره نداد.
بعد که لبتاپ خودش رو روشن کرد و این برنامه رو قبلا خودش نوشته بود دیدم که خودش به روش
MyFunction = MyFunction + 1 / fact حل کرده.
نمیدونم چرا هی میگفت این به زبان vb6 نوشته شده.
آخر هم 4 تا تمرین جدید داد گفت برو اوکی کن بیارش
اگه میشه تو این برنامه ها هم کمکم کنین.

1-روالی بنویسید که بک عدد صحیح را دریافت کرده و آن را معکوس کند.
2-برنامه ای بنویسید که 10 عدد را از کاربر گرفت و بررسی کند که آیا این اعداد با معکوس خود برابرن یا خیر.
3-روالی بنویسید که یک عدد از کاربر گرفته و مشخص کند که آیا این یک عدد اول است یا خیر.
4-روالی بنویسید که عدد دلخواه n را گرفته و n عدد اول را چاپ نماید.

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

the_king

مدیرکل انجمن
نمیدونم چرا هی میگفت این به زبان vb6 نوشته شده.
کد را با Microsoft Visual Basic 2008 نوشته ام، البته با سایر نسخه های NET. نظیر 2005 هم سازگار است.
در ویژوال بیسیک 6 قابل اجرا نیست، Console.ReadLine و Console.WriteLine را نمی شناسد.

1-روالی بنویسید که یک عدد صحیح را دریافت کرده و آن را معکوس کند.

کد:
Module Module1

    Sub Main()
        Dim n As Long
        Dim r As Long
        Console.Write("Please enter n : ")
        n = Val(Console.ReadLine())
        r = Val(StrReverse(n))
        Console.WriteLine("Reverse n = {0}", r)
        Console.ReadKey(True)
    End Sub

End Module

ابتدا یک متغیر n برای دریافت عدد صحیح تعریف می کنیم :
کد:
        Dim n As Long

سپس یک متغیر r برای بدست آوردن معکوس n در آن :
کد:
        Dim r As Long

ابتدا پیغامی برای دریافت مقدار n نمایش می دهیم :
کد:
        Console.Write("Please enter n : ")

و مقدار n را از کاربر دریافت می کنیم :
کد:
        n = Val(Console.ReadLine())

و سپس مقدار n را بصورت یک رشته string معکوس کرده (Reverse)و مقدار عددی (long) آن رشته را
در r بدست می آوریم :
کد:
        r = Val(StrReverse(n))

با نمایش پیغامی مقدار r را به کاربر اعلام می کنیم :
کد:
        Console.WriteLine("Reverse n = {0}", r)

و در خاتمه منتظر فشار دادن کلیدی از سوی کاربر می شویم :
کد:
        Console.ReadKey(True)
 

sinaeslami

Member
کد:
کد را با Microsoft Visual Basic 2008 نوشته ام، البته با سایر نسخه های NET. نظیر 2005 هم سازگار است.
در ویژوال بیسیک 6 قابل اجرا نیست، Console.ReadLine و Console.WriteLine را نمی شناسد.
گفتم که استاد از دیدن برنامه کفش برید
100 تا ایراد و غلط گرفت ولی آخرش رو کامپیوتر خودش همینجوری مثل شما حل کرده بود

از بابت کمکتون هم مچکرم
 

the_king

مدیرکل انجمن
2-برنامه ای بنویسید که 10 عدد را از کاربر گرفت و بررسی کند که آیا این اعداد با معکوس خود برابرن یا خیر.

کد:
Module Module1

    Sub Main()
        Dim i As Long, n As Long
        For i = 1 To 10
            Console.Write("{0}) Please enter n : ", i)
            n = Val(Console.ReadLine())
            If n = Val(StrReverse(n)) Then
                Console.WriteLine("Yes")
            Else
                Console.WriteLine("No")
            End If
        Next
        Console.ReadKey(True)
    End Sub

End Module

ابتدا یک متغیر n برای دریافت اعداد و یک متغیر i برای حلقه For تعریف می کنیم :
کد:
        Dim i As Long, n As Long

سپس یک حلقه For ایجاد می کنیم که 10 بار اجرا شود، تا بتوانیم 10 عدد را دریافت کنیم :
کد:
        For i = 1 To 10

در داخل حلقه یک پیغام برای دریافت یک عدد از کاربر نمایش می دهیم :
کد:
            Console.Write("{0}) Please enter n : ", i)

عدد n را از ورودی دریافت می کنیم :
کد:
            n = Val(Console.ReadLine())

اگر مقدار n با مقدار معکوس اش برابر باشد ...
کد:
            If n = Val(StrReverse(n)) Then

آنگاه پیغام Yes را نمایش می دهیم :
کد:
                Console.WriteLine("Yes")

وگرنه پیغام No را نمایش می دهیم :
کد:
            Else
                Console.WriteLine("No")
            End If

روتین داخل حلقه آنقدر تکرار می شود تا 10 عدد دریافت شده و پیغام مربوطه شان نمایش داده شود.
کد:
        Next

در خاتمه منتظر فشار کلیدی توسط کاربر می شویم :
کد:
        Console.ReadKey(True)
 

the_king

مدیرکل انجمن
3-روالی بنویسید که یک عدد از کاربر گرفته و مشخص کند که آیا این یک عدد اول است یا خیر.

کد:
Module Module1

    Sub Main()
        Dim i As Long, n As Long
        Console.Write("Please enter n : ")
        n = Val(Console.ReadLine())
        For i = 2 To n - 1
            If (n Mod i) = 0 Then Exit For
        Next
        If i = n Then
            Console.WriteLine("Yes")
        Else
            Console.WriteLine("No")
        End If
        Console.ReadKey(True)
    End Sub

End Module

ابتدا یک متغیر n برای دریافت اعداد و یک متغیر i برای حلقه For تعریف می کنیم :
کد:
        Dim i As Long, n As Long

سپس یک پیغام برای دریافت عددی از کاربر نمایش می دهیم :
کد:
        Console.Write("Please enter n : ")

و در ادامه عدد n را از ورودی دریافت می کنیم :
کد:
        n = Val(Console.ReadLine())

حلقه ای ایجاد می کنیم که از عدد 2 الی n - 1 را بشمارد، اگر عدد n حداقل بر یکی از این اعداد بخش پذیر باشد،
آنگاه این عدد اول نیست، مثلا عدد 17 اول است، چون بر هیچیک از اعداد 2 الی 16 بخشپذیر نبوده.
از نظر ریاضی بجای n - 1 می توان از جذر n یعنی (Math.Sqrt(n استفاده کرد، ولی n - 1 ساده تر است :
کد:
        For i = 2 To n - 1

اگر باقیمانده تقسیم عدد n بر i صفر باشد (یعنی n بر i بخشپذیر باشد) آنگاه از حلقه خارج می شویم و
در این حالت عدد n اول نیست :
کد:
            If (n Mod i) = 0 Then Exit For

وگرنه به اجرای حلقه ادامه می دهیم :
کد:
        Next

زمانی که اجرای حلقه تمام شد، می توانیم بر اساس مقدار فعلی i بفهمیم که آیا عدد n اول بوده یا نه،
اگر i برابر n باشد، یعنی حلقه از مقدار 2 الی n - 1 شمرده، ولی n بر هیچکدام بخشپذیر نبوده.
اما اگر i کمتر از n باشد، عدد n بر i بخشپذیر بوده و به همین دلیل از حلقه خارج شده است.

پس ابتدا بررسی می کنیم که آیا i برابر n است (حالتی که عدد n اول بوده) :
کد:
        If i = n Then

در این حالت پیغام Yes را نمایش می دهیم :
کد:
            Console.WriteLine("Yes")

وگرنه پیغام No را نمایش می دهیم :
کد:
        Else
            Console.WriteLine("No")
        End If

و در خاتمه منتظر فشار کلیدی توسط کاربر می شویم :
کد:
        Console.ReadKey(True)
 

the_king

مدیرکل انجمن
4-روالی بنویسید که عدد دلخواه n را گرفته و n عدد اول را چاپ نماید.

کد:
Module Module1

    Sub Main()
        Dim i As Long, j As Long, n As Long
        Console.Write("Please enter n : ")
        n = Val(Console.ReadLine())
        j = 1
        Do While n > 0
            For i = 2 To j - 1
                If (j Mod i) = 0 Then Exit For
            Next
            If i = j Then
                Console.WriteLine(j)
                n = n - 1
            End If
            j = j + 1
        Loop
        Console.ReadKey(True)
    End Sub

End Module

ابتدا یک متغیر i برای حلقه تشخیص اول بودن یک عدد و یک متغیر j به عنوان عدد مورد بررسی و یک متغیر
n را دریافت تعداد اعداد اول از کاربر تعریف می کنیم :
کد:
        Dim i As Long, j As Long, n As Long

سپس یک پیغام برای دریافت عدد n از کاربر نمایش می دهیم :
کد:
        Console.Write("Please enter n : ")

و در ادامه عدد n را از ورودی دریافت می کنیم :
کد:
        n = Val(Console.ReadLine())

اولین عددی که برای اول بودن بررسی می کنیم عدد 1 خواهد بود که در j قرار می دهیم، گو اینکه می دانیم
که این عدد اول نخواهد بود.
کد:
        j = 1

یک حلقه Do می سازیم تا آنقدر اعداد مختلف را بررسی کند تا n عدد اول پیدا شود، هر بار که یک عدد اول
پیدا شد، از مقدار n یک واحد کم می کنیم، هر گاه n از 0 بزرگتر نبود، n عدد اول پیدا شده و بایستی
حلقه خاتمه یابد :
کد:
        Do While n > 0

حلقه ای ایجاد می کنیم که از عدد 2 الی n - 1 را بشمارد، اگر عدد j حداقل بر یکی از این اعداد بخش پذیر باشد،
آنگاه این عدد اول نیست، مثلا عدد 17 اول است، چون بر هیچیک از اعداد 2 الی 16 بخشپذیر نبوده.
از نظر ریاضی بجای j - 1 می توان از جذر j یعنی (Math.Sqrt(j استفاده کرد، ولی j - 1 ساده تر است :
کد:
            For i = 2 To j - 1

اگر باقیمانده تقسیم عدد j بر i صفر باشد (یعنی j بر i بخشپذیر باشد) آنگاه از حلقه خارج می شویم و
در این حالت عدد j اول نیست :
کد:
                If (j Mod i) = 0 Then Exit For

وگرنه به اجرای حلقه ادامه می دهیم :
کد:
            Next

زمانی که اجرای حلقه تمام شد، می توانیم بر اساس مقدار فعلی i بفهمیم که آیا عدد j اول بوده یا نه،
اگر i برابر j باشد، یعنی حلقه از مقدار 2 الی j - 1 شمرده، ولی j بر هیچکدام بخشپذیر نبوده.
اما اگر i کمتر از j باشد، عدد j بر i بخشپذیر بوده و به همین دلیل از حلقه خارج شده است.

پس ابتدا بررسی می کنیم که آیا i برابر j است (حالتی که عدد j اول بوده) :
کد:
            If i = j Then

در این حالت عدد j را نمایش می دهیم :
کد:
                Console.WriteLine(j)

و چون عدد اولی را پیدا کردیم از مقدار n یک واحد کم می کنیم :
کد:
                n = n - 1
            End If

عدد j بررسی شده، یا عدد اول بوده یا نبوده، ولی به هر حال نوبت آن است که عدد بعدی بررسی شود،
پس به مقدار j یک واحد اضافه می کنیم :
کد:
            j = j + 1

اجرای حلقه Do تا زمانی باید تکرار شود که n به صفر برسد و از حلقه خارج شویم :
کد:
        Loop

و در خاتمه منتظر فشار کلیدی توسط کاربر می شویم :
کد:
        Console.ReadKey(True)
 

sinaeslami

Member
سلام the_king جان
نگاه کن توی چند تا از سوالها نوشته یک روال بنویسید
شما روال نوشتید؟
روال با برنامه چه فرقی میکنه؟
 
آخرین ویرایش:

the_king

مدیرکل انجمن
سلام the_king جان
نگاه کن توی چند تا از سوالها نوشته یک روال بنویسید
شما روال نوشتید؟
روال با برنامه چه فرقی میکنه؟
برنامه یک مجموعه بزرگ از روال ها، توابع، ساختمان داده ها، کلاس ها و ... است.

روال (Routine) یعنی یک تکه کد که بصورت متوالی اجرا می شود و در مجموع کار خاصی را انجام می دهد،
تابع (Function) نوعی روال است که بایستی یک مقدار خروجی برگرداند، مثلا نتیجه محاسبات را برگرداند.
زیر روال (Sub Routine) یا Procedure نوعی روال است که مقداری را بر نمی گرداند.

در کدهایی که من نوشتم یک روال Main وجود دارد. تنها تفاوت روال Main با سایر روال ها در این است که بصورت
خودکار اجرا می شود، در حالی که سایر روال ها را بایستی با نوشتن کد فراخوانی کنیم.

اگر در صورت سوالها نوشته بود که یک تابع بنویسید، آنگاه بایستی کد را بصورتی نوشت که مقدار در یک تابع مجزا
محاسبه شده و برگردانده شود و سپس در روال اصلی برنامه (Main) از آن تابع استفاده گردد.

اما چون در صورت سوالها یک روال درخواست شده، هر روالی (مثلا Main) قابل قبول است. می توان بجای نام Main
یک نام دیگر بکار برد تا روال بصورت خودکار اجرا نگردد مثلا
کد:
Sub MyRoutine()
 

sinaeslami

Member
سلام the_king جان
از پاسخ کاملی که دادی ممنونم
val چه کاری انجام میده؟
توی کد زیر در سوال یک چرا مقدار رو 0 میدهیم؟
کد:
Console.WriteLine("Reverse n = {0}", r)
توی کد زیر در سوال 2 چرا مقدار رو اول پیغام نوشتین؟
کد:
Console.Write("{0}) Please enter n : ", i)
 

the_king

مدیرکل انجمن
سلام the_king جان
از پاسخ کاملی که دادی ممنونم
val چه کاری انجام میده؟
تابع Val یک رشته (String) رو به معادل عددی اش تبدیل می کنه، مثلا اگر رشته "00123" رو به تابع Val تحویل بدهیم،
مقدار عددی 123 رو برمی گردونه. ما توسط توابعی مثل ReadLine یک رشته رو از ورودی می خوانیم و برای تبدیل
صحیح این رشته به عدد از Val استفاده می کنیم.

توی کد زیر در سوال یک چرا مقدار رو 0 میدهیم؟
کد:
Console.WriteLine("Reverse n = {0}", r)
فرمان WriteLine به چندین شیوه قابل استفاده است، یکی از این شیوه ها استفاده از عبارت هایی نظیر {0} و {1}
است.
طرز استفاده از این شیوه چنین است :

اولین پارامتر فرمان WriteLine یک رشته String خواهد بود که در آن می تواند هر متنی قرار گیرد، در هر موقعیتی
از این متن می توانید عبارت های {n} را قرار دهید، n یک عدد است که از صفر شروع می شود و شماره
پارامتری را مشخص می سازد که بایستی در آن موقعیت نمایش یابد. مثلا {0} برای دومین پارامتر، {1} برای سومین
پارامتر، {2} برای چهارمین پارامتر و ...

مثلا ما می خواهیم نام یک شی را در متغیر s دریافت کرده ایم، برای آنکه به کاربر اعلام کنیم که رنگ شی s قرمز
است، می نویسیم :
کد:
Console.WriteLine("The {0} is red.", s)
برنامه در حین اجرا پارامتر اول (رشته "The {0} is red.") را پردازش می کند و هر جا به {0} برخورد کرد،
بجایش پارامتر دوم (مقدار s) را نمایش می دهد. مثلا اگر مقدار s برابر book باشد، رشته ".The book is red"
چاپ می شود.

حال فرض کنیم که بخواهیم جمع دو عدد داخل متغیر های x و y را به صورت x + y = z نمایش دهیم.
کد زیر چنین عملی را انجام می دهد :
کد:
Console.WriteLine("{0} + {1} = {2}", x, y, x+y)

مثلا اگر مقدار x و y به ترتیب 4 و 5 باشند، رشته "9 = 5 + 4" چاپ می شود.

توی کد زیر در سوال 2 چرا مقدار رو اول پیغام نوشتین؟
کد:
Console.Write("{0}) Please enter n : ", i)
در این کد قرار بر این بود که یک عدد از ورودی دریافت شود، برای آنکه مشخص شود که این چندمین عددی است
که از ورودی خوانده می شود مقدار i را در ابتدای پیغام چاپ می کنیم، مثلا برای دریافت چهار عدد :
کد:
1) Please enter n :
2) Please enter n :
3) Please enter n :
4) Please enter n :
 

sinaeslami

Member
سلام the_king جان
از زحماتی کشیدی و کمک کردی با آموزشهای خوبت خیلی مچکرم.
اگه وقت داری لطف کن توی برنامه های زیر هم کمک کن.

1-برنامه ای بنویسید که عدد n را از ورودی گرفته و سری زیر را محاسبه کند.
untitled.JPG


2-برنامه ای بنویسید که عدد دلخواه n را از ورودی گرفته و اشکال زیر را رسم کند.
111.JPG
222.JPG


3- برنامه ای بنویسید که مثلث خیام پاسکال را رسم کند.

4- برنامه ای بنویسید که عدد دلخواه n را از ورودی گرفته و فاکتوریل آن را نمایش دهد.

5- برنامه ای بنویسید که عدد دلخواه n را از ورودی گرفته و جمع اعداد زوج و جمع اعداد فرد را نمایش دهد.
 

saalek110

Well-Known Member
کمک یعنی اینکه شما اول سعی خود را بکنید بعد جایی که مشکل داشتید کمک بگیرید. فقط صورت مسئله را نگذارید. تلاش خود را بکنید اگر جایی مشکل داشتید مطرح کنید. فروم جای حل تکالیف درسی نیست.
برای هر سئوال یک تاپیک بزنید(نه چند سوال در یک تاپیک) با عنوانی کاملا بیان کننده بحث تاپیک. و حتما در انتهای عنوان تاپیک زبان برنامه نویسی را بنویسید.
موفق باشید.
تاپیک بسته شد.
 
وضعیت
موضوع بسته شده است.

جدیدترین ارسال ها

بالا