Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТТП (методичка).doc
Скачиваний:
3
Добавлен:
10.11.2018
Размер:
2.24 Mб
Скачать
    1. Лабораторная работа №4

Цель: изучить операторы условия, операции отношения, логические операции и выражения.

Порядок выполнения работы:

  • изучить оператор ветвления if (параграф 13.1), операции отношения (параграф 12.2) и логические операции (параграф 12.4);

  • составить два логических выражения для определения точки, принадлежащей фигуре, и точки, не принадлежащей фигуре;

  • разработать блок-схему;

  • составить тексты программ на языке Cи (в двух вариантах);

  • проверить правильность выполнения разработанных программ;

  • составить отчет.

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

Логические выражения состоят из логических констант, переменных и отно­шений, соединенных логическими операциями. В простейших случаях в операторах используют отношения: два выражения, соединенных знаком отношения (>, >=, <, <=, ==, !=), например i > 20. Но иногда возникают условия, требующие использования более сложных логических выражений.

Пример. На плоскости задана фигура (Рисунок 49). Вводится точка с координатами x, y. Необходимо определить, принадлежит введенная точка фигуре или нет. В результате выводится ответ: «Введенная точка принадлежит фигуре» или «Введенная точка не принадлежит фигуре».

Рисунок 49 — Пример задания к лабораторной работе №4

Для определения вхождения точки в круг можно использовать формулу окружности:

.

Соответственно изменив знак = на <, получим условие вхождения точки в круг с координатами центра (7; 6) и радиусом 2:

Кроме этого область, занятая треугольником, так же входит в закрашенную область. Воспользуемся уравнением прямой, проходящей через две точки:

.

Преобразуя это уравнение к общепринятому виду, получим:

.

Подставим в это уравнение координаты точек , и . Получим уравнения трех прямых:

,

,

Чтобы точка принадлежала треугольнику, она должна находиться ниже прямой , ниже прямой и выше прямой . Данным условиям соответствуют неравенства:

,

,

.

Тогда, можно сказать, что точка принадлежит фигуре «если она находится ниже прямой И ниже прямой И выше прямой ИЛИ внутри круга с центром и радиусом ».

Запишем это выражение на языке Си с учетом с использованием логических операций И — &&, ИЛИ — || (см. 12.4):

if (

y < 7.0/3 * x – 1.0/3

&&

y < -7.0/6 * x + 82.0/6

&&

y > 2

||

sqr(x – 7) + sqr(y – 6) < sqr(2)

)

Обратите внимание: чтобы не произошло округления при делении целых чисел, одно из них записывается в вещественном виде с добавлением фиктивной дробной части «.0». (Примечание: разбивка выражения по строкам и отступы сделаны для удобства чтения данного выражения.)

Но можно и поменять ветви оператора if местами, тогда при вхождении точки в фигуру логическое выражение должно принимать ложное значение. Тривиальный вариант: поставить перед всем предыдущим выражением операцию отрицания НЕ — !. Но более наглядным решением будет составление логического выражения не вхождения точки в фигуру. Здесь должно выполняться условие: точка не лежит внутри круга и не находится в треугольнике. На языке Си выражение примет вид:

if (

(

y > 7.0/3 * x – 1.0/3

||

y > -7.0/6 * x + 82.0/6

||

y < 2

)

&&

sqr(x – 7) + sqr(y – 6) > sqr(2)

)

Группа отношений, объединенных логическими операциями ИЛИ, заключена в скобки, т.к. операция ИЛИ (аналог сложения) имеет более низкий приоритет по сравнению с операцией И (аналог умножения).

При выполнении лабораторной работы составить два варианта программы (без использования операции !) для фигуры, соответствующей варианту задания.

Листинг 18 — Лабораторная работа №4

/* lab4.c – лабораторная работа №4. */

#include <stdio.h>

#define sqr(x) ((x) * (x))

void main()

{

float x, y;

/* ввод координат */

printf(“\nВведите координаты x и y: ”);

scanf(“%f %f”, &x, &y);

printf(“Введенная точка (%.1f, %.1f) “, x, y);

/* проверка логического выражения */

if (

y < 7.0/3 * x – 1.0/3

&&

y < -7.0/6 * x + 82.0/6

&&

y > 2

||

sqr(x – 7) + sqr(y – 6) < sqr(2)

)

printf(“принадлежит фигуре”);

else

printf(“не принадлежит фигуре”);

}

Для проверки правильности работы программы необходимо выполнить ее несколько раз, задавая точки из различных областей как принадлежащих, так и не принадлежащих фигуре. Для приведенного примера можно использовать следующий набор точек:

, , , , — принадлежат фигуре;

, , , , — не принадлежат фигуре.

Рисунок 50 — Результат выполнения lab4.c

Таблица 9 — Варианты заданий к лабораторной работе №4

вар.

Фигура

вар.

Фигура

1

2

3

4

5

6

7

8

9

10