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

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.

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