- •Основы программирования
- •Предисловие
- •Введение
- •1. Изучение интегрированной среды Delphi
- •Контрольные вопросы к главе 1
- •Задание к лабораторной работе № 1
- •2. Программирование линейных алгоритмов в системе Delphi
- •Контрольные вопросы к главе 2
- •Задания к лабораторной работе № 2
- •3. Программирование разветвленных алгоритмов в системе Delphi
- •Контрольные вопросы к главе 3
- •Задания к лабораторной работе № 3
- •4. Программирование простых циклических алгоритмов в системе Delphi
- •Контрольные вопросы к главе 4
- •Задания к лабораторной работе № 4
- •5. Программирование с использованием одномерных массивов в системе Delphi
- •Контрольные вопросы к главе 5
- •Задания к лабораторной работе № 5
- •6. Программирование с использованием двумерных массивов в системе Delphi
- •Контрольные вопросы к главе 6
- •Задания к лабораторной работе № 6
- •7. Программирование в системе Delphi с использованием подпрограмм
- •Контрольные вопросы к главе 7
- •Задания к лабораторной работе № 7
- •8. Изучение приемов работы с графикой в delphi
- •Контрольные вопросы к главе 8
- •Задания к лабораторной работе №8
- •9. Программирование в системе Delphi с помощью строк
- •Контрольные вопросы к главе 9
- •Задания к лабораторной работе №9
- •10. Изучение работы с файлами в системе delphi
- •Контрольные вопросы к главе 10
- •Задания к лабораторной работе №10
- •Заключение
- •Библиографический список
- •Предметный указатель
- •Delphi: основы программирования
5. Программирование с использованием одномерных массивов в системе Delphi
Цель данного раздела заключается в изучении массивов, приобретении навыков описания, ввода и вывода одномерных массивов, выполнении действий над массивами, поиска максимального и минимального элементов в одномерном массиве.
Массив и одномерный массив
В системе Delphiтак же, как и в других языках программирования, структура данных массив используется очень часто. К необходимости применения массивовов мы приходим всякий раз, когда требуется связать и использовать целый ряд родственных величин.
Массивы позволяют программисту увязать с единственным именем переменной целую совокупность данных. Вы можете перемещать массив в памяти как единое целое, копировать его и т.д., причем все это делается со ссылкой на одно имя переменной.
Массив– это структурированный тип данных, состоящий из фиксированного числа упорядоченных по индексу элементов, имеющих один и тот же тип.
Одномерный массив– это набор элементов одного типа, расположенных в одну строку.
Элементами массива могут быть данные любого, но только одного типа. Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется. Например, результаты многократных замеров температуры воздуха в течение года удобно рассматривать как совокупность вещественных чисел, объединенных в один сложный объект – массив измерений.
Описание массива
Для описания массива предназначены зарезервированные слова arrayиof(массив, из). За словомarrayв квадратных скобках указывается тип-диапазон (в качестве тип-диапазона может выступать любой порядковый тип), с помощью которого компилятор определяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива. За словомofуказывается тип элементов, образующих массив.
type
<имя типа> = array[тип индекса]of<тип компонент>;
var
<идентификатор,...> : <имя типа>;
<идентификатор,...> : array[тип индекса]of<тип компонент>;
Примеры
{Описания одномерных массивов}
type
t1 =array[1..10]ofinteger;
var
m : t1;
m1 : array [0..19] of real;
В данном примере описаны два одномерных массива: М – массив, состоящий из 10 целых чисел; М1 – массив, состоящий из 20 вещественных чисел.
Для объявления размерности массива можно использовать константы:
Const N = 5;
var
mas: array [0..N-1] of real;
Массив может быть описан в разделе описания констант как типизированная константа cзаданными значениями:
Const
x : array [0..4] of integer = (8,10,1,5,3);
Действия над одномерными массивами
Для работы с массивом, как единым целым, используется имя массива без указания индекса в квадратных скобках.
Массивы, участвующие в действиях, должны быть идентичны по структуре, то есть иметь одинаковые типы индексов и одинаковые типы элементов. Доступ к каждому элементу массива в программе осуществляется с помощью индекса – целого числа, служащего порядковым номером элемента в массиве. В правильно составленной программе индекс не должен выходить за пределы, определенные типом-диапазоном. Компилятор Delphi может контролировать использование индексов в программе как на этапе компиляции, так и на этапе выполнения программы.
Над массивами как над единым целым можно выполнять три действия: «равно», «неравно» и оператор присваивания:
Выражение |
Результат |
А=В |
TRUE, если значение каждого элемента массива А равно соответствующему значению элемента массива В |
А<>B |
TRUE, если хотя бы одно значение элемента массива А не равно значению соответствующего элемента массива В |
А:=В |
Все значения элементов массива В присваиваются соответствующим элементам массива А. Значения элементов массива В остаются неизменными |
Ввод значений элементов одномерного массива с клавиатуры и вывод на форму приложения можно осуществить с помощью компоненты StringGridстраницыAdditional, предназначенной для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. С помощью компонентыEdit, представляющей собой однострочный редактор текста, можно вводить и (или) отображать длинные текстовые строки.
Пример
//позволяет вывести содержимое ячейки
Edit1.Text:=StringGrid1.Cells[i,0];
где i– номер столбца;
0 – номер строки.
После выполнения этого оператора присваивания в поле Edit1.Textбудет содержаться текст из ячейки таблицы;StringGrid1.Cells[i,0] – определяет содержимое ячейки с табличными координатами (i,0).
В четвертой версии Delphiбыли введеныдинамические массивы.Размер динамического массива может изменяться во время выполнения программы.
Описание одномерных динамических массивов:
var
x:arrayofreal;
y:arrayofinteger;
Выполнять операции с динамическими массивами можно только после задания размеров этих массивов процедурой:
SetLength(x, n);
SetLength(y, n);
Параметрами этих процедур являются: x,y− имена динамических массивов,n– размер массивов.
Для определения длины, минимального и максимального номеров элементов динамического массива используются функции Length( ),Low( ) иHigh( ) соответственно. Нумерация элементов динамического массива начинается с нуля, поэтому функцияLow( ) всегда возвращает значение 0.
Пример
Подсчитать сумму sэлементов динамического одномерного массиваmas.
var n,s:integer;
mas:array of integer;
begin
SetLength(mas,10);
//ввод массива
for n:= Low(mas) to High(mas) do
mas[n]:=StrToInt(StringGrid1.Cells[i,0]);
//вычисление суммы
s:=0;
for n:= Low(mas) to High(mas) do
s:=s+mas[n];
//вывод результата
Label1.Caption:='сумма = '+IntToStr(s);
end;
Пример программирования с использованием одномерного массива
Задание.Найти минимальный элемент в одномерном массиве.
Задача поиска минимального и (или) максимального значений в массиве чисел весьма распространена. Типовым приемом поиска минимума и максимумаявляется присвоение в самом начале алгоритма переменным, хранящим значения максимума и минимума, первого элемента массива, в котором осуществляется поиск.
1. Разработка алгоритма (рис. 5.1):
а) входные данные: маs – массив целых чисел;
б) выходные данные: min– целочисленная переменная;
в) промежуточные данные: i – счетчик цикла.
Рис. 5.1. Схема алгоритма программы
2. Разработка формы (табл. 5.1, рис. 5.2).
Таблица 5.1
Используемые компоненты
Имя компонента |
Страница палитры компонент |
Настраиваемое свойство |
Значение |
1. Form1 |
– |
Caption |
Поиск минимального элемента в массиве |
2. Label1 |
Standard |
Caption |
Введите элементы целочисленного массива |
3. StringGrid1 |
Additional |
FixedCols |
0 |
FixedRows |
0 | ||
RowCount |
1 | ||
Options |
[goEditing, goTab] | ||
4. Button1 |
Standard |
Caption |
Поиск минимума |
5. Label2 |
Standard |
Caption |
|
Рис. 5.2. Изображение формы
3. Текст программы:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const N=5;
var min, i : integer;
mas:array[1..N] of integer;
begin
{ввод одномерного массива}
for i:=0 to N–1 do
mas[i+1]:=StrtoInt(StringGrid1.Cells[i,0]);
{поиск min}
min:=mas[1];
for i:=2 to N do
if min>mas[i] then
min:=mas[i];
{вывод результата}
Label2.Caption:='минимум = '+IntToStr(min);
end;
end.