самостоятельно разбираюсь в с++, вот, не могу найти, в чем ошибка..

  • Автор темы checkmate
  • Дата начала
C

checkmate

#1
Составить функцию, определяющую, является ли ее целый аргумент простым числом. Использовать эту функцию для подсчета количества простых чисел в последовательности из десяти целых чисел, вводимых с клавиатуры


C++:
#include <iostream.h>
int chislo(int );
void main()
{

int n=0, a, i, b;

for(i=0; i<10; i++)
{
cout<<"\nVvedite celoe chislo: ";
cin>>a;

b=chislo(a);
if (b=1)
{ n++; }

}

cout<<"\nProstix chisel "<<n;


}

int chislo(int x)
{
int f, k, p=0;

for(k=x-1; k>1;)
{
f=x%k;
if(f=0)
{
p++;
}
else
{
k--;
}
}
if(p=0)
{
return 0;
}
else
{
return 1;
}
}
З.Ы.: еще один вопрос - какая функция не дает закрываться компилятору при выполнении программы? Просто только начинаю осваиваться =)
 
B

bini1988

#2
Не буду разбираться в алгоритме (при желании можно найти готовое решение), скажу лишь что = - оператор присвоения, == - проверка на равенство, а так вродь верно, чтобы завершить прогамму по нажатию клавиши вставь в конец текста вызов функции getchar();
 
M

morfius

#3
Алгоритм корректный но не оптимальный (про ошибки в операторах if уже было сказано выше).
по моему такой вариант алгоритма:
C++:
bool is_simple(unsigned x)
{
if (x == 2 || x == 3)
return true;

for (unsigned i = 2; i <= (x /2 + 1); i++)
{
if (x % i ==0)
return false;
}
return true;
}
проще читается и несколько эффективнее.
 
C

checkmate

#4
bini1988, morfius,

Огромное спасибо за ответ на вопрос)))) Учту на будущее замечания) :facepalm:

З.Ы.: Работаю с одним сайтом, вот и пока дальше функций не дошел, ток за массивы сел, так что пока программы максимально громоздкие =*(
 
G

goldenCode

#5
bool is_simple(unsigned x) { if (x == 2 || x == 3) return true; for (unsigned i = 2; i <= (x /2 + 1); i++) { if (x % i ==0) return false; } return true; }
скажите, а это будет работать под линуксом? я собираю с помощью gcc он выдает ошибки: 'bool' : undeclared identifier
помогите разобраться
 
G

Guest

#6
Можно попробовать мой вариант функции
C++:
int prv(int n)
{
int d,s;
s=false;
for (d=2; (d<=n/2)&&(!(s)); d++)
if (n%d==0)
s=true;
if (s)
return 0;
else return 1; 
}
перед всем кодом поставить
C++:
#define true 1
#define false 0
Не уверен что правильно работает, я тоже начинающий. На нескольких числах проверил. Код сам написал.

** теперь уверен. Только об единичке сами позаботьтесь, функция её считает простым числом. Для вызова напишите prv(<число или переменная типа int>). Функция возвращает 0 если число простон и 1, если составное. Пример использования:
C++:
if (prv(7)) printf("Число простое");
Должно вывести "Число простое", а если написать
C++:
iif (prv(6)) printf("Число простое");
То ничего не выведется.
Пример фрагмента кода, который с помощью этой функции вычисляет простые числа от 1 до 200:
int i;
C++:
for (i=2; i<=200; i++)
if (prv(i)) printf("%d ",i);
printf("\n");
 
E
#7
Попробовать конечно можно, но не нужно, вредно и опасно.
 
G

Guest

#8
я поппробовал, работает. Тут ничего опасного нет, мы же не с системными файлами работаем. Я изложил функцию, которую максимально гибко можно использовать в программе.