Задача: Даны действительные числа [latex]a[/latex], [latex]b[/latex], [latex]c[/latex]. Проверить, выполняются ли неравенства [latex]a<b<c[/latex].
Тесты:
Ввод | Вывод | Результат | ||
a | b | c | неравенство не выполнено | |
2 | 1 | 3 | b<=a<c: нер-во a<b<c не выполняется | неравенство не выполнено |
1 | 3 | 2 | a<=c<=b: нер-во a<b<c не выполняется | неравенство не выполнено |
3 | 1 | 2 | b<=c<=a: нер-во a<b<c не выполняется | неравенство не выполнено |
3 | 2 | 1 | c<=b<=a: нер-во a<b<c не выполняется | неравенство не выполнено |
2 | 3 | 1 | c<=a<b: нер-во a<b<c не выполняется | неравенство не выполнено |
1 | 2 | 3 | нер-во a<b<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 |
#include <iostream> using namespace std; int main() { double a, b, c; printf("введите a: \n"); scanf("%lf", &a); printf("введите b: \n"); scanf("%lf", &b); printf("введите c: \n"); scanf("%lf", &c); if (a >= b && a < c) { printf("b<=a<c: неравенство a<b<c не выполняется \n"); } else if (a < b && a <= c && b >= c) { printf("a<=c<=b: неравенство a<b<c не выполняется \n"); } else if (a >= b && a >= c && b < c) { printf("b<=c<=a: неравенство a<b<c не выполняется \n"); } else if (a >= b && a >= c && b >= c) { printf("c<=b<=a: неравенство a<b<c не выполняется \n"); } else if (a < b && a >= c && b > c) { printf("c<=a<b: неравенство a<b<c не выполняется \n"); } else { printf("неравенство a<b<c справедливо \n"); } return 0; } |
Отчет:
После ввода чисел a, b, c программа проверит их соотношения. Ввиду наличия трех сравниваемых чисел имеем 3! = 6 возможных комбинаций чисел, и только одна из них соответствует требованию. Если неравенство [latex]a<b<c[/latex] имеет место быть, то программа сообщит о его выполнении. В противном же случае консоль выдаст ответ о не выполненном неравенстве, предварительно сообщив причину.
Копия кода на сайте Ideone: ideone.com/aYmMJ2
— Вы видите, что в условии с latex и без него начертание символов различно? Буква «а» меняется очень сильно. Вам необходимо использовать latex при каждом упоминании математических символов. И в условии, и в таблице, и в пояснениях. Иначе читатель может не понять, что эти непохожие символы обозначают одно и тоже.
— Почему строки 11-38 сдвинуты вправо относительно scanf? Разве они внутри него?
— Что-то Вы перестарались с проверкой. Ожидалось что-то вроде (a < b) && (b < c). Вы же реализовали знаменитый алгоритм "Как пройти на Дерибасовскую?" Он тоже длинный и состоит из полного перебора неверных маршрутов "Там будет поворот, но Вы туда не идите". Когда гость города восклицает "Так как же мне наконец пройти на Дерибасовскую?!", то получает ответ: "Что значит как? Иначе!". Я бы написал так
Но условным оператором возможно даже лучше. Программа работает правильно. Хоть и зачем-то делает целую классификацию. Не меняйте код. Если поправите лесенку, то работа будет засчитана.
Есть два подхода к форматированию многочисленных вложенных цепочек …else if…
1. Сдвигаем каждый вложенный условный оператор вправо. Как и положено. Недостаток — можно уехать далеко вправо.
2. Блок else if сдвигается так, как будто он является частью самого первого условного оператора. Кстати, в некоторых даже есть такая форма «elseif».
С Вашего разрешения, я отформатирую текст вторым способом. Если посчитаете нужным, можете исправить.
Зачтено.