
- •Курск - 2003
- •Интегрированная среда Delphi
- •Цель лабораторной работы
- •Информационные материалы
- •Главное окно
- •Окно редактора кода
- •Окно дерева объектов
- •Окно браузера
- •Лабораторная работа №2 Основы визуального программирования
- •Лабораторная работа №3 Линейные вычислительные процессы
- •Лабораторная работа №4 Итерационные вычислительные процессы
- •Лабораторная работа №5 Циклические вычислительные процессы
- •Лабораторная работа №6 Обработка строковых данных
- •Лабораторная работа №7 Обработка одномерных массивов
- •Лабораторная работа №8 Обработка матриц
- •Лабораторная работа № 9 Программирование операций с матрицами
- •Лабораторная работа №10 Программирование файловых операций
- •Лабораторная работа №11 Графические средства Delphi
- •Библиография
Лабораторная работа №4 Итерационные вычислительные процессы
Цель лабораторной работы
Целью лабораторной работы является приобретение практических навыков программирования итерационных вычислительных процессов.
Условия: вычислить с точностью 0.001 выражение:
Используемые компоненты и их свойства
№ |
Имя компонента |
Настраиваемые свойства |
Значения |
Комментарии |
1 |
2 |
3 |
4 |
5 |
1 |
Form1 (форма)
|
BorderIcons
BorderStyle
Caption Menu
|
BiSystem- Menu biMinimize3
bsSingle
Summator11 MainMenu1
|
Системное меню
Кнопка минимизации Толщина рамки, окно не изменяет размеры Заголовок формы Главное меню формы |
2 |
Label1 (метка)
|
Caption
|
Введите начальную сумму
|
Надпись
|
3 |
Label2 (метка)
|
Caption
|
Сумма=
|
Надпись
|
4 |
BRun (кнопка, Button)
|
Caption Name OnClick (стр.Events)
|
Выполнить BRun BRunclick
|
Надпись Имя компонента Событие компонента (щелчок мыши)
|
5 |
Button1 (кнопка)
|
Caption OnClick (стр.Events) |
Очистка Button1Click |
Надпись Событие компонента |
6 |
BСlose (кнопка, Button)
|
Caption Name OnClick (стр.Events) |
Выход BClose BCloseclick
|
Надпись Имя компонента Событие компонента |
1 |
2 |
3 |
4 |
5 |
7 |
Edit1 (однострочный редактор)
|
Text
MaxLength OnKeyPress (стр.Events)
|
0
3 Edit1KeyPress
|
Значение поля Text редактора Длина ввода Событие компонента (при нажатии клавиши в поле ввода)
|
8 |
UpDown1 (спаренная кнопка, WIN32)
|
Associate
min max
Inrement
|
Edit1
-1000 1000
10
|
Связанный компонент: однострочный редактор Edit1. минимальное, максимальное значение шаг наращивания /уменьшения
|
9 |
ProgressBar1 (индикатор процесса, WIN32) |
Min Max
Step
|
0 100
1
|
минимальное максимальное значение Шаг наращивания
|
10 |
Gauge1 (индикатор величины, Samples).
|
Kind
Progress
|
gkPie
0
|
Круговая диаграмма Текущее значение изменяющейся числовой величины
|
11 |
Bevel1 (кромка)
|
Shape Style
|
bsBox BsLowered
|
Вид компонента (прямоугольник вдавленный)
|
12
1
|
MainMenu1 (главное меню)
2
|
Name Name Caption
Name Caption
Name Caption
3
ShortCut
OnClick (стр.Events) Name Caption OnClick (стр.Events)
|
MainMenu1 N1 &Меню
N2 &Помощь
MRun &Выполнить
4
114
BRunClick
MMes &Условие MMesClick N3Click |
Имя компонента Имя пункта меню Наименование пункта меню Имя пункта меню Наименование пункта меню Имя опции меню Наименование опции меню
5
Клавиша акселератора F3 Событие опции меню Имя опции меню Наименование Опции меню Событие опции меню |
Введен
однострочный редактор Edit1.
Он обеспечивает отображение необходимого
начального значения суммы. Начальное
значение суммы задается с помощью
спаренной кнопки TUpDown.
Она имеет пару кнопок, с помощью которых
величина наращивается или уменьшается.
Для указания связанного с ним компонента
используется свойство Associate.
Свойство AlignButton
= udRight
определяет его размещение справа от
Edit1.
На странице свойств определены
минимальное, максимальное значение
диапазона изменения.
Компонент РrogressBar1 предназначен для отображения хода выполнения длительного по времени процесса, т.е. можно только отображать, но не изменять числовую величину. На странице свойств определили минимальное, максимальное значение диапазона изменения и шаг.
Компонент &Gauge1 также предназначен для отображения некоторой изменяющейся числовой величины. Он отличается от ProgressBar1 разнообразием форм. Свойство Kind определяет форму TGauge. Начальное значение изменяющейся числовой величины равно 0 (Progress = 0).
Для выделения группы элементов использован компонент TBevel (кромка). Компонент имеет форму прямоугольника и вдавленный.
4.Форма задания
5.Текст программы.
unit UMain4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, Menus, Gauges;
type
TForm1 = class(TForm)
BRun: TButton;
ProgressBar1: TProgressBar;
BClose: TButton;
Edit1: TEdit;
UpDown1: TUpDown;
Label1: TLabel;
Label2: TLabel;
Bevel1: TBevel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
MRun: TMenuItem;
N4: TMenuItem;
MExit: TMenuItem;
MMes: TMenuItem;
Gauge1: TGauge;
Button1: TButton;
procedure BCloseClick(Sender: TObject);
procedure BRunClick(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure MMesClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
st='Сумма = ';
var
C : integer = 1;
procedure TForm1.BCloseClick(Sender: TObject);
begin
Close;
end;
function factorial(n:integer):integer;
begin
if n<>0
then factorial:=n*factorial(n-1)
else factorial:=1;
end;
procedure TForm1.BRunClick(Sender: TObject);
var
stop: boolean;
i : integer;
N : integer;
S : double;
d : double;
begin
S:= StrToInt(Edit1.Text);
s:=s+1;
i:=1;
n:=11;
stop:=false;
repeat
d:=exp(i*ln(2))/factorial(i);
if d < 0.001 then stop:=true;
if (i mod 2) <> 0 then d:=-d;
S:=S+d;
i:=i+1;
Sleep(100);
ProgressBar1.Position:=Trunc(100*i/n);
Gauge1.Progress:=Trunc(100*i/n);
until stop;
label2.Caption:=st+FloatToStrF(S,ffFixed,6,3);
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'1'..'9','0',#8:;
#13 : BRun.SetFocus;
else
Key:=Chr(0);
end;
end;
procedure TForm1.MMesClick(Sender: TObject);
begin
ShowMessage('Вычислить с точностью 0.001 выражение:
S = (-2) ^ i / i! ');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Caption:=st;
ProgressBar1.Position:=0;
Gauge1.Progress:=0;
Edit1.Text:='0';
end;
end.
6. Комментарии к тексту программы
Объявленный класс TForm1 содержит указание компонент, описанных выше. Методы класса реализуют следующие действия .
Процедура BCloseClick закрывает форму Form1. Это можно сделать как щелчком по кнопке ‘Выход’, так и выбрав опцию ‘Выход’ пункта меню «Меню».
Процедура Button1Click реализует действия по очистке полей ввода (Edit1.Text:= ‘’) и результата (Label2Caption:=St), определению начальных значений ProgressBar1.Position:=0, Gauge1.Progress:=0.
Процедура Edit1KeyPress реализует действия при нажатии алфавитно- цифровых клавиш( напомню, что к алфавитно – цифровым относят также клавиши ESC – код 27; Enter – код 13; Tab – код 9).
Содержащийся в процедуре код реализует форматированный ввод. Отображаться в поле редактора могут только цифры 0-9, знак числа +,-. Нажатие других клавиш игнорируется (key:=chr(0). При нажатии клавиши Enter фокус ввода получит компонент с именем BRun (#13: BRun. SetFocus) –кнопка. Надпись кнопки с именем BRun - ‘Выполнить’ – будет выделен штриховой линией. Для получения результата достаточно еще раз нажать клавишу Enter. Метод SetFocus может быть использован и для других компонент формы.
Процедура BRunClick реализует действия в соответствии с заданием. Для использования начального значения суммы в вычислениях необходимо преобразование из символьного представления в численное (S:=StrToInt(Edit1.Text). Sleep (100): - задержка в мсек. Переменная d имеет значение остаточного члена ряда. При d<0.001 цикл завершаетсяя и выводится результат. Поскольку результат число вещественное, то используется функция FloatToStr с указанием формата вывода.
Процедура MMesClick выводит сообщение на экран. Инициализация при выборе опции ‘Условие’ пункта меню ‘Помощь’.
7. Содержание отчета
- задание;
- описание свойств используемых компонент и форм;
- текст программы с комментариями;
- результаты вычислений.
8. Тренировочные вопросы к защите:
Какое свойство определяет стиль оформления компонента TEdit?
Какое свойство содержит весь текст?
Свойство MaxLength = 20, что это значит?
Какие способы для задания шага имеет компонент ProgressBar?
Как определить, чтобы полоса в компоненте ProgressBar была сигментированной?
Какое свойство определяет форму компонента TGauge?
В чем назначение компонента TBevel?
Что определяет свойство TBevelShape компонента TBevel?