Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delfi__Osnovy_programmirovania.doc
Скачиваний:
279
Добавлен:
12.04.2015
Размер:
8.98 Mб
Скачать

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]