Цель работы
Получение практических навыков проектирования разветвленных алгоритмов и использования условных операторов языка Си.
Задание
Разработать алгоритм и написать программу, проверяющую, попадает ли точка, заданная координатами A (x;y), в выбранную на плоскости область, находится на границе или вне выбранной области. Решение задачи выполнять многократно по желанию пользователя.
Уточнение задания
r3333 |
-3 |
y=-x |
x2+y2=3 |
x |
y |
Рис. 1. Область на графике |
А (x;y) |
Пользователь вводит с клавиатуры значение радиуса окружности. Необходимо проверить, является ли это значение допустимым, т.е. значение радиуса должно быть больше нуля. При всех других значениях радиуса программа должна выдать пользователю сообщение об ошибке и предложить повторно ввести значение радиуса. Полученные далее значения координат точки требуется проверить в соответствии с заданием и вывести об этом соответствующее сообщение.
Контрольные примеры
Таблица 1. Контрольные примеры
№ п\п | Исходные данные | Результат | ||
x | y | r | ||
Входит | ||||
Граничная | ||||
-1 | Не входит | |||
Граничная | ||||
-3 | Граничная | |||
-3 | Не входит | |||
-2 | Не входит | |||
- | - | Ошибка! | ||
-5 | Входит | |||
-1 | Входит |
Описание переменных
Таблица 2. Описание переменных
Переменная | Тип | Назначение |
x | float | Вводимая с клавиатуры абсцисса точки А |
y | float | Вводимая с клавиатуры ордината точки А |
r | int | Радиус окружности (см.рис.1) |
i | int | Переменная управления циклом |
Краткое описание алгоритма
НАЧАЛО
ШАГ 1. ВЫВОД: «Введите радиус r».
ШАГ 2.ВВОД: r (радиуса).
ШАГ3. Проверить правильность ввода значения радиуса.
ШАГ4. Если все верно, перейти к ШАГУ5, если нет – перейти к ШАГУ 1.
ШАГ5.ВВОД: xи y.
ШАГ6.ЕСЛИ у>-x, ТО
ЕСЛИ y>0, ТО
ЕСЛИ x2+y2<r2, ТО
ВЫВОД: «Входит» (переход к ШАГУ 7),
ИНАЧЕ,
ЕСЛИ x2+y2==r2, ТО
ВЫВОД: «Граничная» (переход к ШАГУ 7),
ИНАЧЕ ВЫВОД: «Не входит»(переход к ШАГУ 7);
ИНАЧЕ
ЕСЛИ у==0, ТО
ЕСЛИ x<=r, ТО
ВЫВОД: «Граничная» (переход к ШАГУ 7);
ИНАЧЕ ВЫВОД: «Не входит» (переход к ШАГУ 7);
ИНАЧЕ ВЫВОД: «Не входит» (переход к ШАГУ 7);
ИНАЧЕ
ЕСЛИ x>0&&y<-x, ТО
ЕСЛИ x2+y2>r2, ТО
ВЫВОД: «Входит» (переход к ШАГУ 7),
ИНАЧЕ,
ЕСЛИ x2+y2=r2||y==-x, ТО
ВЫВОД: «Граничная» (переход к ШАГУ 7),
ИНАЧЕ ВЫВОД: «Не входит»(переход к ШАГУ 7);
ИНАЧЕ
ЕСЛИ x==0, ТО
ЕСЛИ x<=-r || y==0, ТО
ВЫВОД: «Граничная» (переход к ШАГУ 7);
ИНАЧЕ ВЫВОД: «Не входит» (переход к ШАГУ 7);
ИНАЧЕ
ЕСЛИ y==-x, ТО
ВЫВОД: «Граничная» (переход к ШАГУ 7);
ИНАЧЕ ВЫВОД: «Не входит» (переход к ШАГУ 7);
ШАГ7. Спросить пользователя, хочет ли он повторить шаги 1-7.
ШАГ8. Если да, перейти к ШАГУ 1.
КОНЕЦ.
Блок-схема алгоритма |
Рис 2. Блок-схема алгоритма |
Текст исходной программы на языке Си |
#include <conio.h>
main()
{
floatx,y;
intr,i;
do
{
do
{
printf("\nВведитезначениерадиусаr.\n");
scanf("%d",&r);
if (r<=0)
printf("\nОшибка! Неверновведенрадиус. Повторите попытку.");
}
while (r<=0);
printf("\nВведите координаты точки А(xиy)\n");
scanf("%f%f",&x,&y);
if (y>-x)
if (y>0)
if (x*x+y*y<r*r)
printf("\nТочка А входит в заданную область.");
else
if (x*x+y*y==r*r)
printf("\nТочка А лежит на границе заданной области.");
else
printf("\nТочка А не входит в заданную область.");
else
if (y==0)
if (x<=r)
printf("\nТочка А лежит на границе заданной области.");
else
printf("\nТочка А не входит в заданную область.");
else
printf("\nТочка А не входит в заданную область.");
else
if (x>0 && y<-x)
if (x*x+y*y>r*r)
printf("\nТочка А входит в заданную область.");
else
if (x*x+y*y==r*r || y==-x)
printf("\nТочка А лежит на границе заданной области.");
else
printf("\nТочка А не входит в заданную область.");
else
if (x==0)
if(y<=-r || y==0)
printf("\nТочка А лежит на границе заданной области.");
else
printf("\nТочка А не входит в заданную область.");
else
if (y==-x)
printf("\nТочка А лежит на границе заданной области.");
else
printf("\nТочка А не входит в заданную область.");
printf("\n\nПродолжить? (1/0)\n");
scanf("%d",&i);
}
while (i==1);
}
Результаты выполнения программы
При выполнении программы получены результаты, совпадающие с приведенными в таблице 1 контрольными примерами. Ошибки не обнаружены.
Выводы
При выполнении лабораторной работы были получены практические навыки проектирования разветвленных алгоритмов и использование условных операторов языка Си.