- •Windows -приложение
- •Среда программирования
- •Встроенный отладчик
- •Использование графики
- •Графические данные и палитра
- •Сохранение проекта
- •Структура приложения
- •Структура модуля
- •Простые типы
- •Символьные типы
- •Логические типы
- •Тип перечень
- •Составной оператор
- •Оператор if
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла repeat
- •Пример приложения 6
- •Пример приложения 7
- •Статические массивы
- •Динамические массивы
- •Оператор with
- •Идентичность типов
- •Совместимость типов
- •Преобразование типов
- •Операторы обработки исключительных ситуаций
- •Рекурсия
- •Процедура exit
- •Директивы подпрограммы
- •Класс как объектный тип
- •Наследование
- •Операции is и as
- •Типы ссылки на класс
- •Типизированные файлы
- •Файлы без типа
- •Пример приложения 17
- •Компонент tmainmenii
- •Двунаправленные списки
- •Потоки данных
- •Пример приложения 22
- •Интерфейс drag and drop
- •Пример приложения 24
- •С файлами
- •Пример приложения 26
- •Программные потоки
- •Приоритеты потоков
- •Класс tthread
- •Проблемы синхронизации потоков
Оператор цикла while
В отличие от оператора For, оператор цикла while используется, когда заранее неизвестно число выполняемых итераций. Этот оператор записывав ется так: While <логическое выражение> do <оператор>;.
Итерации выполняются до тех пор, пока логическое выражение остается истинным. Если с самого начала значение логического выражения ложно, тя оператор while будет пропущен.
ПРИМЕР ПРИЛОЖЕНИЯ 5
Найти все делители целого числа X, кроме единицы и самого числа. Воспользуемся простейшим алгоритмом. Будем перебирать все делители; начиная с числа 2, и проверять, делится ли нацело заданное число X. Очевидно, последний делитель, который следует проверять, равен половине
пела X. Если ни одного делителя не найдено, то число простое. Будем ис-довать ТОЛЬКо положительные числа. Воспользуемся в этом примере компонентом TListBox. Форма с вариантом решения задачи приведена на ряс. 19.
Рис. 19
Интерфейсный элемент TListBox позволяет представить список объектов (свойство Items), чаще всего строк (класс TStrings), из которых можно выбрать один элемент. Если список не умещается на экране, то возможна его прокрутка по вертикали. Список можно представлять не только в один столбец - число столбцов задается свойством Columns. Если Columns > 1, то разрешается и горизонтальная прокрутка элементов. Элементы списка могут, например, динамически добавляться. При этом используется свойство Items с соответствующим методом Add (Items. Add) - добавить. Какой элемент выбран, запоминается в свойстве Itemlndex. Можно задать одновременный выбор нескольких элементов в списке с помощью свойства MultiSe-lect Компонент имеет много других разнообразных свойств, что делает его удобным для отображения данных (например, свойство Sorted позволяет представлять список в алфавитном порядке и др.).
Ниже приводится программа для примера 5.
unit prim5;
interface
uses Windows, Messages, SysUtils, Classes,Graphics,
Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls;
Type TForm=class(TForm) Panel1: TPanel; Button1: TButton; BitBtnl: TBitBtn; Bevell: TBevel; Label1: TLabel;
58
5
Edit1: TEdit;
ListBoxl: TListBox;
Label2: TLabel;
Label3: TLabel;
procedure Edit1KeyPresa(Sender: TObject; var Key: Char)
procedure Button1Click(Sender: TObject);
end;
var Form1: TForm1;
imp1ementation
{$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,half,divider:word;
i:byte; begin
Label3.Caption:='';
ListBoxl.Items.Clear; x:=StrToInt(Edit1.Text) ; half:=x div 2; divider:=2; i:=0;
While divider <= half do begin
if x mod divider = 0 then begin inc(i) ; ListBoxl.Items.Add(IntToStr(i)+'-й делитель-'
+ IntToStr(divider));
end;
inc(divider) ;
end;
if i=0 then Label3.Caption:='Число простое';
end;
end.
В отличие от оператора цикла For, который автоматически изменяет) управляющую переменную и управляет циклом, в операторе while граммист должен сам организовать управление, заключающееся в след щем:
-
выбрать какую-либо управляющую переменную, в данном случае i счетчик циклов;
-
присвоить ей начальное значение (например, i: = 0;) ;
-
в операторе While записать условие продолжения выполнения цикла, | например divider <= half; (как только это условие станет равным false, цикл закроется);
60
• внутри цикла осуществлять изменение управляющей переменной на каждой итерации, например inc (i) - увеличить значение i на единицу.