Для решения этой задачи на языке Pascal наиболее эффективным и понятным способом является использование функции извлечения квадратного корня sqrt с последующей проверкой, является ли результат целым числом. Ниже представлен полный код программы с комментариями. Код программы (Free Pascal / Delphi) pascal
program CheckPerfectSquare; var n: LongInt; { Введенное число } root: Real; { Квадратный корень из числа } begin write('Введите натуральное число: '); readln(n); if n < 0 then writeln('Число не является натуральным.') else begin { Вычисляем корень } root := sqrt(n); { Проверяем, равен ли квадрат округленного корня исходному числу } if sqr(round(root)) = n then writeln('Число ', n, ' является полным квадратом (', round(root), '^2).') else writeln('Число ', n, ' не является полным квадратом.'); end; end. Use code with caution.Разбор логики работы- Тип данных: Используется
LongIntдля переменнойn, чтобы программа могла обрабатывать достаточно большие числа (до ). Функцияsqrt(n): Возвращает вещественное значение (типReal). Например, для числа 25 она вернет5.0, а для 26 —5.099.... Функцияround(root): Округляет вещественное число до ближайшего целого. Это критически важный шаг, так как из-за особенностей хранения чисел с плавающей точкой результатsqrtможет быть не идеально точным (например,4.99999999). Проверкаsqr(...) = n: Мы возводим полученное целое число обратно в квадрат. Если результат совпал с исходным числомn, значит,n— полный квадрат.
Альтернативный метод (без round) Можно проверить разность между числом и его целой частью: pascal
if frac(sqrt(n)) = 0 then writeln('Это полный квадрат'); Use code with caution.Однако первый способ через возведение в квадрат (sqr) считается более надежным в программировании из-за возможных погрешностей типа Real. Я могу переписать этот алгоритм без использования встроенной функции sqrt, если вам требуется реализовать проверку через цикл для учебных целей. Хотите взглянуть на такой вариант?Форма ответа
Ответы и вопросы пользователей