Программирование в Delphi с использованием операторов цикла
Цель и содержание работы
В данной лабораторной работе изучаются операторы цикла языка Delphi на примере решения задач обработки данных, представленных одномерными массивами.
Целью лабораторной работы является получение студентами навыков программирования циклических алгоритмов обработки одномерных массивов.
Общие сведения
Оператор цикла обеспечивает повторение некоторой последовательности операторов.
В языке Delphi имеется три вида операторов цикла. Если число повторений цикла известно заранее, то можно использовать оператор цикла с параметром (оператор FOR). В противном случае используются оператор цикла с предусловием (оператор WHILE) или оператор цикла с постусловием (оператор REPEAT).
Оператор цикла с предусловием
Оператор цикла с предусловием реализует базовую алгоритмическую структуру «Цикл с предусловием» (рис. 1.).
Рис. 1. Базовая алгоритмическая структура «Цикл с предусловием».
Синтаксическая структура оператора цикла с предусловием имеет следующий вид»
While <выражение> Do < оператор>
<выражение> должно иметь значение логического типа.
Т.е. <выражение> задает условие повторения цикла, а < оператор> реализует тело цикла и коррекцию – изменение значения хотя бы одной переменной, входящей в <выражение>.
После служебного слова Do может быть записан только один оператор и обычно это составной оператор.
Пример 1: I:=1; S:=0; N:=10; { инициализация}
While I <=N Do {условие повторения}
Begin
S:=S+I; {тело цикла}
I:=I+1; {коррекция}
End;
Пример 2: Max:= A[1]; I: =2;; N:=10; { инициализация}
While I <=N Do {условие повторения}
Begin
IF A[I] >Max Then {тело цикла}
Max:= A[I];
I:=I+1; {коррекция}
End;
Оператор цикла с постусловием
Оператор цикла с постусловием реализует базовую алгоритмическую структуру «Цикл с постусловием» (рис. 2.).
Синтаксическая структура оператора цикла с постусловием имеет следующий вид:
Repeat
опратор;
[оператор;…
оператор;]
Until <выражение>
<выражение> должно иметь значение логического типа.
Рис. 2. Структура «Цикл с постусловием».
Семантика оператора:
Сначала выполняется последовательность операторов, затем вычисляется значение <выражения>. Выполнения оператора цикла с постусловием продолжается, если значение <выражения> равно False, и завершается, если значение <выражения> равно True.
Т. е. оператор цикла с постусловием выполняется, по крайней мере, один раз.
Пример: I:=1; S:=0; N:=10; {инициализация}
Repeat
S:=S+I; {тело цикла}
I:=I+1; {коррекция}
Until I>N; {условие выхода из цикла}
Оператор цикла с параметром
Оператор цикла с параметром используется в тех случаях, когда известно число повторений цикла, а также при обработке данных, представленных массивами.
Синтаксическая структура оператора цикла с параметром:
For <идентификатор переменной> := <выражение 1> То
<выражение 2> Do <оператор>.
или
For <идентификатор переменной> := <выражение 1> Downto
<выражение 2> Do <оператор>;
Переменную, идентификатор которой указан после служебного слова For называют параметром цикла.
Значение переменной – параметра цикла, значение выражения 1, выражения 2 должны быть одного и того же простого порядкового типа.
Т.е. значение переменной – параметра цикла, выражения 1 и выражения 2 не могут быть типа Real.
Значение переменной – параметра цикла нельзя изменять в операторе, записанном после служебного слова Do.
Оператор цикла For обеспечивает выполнение оператора, называемого телом цикла, до тех пор пока не будут автоматически перебраны все значения переменной – параметра цикла.
Если параметр цикла имеет тип Integer, то значение параметра цикла последовательно увеличиваются (при For…To) или уменьшается (при For…DownTo) на единицу при каждом повторе.Т.е. оператор цикла For в этом случае не допускает изменения параметра цикла на величину, отличную от единицы.
Пример 1: S:=0; N:=10;
For I:=1 To N Do
S:=S+I; {тело цикла}
Пример 2: Max:= A[1]; I: =2;; N:=10;
For I:=1 To N Do
IF A[I] >Max Then
Max:= A[I];
Структура данных массив
Массив - это поименованное упорядоченное множество, образованное из фиксированного числа элементов данных одного и того же типа.
Элементы данных в массиве упорядочены с помощью индексов (одного или нескольких). В качестве индексов используются константы и переменные порядкового типа. Чаще всего это константы и переменные, принимающие целые положительные значения.
Порядковый тип - это такой тип, который определяет множество значений таких, что каждое из них, кроме первого и последнего, имеет предыдущее и последующее значение.
Для идентификации отдельного элемента массива необходимо указать:
- имя (идентификатор) массива,
- один или несколько индексов.
В Delphi индексы указываются вслед за именем массива в квадратных скобках и разделяются запятой.
Пример: B [3]
MAS [i, j].
Массив называют одномерным, если для идентификации отдельного элемента необходимо указать один индекс, двумерным, если два индекса и т. д.
Алгоритмы, манипулирующие данными, представленными массивами, имеют циклическую структуру.
Описание массива
Синтаксическая структура описания типа массив выглядит следующим образом:
Type <имя типа> Array [<тип индекса/индексов>] of <тип элементов массива>.
Чаще всего в качестве <типа индекса/индексов> используется интервальный тип.
Пример 1: Type ТТ1= Array [1..50] of real;
Var А1, А2:TT1;
Допускается описывать массив сразу в разделе описания переменных.
Пример 2: Var A3, A4: Array [1..5, 1..50] of integer;
Обработка данных типа массив производится поэлементно.
2.4.2. Компоненты Delphi, используемые для ввода/вывода массивов
В Delphi для ввода/вывода массивов обычно используется компонента StringGrid, расположенная на странице Additional палитры компонентов и представленная значком следующего вида. Компонента имеет свойство Cells, представляющее собой двумерный массив ячеек, содержащих текстовые строки. Индексация ячеек начинается всегда с нуля и первым указывается индекс столбца.
После размещения компоненты на форме она имеет вид, представленный на рис 3.
Рис. 3. Форма с размещенной на ней компонентой StringGrid.
По умолчанию компонента StringGrid имеет пять строк и пять столбцов, причем нулевая строка и нулевой столбец фиксированы, т. е. не прокручиваются.
Для того чтобы компонента могла использоваться для ввода одномерного массива необходимо при визуальной разработке интерфейса пользователя программы установить значения ниже перечисленных свойств StringGrid следующим образом:
Свойство | Значение |
FixedCols | |
FixedRows | |
Rowcount | |
Options | [goEditing] |
Значение [goEditing] свойства Options позволяет пользователю размещать в ячейках компоненты во время выполнения программы строки символов.