می خوام یک تابع بنویسم که یک عدد صحیح را بگیرد اگر عدد صحیح اول بود مقدار 0 و در غیر اینصورت مقدار 1 را به ما بدهد
اگر کسی می دونه لطفا به من کمک کنه
Printable View
می خوام یک تابع بنویسم که یک عدد صحیح را بگیرد اگر عدد صحیح اول بود مقدار 0 و در غیر اینصورت مقدار 1 را به ما بدهد
اگر کسی می دونه لطفا به من کمک کنه
سلام.
خودت بنویس هر جا مشکل داشتی این جا مطرح کن.
نمی دونم چجوری باید اعداد اول رو معرفی کنم
سلام.
عدد اول عددیه که به فقط به خودش و 1 بخش پذیر باشه. عدد مورد نظرتو به اعداد کوچکتر از خودش تو یه حلقه تقسیم کن و اونا که بخش پذیرن رو بشمار. اگه 2 تا بودن اوله اگه بیشتر بود اول نیست. شما اینو بنویس بذار این جا خیلی کارا میشه برای بهبود الگوریتمش کرد. مثلا به عدد رو به کل اعداد کوچکتر تقسیم نکنی. از یک تا نصف عدد. یا عدد زوج بود غیر 2 اول نیست و ... .
آقا پیمان من یک مبتدیم که تازه دارم برنامه نویسی یاد می گیرم
حالا برا اون سوال بالایی یه کد نوشتم ولی ارور می ده می شه ایرادش رو بگی
Private Function hamid(p As Integer) As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer
For c = a To b
If a \ b Then
c = a Mod 0 Or 1
p = a
End If
Next c
hamid = p
End Function
ممنون
یکی به من بگه چجوری کدی بنویسم که اعداد اول رو به من نشون بده :blush:
یکی کمک کنه لطفا
سلام .
اين برنامه يه عدد ميگيره و ميگه اوله يا نه.چون عجله داشتي سريع نوشتم.
خيلي ساده ست.
يه Command و يه Text رو فرم بذار و برنامه رو كپي كن.
اميدوارم به دردت بخوره.
البته پيمان عزيز الگوريتم برنامه رو خيلي ساده و روان توضيح داد.کد:Private Sub Command1_Click()
Dim T As Single
Dim I As Single
Dim P As Single
Dim C As Single
C = Val(Text1.Text)
T = 0
For I = 1 To C \ 2
If C Mod I = 0 Then T = T + 1
If T > 2 Then
Print "No"
Exit Sub
End If
Next I
Print "Yes"
End Sub
سلام.
T>2 تو شرط if باید به T>1 تغییر کنه تا درست کار کنه. چون تا نصف عدد تقسیم میکنه و به خود عدد نمیرسه. پس اگه بعد از 1 به یه عدد دیگه بخش پذیر باشه اول نیست. این جوری 9 رو میگه اوله.
:thumbsup: به به چه جالب من تو vb.net این برنامه رو نوشته ام.عضو شدم که اینو برات بنویسم
اینو بگیر یه فرم می خواد و یه دکمه با یه تکست باکس . اسم تکست باکسو عوض نکن بعد تو روال کلیک دکمه ات اینو تایپ کن
Dim N, X, i, primnum As Decimal
Dim ISprime As Boolean
N = TextBox1.Text
X = sqrt(N)
ISprime = True
If N = 2 Then
MsgBox("خره! مسخره کردی؟ معلومه که اوله", MsgBoxStyle.OKOnly, "چهههههه؟")
Exit Sub
End If
If (N Mod 2) = 0 Then 'اعداد زوج هیچگاه اول نیستند بجز 2
ISprime = False
MsgBox("خیر این عدد اول نیست")
Exit Sub
End If
If ISprime = True Then
For i = 2 To X
If (N Mod i) = 0 Then
ISprime = False
Exit For
End If
Next (i)
If ISprime = True Then
MsgBox("بله این عدد اول است")
Else
MsgBox("خیر این عدد اول نیست")
End If
End If
بعد از اجرا...عددت رو تو تکست باکس مینویسی و دکمه رو می زنی اگه عددت خیلی بزرگ باشه طول میکشه.
یا اگه از 1 تا جذر اون عدد هم تقسیم کنی میشه ...مثل همون کاری که من کردم (خودت فکرش رو بکن تو عددای بزرگ جذر چقدر کارایی الگوریتمو افزایش میده!
حتی طبق یک تعریف دیگر از عدد اول:عددیست که بر هیچ یک از اعداد اول قبل از خود بخشپذیر نباشد!
این به درد کارایی میخوره که بخوای پرپایه یه لیست موجود کارتو ادامه بدی
سلام به همگی
خسته نباشید
فکر کنم این الگوریتم بهتر و درست تر باشه.
اگه عدد اول نباشه هم می گه اول نیست و هم اولین عددی رو که به اون بخشپذیر معلوم میکنه.
Private Sub Command1_Click()
Dim a As Double, c As Double
a = Val(Text1.Text)
c = 2
Do While c * c <= a
If a Mod c = 0 Then
Print "aval nist" + vbCr + "be " + CStr(c) + " bakhshpazir ast."
Exit Do
End If
c = c + 1
Loop
If c * c > a Then Print "aval hast"
End Sub
موفق باشید
به نظرم الگوریتم من بهتر باشه چون تو الگوریتم شما در هر دور حلقه باید c^2 حساب بشه :biggrin:
حالا یه سئوال:موقعی که برنامه در حال محاسبات سنگینی مثل پیدا کردن اعداد اول 1 تا 1000000 هست. فرم برنامه ام قفل میشه و با فشار دکمه stop روال مربوط به اون که می بایست محاسبات رو نیمه کاره پایان بده اجرا نمیشه تازمانی که محاسبات خودشون تموم بشن! راه حلی نیست که (حلقه ها) انقدر مخ cpuرو کار نگیرن؟یا بشه به هر فرمان یک مقدار مشخصی از زمان پردازنده رو داد؟ :worried:
سلام.نقل قول:
نوشته شده توسط Payman_62
اگه بگيم T>=2 چطوره؟
سلام.نقل قول:
نوشته شده توسط behnaam
در حلقه یه Doevents بذار.
T>=2 با T>1 برای اعداد صحیح فرق نمیکنه.نقل قول:
نوشته شده توسط Batman1
البته میدونم که میدونی.