Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввести 3 числа, вывод - от меньшего по порядку. 
:(
    Опции темы
EpIvIaK
Дата 25.11.2013, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.6.2013

Репутация: нет
Всего: нет



Стыдно, но такое просто упражнение застало врасплох. Надо ввести 3 числа в ввод, чтоб вывелось от меньшего к большему по порядку. 
Если ввод 4, 10, 4, - чтоб вывелось 4, 4, 10.
Куча ифов - нельзя. А то я уже делал так. Массивы тоже нельзя. 
Я не студент, это задание из книги просто - вот туплю что-то. Подскажите пожалуйста (не прошу за меня делать, ибо повторюсь я не студент, хочу научиться головой понимать).

PM MAIL   Вверх
bsa
Дата 25.11.2013, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(EpIvIaK @  25.11.2013,  18:55 Найти цитируемый пост)
Куча ифов - нельзя.

куча - сколько?
Что вообще можно?
PM   Вверх
EpIvIaK
Дата 25.11.2013, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.6.2013

Репутация: нет
Всего: нет



Вот так нельзя (так я выполнил, правда не довёл до конца, не учтя если что-то будет равно друг другу):

Код
int main(){
    setlocale (LC_CTYPE, "Russian");

    int A, B, C, D;
    A = 0;
    while (A != 666){
    cout << "Введите 3 числа: \n";
    cin >> A; 
    cin >> B; 
    cin >> C;

    if (A < B && A < C && B < C) {cout << A << " " << B << " " << C;}
    else if (A < B && A < C && C < B) {cout << A << " " << C << " " << B << "\n";}
    else if (B < A && B < C && A < C) {cout << B << " " << A << " " << C << "\n";}
    else if (B < A && B < C && C < A) {cout << B << " " << C << " " << A << "\n";}
    else if (C < A && C < B && A < B) {cout << C << " " << A << " " << B << "\n";}
    else if (C < A && C < B && B < A) {cout << C << " " << B << " " << A << "\n";}
    }
    cin >> D;
    return 0;
    }



Аргумент почему нельзя - типа индо-быдло код.
Надо найти более элегантный способ используя лишь Ифы те же, или циклы, короче без фишек а-ля sort, ибо цель даже не в решение задачи любой ценой - а именно смекалка элегантного решения, без артилерии.. Как сказал корректировщик задания многозначительно - "никто не говорил не делать ифами, но нужно сделать ими хорошо, а не так по-индусски". Конкретнее не уточнял, давал ещё намёк - что я зациклен на переменных, а ведь итог там - ЧИСЛА. Пока не врубился что к чему.

Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 26.11.2013, 11:54
PM MAIL   Вверх
feodorv
Дата 25.11.2013, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Мда, а какое минимальное число сравнений нужно, чтобы отсортировать 3 числа? По-моему, три и нужно:
Код

if( a > b ) swap( a, b);
if( b > c ) swap( b, c);
if( a > b ) swap( a, b);
cout << a << " " << b << " " << c << endl;


PS Можно вообще без if-ов с помощью ?: smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
EpIvIaK
Дата 26.11.2013, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.6.2013

Репутация: нет
Всего: нет



Спасибо! Дело в том, что я ещё не знаком с этим - swap.

Как и с ?:.

И если Страуструп не знакомил с этим до этих упражнений, то видимо он предлагает всё сделать примерно как я выше.

А того парня который мне помогает тоже не понимаю, как я сделал выше - не устраивает, а как ещё непонятно, ибо подобные операторы и понятия ещё не пройдены. Нестыковка какая-то. 

П.С - да работает, спасибо. Хотя как Вы поняли - некоторые моменты терзают меня, если я не проходил подобное, то значит надо сделать как-то ещё, или вариант хуже - просят того и сделать так - как я пока не умею технически, а такие притормажения замороченые пользы не дают.

Это сообщение отредактировал(а) EpIvIaK - 26.11.2013, 14:26
PM MAIL   Вверх
feodorv
Дата 26.11.2013, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(EpIvIaK @  26.11.2013,  15:20 Найти цитируемый пост)
я ещё не знаком с этим - swap

swap просто меняет местами значения двух переменных, что-то вроде такого:
Код
void swap( int &a, int &b)
{
  int tmp = a;
  a = b;
  b = tmp;
}

Можно обойтись и без вызовов swap, но тогда придётся писать в таком стиле:
Код
if( a > b ) d = a, a = b, b = d;
if( b > c ) d = b, b = c, c = d;
if( a > b ) d = a, a = b, b = d;

Что уже отдаёт индусятиной)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
baldina
Дата 26.11.2013, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(EpIvIaK @  25.11.2013,  17:55 Найти цитируемый пост)
Куча ифов - нельзя. А то я уже делал так. Массивы тоже нельзя. 

ну что же совсем ничего нельзя-то! ифы - дерево принятия решений, массивы - сортировка.
feodorv предложил закамуфлированный массив с закамуфлированным деревом.
?: это тот же иф по сути. с его помощью можно дерево решений построить
Код

 a < b ? 
  b < c ? 
    std::cout << a << b << c
  : 
    a < c ? 
      std::cout << a << c << b
    :
      std::cout << c << a << b
 :
  a < c ? 
    std::cout << b << a << c
  :
    b < c ? 
     std::cout << b << c << a
    :
     std::cout << c << b << a
 ;


Добавлено через 44 секунды
Цитата(feodorv @  26.11.2013,  14:53 Найти цитируемый пост)
отдаёт индусятиной

в учебных целях позволительно

Добавлено через 8 минут и 17 секунд
если ?: нельзя, можно на if заменить. они, как и в ?:, будут повторяться, т.к. попарных сравнений только 3
Код

if (a < b)  {
  if (b < c) {
    std::cout << a << b << c;
  } 
  else if (a < c) { 
      std::cout << a << c << b
   } else {
      std::cout << c << a << b
  }

else if (a < c) {
    std::cout << b << a << c;

else if (b < c) {
     std::cout << b << c << a;
} else {
     std::cout << c << b << a;
}

PM MAIL   Вверх
EpIvIaK
Дата 26.11.2013, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.6.2013

Репутация: нет
Всего: нет



Благодарю за информацию!
Да он потом облегчил задание, сказав, что числа надо вывести не от меньшего к большему, а просто выяснить меньшее.

Но когда дело дойдёт до основной задачи, буду готов.

А с облегчёнными вариантом он помог, ещё и объясняю в каком направление учит мыслить, вот:

(16:20:06) burillo.burillo: предположим, у тебя есть три ведра))) в одном вода темная, в другом - посветлее, в третьем - прозрачная))) как получить самую прозрачную воду?

(16:25:37) burillo.burillo: берешь четвертое ведро изначально оно пустое, поэтому ты просто заливаешь туда воду из первого ведра потом подходишь ко второму и смотришь - если вода в нем прозрачнее, чем у тебя - выливаешь на.уй воду из своего ведра и вливаешь туда воду из второго ведра потом также подходишь к третьему ведру и также смотришь, перозрачнее ли там вода чем у тебя в ведре, или нет и если прозрачнее, то опять же - выливаешь на.уй воду из своего ведра и вливаешь туда воду из третьего ведра))) и возвращаешь четвертое ведро))) потому что в задаче не было условия вернуть ТО САМОЕ ведро, в котором самая прозрачная вода задача состоит в том, чтобы вернуть ведро с самой прозрачной водой

(16:26:48) burillo.burillo: вот об этом я тебе и говорю - ты пытаешься переменным придать какую то ценность и пытаешься определить, какая из переменных тебе нужна а на переменные то на самом деле по.уй - тебя интересуют ЗНАЧЕНИЯ, которые содержатся в этих переменных


(16:28:25) burillo.burillo: то есть - неважно из какого ведра ты вернул воду, главное чтобы она была самая прозрачная))) то бишь:
int a, b, c, lowest;
cin >> a >> b >> c;
lowest = a;
if (b < lowest)
    lowest = b;
if (c < lowest)
    lowest = c;

все))) вот она вся твоя задача с ведрами


==========

Короче сказал учить математику, булеву алгебру, да и английский заодно. 
До создания игр а-ля Бомбермэн или Змейка ещё годы.  smile 







PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0913 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.