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

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

В отличие от оператора For, оператор цикла While используется, когда заранее неизвестно количество выполняемых итераций. Этот оператор записывается так:

While <логическое выражение> do <оператор>;

Итерации выполняются до тех пор, пока логическое выражение остается истинным. Если с самого начала значение логического выражения ложно, то оператор While будет пропущен.

Пример 5

Найти все делители целого числа X, кроме единицы и самого числа. Воспользуемся простейшим алгоритмом. Будем перебирать все делители, начиная с числа 2, и проверять, делится ли нацело заданное число X. Очевидно, последний делитель, который следует проверять, равен половине числа X. Если ни одного делителя не найдено, то число - простое. Будем исследовать только положительные числа. Воспользуемся в этом примере компонентом TListBox. Форма с вариантом решения задачи приведена на рис. 19.

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

Интерфейсный элемент TListBox позволяет представить список объектов (свойство Items), чаще всего строк (класс TStrings), из которых можно выбрать один элемент. Если список не умещается на экране, то возможнна его прокрутка по вертикали. Список можно представлять не только в один столбец - количество столбцов задаётся свойством Columns. Если Columns > 1, то разрешается и горизонтальная прокрутка элементов. Элементы списка могут, например, динамически добавляться. При этом используется свойство Items с соответствующим методом Add (Items.Add) – добавить. Какой элемент выбран, запоминается в свойстве ItemIndex. Можно задать одновременный выбор нескольких элементов в списке с помощью свойства MultiSelect. Компонент имеет много других разнообразных свойств, что делает его удобным для отображения данных (например, свойство Sorted позволяет представлять список в алфавитном порядке и др.).

Ниже приводится программа для примера 5.

unit prim5;

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;

Label1: TLabel;

Edit1: TEdit;

ListBox1: TListBox;

Label2: TLabel;

Label3: TLabel;

procedure Edit1KeyPress(Sender: TObject;

var Key: Char);

procedure Button1Click(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,half,divider:word;

i:byte;

begin

Label3.Caption:='';

ListBox1.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);

ListBox1.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, цикл закроется);

  • внутри цикла осуществлять изменение управляющей переменной на каждой итерации, например inc(i) – увеличить значение i на единицу.