Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2014, 16:09   #1
Alex100371
Новичок
Джуниор
 
Регистрация: 21.08.2014
Сообщений: 1
По умолчанию Помогите новичку

Здравствуйте, помогите пожалуйста разобраться.
Нужно было решить вот такую задачку:

Задание № 4

Напишите программу, которая вводит три целых числа с клавиатуры и печатает сумму, среднее значение, произведение, меньшее и большее из этих чисел. Диалог на экране должен выглядеть следующим образом:

Введите три различных целых числа: 13 27 14
Сумма равна 54
Среднее значение равно 18
Произведение равно 4914
Наименьшее равно 13
Наибольшее равно 27

Долго парился с решением и в конечном итоге родил вот это :
Код:
#include <iostream>
using namespace std;

int main ()
{
    int x, y, z, s, m, b;
    m = 0 , b = 0;

    cout << " Vvedite 3 razlichnih chisla: ";
    cin >> x >> y >> z;

    cout << "Symma ravna " << x+y+z << endl;

    s = (x+y+z)/3;
    cout << "Srednee znachenie ravno " << s << endl;

    cout << "Proizvedenie ravno " << x*y*z << endl;

    if (x<y)
    {
      if(x<z)
      {
          m = x;
          cout << "Naimen'wee ravno " << m << endl;
      }
      else
      {
          m = z;
          cout << "Naimen'wee ravno " << m << endl;
      }
    }
    else if (y<z)
    {
        m = y;
        cout << "Naimen'wee ravno " << m << endl;
    }
    else
    {
        m = z;
        cout << "Naimen'wee ravno "<< m << endl;
    }

    if (x>y)
    {
      if(x>z)
      {
          b = x;
          cout << "Naibol'wee ravno " << b << endl;
      }
      else
      {
          b = z;
          cout << "Naibol'wee ravno " << b << endl;
      }
    }
    else if (y>z)
    {
        b = y;
        cout << "Naibol'wee ravno " << b << endl;
    }
    else
    {
        b = z;
        cout << "Naibol'wee ravno "<< b << endl;
    }

    return 0;
}


Далее посмотрел ответ на эту задачу и увидел вот это : 

#include <iostream>

using namespace std;

int main()
{
   int x, y, z;
   
   cout << "Vvedite tri razlichnig celih chisla: \n";
   cin >> x >> y >> z;
   
   cout << "Summa ravna " << x + y + z << endl;
   cout << "Srednee znacheniye ravno " << (x + y + z) / 3 << endl;
   cout << "Proizvedenie ravno " << x * y * z << endl;
   
   if (x > y)
      if (x > z)
         cout << "Naibolshee ravno " << x << endl;
   if (y > x)
      if (y > z)
         cout << "Naibolshee ravno " << y << endl;
   if (z > x)
      if (z > y)
         cout << "Naibolshee ravno " << z << endl;
   if (x < y)
      if (x < z)
         cout << "Naimenshee ravno " << x << endl;
   if (y < x)
      if (y < z)
         cout << "Naimenshee ravno " << y << endl;
   if (z < x)
      if (z < y)
         cout << "Naimenshee ravno " << z << endl;
		 
   return 0;
}
И в конечном итоге мне заявили, что мой код "сложней" и проще было написать так как указано в учебнике. Так вот у меня возник вопрос - То что я сократил дает хоть что-то ? есть ли смысл в том, что я сократил ?
Ответьте пожалуйста, а то меня совсем запутали.

Последний раз редактировалось Stilet; 21.08.2014 в 20:22.
Alex100371 вне форума Ответить с цитированием
Старый 22.08.2014, 08:02   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Немного накручено, зато сам...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 22.08.2014, 08:21   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Дурня какая-то в учебнике.
Я бы делал попроще:
Код:
#include <iostream>

using namespace std;

int main()
{
    int x, y, z, s, m, b;
    m = 0 , b = 0;

    cout << " Vvedite 3 razlichnih chisla: ";
    cin >> x; m=x;b=x;
    cin >> y; m=(m>y)?y:m; b=(b<y)?y:b;
    cin >> z; m=(m>z)?z:m; b=(b<z)?z:b;

    cout << "Symma ravna " << x+y+z << endl;

    s = (x+y+z)/3;
    cout << "Srednee znachenie ravno " << s << endl;

    cout << "Proizvedenie ravno " << x*y*z << endl;
    cout << "Naimen'wee ravno "<< m << endl;
    cout << "Naibol'wee ravno " << b << endl;

    cin.get();
    return 0;
}
Т.е. смысл проверки сразу после ввода данных. И не надо тут кучу IF()
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2014, 13:43   #4
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Я бы еще короче сделал и понятнее:
Код:
#include <iostream>
#include <algorithm>

int main()
{
	setlocale(LC_ALL,"");
	int a,b,c;
	std::cout << "Введите 3 разных целочисленных числа(через пробел) : ";
	std::cin >> a >> b >> c;
	int numbers[] = {a,b,c};
	std::cout << std::endl << "Сумма равна " << (a+b+c) << std::endl;
	std::cout << "Среднее значение равно " << ((a+b+c)/3) << std::endl;
        std::cout << "Произведение равно " << (a*b*c) << std::endl;
	std::cout << "Наименьшее равно " << *std::min_element(numbers,numbers+3) << std::endl;
	std::cout << "Наибольшее равно " << *std::max_element(numbers,numbers+3) << std::endl;
}
Цитата:
Сообщение от Alex100371 Посмотреть сообщение
И в конечном итоге мне заявили, что мой код "сложней" и проще было написать так как указано в учебнике. Так вот у меня возник вопрос - То что я сократил дает хоть что-то ? есть ли смысл в том, что я сократил ?
Ответьте пожалуйста, а то меня совсем запутали.
Смысл есть только со стороны читабельности кода.
Гораздо легче и приятнее читать код, решающий эту задачу за 5-10 строк кода, чем разгребать 30-50 строк кода, в которых к тому же везде стоят условия if-else и еще куча пустых строк.
Ну а со стороны производительности, тут уже решает не то, насколько ты растянул код, а то, какие ты применил методы.

Последний раз редактировалось Stilet; 22.08.2014 в 15:13.
DakotaZ вне форума Ответить с цитированием
Старый 22.08.2014, 15:15   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Смысл есть только со стороны читабельности кода.
Ну так писать как в учебнике том нет ни смысла ни читабельности )
Вот твой пример однозначно прост для понимания, а то что в топе темы... не фонтан короче.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2014, 15:56   #6
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну так писать как в учебнике том нет ни смысла ни читабельности )
Вот твой пример однозначно прост для понимания, а то что в топе темы... не фонтан короче.
Да уж, не говори, чему сегодня учат людей..
DakotaZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите новичку!! RML Microsoft Office Access 9 25.01.2010 13:04
Помогите новичку. Lukash11111 Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 12.07.2009 19:13
помогите новичку Святой Помощь студентам 4 13.05.2007 09:07
Помогите новичку HIP Общие вопросы Delphi 1 19.12.2006 14:55