PDA

View Full Version : سوال: اولین مقدار یک متغیر



CPPDeveloper
چهارشنبه 25 اسفند 1389, 16:01 عصر
سلام..

به این مثال توجه کنین..

قراره 10 عدد از کاربر دریافت کنه و بزرگ ترین عدد اول رو پیدا کنه:

int main()
{
int number;
int maxPrime;
for (int i=0; i<10; i++)
{
cin>>number;
bool isPrime=true;
for (int j=2; j<(number/2),isPrime; j++)
if ( number%j==0 )
isPrime=false;

}

return 0;
}


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

برای اولین بار چطور maxPrime رو مقدار دهی کنم؟
و تشکر

tdkhakpur
چهارشنبه 25 اسفند 1389, 23:33 عصر
برای اولین بار چطور maxPrime رو مقدار دهی کنم؟
خب اولبن عدد رو که می گیرید به فرض بزرگترین عددی رو بدونید که فعلا در دست دارید.
یعنی این


int main()
{
int number;
int maxPrime;
cin>>maxPrime;
number = maxPrime;
for (int i=1; i<10; i++)
{
bool isPrime=true;
for (int j=2; j<(number/2),isPrime; j++)
if ( number%j==0 ){
isPrime=false;
if( maxPrime<number)
maxPrime = number;
}
cin>>number;
}
return 0;

}

CPPDeveloper
پنج شنبه 26 اسفند 1389, 01:55 صبح
( سایت کمی مشکل داره، خوندن کود کمی مشکل شده)

مشکل من دقیقا همینجاست، شاید در میان اون ده عدد کاربر هیچ عدد اولی وارد نکنه، اون وقت اولین عدد که مثلا 6 هست به عنوان عدد اول شناخته می شه، که اشتباه هست.
می شه یک متغیر گذاشت که تعداد اعداد اول رو بشمره و با یک شرط if بررسی کنیم اگر صفر بود اون وقت از اون به عنوان مقدار اولیه استفاده کنیم... اما زیاد کد جالبی در نمی آد و به قولی یک dirty code می شه.

راه حلی هست؟
و خیلی ممنون.

tdkhakpur
پنج شنبه 26 اسفند 1389, 16:23 عصر
شاید در میان اون ده عدد کاربر هیچ عدد اولی وارد نکنه، اون وقت اولین عدد که مثلا 6 هست به عنوان عدد اول شناخته می شه، که اشتباه هست.

درسته داخل کد ارسال شده یک بررسی برای اولین عدد انجام نشده میتونستید خودتان اضافه کنید.
در ضمن اولین مقدار رو -1 بگیرید اگر تغییر در این عدد نباشه یعنی عدد اولی وارد نشده است.


int main()
{
int number;
int maxPrime;
bool isPrime
;
cin>>number;
maxPrime = -1;
isPrime=true;
for (int j=2; j<(number/2),isPrime; j++)
if ( number%j==0 )
isPrime=false;
if( isPrime)
maxPrime = number ;
for (int i=1; i<10; i++)
{
isPrime=true;
for (int j=2; j<(number/2),isPrime; j++)
if ( number%j==0 )
isPrime=false;
if( isPrime)
maxPrime = number ;
cin>>number;
}
return 0;
}