8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
1

Ветвление - else if. 2 инструкции одновременно по 2-м условиям

17.04.2020, 20:34. Показов 1025. Ответов 10
Метки нет (Все метки)

int main
{коллеги!}

Всем доброго вечера "ребят"
Снова зову на помощь, потому как ответа не нашел, видимо он сидит слишком далеко в книжках и я не дошел до этого инструмента пока!

Суть вопроса - как при выполнении одновременно двух условий, например (условие №3 + условие №4) выполнить инструкции 3 и 4?
Я подозреваю, что ветвление здесь вообще не в помощь, сижу целый день, толку ноль. Никак не могу скумекать...
Может функция какая есть?

Вот псевдокод, ничего лишнего, знаю как это может бесить!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if      (условие №1)  
{
   // инструкция 1
}
else if (условие №2)   
{
   // инструкция 2
}
else if (условие №3) 
{
   // инструкция 3
}
else if (условие №4) 
{
   // инструкция 4
}
else if (условие №4)  
{
   // инструкция 5
}
else  
{
   // выдаем результат
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2020, 20:34
Ответы с готовыми решениями:

Что такое блоки и инструкции, вложенные инструкции и главные инструкции?
Что это такое?

выбор строк из таблицы, одновременно по нескольким условиям
здравствуйте. есть таблица(t1) с полями: дата(формат дата/время), id_s(числовое),...

Excel 2010 количество значений, удовлетворяющим условиям больше либо равно и одновременно меньше( >=a, <b)
есть столбец значений, и нужно посчитать из него сколько раз встречаются значения, удовлетворяющие...

Как возможно выйти в инструкции switch в начало самой инструкции при нажатии "не правильной" кнопки
В целом у меня вопрос такой: Как возможно выйти в инструкции switch в начало самой инструкции при...

10
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
17.04.2020, 20:52  [ТС] 2
По сути, для наглядности, вот эта ситуация, когда 2 значения явно не проходят проверку

Ветвление - else if. 2 инструкции одновременно по 2-м условиям


А в поле для сообщений - только одно!
0
С чаем беда...
Эксперт CЭксперт С++
10010 / 5356 / 1467
Регистрация: 18.10.2014
Сообщений: 12,917
17.04.2020, 21:07 3
Лучший ответ Сообщение было отмечено R_U_S_V как решение

Решение

Цитата Сообщение от R_U_S_V Посмотреть сообщение
как при выполнении одновременно двух условий, например (условие №3 + условие №4) выполнить инструкции 3 и 4?
Перестать засовывать эти if-ы во взаимоисключающие ветки else

C++
1
2
3
4
5
6
7
8
9
if (условие №3) 
{
   // инструкция 3
}
 
if (условие №4) 
{
   // инструкция 4
}
1
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
17.04.2020, 21:11  [ТС] 4
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Перестать засовывать эти if-ы во взаимоисключающие ветки else
Спасибо! Но отдельные ифы я пробовал, не получается! Инструкции, а по сути это просто текстовые сообщения в программе, должны замещать друг друга а не отображаться скопом. Я тестировал...
0
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
17.04.2020, 21:17  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int star_teeth_1;
cout << "\n размер передней звезды:"; cin >> star_teeth_1;
int star_teeth_2;
cout << "\n размер задней звезды:"; cin >> star_teeth_2;
float wheel_diameter;
cout << "\n диаметр колеса:"; cin >> wheel_diameter;
int revolutions_pedals;
cout << "\n каденс:"; cin >> revolutions_pedals;
 
if (star_teeth_1 <= 0 || star_teeth_2 <= 0 || wheel_diameter <= 0 || revolutions_pedals <= 0)  // если хотябы одно из значений = 0
{
    cout << "\n введите все данные!";
}
    if (wheel_diameter <= 10)   // если диаметр колеса меньше или равен 10 дюймам
    {
    cout << "\n колесо меньше 11 дюймов";
    }
    if (revolutions_pedals <= 10)  // если каденс меньше или равен - 10 оборотам
    {
    cout << "\n число оборотов каретки (каденс) слишком мало!";
    }
    if (star_teeth_1 < 24 || star_teeth_1 > 46)  // если передняя звезда меньше 24 или больше 44 зубьев
    {
    cout << "\n ведущих звезд с таким количеством зубьев нет!";
    }
    if (star_teeth_2 < 11 || star_teeth_2 > 36)  // если задняя звезда каретки меньше 11 или больше 36 зубьев
    {
    cout << "\n ведомых звезд с таким количеством зубьев нет!";
    }
else  // во всех остальных случаях ...
{
    cout << "\n все верно! выдаем результат ...";
}
Ветвление - else if. 2 инструкции одновременно по 2-м условиям


Вот что получается. если ввести все нули, вылезают сразу все сообщения вместе с первым, так не очень хочется.
хотелось бы программу поумнее.
0
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
17.04.2020, 21:21  [ТС] 6
вот еще ситуация, прога считает даже если одно значение не корректно. так не надо.
я может потом сделаю галочку - считать при любых условиях, но это следующий этап.

Ветвление - else if. 2 инструкции одновременно по 2-м условиям
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
17.04.2020, 21:21 7
Цитата Сообщение от R_U_S_V Посмотреть сообщение
Суть вопроса - как при выполнении одновременно двух условий, например (условие №3 + условие №4) выполнить инструкции 3 и 4?
C++
1
2
3
4
5
else if (условие №3 && условие №4) 
{
   // инструкция 3
   // инструкция 4
}
1
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
17.04.2020, 21:31  [ТС] 8
Yetty,
Я так тоже думал сделать, но а как быть если сработают другие условия? или не 3 и 4 , а 2 и 5 например
Я видимо плохо объяснил суть проблемы.

У меня условие №1 блокирует вообще все, поскольку если везде нули, то и считать нечего, и выводит сообщения о неправильных звездочках и оборотах каретки и прочих проблемных значениях тоже смысла нет.
Если например срабатывают одновременно условия 2 и 5 , то одновременно выполняем инструкции в этих ветках, а имеено выводим в столбик сообщения - колесо меньше 11 дюймов и ведомых звезд с таким количеством зубьев нет
Как только соответствующее поле будет заполнено допустимым значением то одно из сообщений должно пропасть.
Ну как-то так
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
17.04.2020, 21:33 9
повтор ввода:
C++
1
2
3
4
5
6
do
{
cout << "\n размер передней звезды:"; cin >> star_teeth_1;
if (star_teeth_1<=0) cout << "star_teeth_1>0 !!! Repeat please...\n";
}
while (star_teeth_1<=0);
для каждой строки сделайте отдельно (чтобы не вводить все значения снова при одном неположительном вводе)
1
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
17.04.2020, 22:11  [ТС] 10
Цитата Сообщение от Yetty Посмотреть сообщение
для каждой строки сделайте отдельно (чтобы не вводить все значения снова при одном неположительном вводе)
Спасибо! Буду пробовать, это займет некоторое время)) о результатах отпишу!

Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
do
{
    cout << "\n размер передней звезды:";
    cin >> star_teeth_1;
    if (star_teeth_1 < 24 || star_teeth_1 > 46)
    cout << "ведущих звезд с таким количеством зубьев нет!\n";
}
while (star_teeth_1 < 24 || star_teeth_1 > 46);
 
do
{
    cout << "\n размер задней звезды:";
    cin >> star_teeth_2;
    if (star_teeth_2 < 11 || star_teeth_2 > 36)
    cout << "ведомых звезд с таким количеством зубьев нет!\n";
}
while (star_teeth_2 < 11 || star_teeth_2 > 36);
 
do
{
    cout << "\n диаметр колеса:";
    cin >> wheel_diameter;
    if (wheel_diameter <= 10)
    cout << "колесо меньше 11 дюймов!\n";
}
while (wheel_diameter <= 10);
 
do
{
    cout << "\n каденс:";
    cin >> revolutions_pedals;
    if (revolutions_pedals <= 10)
    cout << "число оборотов каретки (каденс) слишком мало!\n";
}
while (revolutions_pedals <= 10);
Тестирую пока в консоли, потом отнесу в окно, там посмотрим...

Добавлено через 16 минут
Виснет мое окошко как только появляется хотябы одно не правильное значение
Но если вводить значения не попадающие под "фильтр" то считает.

Вот полный код проверочного блока:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
if (star_teeth_1 <= 0 || star_teeth_2 <= 0 || wheel_diameter <= 0 || revolutions_pedals <= 0)  // если хотябы одно из значений = 0
{
   speedVelo = 0;           // то обнуляем все результаты, пока во все поля не будут введены положительные значения
   speedsecond = 0;         // защита от дурака
   gear_ratio = 0;          //
   length_circl_wheel = 0;  //
 
   hStae = CreateWindow("static", "не могу посчитать - введите все данные!", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_CENTER, 20, 295, 420, 100, hwnd, 0, hInst, NULL);  // Создаем и показываем поле текста для подсказок
   ShowWindow(hStae, SW_SHOWNORMAL);
}
   else  // а во всех остальных случаях ...
{
   hStae = CreateWindow("static", "отлично! вот результат", WS_CHILD | WS_VISIBLE | ES_CENTER, 20, 295, 420, 100, hwnd, 0, hInst, NULL);  // Создаем и показываем поле текста для подсказок
   ShowWindow(hStae, SW_SHOWNORMAL);
}
 
do
{
    if (star_teeth_1 < 24 || star_teeth_1 > 46)
    hStae = CreateWindow("static", "уверены? звезд с таким количеством зуьбев нет!", WS_CHILD | WS_VISIBLE | ES_CENTER, 20, 295, 420, 100, hwnd, 0, hInst, NULL);  // Создаем и показываем поле текста для подсказок
    ShowWindow(hStae, SW_SHOWNORMAL);
}
while (star_teeth_1 < 24 || star_teeth_1 > 46);
 
do
{
    if (star_teeth_2 < 11 || star_teeth_2 > 36)
    hStae = CreateWindow("static", "точно? задних звезд с таким количеством зуьбев нет!", WS_CHILD | WS_VISIBLE | ES_CENTER, 20, 295, 420, 100, hwnd, 0, hInst, NULL);  // Создаем и показываем поле текста для подсказок
    ShowWindow(hStae, SW_SHOWNORMAL);
}
while (star_teeth_2 < 11 || star_teeth_2 > 36);
 
do
{
    if (wheel_diameter <= 10)
    hStae = CreateWindow("static", "уверены? колесо меньше 11 дюймов", WS_CHILD | WS_VISIBLE | ES_CENTER, 20, 295, 420, 100, hwnd, 0, hInst, NULL);  // Создаем и показываем поле текста для подсказок
    ShowWindow(hStae, SW_SHOWNORMAL);
}
while (wheel_diameter <= 10);
 
do
{
    if (revolutions_pedals <= 10)
    hStae = CreateWindow("static", "уверены? число оборотов каретки слишком мало!", WS_CHILD | WS_VISIBLE | ES_CENTER, 20, 295, 420, 100, hwnd, 0, hInst, NULL);  // Создаем и показываем поле текста для подсказок
    ShowWindow(hStae, SW_SHOWNORMAL);
}
while (revolutions_pedals <= 10);
Я сам конечно причину поищу, но если есть мысли, не буду против! Спасибо.

Может это из ОБЛАСТИ ВИДИМОСТИ ПЕРЕМЕННЫХ тема? программа не видит инструкции в теле циклов?
0
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
20.04.2020, 10:05  [ТС] 11
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Перестать засовывать эти if-ы во взаимоисключающие ветки else
Да, вы оказались правы! Здесь нужны одиночные - If, сечас на "трезвую голову" все протестировал, все работает.
А забраковал я этот момент еще тогда потому, что нужно было создать ветку -
C++
1
else if (!(wheel_diameter <= 10 || revolutions_pedals <= 10 || star_teeth_1 < 24 || star_teeth_1 > 46 || star_teeth_2 < 11 || star_teeth_2 > 36))
вместо просто - else
с таким вот условием, тогда программа не будет считать при не верных данных!
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2020, 10:05
Помогаю со студенческими работами здесь

Нужно засунуть код инструкции в 4 char'a так, чтобы в памяти это был код инструкции.
Доброго времени суток. Есть дизассемблированный код. Нужно засунуть код иструкции в 4 чара так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru