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

1.10.1. Проверка двух или более условий

По мере усложнения ваших программ возникает необходимость в проверке сразу нескольких условий. Например, программа могла бы проверить, будут ли тестовые очки больше или равны 90, и получит ли студент оценку А. Подобно этому, вы могли бы проверить, есть ли у пользователя собака и долматин ли это. Для выполнения таких проверок можно использовать логическую операцию C++ И (&&). Кроме того, если вы хотите проверить, есть ли у пользователя собака или кошка, вам следует использовать логическую операцию ИЛИ (||). Если программы для проверки нескольких условий используют логические операции И или ИЛИ, поместите каждое условие внутри круглых скобок, как показано ниже:

if ((user_owns_a_dog) && (dog == dalmatian)) //Полное условие

Как видите, программа группирует каждое условие внутри своих собственных круглых скобок, которые затем заключаются во внешние круглые скобки.

if ((user_owns_a_dog) && (dog == dalmatian))

Когда ваша программа использует логическую операцию И (&&), то результат полного условия является истинным, только если все проверяемые условия истинны. Если какое-либо условие ложно, то полное условие становится ложным. Например, если у пользователя нет собаки, то предыдущее условие является ложным. Подобно этому, если собака пользователя не долматин, условие является ложным. Чтобы условие было истинным, у пользователя должна быть собака, и она должна быть породы долматин. Следующий оператор использует логическую операцию ИЛИ (||), чтобы определить, есть ли у пользователя собака или кошка:

if ((user_owns_a_dog) || (user_owns_a_cat))

При использовании логической операции ИЛИ полное условие будет истинным, если хотя бы одно условие является истинным. Например, если у пользователя есть собака, условие истинно. Если у пользователя есть кошка, условие истинно. Подобно этому, если у пользователя есть и собака, и кошка, условие истинно. Условие будет ложным только в том случае, если у пользователя нет ни собаки, ни кошки.

Пример 6.13.

Даны два вещественных числа x и y – координаты точки (x,y) на плоскости и область D, заданная графически (рис. 6.8). Вычислить значение z, заданное формулой

Рисунок 6.8. D – заштрихованная область

Решение. Из рис. 6.8 видно, что область D является объединением двух областей – квадрата со стороной, равной 1, и части круга с радиусом, равным 1. Следовательно, условие (x,y)  D состоит в том, что точка с координатами (x,y) принадлежит квадрату или сегмента круга. Условие принадлежности точки квадрату, изображенному на рис. 6.8, можно записать в виде логического выражения

x>=-1 && x<=0 && y<=1 && y>=0, (6.2)

а условие принадлежности точки сегменту – в виде логического выражения

x>=0 && x<=1 && y>=-1 && y<=0 && x*x+y*y<=1. (6.3)

Объединив выражения (6.2) и (6.3) знаком логической операции || (ИЛИ), получим логическое выражение, соответствующее условию (x,y)  D, которое затем используем в операторе if-else.

Графическая схема алгоритма решения задачи изображена на рис. 6.9. Алгоритм содержит ветвление, на каждой ветви которого имеется лишь по одной команде. Программируется такое ветвление с помощью оператора if-else.

Рис. 6.9. Алгоритм решения задачи примера 6.90

/* Текст программы примера 6.13*/

#include <stdio.h>

#include <math.h>

main()

{

float x,y,z;

cout << "Введите координаты точки (x,y)";

cin >> x >> y;

if ( x>=-1 && x<=0 && y<=1 && y>=0

||x>=0 && x<=1 && y>=-1 && y<=0 && x*x+y*y<=1 ) z=1+x*y;

else z=5;

cout << "Для точки x = "; cin >> x; cout " y = "; cin >> y;

fflush(stdin);

getch();

return(0);

}

1.10.2. В C++ истина представляется как ненулевое значение, а ложь как 0

Достоинством C++ является то, что истина представляется как любое ненулевое значение, а ложь как 0. Предположим, ваша программа использует переменную с именем user_owns_a_dog, чтобы определить, есть ли у пользователя собака или нет. Если у пользователя нет собаки, вы можете присвоить этой переменной значение 0 (ложь), как показано ниже:

user_owns_a_dog = 0;

Если у пользователя есть собака, вы можете присвоить этой переменной любое ненулевое значение, например 1:

user_owns_a_dog = 1;

Затем ваши программы могут проверить эту переменную, используя оператор if, как показано ниже:

if (user_owns_a_dog)

Если переменная содержит ненулевое значение, условие оценивается как истина; в противном случае, если переменная содержит 0, условие ложно. Исходя из того, как C++ представляет истину и ложь, предыдущий оператор идентичен следующему:

if (user_owns_a_dog == 1)

Программа в примере 6.14 использует переменные user_owns_a_dog и user_owns_a_cat внутри оператора if, чтобы определить, какие животные есть у пользователя.

Пример 6.14

#include <iostream.h>

int main()

{     int user_owns_a_dog = 1;

int user_owns_a_cat = 0;

   if (user_owns_a_dog) cout << "Собаки великолепны" << endl;

   if (user_owns_a_cat)   cout << "Кошки великолепны" << endl;

 if ((user_owns_a_dog) && (user_owns_a_cat)) cout << "Собаки и кошки могут ужиться" << endl;

   if {(user_owns_a_dog) || (user_owns_a_cat)) cout << "Домашние животные великолепны!" << endl;

}

Экспериментируйте с этой программой, присваивая обоим переменным значение 1 или 0, а затем одной 1, а другой 0 и наоборот. Как видите, проверить два условия очень легко, используя логические операции И и ИЛИ.

1.10.3. Использование операции НЕ в C++

Когда программа проверяет определенное условие, в ряде случаев она должна выполнить некоторые операторы, если это условие истинно. С другой стороны, вам может потребоваться, чтобы программа выполнила операторы, если условие является не истинным. Операция C++ НЕ – восклицательный знак (!) – позволяет вашим программам проверить, является ли условие не истинным. Например, следующий оператор проверяет, нет ли у пользователя собаки:

if (! user_owns_a_dog)    cout << "вы должны купить собаку" << endl;

Операция НЕ превращает ложь в истину, а истину в ложь. Например, предположим, что у пользователя нет собаки. Следовательно, переменная user_owns_a_dog должна содержать значение 0. Если C++ оценивает условие с помощью операции НЕ, он использует текущее значение переменной (0) и применяет операцию НЕ. Операция НЕ превращает значение 0 в 1 (истину). Таким образом, полное условие превращается в истину и выполняется соответствующий оператор.

Программа в примере 6.15 иллюстрирует использование операции НЕ.

Пример 6.15

#include <iostream.h>

int main()

{    int user_owns_a_dog = 0;

  int user_owns_a_cat = 1;

  if (! user_owns_a_dog) cout << "Вы должны купить собаку" << endl;

  if (! user_owns_a_cat)  cout << "Вы должны купить кошку" << endl;

}

Экспериментируйте со значениями, присваиваемыми переменным user_owns_a_dog и user_owns_a_cat, и обратите внимание на поведение программы. По мере усложнения ваших программ вы будете постоянно использовать операцию НЕ. Например, ваша программа может продолжать повторять обработку, пока не встретит конец файла.

1.10.4. Использование логических операций C++

Если вы указываете условия в программах, то иногда эти условия будут состоять из нескольких частей. Например, ваша программа может проверять, имеет ли служащий почасовую оплату и работал ли он более 40 часов на этой неделе. Если для истинности условия каждая из двух его частей должна быть истиной, вам следует использовать операцию C++ И (&&). При использовании операции И группируйте каждое условие внутри круглых скобок, а затем оба условия заключите в еще одну пару круглых скобок, как показано ниже:

if ((employee_pay == hourly) && (employee_hours > 40)) оператор;

Когда необходимо, чтобы условие было истинным, если только одна из его частей истинна, вам следует использовать операцию C++ ИЛИ (||). Например, следующее условие проверяет, есть ли у пользователя машина или мотоцикл:

if ((vehicle == car) || (vehicle == motorcycle)) оператор;

Как и ранее, программа группирует каждое условие внутри скобок. В ряде случаев вам потребуется, чтобы ваши программы выполняли оператор, если условие является не истинным. В таких случаях следует использовать операцию C++ НЕ (!). Операция НЕ превращает истину в ложь, а ложь в истину.

Операции C++ И, ИЛИ и НЕ представляют собой логические операции.