unit simple_;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private{ Private declarations }public{ Public declarations }end;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
n: integer; // проверяемое число
d: integer; // делитель
r: integer; // остаток от деления n на dbegin
n := StrToInt(Edit1.text);
d := 2; // сначала будем делить на дваrepeat
r := n mod d;
if r <> 0 {// n не разделилось нацело на d}then
d := d + 1;
until r = 0; // повторять пока не найдено число на n делится без остатка
label2.caption := Edit1.text;
if d = n then
label2.caption := label2.caption + ' - простое число.'
else
label2.caption := label2.caption + ' - обычное число.';
end;
end.
Программа на Delphi, которая проверяет, является ли целое число, введенное пользователем, простым или нет.
Вот шаг за шагом, что программа делает:
Программа создает форму с текстовым полем ввода, кнопкой и двумя метками.
Когда кнопка нажата, программа берет значение из текстового поля, конвертирует его в целое число и присваивает переменной n.
Затем программа устанавливает d (делитель) в 2, что является наименьшим простым числом.
Программа вступает в цикл, где она повторно делит n на d, пока не найдет остаток отличный от 0.
Если n не делится без остатка на d, программа увеличивает d на 1 и повторяет процесс деления.
Когда n будет найдено, что она делится на d, программа проверяет, равна ли dn. Если да, то это означает, что n является простым числом.
Программа обновляет вторую метку на форме с результатом проверки простоты.
Вот несколько предложений по улучшению кода:
Вместо конвертации текстового поля в целое число и затем проверки, является ли это число простым, можно использовать блок try-catch для прямого обхода ошибок конвертации.
Можно добавить дополнительное обхождение ошибок, чтобы пользователь ввел корректное целочисленное значение.
Цикл в процедуре Button1Click можно оптимизировать, проверяя делимость только до квадратного корня из n. Если n имеет делитель больше его квадратного корня, то она должна иметь делитель меньше его квадратного корня (по симметрии).
Можно создать отдельную функцию или метод для проверки простоты числа, а не иметь это логическое в событии нажатия кнопки.
Код использует оператор mod для нахождения остатка от деления n на d. Это можно заменить более эффективной функцией remainder(н, d) из модуля Math Delphi.
Вот пример реализации этих предложений:
usesMath;functionIsPrime(n:Integer):Boolean;beginifn<=1thenResult:=Falseelsebeginvard:=2;whiled*d<=ndobeginifremainder(n,d)=0thenExit(False);Inc(d);end;Result:=True;end;end;procedureTForm1.Button1Click(Sender:TObject);begintryvarn:=StrToInt(Edit1.Text);Label2.Caption:=Format('Is %d a prime number? %b',[n,IsPrime(n)]);exceptonEConvertErrordoShowMessage('Invalid input. Please enter a valid integer value.');end;end;
В этом коде используется функция remainder из модуля Math Delphi для нахождения остатка от деления n на d, и только проверяется делимость до квадратного корня из n. Он также использует отдельную функцию IsPrime для проверки простоты числа, а не имеет это логическое в событии нажатия кнопки.
Статья описывает программу на языке Pascal, которая проверяет простоту числа, введенное пользователем в текстовое поле и отображает результат на лейбле.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.