Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Емельянов.doc
Скачиваний:
12
Добавлен:
03.11.2018
Размер:
3.25 Mб
Скачать

Оператор цикла repeat

Оператор цикла Repeat записывается следующим образом:

<Оператор1>;

<OnepawopN>; Until <логическое выражение>;.

В этом цикле выполняются все операторы между Repeat и until, пока логическое выражение не станет истинным. В отличие от оператора While, в котором логическое выражение определяет условие продолжения итераций, в операторе Repeat логическое выражение определяет условие окончания цикла. Независимо от значения логического выражения, хотя бы одна итера­ция обязательно должна выполниться. Как и в случае с циклом while, про­граммист должен сам организовать управление итерациями в цикле Repeat.

Пример приложения 6

Рассчитать с точностью е сумму следующего ряда:

гдеX- какое-либо число из диапазона -1<=Х<=1

Точность е связана с вычислением Y следующим образом. Обозначим

общий член ряда а

Суммирование (вычисление Т)

продолжать до тех пор, пока значение а не станет меньше е.

Вывести на экран историю расчета, т.е. какое значение на каждой итера­ции имели величины а и 7, в следующем виде: итерация 1 а = у = ; итера­ция 2 а= у= и т.д.

На рис. 20 построен алгоритм расчета суммы ряда. В этом алгоритме введена дополнительная переменная Ъ для отслеживания знака очередного члена ряда.

На рис. 21 приводится форма с вариантом расчета. Расположенные на форме компоненты можно определить, исходя из текста программы, кото­рый приводится ниже.

Для решения данной задачи был использован компонент Tmemo. Этот элемент управления служит для получения какого-либо текста пользователя

61

и его отображения на экране. ТМето называют многострочным редактором (однострочным редактором является компонент TEdit).

Доступ ко всему тексту может быть получен через свойство Text. Свойство Lines представляет весь текст в виде со­вокупности строк. Все строки в ТМето пронумерованы, начиная от нуля. Если на экране строки полностью не отобра­жаются (задана маленькая ширина Width), то с помощью свойства Word-Wrap можно управлять переносом строк. ТМето имеет свойство ScrollBars -можно устанавливать полосы прокрутки. По умолчанию: ScrollBars установлено равным ssNone. Можно задать центриро­вание строк с помощью свойства Align­ment. Свойство Lines содержит методы Add (добавить), Delete (удалить), Insert (вставить).

Для Memol в инспекторе объектов

установлено свойство Wordwrap равным true, а свойство ScrollBars -

ss Vertical.

Unit prim6;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls;

type

TForm1 = class(TForm)

Panel1: TPanel;

Button1: TButton;

BitBtnl: TBitBtn;

Bevell: TBevel;

Memol: TMemo;

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label3: TLabel;

procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); procedure Edit1Exit(Sender: TObject);

end;

var Form1: TForm1;

implementation

($R *.DFM}

procedure TForm1.Edit1KeyPress(Sender: TObject;

var Key: Char); begin

if not (key in ['0'..'9','-','.',#8]) then key:=#0; end;

procedure TForm1.Button1Click(Sender: TObject);

var x,y,a,b,eps:real;

n:byte;

begin

Memol.Lines.Clear;

y:=0.0;

n:=0;

b:=-1.0;

x:=StrToFloat(Edit1.Text) ;

eps:=StrToFloat(Edit2.Text);

Repeat

b:=-b*x; , inc(n); a:=b/n; y:=y+a;

Memol.Lines.Add('Итерация'+IntToStr(n)+’ a=' + FormatFloatC 0.00000' ,a) + ' y=' +

FormatFloat('0.0000' , y)) ; Ontil abs(a) < eps; end;

Рис.21

Ниже приведена программа.

procedure TForm1.Edit1Exit(Sender: TObject);

begin

if Abs(StrToFloat{Edit1.Text))>1.0 then

if Application.MessageBox('Введите число Х1,

'Число /Х/<=1', MB_OK)=IDOK then Edit1.SetFocus;

end; end.

В приведенной программе обработчик события Buttoniciick написан по алгоритму рис. 20, кроме одного дополнения - внутрь цикла добавлена процедура формирования истории расчета с помощью объекта Memol. Обра­ботчик Edit1Exit отслеживает условие: X по модулю должно быть не боль­ше 1. В случае невыполнения этого условия вызывается стандартное диалоговое окно объекта Application MessageBox. Синтаксически подпро-1 грамма MessageBox оформлена в виде функции. При вызове функции Mes­sageBox необходимо указать три параметра: текст-подсказка (что надо де-j лать); заголовок диалогового окна; вариант внешнего вида окна (константа мв_ок указывает, что окно с одной кнопкой). Edit1. SetFocus - установить фокус на объект Edit1.

ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР BREAK И CONTINUE

В циклах For, While и Repeat можно использовать две стандартные' процедуры Break и Continue. Процедура Break позволяет досрочно выйтш из цикла, не дожидаясь выполнения условия выхода. Процедура Continue позволяет начать новую итерацию цикла, даже если предыдущая не завер­шена.