Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР6-С++-27 марта-2012.doc
Скачиваний:
17
Добавлен:
28.08.2019
Размер:
6.55 Mб
Скачать

1.10.5. Обработка нескольких условий

Программы, рассмотренные ранее в данной работе, использовали if и else, чтобы указать один набор операторов, который программе следует выполнить, если условие истинно, и другой набор операторов, выполняемых, если условие ложно. Однако в некоторых случаях программам потребуется проверить несколько разных условий. Предположим, например, что вашей программе необходимо определить тестовые очки студента. Для этого программа должна проверить, больше тестовые очки или равны 90, 80, 70, 60 и т. д. Следующая программа в примере 6.16 использует для этого серию операторов if-else:

Пример 6.16

#include <iostream.h>

int main(vid)

{     int test_score;

 cout << "Введите тестовые очки и нажмите Enter: ";

 cin >> test_score;

 if (test_score >= 90) cout << "Вы получили А!" << endl;

   else if (test_score >= 80)  cout << "Вы получили В!" << endl;

     else if (test_score >= 70) cout << "Вы получили С" << endl;

else if (test_score >= 60) cout << "Ваша оценка была D" << endl;

else  cout << "Вы провалили тест" << endl;

}

При выполнении первого оператора if программа проверяет, больше тестовые очки или равны 90. Если это так, программа выводит сообщение пользователю, что он получил А. В противном случае, если тестовые очки не больше или равны 90, программа выполняет следующие else if, чтобы проверить, больше ли тестовые очки или равны 80. Программа повторяет данный процесс до тех пор, пока не определит правильную оценку. Как и ранее, экспериментируйте с этой программой, вводя разные тестовые очки.

Пример 6.17

Использование сложных логических выражений в программах с проверкой многих условий.

Использование множественных вложений операторов условия затрудняет "читабельность" программы см. раздел 1.10.6). Зачастую его можно избежать, объединяя простые условия в логические выражения везде, где для поиска решения требуется проверка более одного условия. Пусть требуется проверить, принадлежит ли точка с произвольными координатами (x,y) некоторой области, например, заштрихованной области, изображенной на рис. 6.10. Известны длина стороны квадрата (обозначим L) и радиус окружности (обозначим R), где не обязательно L > R, то есть область может быть пустой.

Рис. 6.10. Иллюстрация к примеру 6.90

Запишем условие математически с помощью системы неравенств:

x2 + y2 >= R2

, условие " точка находится вне окружности"

|x | < L/2

, условие" точка находится внутри квадрата"

| y | < L/2

, условие" точка находится внутри квадрата"

Для соблюдения условия нужно, чтобы все три неравенства выполнялись одновременно, поэтому при объединении их в одно требуется использовать логическую операцию "И" (конъюнкция), следующим образом:

x*x + y*y >= R*R && fabs (x) < 0.5*L && fabs (y) < 0.5*L

Тогда условный оператор запишется:

if (x*x + y*y >= R*R && fabs (x) < 0.5*L && fabs (y) < 0.5*L)

printf ("Точка принадлежит области \n");

else

printf ("Точка не принадлежит области \n");

Если не использовать сложное выражение, то приходится использовать вложенные операторы условия, следующим образом:

if (x*x + y*y >= R*R)

if (fabs (x) < 0.5*L)

if (fabs (y) < 0.5*L)

printf ("Точка принадлежит области \n");

else

printf("Точка не принадлежит области \n");

Квалифицированный программист отдаст предпочтение первому способу.