Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка DELPHI.DOC
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

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

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

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

. . . . . . . . . . .

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

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

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

Пример 6

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

,

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

Точность  означает следующее. Обозначим член ряда; суммирование (вычисление Y) продолжать до тех пор, пока значение а не станет меньше .

В

Рис. 20 Алгоритм расчета суммы ряда.

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

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

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

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

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

Рис. 21 Форма с вариантом решения примера 6.

Для Memo1 в инспекторе объектов установлено свойство WordWrap равным true, а свойство ScrollBarsssVertical. Далее приводится программа.

unit prim6;

interface

uses Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls;

type

TForm1 = class(TForm)

Panel1: TPanel;

Button1: TButton;

BitBtn1: TBitBtn;

Bevel1: TBevel;

Memo1: 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

Memo1.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;

Memo1.Lines.Add('Итерация'+IntToStr(n)+' a=' +

FormatFloat('0.00000',a)+' y='+

FormatFloat('0.0000',y));

Until abs(a) < eps;

end;

procedure TForm1.Edit1Exit(Sender: TObject);

begin

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

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

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

end;

end.

В приведенной программе обработчик события Button1Click написан по алгоритму рис. 20, кроме одного дополнения – внутрь цикла добавлена процедура формирования истории расчета с помощью объекта Memo1. Обработчик Edit1Exit отслеживает условие: X по модулю должно быть не больше 1. В случае невыполнения этого условия вызывается стандартное диалоговое окно объекта Application MessageBox. Синтаксически подпрограмма MessageBox оформлена в виде функции. При вызове функции MessageBox необходимо указать три параметра:

  1. текст-подсказка, что надо делать;

  2. заголовок диалогового окна;

  3. вариант внешнего вида окна – константа MB_OK указывает, что окно с одной кнопкой.

Значение функции вызова диалогового окна сравнивается с константой IDOK. В данном случае любой вариант ответа пользователя приводит к возврату операции ввода числа X (Edit1.SetFocus – установить фокус на объект Edit1).