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

Пример 3. Процедура контроля алфавита вещественных чисел

Расширим возможности процедуры, разработанной в примере2:

  • разрешим ввод как «,», так и «.» с последующей подменой «.» на «,»;

  • исключим возможность ввода нескольких запятых.

Воспользуемся стандартной функцией Pos.

Pos(Substr: string; S: string): Integer - функция ищет подстроку или отдельный символ Substr в строке S и возвращает значение позиции первого символа Substr в строке S. Если вхождение Substr не найдено, то функция возвращает ноль. Функция чувствительна к регистру.

Например. Pos(‘,’, Edit1.Text), в поле Edit1.Text введено 123 (запятой нет) - функция возвратит 0; после ввода запятой 123, - функция вернёт значение 4.

Используем оператор case.

procedure Inp_Rea3(Var Symb: Char ; Str_Ed : string);

{Var Symb - формальный параметр-переменная обеспечит передачу введённого символа из процедуры Inp_Real3 в вызывающую процедуру;

Str_Ed – значение строки отображаемой в поле ввода, параметр-значение,

при вызове процедуры будет подставлено фактическое имя поля}

begin

case Symb of

'0'..'9': ; // допустимые символы

',','.' : //введена точка или запятая

begin

if Symb = '.' //введена точка

then Symb := ','; // подмена точки запятой

{проверка наличия в отображаемой строке Str_Ed запятой}

if Pos(',', Str_Ed) <> 0 // строка Str_Ed уже содержит запятую

then Symb:=Char(0); // подмена запятой пустым символом

end;

#8 : ; // <Backspace>

else Symb :=Chr(0); //подмена недопустимого символа пустым

end;

Обращение к процедуре Inp_Real3.

procedure TForm1.LabeledEdit1KeyPress(Sender: TObject; var Key: Char);

begin

Inp_Real4 (Key, LabeledEdit1.Text); { Key из Inp_Real4 будет передан в

end;

Пример 4. Функция

Разработаем функцию возведения в степень .

Постановка задачи

X и n – вещественные числа.

  1. Для вычислений воспользуемся встроенной функцией Ln(X: Real): Real, возвращающей логарифм числа X, и функцией Exp(X: Real): Real, возвращающей число по его логарифму.

  2. Определим функцию в виде function Fxn(X, n: Real): Real;

  3. Особые случаи:

  • при X=0, Fxn=0;

  • при X<0 вычислять будем абсолютное значении |X|n ;

  • при n=0, Fxn=1. Другие особые случаи не рассматриваем.

function FXn(X, n: Real):Real; //возвращаетX в степени n

Begin

if X=0

then Fxn:=0 //при Х=0 – возвращает 0

else if n=0

then FXn:=1 // при n=0 – возвращает 1

else if X<0

then begin

ShowMessage('При отрицательных Х вычисляется по

абсолютному значению');

FXn:= Exp(n*Ln(Abs(X)));

end;

else FXn:= Exp(n*Ln(X));

end; //конец функции

Пример 5. Вычисление значений функции

Разработка программы вычисления трёх значения функции Fxn(X, n: Real):Real (пример 4), начиная с X0 и приращением dX, процедура контроля ввода Inp_Rea3(Var Symb: Char ; Str_Ed : string) взята из примера 3.

//установим компоненты формы

type

TForm1 = class(TForm)

Label1: TLabel; // информация о работе

Button1: TButton; //кн. Вычислить

LabeledEdit1: TLabeledEdit; // Х

LabeledEdit2: TLabeledEdit; // dX - приращение

LabeledEdit3: TLabeledEdit; // n - степень

Label2: TLabel; //вывод результатов

{Определим процедуры обработки событий ввода Х, dX, n и нажатия кнопки для вычислений и вывода значений}

procedure LabeledEdit1KeyPress(Sender: TObject; var Key: Char);

procedure LabeledEdit2KeyPress(Sender: TObject; var Key: Char);

procedure LabeledEdit3KeyPress(Sender: TObject; var Key: Char);

procedure Button1Click(Sender: TObject);

end;

var Form1: TForm1;

implementation

{$R *.dfm}

Var X, dX, n : Real; //глобальные переменные

procedure Inp_Real3(Var Symb: Char ; Str_Ed : string);

{Контроль ввода символов вещественных чисел. Текст процедуры приведён в примере 3.}

end;

function FXn(X, n: Real):Real; //возвращаетX в степени n

//Вычисление , текст функции приведён в примере 4.

end;

procedure TForm1.LabeledEdit1KeyPress(Sender: TObject; var Key: Char);

begin //ввод Х

Inp_Real3(Key, LabeledEdit1.Text); //контроль алфавита переменной Х

end;

{Процедуры TForm1.LabeledEdit2KeyPress и TForm1.LabeledEdit3KeyPress аналогичны TForm1.LabeledEdit1KeyPress и здесь не приведены}

procedure TForm1.Button1Click(Sender: TObject);

begin

if LabeledEdit1.Text <> '' //Проверка поля ввода Х на пустое значение

then X:= StrToFloat( LabeledEdit1.Text); //Х преобразовано в число

else begin ShowMessage('введите X!');

exit //досрочное завершение процедуры

end;

if LabeledEdit2.Text <> '' //Проверка поля ввода dХ на пустое значение

then dX:= StrToFloat( LabeledEdit2.Text)

else begin ShowMessage('введите dX');

exit //досрочное завершение процедуры

end;

if LabeledEdit3.Text <> '' //Проверка поля ввода n на пустое значение

then n:= StrToFloat( LabeledEdit3.Text)

else begin ShowMessage('Введите n!');

exit

end;

Label2.Caption:= ' X Y'+ #10+

FloatToStrF(X, ffGeneral, 5, 3)+ #9+ //преобразование Х в строку и вывод

FloatToStrF(FXn(X, n), ffGeneral, 5, 3)+ #10+

//преобразование FXn(X,n)и вывод

FloatToStrF(X+dX, ffGeneral, 5, 3)+ #9 + //вывод X+dx

FloatToStrF(FXn(X+dX, n), ffGeneral, 5, 3)+ #10 + //вывод FXn(X+dx, n)

FloatToStrF(X+2*dX, ffGeneral, 5, 3)+ #9+ //вывод X+2*dx

FloatToStrF(FXn(X+2*dX, n), ffGeneral, 5, 3)+ #13; //вывод FXn(X+2*dX, n)

end;

end.