- •Windows -приложение
- •Среда программирования
- •Встроенный отладчик
- •Использование графики
- •Графические данные и палитра
- •Сохранение проекта
- •Структура приложения
- •Структура модуля
- •Простые типы
- •Символьные типы
- •Логические типы
- •Тип перечень
- •Составной оператор
- •Оператор if
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла repeat
- •Пример приложения 6
- •Пример приложения 7
- •Статические массивы
- •Динамические массивы
- •Оператор with
- •Идентичность типов
- •Совместимость типов
- •Преобразование типов
- •Операторы обработки исключительных ситуаций
- •Рекурсия
- •Процедура exit
- •Директивы подпрограммы
- •Класс как объектный тип
- •Наследование
- •Операции is и as
- •Типы ссылки на класс
- •Типизированные файлы
- •Файлы без типа
- •Пример приложения 17
- •Компонент tmainmenii
- •Двунаправленные списки
- •Потоки данных
- •Пример приложения 22
- •Интерфейс drag and drop
- •Пример приложения 24
- •С файлами
- •Пример приложения 26
- •Программные потоки
- •Приоритеты потоков
- •Класс tthread
- •Проблемы синхронизации потоков
Оператор цикла repeat
Оператор цикла Repeat записывается следующим образом:
<Оператор1>;
<OnepawopN>; Until <логическое выражение>;.
В этом цикле выполняются все операторы между Repeat и until, пока логическое выражение не станет истинным. В отличие от оператора While, в котором логическое выражение определяет условие продолжения итераций, в операторе Repeat логическое выражение определяет условие окончания цикла. Независимо от значения логического выражения, хотя бы одна итерация обязательно должна выполниться. Как и в случае с циклом while, программист должен сам организовать управление итерациями в цикле Repeat.
Пример приложения 6
Рассчитать с точностью е сумму следующего ряда:
гдеX- какое-либо число из диапазона -1<=Х<=1
Точность е связана с вычислением Y следующим образом. Обозначим
общий член ряда а
Суммирование (вычисление Т)
продолжать до тех пор, пока значение а не станет меньше е.
Вывести на экран историю расчета, т.е. какое значение на каждой итерации имели величины а и 7, в следующем виде: итерация 1 а = у = ; итерация 2 а= у= и т.д.
На рис. 20 построен алгоритм расчета суммы ряда. В этом алгоритме введена дополнительная переменная Ъ для отслеживания знака очередного члена ряда.
На рис. 21 приводится форма с вариантом расчета. Расположенные на форме компоненты можно определить, исходя из текста программы, который приводится ниже.
Для решения данной задачи был использован компонент Tmemo. Этот элемент управления служит для получения какого-либо текста пользователя
61
Доступ ко всему тексту может быть получен через свойство Text. Свойство Lines представляет весь текст в виде совокупности строк. Все строки в ТМето пронумерованы, начиная от нуля. Если на экране строки полностью не отображаются (задана маленькая ширина Width), то с помощью свойства Word-Wrap можно управлять переносом строк. ТМето имеет свойство ScrollBars -можно устанавливать полосы прокрутки. По умолчанию: ScrollBars установлено равным ssNone. Можно задать центрирование строк с помощью свойства Alignment. Свойство 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;
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 оформлена в виде функции. При вызове функции MessageBox необходимо указать три параметра: текст-подсказка (что надо де-j лать); заголовок диалогового окна; вариант внешнего вида окна (константа мв_ок указывает, что окно с одной кнопкой). Edit1. SetFocus - установить фокус на объект Edit1.
ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР BREAK И CONTINUE
В циклах For, While и Repeat можно использовать две стандартные' процедуры Break и Continue. Процедура Break позволяет досрочно выйтш из цикла, не дожидаясь выполнения условия выхода. Процедура Continue позволяет начать новую итерацию цикла, даже если предыдущая не завершена.