ورود

View Full Version : محاسبه اعداد اول



ehsanocx
سه شنبه 14 اردیبهشت 1389, 13:54 عصر
با سلام
دوستان من اعداد اول رو بدست میارم اما می خوام فاصله بین اعداد اول رو توی یه لیست باکس نشون برم اما نمی دونم چطوری میشه راهنماییم کنید؟

مثلا اولین عدد اول 2 دومین عدد 3 و سومین عدد 5 و چهارمین عدد 7
فاصله بین 2 و 3 صفره ، بین 3 و 5 فاصله 1 و بین 5 و 7 فاصله 1
می خوام این فاصله هارو توی یه لیست باکس نمایش بدم چطوری می تونم این کارو انجام بدم ؟

daniyal_1363
سه شنبه 14 اردیبهشت 1389, 17:17 عصر
اگه اعداد اول رو بدست آوردی از کد ساده ی زیر استفاده کن




Dim b As Integer
b = 0
For i = 5 To 7
b = (b + 1)
Next
MsgBox (b - 2)



فقط در حلقه For عدد شروع باید عدد اول کمتر و عدد پایان عدد اول بزرگتر باشه



متوجه نشدی بیشتر توضیح بدم

ehsanocx
سه شنبه 14 اردیبهشت 1389, 17:24 عصر
دوست من این تیکه کدی که نوشتی در جواب چیزیه که من خواستم یا طریقه بدست آوردن عدد های اول رو نوشتی ؟
من می خوام فاصله بین اعداد اول رو نمایش بدم میتونی کمکم کنی؟

daniyal_1363
سه شنبه 14 اردیبهشت 1389, 17:56 عصر
دوست من این تیکه کدی که نوشتی در جواب چیزیه که من خواستم یا طریقه بدست آوردن عدد های اول رو نوشتی ؟
من می خوام فاصله بین اعداد اول رو نمایش بدم میتونی کمکم کنی؟


شما گفته بودی "اعداد اول رو بدست میارم اما می خوام فاصله بین اعداد اول رو توی یه لیست باکس نشون بدم"

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

تو این نمونه که برات میزارم در اصل هر دو عددی که بهش بدی فاصله بینشون رو مشخص میکنه

daniyal_1363
سه شنبه 14 اردیبهشت 1389, 18:09 عصر
http://up.iranblog.com/Files/344f1acdbaac4b769a7a.jpg




شما هر عددی رو توی تکس باکس اولی وارد کنید و عدد بزرگتر از اون رو در تکس باکس دومی وارد کنید فاصله اون دو عدد توی یک messeg box نمایش داده میشه

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


متغییر b شمارنده (فاصله) بین دو عدده و بخاطر اینکه خود اعداد انتخابی شما هم شمرده میشن در آخر باید از b ، دو (2) واحد کم کنید.

ehsanocx
سه شنبه 14 اردیبهشت 1389, 23:27 عصر
دوست من حالا اگر بخوام کل اعداد اول رو پیدا کنم و توی یک لیست باکس نمایش بدم و فاصله همه ای این اعداد اول رو توی یک لیست باکس دیگه باید چیکار کنم؟ اینطوری فقط فاصله 2تا عدد رو نشون میده اما من فاصله همه اعداد اول رو می خوام میشه راهنماییم کنی با تشکر از کمکت واقعا ممنون

ehsanocx
سه شنبه 14 اردیبهشت 1389, 23:54 عصر
من می خوام روی دکمه کلیک کردم کلیه اعداد 0 تا 1000 رو اعداد اولشون رو توی یه لیست باکس نمایش بده میشه ؟ و فاصله اشون رو توی یه لیست باکس دیگه؟

xxxxx_xxxxx
چهارشنبه 15 اردیبهشت 1389, 00:11 صبح
درخواست برنامه ممنوع است.
مشکل شما در کدام قسمت از این برنامه هست؟
گفتید اعداد رو بدست میارید و مشکلتون در فاصله گذاری بین اعداد هست که دوستان روش این کارو ذکر کردند.
الان کجای این برنامه مشکل دارید؟

ehsanocx
چهارشنبه 15 اردیبهشت 1389, 00:40 صبح
من می خوام وقتی روی دکمه کلیک کردم تمام اعداد اول رو توی لیست باکس نمایش بده اما نمیشه :اشتباه:48439

میشه این کد رو اصلاح کنید . من تا اینقدرشو بلدم اما نشون نمیده

میشه کمکم کنید

mohsensaghafi
چهارشنبه 15 اردیبهشت 1389, 01:09 صبح
سلام دوست عزیز.
کدی رو که شما نوشتی، برای محاسبه اعداد اول درست کار نخواهد کرد.

N = Val(txtN.Text)
این کد در واقع عددی را که باید تمامی اعداد اول کوچکتر از آن را محاسبه کنیم در متغیر N می ریزد.

For i = 0 To N And t
در این کد به ترتیب اعداد را از اول می شماریم تا به N برسیم. حال به ازای هر i باید محاسبه کنیم که آیا عدد i اول است یا خیر. برای این کار چون می دانیم که اولین عدد اول 2 است، شمارنده حلقه نیازی نیست که از 0 شروع شود. می توانیم آن را از 2 شروع کنیم.

Do While i <= N / 2
If N Mod i = 0 Then

List1.AddItem (CStr(i))
i = i + 0

در این قطعه کد شما، ما باید تمامی اعداد از 2 تا i/2 را بررسی کنیم که آیا i بر آن عدد بخش پذیر است یا خبر. بنابراین به یک کتغیر دیگر نیاز خواهیم داشت. مثلا j که از 2 شروع می شود تا i/2 , i و همچنین یک متغیر boolean که اول بودن یا نبودن عدد i را بررسی کند. در ابتدا فرض می کنیم که عدد i اول است. حال درون دستور if چک می کنیم که اگر عددی پیدا شد که i بر آن بخش پذیر بود، این متغیر را false می کنیم. سپس باید با دستور loop حلقه while را تمام کنیم. بعد از آن اگر متغیر true بود عدد اول است و آن را باید به لیست اضافه کنیم. در غیر این صورت به پایان حلقه for می رسیم.
فراموش نشود که در ابتدای حلقه for باید متغییر boolean را مجدداً true کنیم.

mohsensaghafi
چهارشنبه 15 اردیبهشت 1389, 01:13 صبح
برای محاسبه اختلاف بین اعداد اول، می توانی عدد قبلی اول را در یک متغییر ذخیره کنی یا آن را از درون لیست بخوانی و با یک عملیات ساده تفریق این اختلاف را محاسبه نمایی و در لیست دوم نمایش دهی.
من تلاش کردم که الگوریتم را برایتان توضیح دهم تا خودتان برنامه را بنویسید. باز هم اگر مشکلی داشتید بگویید تا بیشتر راهنمایی کنم.

ehsanocx
چهارشنبه 15 اردیبهشت 1389, 10:53 صبح
میشه کد هایی که نوشتم رو اصلاح کنی و بگذاری تا ببینم کد اصلاح شدشو ؟
می خوام به ترتیب اعداد را از اول می شماریم تا به N برسیم. حال به ازای هر i باید محاسبه کنیم که آیا عدد i اول است یا خیر اگر اول بود توی لیست باکس نمایش بده

For i = 2 To N And t=true
Do While i <= N / 2
If N Mod i = 0 Then t=false


List1.AddItem (CStr(i))
i = i + 0
با این کد الان چرا از 2 تا مقدار ان اعداد اولش رو چرا توی لیست باکی نمایش نمی ده؟

next i رو کجای این کد باید قرار بدم ؟ از حبقه for استفاده کردم ایا بازن نیاز به i = i + 0 هست؟

همش error ,
Division Zero
میده.

ehsanocx
چهارشنبه 15 اردیبهشت 1389, 13:02 عصر
Dim n As Integer
Dim t As Boolean
Dim i As Integer
Private Sub cmdFirst_Click()

n = Val(txtN.Text)

Cls

t = True

i = 2

For i = 2 To n


Do While i <= n / 2 And t

If n Mod i = 0 Then t = False

i = i + 1

Next i
Loop

If t Then
List1.AddItem (CStr(n))

End If

چرا جواب نمیده :(

daniyal_1363
چهارشنبه 15 اردیبهشت 1389, 16:48 عصر
سلام مجدد

دوست عزیز یکم باید فقط دقت کنید

بدست آوردن اعداد اول فرمول داره که حتماً میدونید

کدتون رو براتون اصلاح کردم تا اعداد اول رو بتونین بدست بیارین حالا کافیه با کد راهنمایی قبلی فاصله بینشون رو پیدا کنین

لطفاً دقیقاً کدها رو چک کنین و بفهمین و اگه جایی چیزی رو نفهمیدن بگین تا یاد بگیرین

ehsanocx
چهارشنبه 15 اردیبهشت 1389, 19:29 عصر
mod1 = 1
List1.AddItem "2"
List1.AddItem "3"
test = False
'=========================================
For d1 = 4 To Val(txtN.Text)


میشه بگی چرا حلقه For رو از 4 شروع کردی ؟
و
mod1 = 1
List1.AddItem "2"
List1.AddItem "3
چرا 2 و 3 و 1 گرفتی مقدار اینهارو؟

For d3 = 2 To d2
mod1 = d1 Mod d3

این 2 تا حلقه رو هم میشه توضیح بدی که راحت تر بتونم درکش کنم؟

daniyal_1363 ممنون واقعا از کمکت
آقا حالا اگر بخوام فاصله تک تک این اعداد اول رو بدست بیارم و توی یک لیست باکس دیگه نمایش بدم باید چیکار کنم؟

48488
میشه اصلاحش کونین این کدارو؟

daniyal_1363
چهارشنبه 15 اردیبهشت 1389, 20:37 عصر
چرا حلقه For از 4 شروع میشه ؟

خوب عدد 2 و 3 از واضحات که عدد اول هستند و نیازی به چک کردن عدد نیست برای همین بدون در نظر گرفتن عدد 2 و 3 از عدد 4 شروع میکنیم و دو خط

List1.AddItem "2"
List1.AddItem "3"

برای اضافه کردن 2 عدد اول "2" و "3" به لیست شماست ( چون عدد اول هستند )

توضیح : شما میتونید حلقه رو از 1 شروع کنید و دو خط بالا رو حذف کنید ولی اعداد 1 و 2 و 3 هم در حلقه For شما چک میشه

چرا mod1 برابر با 0 ؟

شما میتونید mod1 رو برابر با هر عددی بگیرین مهم نیست ، فقط یک مقدار دهی اولیست


For d3 = 2 To d2
mod1 = d1 Mod d3 ؟

برای اینکه این قسمت رو بفهمین باید بدونین که :

d1 شمارنده اصلی شماست که قرار از 1 (البته در حلقه ما از 4) شروع بشه و تا N عدد پیش بره (یعنی اعدادی که باید چک بشن)

d2 نصف d1 - برای تعیین عدد اول لازم نیست تا تمام اعداد از 1 تا خود همون عدد بر خودش تقسیم بشن (در موردش تحقیق کنید) فقط کافیه تا نصفشون تقسیم بشن برای همین یه حلقه درست میکنیم که تا نصف عدد ما پیش بره

d3 شمارنده عدد از 2 تا نصف عدد ما یعنی تا d2 ست (چرا از 2 ؟)

در این حلقه هر وقت عددی از 2 تا نصف عدد ما پیدا شد که باقیماندش بر عدد ما صفر شد(یعنی بر عدد ما بخش پذیر بود) test برابر True میشه یعنی عدد ما اول نیست (میشه یه کاری کرد که وقتی باقیمانده صفر شد و مشخص شد که عدد اول نیست از حلقه خارج بشه) و اگه تا آخر حلقه mod1 برابر با صفر نشد( یعنی هیچ عددی بر عدد ما بخش پذیر نبوده ) عدد ما اوله و test برابر با False اولیه باقی میمونه

ehsanocx
چهارشنبه 15 اردیبهشت 1389, 20:39 عصر
فاصله اش رو هم درست کردم

daniyal_1363
چهارشنبه 15 اردیبهشت 1389, 21:00 عصر
کمکتون میکنم تا بقیه مسله رو خودتون حل کنید

با داشتن این اطلاعات باید راحت بتونین مشکل رو حل کنید


1 - تعداد عدد وارد شده در List1 شما با این کد مشخص میشه

List1.ListCount

2 - با این کد و استفاده از یه حلقه میتونین اعداد List1 رو تا آخر چک کنید

List1.List(List1.ListIndex)

این کد به شما میگه که عدد خط چندم چیه ؟

مثلاً خط 1 عددش 3 یا خط 4 عددش 11

توجه کن (List1.ListIndex) شمارش از صفر شروع میشه و List1.ListCount شماره ها رو از 1 می شماره

مثلا اگه تعداد List1.ListCount شما 25 باشه آخرین List1.ListIndex شما میشه 24


موفق باشین:چشمک:

mohsensaghafi
چهارشنبه 15 اردیبهشت 1389, 21:01 عصر
چرا حلقه For از 4 شروع میشه ؟

خوب عدد 2 و 3 از واضحات که عدد اول هستند و نیازی به چک کردن عدد نیست برای همین بدون در نظر گرفتن عدد 2 و 3 از عدد 4 شروع میکنیم و دو خط

List1.AddItem "2"
List1.AddItem "3"

اگر عدد ورودی یا همان N عدد 2 باشد دیگر برنامه شما درست جواب نمی دهد. بهتر است که همه اعداد را محاسبه کنید. ولی توضیحاتتون عالی بود.

ehsanocx
پنج شنبه 16 اردیبهشت 1389, 11:49 صبح
دوستان واقعا ممنون از کمکتون.کسی برنامه رو خواست بگه تا بگذارم استفاده کنید با تشکر