Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
яву_кисо_delphi(1)(1).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.26 Mб
Скачать

Лабораторная работа №4 Итерационные вычислительные процессы

  1. Цель лабораторной работы

Целью лабораторной работы является приобретение практических навыков программирования итерационных вычислительных процессов.

  1. Условия: вычислить с точностью 0.001 выражение:

  2. Используемые компоненты и их свойства

Имя компонента

Настраиваемые свойства

Значения

Комментарии

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. Тренировочные вопросы к защите:

  1. Какое свойство определяет стиль оформления компонента TEdit?

  2. Какое свойство содержит весь текст?

  3. Свойство MaxLength = 20, что это значит?

  4. Какие способы для задания шага имеет компонент ProgressBar?

  5. Как определить, чтобы полоса в компоненте ProgressBar была сигментированной?

  6. Какое свойство определяет форму компонента TGauge?

  7. В чем назначение компонента TBevel?

  8. Что определяет свойство TBevelShape компонента TBevel?