Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 39

Тема: Вопрос про множественный выбор

  1. #1

    Вопрос про множественный выбор

    Можно ли так организовать множественный выбор на языке Си? Обрабатываться будет переменная res.

    if ((res>0)&&(res<=22.5 ))
    "Инструкция 1";
    if ((res>22.5)&&(res<=4 5))
    "Инструкция 2";
    if ((res>45)&&(res<=67. 5))
    "Инструкция 3";
    if ((res>67.5)&&(res<=9 0))
    "Инструкция 4";



    Я слышал про оператор switch, но он же не позволяет работать с дробными числами.


  2. #2
    Это проще делается
    if (res==0 );
    else if (res<=22.5 )
    "Инструкция 1";
    else if (res<=45)
    "Инструкция 2";
    else if (res<=67.5)
    "Инструкция 3";
    else if (res<=90)
    "Инструкция 4";

    А оператором switch вы диапазон не зададите, даже если переведёте res в целые, умножив на 2.
    Последний раз редактировалось Oleg 9; 04.09.2024 в 15:37.

  3. #3
    Аватар для payalnik
    Регистрация
    27.09.2015
    Адрес
    Красноярский край
    Сообщений
    986
    Цитата Сообщение от Джокер Посмотреть сообщение
    Можно ли так организовать множественный выбор на языке Си? Обрабатываться будет переменная res.
    Это не оптимальное решение. Например выполнился первый if. Тогда остальные проверять уже не требуется. А у вас будут. Правильно тут подсказали.
    Hominis est errare, insipientis perseverare

  4. #4

  5. #5
    Цитата Сообщение от payalnik Посмотреть сообщение
    Например выполнился первый if. Тогда остальные проверять уже не требуется.
    Это как раз таки фигня, основная засада в том, что будет почти в 2 раза больше сравнений для 32 (64) битной переменной, плюс дополнительные логические операции. Это весьма пагубно сказывается на размере кода и на времени выполнения даже самого длинного варианта.

  6. #6
    Цитата Сообщение от Джокер Посмотреть сообщение
    if ((res>0)&&(res<=22.5 ))
    "Инструкция 1";
    if ((res>22.5)&&(res<=4 5))
    "Инструкция 2";
    if ((res>45)&&(res<=67. 5))
    "Инструкция 3";
    if ((res>67.5)&&(res<=9 0))
    "Инструкция 4";
    Удобнее использовать во всех конструкциях, начиная со второй, else if, чтобы не было проверки всех условий, а только проверка осуществлялась, если предыдущие условия были ложные.
    Также у вас стоят пробелы внутри чисел, поправьте


    if ((res > 0) && (res <= 22.5 )) {
    "Инструкция 1";
    }
    else if ((res > 22.5) && (res <= 45)) {
    "Инструкция 2";
    }
    else if ((res > 45) && (res <= 67.5)) {
    "Инструкция 3";
    }
    else if ((res > 67.5) && (res <= 90)) {
    "Инструкция 4";
    }

    Каждую инструкцию лучше обособить фигурными скобками. Это необязательно, если она состоит из одной строки, но лучше поставить, чтобы повысить читаемость кода.
    Код стайл тоже поправил - пробелы до и после операторов.

    Свитч тоже можно использовать, если разделить рез на 22,5 и преобразовать в целое число.

  7. #7
    Цитата Сообщение от ra6foo Посмотреть сообщение
    Удобнее использовать во всех конструкциях, начиная со второй, else if,
    Тогда поясните, какой смысл в бесполезных проверках, отжирающих код и время, выделенных красным? Эти условия всегда будут выполняться, кроме ноля. Но ноль проще отловить один раз в самом начале .
    if ((res > 0) && (res <= 22.5 )) {
    "Инструкция 1";
    }
    else if ((res > 22.5) && (res <= 45)) {
    "Инструкция 2";
    }
    else if ((res > 45) && (res <= 67.5)) {
    "Инструкция 3";
    }
    else if ((res > 67.5) && (res <= 90)) {
    "Инструкция 4";
    }
    И посмотрите сообщение #2

  8. #8

    Регистрация
    14.06.2018
    Адрес
    Санкт-Петербург
    Сообщений
    1,217
    Вроде бы брейк в обоих случаях решает.
    Обуздать фантазию способны лишь знание и опыт.

  9. #9
    Решает только на 20.
    Последний раз редактировалось RU9CA; 04.09.2024 в 21:16. Причина: П.6.2


  10. #10
    Аватар для vadim_d
    Регистрация
    29.10.2006
    Адрес
    Санкт-Петербург
    Сообщений
    15,540
    Цитата Сообщение от Oleg 9 Посмотреть сообщение
    какой смысл в бесполезных проверках, отжирающих код и время
    Может хорошо оптимизирующий компилятор их сам уберет? А вообще правильно было про деление на 22.5 (или умножение на 1/22.5), приведение к целому и даже не кейс, а таблица указателей на функции, чтобы жизнь медом не казалась
    Вадим

Страница 1 из 4 1234 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Выбор ГСС
    от RN4R в разделе Темы не вошедшие в другие разделы форума
    Ответов: 24
    Последнее сообщение: 10.11.2014, 18:19
  2. Выбор БП
    от Miha в разделе Источники питания
    Ответов: 4
    Последнее сообщение: 20.01.2012, 10:40
  3. Выбор МК
    от Strannik в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 4
    Последнее сообщение: 17.07.2011, 19:12
  4. Выбор антенны
    от Артур в разделе Для начинающих
    Ответов: 69
    Последнее сообщение: 02.02.2011, 11:02
  5. выбор ПЧ
    от r062006 в разделе Для начинающих
    Ответов: 8
    Последнее сообщение: 11.02.2009, 18:39

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •