/*Код соответствует тексту задания из файла. Последовательность вводится в строку через знаки пробела, нажатие клавиши Enter заканчивает ввод последовательности. Программа НЕ проверяет корректность введенных данных*/
#include <iostream>
bool is_prime(const int n);
int main(int argc, char* argv[])
{
int numb, n_of_pr_numb = 0;
long int sum = 0;
do
{
std::cin >> numb;
if(is_prime(numb))
{
sum += numb;
n_of_pr_numb++;
}
} while (std::cin.peek() != '\n');
std::cout << "The arithmetic mean: " << (n_of_pr_numb == 0 ? 0 : sum * 1. / n_of_pr_numb);
}
bool is_prime(const int n)
{
if (n <= 1)
{
return false;
}
for (int i = 2; i <= pow(n, 1/2); i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
_______________________________________
Основные ошибки/недочеты Вашей реализации:
- В функции pr строка for ( a = 2 ; a<=n ; a++) неверна, т.к. на последнем шаге число всегда будут сравнивать с самим собой, правильно for ( a = 2 ; a<n ; a++). Ну и нет смысла проверять до a=n-1, достаточно проверить до √n(об этом есть целая теорема).
- По условию никакого вывода слов "Простое/Не простое" не требуется
- Строка cout << "n = "; лишняя, т.к. даже если на ввод будет подано несколько чисел, на экран "n = " будет выведено лишь в начале. Лучше уточнить для пользователя формат ввода.
- Смысл функции arif неясен, она выводит на консоль какие-то непонятные пользователю данные, затем возвращает s/i[ВНИМАНИЕ! Так как s и i целочисленные, то s/i не является средним арифметическим, это будет лишь целая часть от него. Правильнее s * 1./i или static_cast<double>(s)/i], а затем выводит это значение. Зачем разрывать cout на две функции - неясно
- Ввод данных не должен находиться в функции проверки числа на простоту(да и смысл разбиения программы на функции пропадает)
Двоичный переводим в восьмеричный, восьмеричный в десятичный, а десятичный в 16-ричный
Набрать 3 литровый баллон, перелить в 5 литровый,(там останется место для 2 литров), опять набрать 3 литровый баллон и перелить из него 2 литра в 5 литровый. (В 3 литровом баллоне останется 1 литр)
1)
program z1;
Var a:integer;
Begin read(a);
if (a>9) and (a<100) then writeln(a, '-двузначное число')
else writeln(a, '-не является двузначным числом');
end.
2)
program z2;
Var i:integer;
Begin
for i:=1 to 9 do if (i mod 2 = 1) then writeln(i, ', ');
end.
2 способ:
program z2;
Var i:integer;
Begin
i:=1;
while i<=9 do
begin write(i, ', ');
i:=i+2;
end;
end.
3)
program z3;
Var i,n:integer;
S:real;
a: array[1..100] of real;
Begin
write('Введите количество элементов массива:');
readln(n);
write('Введите элементы массива:');
for i:=1 to n do read(a[i]);
i:=1; S:=0;
while i<=n do
begin S:=S+a[i];
i:=i+2;
end;
write('S=',S);
end.