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

Оператор цикла 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 на единицу.