Определить, попадают ли точки с заданными координатами в заданную область - Turbo Pascal
Формулировка задачи:
PASCAL
С клавиатуры вводятся:
N – количество пробных точек;
Xi – абсцисса пробной точки;
Yi – ордината пробной точки;
Ri – параметр.
Результаты вычислений вывести в виде таблицы, состоящей из трех столбцов: значений координат пробных точек (Xi и Yi) и соответствующих им исходов опыта («Попала» или «Не попала»). Таблица должна иметь заголовочную строку.
Должна быть реализована возможность многократного выполнения программы без ее перезапуска. В программе необходимо использовать условный оператор и оператор цикла (с предусловием, либо с постусловием, либо с параметром). Необходимо обеспечить пользовательский интерфейс (вывод на экран поясняющих сообщений).
Требования к входным и выходным данным:
– диапазон значений Xi, Yi, Ri соответствует области определения площади фигуры на графике (см. вариант задания) и может принимать как целые, так и вещественные значения;
– формат вывода таблицы значений аргумента и функции следующий:
X Y Попадание точки
.. .. Да(Нет)
(Ссылка на сторонний ресурс удалена, контент зангружен на форум)
Решение задачи: «Определить, попадают ли точки с заданными координатами в заданную область»
textual
Листинг программы
type probe = record x, y, r: double end; const m = 100; g = '+------------------------+------------------------+-----+'; no_yes: array [boolean] of string[3] = ('No ', 'Yes'); var series: array [1..m] of probe; n, num: integer; s: string; begin repeat repeat write('Number of tests in series [1..', m, ']: '); readln(n) until n in [1..m]; for num := 1 to n do with series[num] do begin writeln('Test #', num, ':'); write('X[', num, '] = '); readln(x); write('Y[', num, '] = '); readln(y); repeat write('R[', num, '] = '); readln(r); if r <= 0 then writeln('Radius must be > 0, reenter') until r > 0 end; writeln('Tests results:'); writeln(g); writeln('| X | Y | Hit |'); writeln(g); for num := 1 to n do with series[num] do writeln('| ', x, ' | ', y, ' | ', no_yes[(x * y >= 0) and (abs(y) <= abs(x)) and (sqr(abs(x) - r) + sqr(abs(y) - r) <= r * r)], ' |'); writeln(g); write('Enter one more series? '); readln(s) until (s = 'n') or (s = 'N') end.
Объяснение кода листинга программы
- Создается тип данных
probe
, который содержит три поля:x
,y
иr
типаdouble
. - Задается константа
m
равная 100. - Создается массив
series
типаarray[1..m] of probe
. - Создается переменная
n
типаinteger
и инициализируется значением 1. - Создается переменная
num
типаinteger
. - Создается переменная
s
типаstring
. - В цикле повторяется до тех пор, пока
n
меньше или равноm
. - Внутри цикла для каждого теста в серии выводится информация о его номере и координатах X и Y.
- Проверяется, что радиус
r
больше нуля. Если радиус меньше нуля, программа просит пользователя ввести корректное значение. - Выводится результат теста, включая информацию о том, был ли он успешным или нет.
- Выводится запрос на ввод еще одной серии тестов.
- Программа продолжает запрашивать еще серии тестов до тех пор, пока пользователь не введет
n
илиN
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д