Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчёт 4.doc
Скачиваний:
1
Добавлен:
17.09.2019
Размер:
158.21 Кб
Скачать

Листинг вспомогательного модуля

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.