Листинг вспомогательного модуля
unit Unit2NovikovPR4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
// список процедур и функций, доступных для выполнения в других модулях
procedure RealKey(Ed_Text: String; var K: Char); // посимвольная проверка ввода вещественного числа
procedure IntKey(var K: Char); // посимвольная проверка ввода натурального числа
function Zn(Z: Real; n: Integer): Extended; // возведение в натуральную степень вещественного числа
function Y(P,Q: Extended): Extended; // корень из разности 2 чисел, без проверки
function Vyvod (var X : real; A, dX : real; n : integer) : String; // проверка на неотрицательность подкоренного выражения, преобразование для вывода 3 значений выражения
implementation
procedure RealKey(Ed_Text: String; var K: Char); // проверка ввода символов вещественных чисел, параметр К - нажатая кнопка (Key события OnKeyPress), Ed_Text - уже введенный текст
begin
case K of
'0'..'9': ; // допустимые символы
',','.' : // при введении точки или запятой выполнять действия ниже
begin // если позиции вводимых цифр нулевые, т.е. цифр в поле не было введено,
if Pos('0',Ed_Text)+Pos('1',Ed_Text)+Pos('2',Ed_Text)+Pos('3',Ed_Text)
+Pos('4',Ed_Text)+Pos('5',Ed_Text)+Pos('6',Ed_Text)+Pos('7',Ed_Text)
+Pos('8',Ed_Text)+Pos('9',Ed_Text) = 0
then K := Chr(0); // запретить введение запятой/точки
if K = '.' // если введена точка,
then K := ','; // заменить на запятую
if Pos(',', Ed_Text) <> 0 // если строка искомого поля уже содержит запятую,
then K := Chr(0); // запретить повторный ввод
end;
'-': // при введении минуса выполнять действия ниже
begin // если позиция хотя бы одной введенной цифры ненулевая, т.е. в поле набраны цифры
if Pos('0',Ed_Text)+Pos('1',Ed_Text)+Pos('2',Ed_Text)+Pos('3',Ed_Text)
+Pos('4',Ed_Text)+Pos('5',Ed_Text)+Pos('6',Ed_Text)+Pos('7',Ed_Text)
+Pos('8',Ed_Text)+Pos('9',Ed_Text) <> 0
then K := Chr(0); // запретить ввод знака минуса
if Pos('-', Ed_Text) <> 0 // если строка искомого поля уже содержит минус,
then K := Chr(0); // запретить повторный ввод
end;
#8 : ; // разрешить использование Backspace
else K := Chr(0); // запретить недопустимый символ (любой другой)
end;
end;
procedure IntKey(var K: Char); // проверка ввода символов натуральных чисел, параметр К - нажатая кнопка (Key события OnKeyPress)
begin
if not(K in ['0'..'9', #8]) // если К (нажатая клавиша) - не цифра и не Backspace
then K := #0; // запретить ввод
end;
// функция расчета возведения вещественного числа в натуральную степень
function Zn(Z: Real; n: Integer): Extended; // параметр Z - основание степени, а n - показатель
begin
if Z = 0 // если основание первой степени равно нулю,
then Zn := 0 // присваиваем нулевое значение выражению степени
else
begin
if n = 0 // если показатель степени нулевой,
then Zn := 1 // степень равна единице
else
begin
if Z < 0 // иначе, если основание первой степени отрицательно,
then
begin
if n mod 2 = 1 // если показатель нечетный
then Zn := (-1)*Exp(n*Ln(Abs(Z))) // присваиваем степени отрицательное значение
else Zn := Exp(n*Ln(Abs(Z))); // Z<0 и n четный - положительное значение степени
end
else Zn := Exp(n*Ln(Abs(Z))); // иначе (Z>0) вычисляем первую степень
end;
end;
end; // завершение описания функции возведения в степень
// функция вычисления корня из разности двух вещественных чисел, подкоренное выражение неотрицательное
function Y(P,Q: Extended): Extended;
begin
Y := Sqrt(P - Q);
end;
// функция для расчета и преобразования в текст результата
function Vyvod (var X : real; A, dX : real; n : integer) : String;
var P, Q : Extended; // локальные промежуточные переменные, обозначают A^n и X^n
V : String; // промежуточная строковая переменная, содержащая выводимый текст
begin P := Zn(A, n); // запуск функции Zn с параметрами A, n (расчет A^n)
Q := Zn(X, n); // запуск функции Zn с параметрами X, n (расчет X^n)
if P - Q >= 0 // если подкоренное выражение неотрицательное,
then V := 'Y1 = ' + FloatToStrF(Y(P, Q),ffGeneral,8,5) // вывести значение выражения,
else V := 'Y1 !Корень из отрицательного числа!'; // иначе вывести сообщение
X := X + dX; // добавить к X приращение dX
Q := Zn(X, n); // заново пересчитать X^n
if P - Q >= 0 // если подкоренное выражение неотрицательное,
then V := V + #13#10 + 'Y2 = ' + FloatToStrF(Y(P, Q),ffGeneral,8,5) // вывести второе значение выражения вслед за первым
else V := V + #13#10 + 'Y2 !Корень из отрицательного числа!'; // иначе вывести вместо второго значения сообщение
X := X + dX; // повторить действия последних 5 строк
Q := Zn(X, n);
if P - Q >= 0
then V := V + #13#10 + 'Y3 = ' + FloatToStrF(Y(P, Q),ffGeneral,8,5)
else V := V + #13#10 + 'Y3 !Корень из отрицательного числа!';
Vyvod := V;
end;
end.