PDA

View Full Version : این برنامه چه اشکالی داره؟؟



farzane_fn
سه شنبه 12 آبان 1388, 21:23 عصر
سلام دوستان . من برنامه ای نوشتم که اعداد یک عدد رو می گیره و اعداد اول کمتر از اون عدد رو توی لیست باکس نشون میده. متن برنامه به این شکل هست:


int n,i, j,sum;
n=int.Parse(textBox1.Text);
for (i=2;i<n;i++) {
sum=0;
for(j=1;j<(i/2);j++)
if ((i%j)==0)
sum++;
if (sum==1)
listBox1.Items.Add(j);}

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

alireza_tavakol
سه شنبه 12 آبان 1388, 22:36 عصر
نمی دونم منظورتون رو درست فهمیدم یا نه ولی قطعه کد زیر یک عدد از کاربر در یافت می کنه و کلیه عدد های اول ما قبل اون عدد را در لیست قرار می ده

int n = int.Parse(textBox1.Text);
for (int i = 3; i <= n; i++)
{
int j=2;
for (; j < i; j++)
if (i % j == 0)
break;
else
continue;

if (j == i)
listBox1.Items.Add(j);
}

farzane_fn
چهارشنبه 13 آبان 1388, 00:21 صبح
دوست عزیزم به خاطر کد جالبتون از شما متشکرم.فقط می تونین توضیح بدین که این for چطوری عمل می کنه؟

for (; j < i; j++)

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

mn_zandy63
چهارشنبه 13 آبان 1388, 01:07 صبح
دوست عزیزم به خاطر کد جالبتون از شما متشکرم.فقط می تونین توضیح بدین که این for چطوری عمل می کنه؟

for (; j < i; j++)

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

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

for(;;;)
یک حلقه بینهایت هست مثل

while(true)

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

int j;
for (j=2; j < i; j++)

موفق باشید

alireza_tavakol
چهارشنبه 13 آبان 1388, 08:36 صبح
علت این که دوستمون مقدار دهی اولی نکردن اینه که توی خط قبلش به متغیر j مقدار دادند.
البته فرقی نمیکنه و میتونید به جای اون بنویسید :

int j;
for (j=2; j < i; j++)


توی این کدی که من نوشتم مهم هستش که j بیرون حلقه تعریف بشه چون اگه متغییر j در بدنه حلقه یعنی به شکل زیر تعرف میشد

for (int j=2; j < i; j++)
فقط در حلقه for قابل دسترس است ولی من بعد از حلقه for نیاز داشتم که با مقدار i مقایسه شود به همین دلیل قبل از حلقه تعریفش کردم

البته توضیحات mn_zandy درست بود ولی حدس زدم اگه به این نکته اشاره بشه بهتره:لبخندساده:

Salar Ashgi
چهارشنبه 13 آبان 1388, 10:51 صبح
سلام میشه از کد زیر هم استفاده کرد :



bool is_prime(int n)
{
bool res = true;
if(n<=1)
return false;
else
{
for(int i=2;i<=Math.sqrt(n);i++)
{
if(n%i==0)
{
res = false;
break;
}
}
return res;
}

}
//====================
string Find_prime(int n)
{
string str="";
for(int i=2;i<=n;i++)
{
if(is_prime(i))
str+=i.Tostring()+" , ";
}
}


متود is_prime اول بودن یک عدد رو بررسی میکنه !
متود Find_prime همه اعداد اول کوچکتر از n رو پیدا میکنه و تو یه رشته قرار میده !

موفق باشید !