Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Пример 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;

Схема алгоритма. Контроль ввода вещественных чисел procedure Inp_Real3(Var Symb: Char; Str_Ed: string)
Symb вводимый символ  
Начало
Symb = '.'  
true
Chr(0)
Symb
‘0’..’9’:
‘,’, ‘.’:
#8:  
Конец
true
Symb:=’,’  
else true
Есть ‘,’? Pos(',', Str_Ed) <> 0
Запятая уже есть Chr(0)

Пример 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;

Начало
Схема алгоритма. Функция Xn function FXn(X, n: Real):Real
true
X=0
Конец
true
false
FXn:= Exp(n*Ln(Abs(X)))
X<0
false
false
FXn=0
true
n=0
FXn=1
FXn:= Exp(n*Ln(X))
Вычисляется абсолютное значение
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; va r 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.

Введите n
false
Начало
Конец
false
True
LabeledEdit1.Text <> ''  
true
LabeledEdit2.Text <> ''  
False
n преобразовано в число преобразован в X
Введите Х
Вывод X, FXn(X, n) X+dx, FXn(X+dx, n) X+2*dX, FXn(X+2*dX, n)
Введите dX
 
Exit
Exit
true
Схема алгоритма. Вычисления с использование FXn(x, n) procedure TForm1.Button1Click(Sender: TObject)
X преобразован в число  
LabeledEdit3.Text <> ''  
dX преобразовано в число
Exit

Содержание отчета

1. Задание.

2. Листинг модуля с подробными комментариями.

3. Для каждой из пользовательских процедур дайте обоснование назначенного типа параметра (параметр-значение или параметр переменная).

4. Схемы алгоритмов всех нелинейных процедур.

5. Условия тестирования и ожидаемый результат.

6. Перечень ситуаций, при которых возможно аварийное завершение Вашей программы.

 

 





Поделиться с друзьями:


Дата добавления: 2016-10-27; Мы поможем в написании ваших работ!; просмотров: 285 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

2370 - | 2121 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.