Вводится сначала радиус круга, потом координаты икс и игрек.
Эта точка проверяется на попадание в круг радиусом r, с центром в начале координат. Если нужен круг не в начале координат, надо добавить координаты его центра x0, y0 (и тоже их запрашивать вместе с радиусом). Потом эти координаты использовать как смещения по икс и игрек в неравенстве.
Неравенство получится такое: (x-x0)*(x-x0)+(y-y0)*(y-y0)<=r*r
var
x,y,r :real;
begin
write('r= ');
read (r);
write('x= ');
read (x);
write('y= ');
read (y);
if x*x+y*y<=r*r
then write('принадлежит')
else write('не принадлежит');
end.
Без проверок код был бы намного меньше, но сделал с проверками на всякий случай. Если нужно проще - пишите. По сути достаточно функции calculate_cost. И я ещё другую функцию сделал calculate_cost_old, она не используется, но в ней дифференцированный подход вычислений используется, то есть до нижней границы вычисляется по ставке 1,1, дальше вычисляется по тарифу, а больше верхней границы по тарифу 0,9. Мне кажется, так логичнее:
def calculate_cost(N:int,A:int,B:int,T:float):
s = 0
if N <= A: s = 1.1*N
elif A < N <= B: s = N
else: s = 0.9*N
return round(T*s,2)
def calculate_cost_old(N:int,A:int,B:int,T:float):
"""Данная функция вычисляет стоимость услуг и возвращает значение"""
s1 = 0
s2 = 0
s3 = 0
# вычислим стоимость до нижней границы включительно
if N <= A: s1 = 1.1*N
else: s1 = 1.1*A
# вычислим стоимость между нижней (исключительно) и верхней (включительно) границами
if A < N <= B: s2 = N-A
elif N > B: s2 = B-A
# вычислим стоимость от верхней границы (исключительно)
if N > B: s3 = 0.9*(N-B)
return round(T*(s1+s2+s3),2)
def calculator():
"""основная функция"""
names = ['Количество минут', 'Нижняя граница тарифа', 'Верхняя граница тарифа', 'Стоимость тарифа']
while True:
chk = True
a = list(map(str, input('Начните ввод: ').split()))
if len(a) != 4:
print('Ошибка ввода: введите четыре параметра через пробел')
continue
for i in range(len(a)):
if i != 3:
try:
a[i] = int(a[i])
if a[i] < 0: raise ValueError
if i == 2 and a[i-1] > a[i]: raise ValueError
except ValueError:
print(f'Ошибка ввода: значение "{names[i]}" ({i+1}-й параметр) должно быть целым не отрицательным числом', '> нижней границы' if i == 2 else '')
chk = False
else:
try:
a[i] = float(a[i])
if a[i] <= 0: raise ValueError
except ValueError:
print(f'Ошибка ввода: значение "{names[i]}" ({i+1}-й параметр) должно быть целым положительным числом')
chk = False
if chk: break
print()
print('--- Рассчёт окончен ---')
print('Стоимость учлуг составляет: {:.2f}'.format(calculate_cost(a[0],a[1],a[2],a[3])))
print()
print('--- Рассчёт стоимости услуг связи ---')
print()
print('Введите через пробел: \n - количество потраченных за месяц минут (целое число >= 0)\n - нижнюю границу тарифа (целое число >= 0)\n - верхнюю границу тарифа (целое число >= нижней границы)\n - стоимость (вещественное число > 0)')
print()
while True:
calculator()
if input('Повторить вычисления? (y/n): ') == 'n': break
2. Файл в одной папке со скриптом
--- КОД ПРОГРАММЫ НИЖЕ ---
# -*- coding: utf-8 -*-
import sys, os
file = open(os.path.join(sys.argv[0], "diag3.txt"))
a = {}
for line in file.readlines():
pair = line.split()
a[float(pair[0])] = float(pair[1])
file.close()
keys = list(a.keys())
vals = list(a.values())
avg_p = sum(vals) / float(len(vals))
max_p = max(vals)
min_p = min(vals)
deltas = [vals[m]-vals[m-1] for m in range(1, len(vals))]
max_d = max(deltas)
min_d = min(deltas)
min_d_i = deltas.index(min_d)
near_d_0 = (keys[min_d_i-1], keys[min_d_i])
print("Среднее давление: {}".format(avg_p))
print("Максимальное давление: {}".format(max_p))
print("Минимальное давление: {}".format(min_p))
print("Наибольшая скорость нарастания давления: {}".format(max_d))
print("Угол поворота при зафиксированной скорости нарастания: {} <= a <= {}".format(near_d_0[0], near_d_0[1]))