Задачка по С++Преподаватель пишет, что программка не подходит задаче"ФункцииВводится
Задачка по С++
Преподаватель пишет, что программа не подходит задачке
"Функции
Вводится последовательность из N целых чисел. Отыскать среднее арифметическое его цифр."
В документе ворд код и тут оставлю:
// f1.cpp: определяет точку входа для консольного приложения.
//
include "stdafx.h"
include
using namespace std;
bool pr ( intamp; s , intamp; i)
bool p = true;
int n , a;
cout lt;lt; "n = ";
while (cin gt;gt; n)
for ( a = 2 ; alt;=n ; a++)
if ((n%a != 0) (n == 2))
cout lt;lt; "Обычное" lt;lt; endl lt;lt; endl;
s=s+n;
i=i+1;
else
p=false;
cout lt;lt; "Не обычное" lt;lt; endl lt;lt; endl;
break;
return p;
float arif (int s , int i)
cout lt;lt; i lt;lt; endl;
cout lt;lt; s lt;lt; endl;
return ( s/i );
int _tmain(int argc, _TCHAR* argv[])
setlocale (LC_ALL , "RUS");
int s=0 , i=0;
bool p = pr (s ,i);
if (p=true)
cout lt;lt; "Среднее арифметическое = " lt;lt; arif ( s , i );
system ("pause");
return 0;
/*Код подходит тексту задания из файла. Последовательность вводится в строчку через знаки пробела, нажатие кнопки Enter заканчивает ввод последовательности. Программка НЕ инспектирует корректность введенных данных*/
include lt;iostreamgt;
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 gt;gt; numb;
if(is_prime(numb))
sum += numb;
n_of_pr_numb++;
while (std::cin.peek() != '\n');
std::cout lt;lt; "The arithmetic mean: " lt;lt; (n_of_pr_numb == 0 ? 0 : sum * 1. / n_of_pr_numb);
bool is_prime(const int n)
if (n lt;= 1)
return false;
for (int i = 2; i lt;= pow(n, 1/2); i++)
if (n % i == 0)
return false;
return true;
_______________________________________
Главные ошибки/недочеты Вашей реализации:
- В функции pr строчка for ( a = 2 ; alt;=n ; a++) неверна, т.к. на заключительном шаге число всегда будут сопоставлять с самим собой, правильно for ( a = 2 ; alt;n ; a++). Ну и нет смысла инспектировать до a=n-1, довольно проверить до n(об этом есть целая теорема).
- По условию никакого вывода слов "Обычное/Не обычное" не требуется
- Строчка cout lt;lt; "n = "; излишняя, т.к. даже если на ввод будет подано несколько чисел, на экран "n = " будет выведено только в начале. Превосходнее уточнить для юзера формат ввода.
- Смысл функции arif мрачен, она выводит на консоль какие-то непонятные юзеру данные, потом отдаёт s/i[ВНИМАНИЕ! Так как s и i целочисленные, то s/i не является средним арифметическим, это будет только целая часть от него. Вернее s * 1./i либо static_castlt;doublegt;(s)/i], а потом выводит это значение. Зачем разрывать cout на две функции - мрачно
- Ввод данных не обязан находиться в функции проверки числа на простоту(да и смысл разбиения программки на функции исчезает)
-
Вопросы ответы
Статьи
Информатика
Статьи
Русский язык.
Геометрия.
Физика.
Русский язык.
Химия.
Математика.
География.
Литература.
Разные вопросы.
Математика.