tak.lol
07 декабрь 2024
5
0
Не нравится 0 Нравится

Периодическая дробь

Давайте поговорим о периодических дробях, и я обещаю, что это будет не так скучно, как смотреть на загрузку компилятора! Итак, что же такое периодическая дробь? Это дробь, у которой десятичное представление не заканчивается и не становится бесконечным, а начинает повторяться. Например, 1/3 = 0.333..., и это «...» указывает на то, что тройка будет продолжаться вечно. Давайте разберемся с этим на Python, чтобы было веселее!



Что такое периодическая дробь?


Периодическая дробь — это дробь, которая в десятичной записи имеет повторяющуюся часть. Например:



  • 1/3 = 0.333...

  • 2/11 = 0.181818...

  • 1/7 = 0.142857142857...


Если ты когда-нибудь задавался вопросом, почему в кафе тебе подают кофе с «бесконечным» количеством сахара, то вот ответ: это периодическая дробь в действии!



Как найти периодическую дробь?


Для начала давай напишем функцию на Python, которая будет делить два числа и проверять, является ли результат периодической дробью. Мы будем использовать модуль для работы с десятичными дробями.




from decimal import Decimal, getcontext

def isperiodicfraction(numerator, denominator):
    getcontext().prec = 50  # Устанавливаем точность
    fraction = Decimal(numerator) / Decimal(denominator)
    str_fraction = str(fraction)[2:]  # Убираем '0.'
    
    # Проверяем на периодичность
    for i in range(1, len(str_fraction)//2 + 1):
        if strfraction[:i] == strfraction[i:i*2]:
            return f"{fraction} является периодической дробью!"
    
    return f"{fraction} не является периодической дробью."

print(isperiodicfraction(1, 3))  # 0.333... является периодической дробью!
print(isperiodicfraction(1, 6))  # 0.166... не является периодической дробью.


Как определить период?


Теперь, когда мы знаем, что дробь может быть периодической, давай определим её период. Период — это длина повторяющейся части. Например, в 1/3 = 0.333... период равен 1, а в 1/7 = 0.142857142857... — период равен 6.




def find_period(numerator, denominator):
    getcontext().prec = 50
    fraction = Decimal(numerator) / Decimal(denominator)
    str_fraction = str(fraction)[2:]

    for periodlength in range(1, len(strfraction)//2 + 1):
        if strfraction[:periodlength] == strfraction[periodlength:period_length*2]:
            return f"Период {fraction} равен {period_length}."
    
    return f"{fraction} не имеет периода."

print(find_period(1, 3))  # Период 0.333... равен 1.
print(find_period(1, 7))  # Период 0.142857142857... равен 6.


Интересные факты о периодических дробях



  • Знаешь ли ты, что дроби с простыми знаменателями (например, 3, 7) имеют периодические десятичные представления?

  • А вот дроби с знаменателями, которые являются произведением только чисел 2 и 5 (например, 10 или 25), имеют конечное десятичное представление.

  • Если ты когда-нибудь задумывался о том, почему некоторые числа кажутся «зловещими», это может быть связано с их периодами! Например, дробь 1/7 имеет длинный повторяющийся цикл.



Заключение


Периодические дроби — это не только математическая забавка, но и важная часть чисел в программировании и науке. Они могут казаться сложными, но с помощью Python мы можем легко их исследовать и находить интересные свойства. Так что в следующий раз, когда ты столкнешься с дробью, не забудь проверить её на периодичность — возможно, это приведет к неожиданным открытиям!



Задание для закрепления матеирала


Задание 1: Определение периодической дроби
Напиши программу, которая принимает два целых числа (числитель и знаменатель) и выводит, является ли результат деления периодической дробью. Если да, то укажи ее десятичное представление.

Задание 2: Нахождение периода
Разработай функцию, которая находит длину периода для периодической дроби. Функция должна принимать числитель и знаменатель, а возвращать длину периода, если дробь является периодической, или сообщение о том, что период отсутствует.

Задание 3: Примеры дробей
Составь список из 10 дробей (числитель и знаменатель), и для каждой дроби укажи, является ли она периодической или конечной. Объясни, почему именно так.

Задание 4: Сравнение дробей
Создай программу, которая принимает две дроби (числитель и знаменатель для каждой) и сравнивает их. Если обе дроби являются периодическими, выведи их десятичные представления и укажи, какая из дробей больше.

Задание 5: Графическое представление
Используя библиотеку matplotlib в Python, нарисуй график, показывающий поведение десятичных представлений различных дробей (как периодических, так и конечных). Объясни, как выглядит график для каждой из категорий дробей.
Комментарии к материалу
Комментировать
Ваш комментарий: