PDA

View Full Version : سوال: مشکل برنامه چاپ اعداد اول



adonis27
جمعه 30 فروردین 1392, 17:00 عصر
سلام
من میخوام که یک ورودی بدم و اعداد اول اونو چاپ کنه حالا نوشتم برنامشو ولی شک دارم درست باشه چون خودم تست میکنم مثلا 5 میدم میاد از 1تا 5 چاپ میکنه
خواهشا یکی واسم توضیح بده

اینم کدش

#include<iostream.h>
void chapeaval(int x);
int main()
{
int n;
cout<<"enter number::";
cin>>n;
chapeaval(n);

return(0);
}

void chapeaval(int x)
{
int i,mod;
for(i=1;i<x;i++)
{
if((i%1==0)&&(i%i==0))
{
mod=i;
cout<<"adade aval::\t"<<mod<<"\n";

}
}



}

phpeproject.ir
جمعه 30 فروردین 1392, 17:30 عصر
if((i%2==0)&&(i%i==0)) {
mod=i;
cout<<"adade aval::\t"<<mod<<"\n";

}

phpeproject.ir
جمعه 30 فروردین 1392, 17:34 عصر
for(i=1;i<x;i++) {
if((i%2==0))
{
cout<<"adade aval::\t"<<i<<"\n";

}
}

adonis27
جمعه 30 فروردین 1392, 17:35 عصر
توضیح بده کجاشو مشکل دارم؟

phpeproject.ir
جمعه 30 فروردین 1392, 17:35 عصر
(i%i==0)) این برای چیه ؟

phpeproject.ir
جمعه 30 فروردین 1392, 17:36 عصر
توضیح بده کجاشو مشکل دارم؟
نوشتم کدشو که معلومه دیگه مشکل کجاست دوست من

Amir_Developer
جمعه 30 فروردین 1392, 17:38 عصر
اگه تو مثالهای بالا عدد 6 رو وارد کنید عدد 4 و 6 رو هم به عنوان عدد اول چاپ میکنه که اشتباهه.
این کد امتحان شده و درسته :

for (int i = 2; i <= adad; i++)
{
counter = 0;
for (int j = 1; j <= i; j++)
{
if (i % j == 0)
counter++;
}
{

phpeproject.ir
جمعه 30 فروردین 1392, 17:40 عصر
اگه تو مثالهای بالا عدد 6 رو وارد کنید عدد 4 و 6 رو هم به عنوان عدد اول چاپ میکنه که اشتباهه.
این کد امتحان شده و درسته :

for (int i = 2; i <= adad; i++)
{
counter = 0;
for (int j = 1; j <= i; j++)
{
if (i % j == 0)
counter++;
}
{

اره در اصل اینجوریه باتابع

#include <iostream>
#include <conio.h>
using namespace std;
int prime(int);
int main()
{
int n;
while(1)
{
cout<<"\n enter a number";
cin>>n;
if(prime(n))
cout<<"\n your number is prime";
else
cout<<"\n your number is not prime";
}
return 0;
}
//--------------------
int prime(int n)
{
int i,t=1;
for(i=2;(i<=n/2)&& t;i++)
if(n%i==0)
t=0;
return t;
}

adonis27
جمعه 30 فروردین 1392, 17:43 عصر
نوشتم کدشو که معلومه دیگه مشکل کجاست دوست من
دادا غلط بود مگه نمیگه عدد اول عددیه که بر خودش و بر 1 تقسیم بشه بیاد 0 عدد اول هست اینجا چرا تقسیم بر 2 کردی؟

phpeproject.ir
جمعه 30 فروردین 1392, 17:43 عصر
تمام کار پیدا کردن اعداد اول رو این تابع انجام میده که از بالا با یه عدد پر میشه

int prime(int n)
{
int i,t=1;
for(i=2;(i<=n/2)&& t;i++)
if(n%i==0)
t=0;
return t;
}

adonis27
جمعه 30 فروردین 1392, 17:58 عصر
تمام کار پیدا کردن اعداد اول رو این تابع انجام میده که از بالا با یه عدد پر میشه

int prime(int n)
{
int i,t=1;
for(i=2;(i<=n/2)&& t;i++)
if(n%i==0)
t=0;
return t;
}


دادا این فقط 1 بر میگردونه خودت تست کن
این سایت رو نگاه کن
مثلا ما 5 رو ورودی بدیم با ید این اعداد رو بین 5 به ما بده
http://spc.xzn.ir/1391/07/10/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%DB%8C%D8%AF%D8%A7-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%88%D9%84/#more-63

Amir_Developer
جمعه 30 فروردین 1392, 18:32 عصر
این کد کامل تابعی که نوشته بودم :

#include <iostream.h>
#include<conio.h>
#include<stdio.h>

int main()
{
int number=0,i=0,j=0,counter=1;
cout<<" lotfan adadi ra ke adade avale ghabl az an ra mikhahid vared konid :\n";
cin>>number;
for(i=1;i<=number;i++)
{
counter=0;
for(j=1;j<=i;j++)
{
if(i%j==0)
counter++;
}
if(counter<=2&&i!=1)
cout<<i<<"\n";

}


getch();
return 0;
}

adonis27
جمعه 30 فروردین 1392, 18:38 عصر
این درسته مرسی میشه یکم در مورد کارتون توضیح بدین و بگین من کجا رو اشتباه کرده بودم

GENERAL IRAJ
جمعه 30 فروردین 1392, 19:58 عصر
سلام ، آیا قبول دارید که n^1/2)*(n^1/2)=n ) طبق یه قضیه ریاضی اگه عدد شما از 1 تا جذر خود عدد (یعنی ریشه دوم عدد) برهیچ عددی بخش پذیر نباشد اول است ، این برنامه تازمانی که کاربر عدد 0 را وارد نکرده کار می کند:



/* this program to calcute & find prime number
( by using function ) */

# include <stdio>
# include <stdlib>
# include <math>
int isprime (int n); /* function prototype */
int main()
{
int n;
printf("\n /* this program to calcute & find prime number \n ( by using function ) */ \n");
printf(" //----------------------------------------------------------------------- // \n");
printf("\n pleas enter your number : \n");
scanf("\n %d",&n);
while (n>0)
{
if (isprime(n) == 1)
{
printf("\n %d is a prime number \a\n",n)
}
else /* is prime (n)==0 */
{
printf("\n %d is not a prime number\n",n);
}
scanf("\n%d",&n);
}
printf("\n YOUR ENTERED NUMBER IS WRONG!!!\a\n");
system("PAUSE");
return 0;
}
int isprime (int n) /* function definitoin */
{
int a,i;

if(n==1)
{
return 0;
}
a = (int)sqrt(n);
i = 2;
while (i<=a)
{
if (n%i==0)
return 0;
else if (i>2)
{
i += 2;
}
else
{
i+=1;
}
if (i>a)
return 1;
}
return n;
}

Amir_Developer
شنبه 31 فروردین 1392, 11:49 صبح
این درسته مرسی میشه یکم در مورد کارتون توضیح بدین و بگین من کجا رو اشتباه کرده بودم

خواهش میکنم , توی کدهایی که شما نوشته بودین بخش پذیری عددهارو فقط نسبت به 2 و خودش (البته تو یکی از کدها هم فقط به 1 و خودش) امتحان میکردین که از نظر ریاضی برای شناسایی عدد اول اشتباهه و راهش اینه که برای تشخیص اول بودن یک عدد باید اون رو به تمام اعداد اول قبل از خودش تقسیم کنیم و ببینیم که اگه بخش پذیر نبود اونوقت اون عدد اوله این راه ریاضیش بود ولی از نظر برنامه نویسی یه راه ساده هست که میگه برای تشخیص اول بودن یک عدد کافیه اونو به تمام عددهای قبل از خودش یعنی از 1 تا خودش تقسیم کنیم اگه فقط به 1 و خودش بخش پذیر بود یعنی اون عدد اوله.