Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Программирование с использованием одномерных массивов в системе Delphi




Цель данного раздела заключается в изучении массивов, приобретении навыков описания, ввода и вывода одномерных массивов, выполнении действий над массивами, поиска максимального и минимального элементов в одномерном массиве.

Массив и одномерный массив

В системе Delphi так же, как и в других языках программирования, структура данных массив используется очень часто. К необходимости применения массивовов мы приходим всякий раз, когда требуется связать и использовать целый ряд родственных величин.

Массивы позволяют программисту увязать с единственным именем переменной целую совокупность данных. Вы можете перемещать массив в памяти как единое целое, копировать его и т.д., причем все это делается со ссылкой на одно имя переменной.

Массив – это структурированный тип данных, состоящий из фиксированного числа упорядоченных по индексу элементов, имеющих один и тот же тип.

Одномерный массив – это набор элементов одного типа, расположенных в одну строку.

Элементами массива могут быть данные любого, но только одного типа. Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется. Например, результаты многократных замеров температуры воздуха в течение года удобно рассматривать как совокупность вещественных чисел, объединенных в один сложный объект – массив измерений.

Описание массива

Для описания массива предназначены зарезервированные слова array и of (массив, из). За словом array в квадратных скобках указывается тип-диапазон (в качестве тип-диапазона может выступать любой порядковый тип), с помощью которого компилятор определяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива. За словом of указывается тип элементов, образующих массив.

type

<имя типа> = array[тип индекса] of <тип компонент>;

var

<идентификатор,...>: <имя типа>;

<идентификатор,...>: array [тип индекса] of <тип компонент>;

Примеры

{Описания одномерных массивов}

type

t1 = array [1..10] of integer;

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:array of real;

y:array of integer;

Выполнять операции с динамическими массивами можно только после задания размеров этих массивов процедурой:

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  
FixedRows  
RowCount  
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.


Контрольные вопросы к главе 5

1. Может ли массив содержать один элемент?

2. Можно ли во время выполнения программы изменить размер массива?

3. Могут ли элементами некоторого массива быть числа 1, 1.41, 4.98, 30?

4. Верно ли, что тип элементов массива может быть любым?

5. Какой тип может иметь индекс массива?

6. Имеются описания:

type

d = (вчера, сегодня, завтра);

v = array [1..30] of real;

a = array [1..5] of integer;

var

mas1: d;

mas2, mas3: v;

mas4: array [1..10] of real;

mas5: a;

mas:array of integer;

Какие массивы определены? Какие значения могут принимать массивы?

7. Какие операции над массивами как единым целым допустимы в среде Delphi?

8. Дан фрагмент программы:

var

x: array [1..40] of char;

y: array [0..39] of char;

Можно ли переписать элементы массива х в массив у с помощью оператора у:=х?

9. Написать фрагмент программы ввода и вывода с помощью компонента StringGrid1 массива В, описанного следующим образом:

type T = array [1..7] of integer;

var B: T;

10. Написать фрагмент программы ввода и вывода с помощью компонента StringGrid1 массива А, описанного следующим образом:

var A: array [0..5] of real;

11. Присвоить нулевые значения N элементам массива A:

var A: array of real;

12. Может ли быть описан массив в разделе объявления констант?

13. Для чего предназначается компонент StringGrid?

14. Какие свойства компонента StringGrid нужно настроить для ввода и вывода элементов одномерного массива?






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных