• Задача по С++
    Преподаватель пишет, что программа не соответствует задаче
    "Функции
    Вводится последовательность из N целых чисел. Найти среднее арифметическое его цифр."
    В документе ворд код и тут оставлю:
    // f1.cpp: определяет точку входа для консольного приложения.
    //

    #include "stdafx.h"
    #include
    using namespace std;
    bool pr ( int& s , int& i)
    {
    bool p = true;
    int n , a;
    cout << "n = ";
    while (cin >> n)
    {
    for ( a = 2 ; a<=n ; a++)
    {
    if ((n%a != 0) || (n == 2))
    {
    cout << "Простое" << endl << endl;
    s=s+n;
    i=i+1;
    } else
    {
    p=false;
    cout << "Не простое" << endl << endl;

    }
    break;
    }
    }
    return p;
    }
    float arif (int s , int i)
    {
    cout << i << endl;
    cout << s << 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 << "Среднее арифметическое = " << arif ( s , i );
    system ("pause");
    return 0;
    }

Ответы 1

  • /*Код соответствует тексту задания из файла. Последовательность вводится в строку через знаки пробела, нажатие клавиши 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() != '');

       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 на две функции - неясно
    • Ввод данных не должен находиться в функции проверки числа на простоту(да и смысл разбиения программы на функции пропадает)
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years