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

Тема 5. Использование массивов в программах, компонента Memo для ввода данных в массив в данной теме рассматриваются следующие вопросы:

массивы, компонент Memo для ввода и вывода массивов

Теория

Массивы

Массивом называется упорядоченная индексированная совокупность однотипных элементов, имеющих общее имя. Элементами массива могут быть данные различных типов, включая структурированные. Каждый элемент массива однозначно определяется именем массива и индексом (номером этого элемента в массиве) или индексами, если массив многомерный. Для обращения к отдельному элементу массива указываются имя этого массива и номер (номера) элемента, заключенный в квадратные скобки, например,

arrl[3, 35] , arrl[3] [35] или аrr3[7].

Количество индексных позиций определяет мерность массива (одномерный, двумерный и т. д.), при этом мерность массива не ограничивается. В математике аналогом одномерного массива является вектор, а двумерного массива — матрица. Индексы элементов массива должны принадлежать порядковому типу. Разные индексы одного и того же массива могут иметь различные типы. Наиболее часто типом индекса является целочисленный тип.

Различают массивы статические и динамические. Статический массив представляет собой массив, границы индексов и соответственно размеры которого задаются при объявлении — известны до компиляции программы.

Формат описания типа статического массива:

Array [Тип индексов] of <Тип элементов>;

Пример. Объявление статических массивов.

Type tm = Array[l .. 10, 1 .. 100] of real;

Var arrl, arr2: tm;

arr3: Array[20 .. 100] of char;

arr4: Array['a' .. 'z'] of integer;

Переменные arrl и arr2 являются двумерными массивами по 1000 элементов — 10 строк и 100 столбцов. Каждый элемент этих массивов представляет собой число типа real. Для объявления массивов arrl и аrr2 введен специальный тип tm. Переменные аrrз и аrr4 являются одномерными массивами, соответственно на 81 символ и 26 целых чисел.

Доступ к каждому элементу массива осуществляется по индексу. Например, arr1[2,3] — элемент массива arr1, находящийся во второй строке и третьем столбце; arr3[34] — элемент массива arr3 с индексом 34, но пятнадцатый по порядку; arr4[i] — i–ый элемент массива arr4.

Компонент Memo для ввода и вывода массивов

При использовании компонента Memo для ввода массива значение каждого элемента массива следует вводить в отдельной строке и после ввода каждого элемента массива нажимать клавишу ENTER.

Получить доступ к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав в квадратных скобках номер нужной строки (строки нумеруются с 0).

Следующий цикл демонстрирует ввод символьного массива из компонента Memo:

For i:=1 to Size do

a[i]:=Memo1.Lines[i];

Вывод массива в компонент Memo можно осуществить таким образом:

For i:=0 to N-1

Memo2.Lines.Add(FloatToStr(massiv[i+1]);

Практика

Задача

Составить программу для сортировки массива вещественных чисел по желанию пользователя: по возрастанию или по убыванию. Результаты сортировки вывести в окно сообщения.

Компоненты

Имя

компонента

Свойства

компонент

Значение

Назначение

Form1

Caption

Сортировка массива методом прямого выбора

Заголовок формы

Label1

Caption

Программа предназначена для сортировки массива вещественных чисел по возрастанию либо по убыванию

Справочная информация для пользователя программы

Label2

Caption

Количество элементов в массиве

Подсказка пользователю

Edit1

Text

…..

Поле для ввода количества элементов в массиве

Memo1

Lines

…..

Компонент для ввода элементов массива в столбик (в одной строке — один элемент)

Button1

Caption

Сортировка по возрастанию

Кнопка для выполнения сортировки по возрастанию

Button2

Caption

Сортировка по убыванию

Кнопка для выполнения сортировки поубыванию

Button3

Caption

Завершение работы

Кнопка для завершения работы программы

Переменные и массивы

Обозначение в программе

Содержание

Тип

N

Количество элементов в массиве действительных чисел

целый

Massiv

Массив действительных чисел

вещественный, расширенный

I

Текущий индекс элемента массива

целый

J

индекс элемента массива, с которого начинается поиск минимального либо максимального элемента

целый

min

номер минимального элемента в массиве или части массива

целый

max

номер максимального элемента в массиве или части массива

целый

buf

буфер для обмена местами элементов массива

вещественный, расширенный

st

строковое сообщение, содержащее результат

строковый

Проект формы

Текст модуля

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Memo1: TMemo;

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure Button3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Massiv: array [1..100] of Extended;// массив действительных чисел

N : Integer;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);

begin

Form1.Close

end;

procedure TForm1.Button1Click(Sender: TObject);

Var I:Integer;// индекс элемента массива

min: Integer; // номер минимального элемента в массиве

//или части массива

j : Integer; //индекс элемента массива

//с которого начинается

// поиск минимального элемента

buf: Extended; // буфер для обмена местами

// элементов массива

St:String; // строковое сообщение, содержащее результат

begin

//ввод количества элементов в массиве

N:=StrToInt(Edit1.Text);

//ввод массива действительных чисел

For I:=1 To N do

Massiv[I]:=StrToFloat(Memo1.Lines[I-1]);

// поиск минимального элемента массива методом пузырька

{алгоритм метода прямого выбора можно описать следующими словами. Сначала в качестве минимального элемента берется первый элемент и с ним последовательно сравниваются все следующие элементы массива, если попадается элемент меньше принятого за минимальный, то они меняются местами. В результате на первом месте оказывается самый маленький элемент массива. Затем берется второй или следующий элемент массива и просматривается с перестановкой оставшаяся часть массива. Эта последовательность шагов повторяется пока номер минимального элемента не достигнет N-1}

For I:=1 to N-1 do

begin

min:=I;

For j:=I+1 to N do

if Massiv[j] < Massiv[min]

then min:=j;

buf:=Massiv[I];

Massiv[I]:=Massiv[min];

Massiv[min]:=buf;

end;

//вывод результатов сортировки

st:='Отсортированный по возрастанию массив'+#13;

For I:=1 to N do

st:=st+IntToStr(i)+ ' '+FloatToStrF(Massiv[I],Fffixed,10,2)+#13;

ShowMessage(st);

end;

procedure TForm1.Button2Click(Sender: TObject);

Var I:Integer;// индекс элемента массива

max: Integer; // максимальный элемент в массиве

j : Integer; //индекс элемента массива, с которого

// начинается поиск максимального элемента

buf: Extended; // буфер для обмена местами элементов

// массива

St:String;// строковое сообщение, содержащее результат

begin

//ввод количества элементов в массиве

N:=StrToInt(Edit1.Text);

//ввод массива действительных чисел

For I:=1 To N do

Massiv[I]:=StrToFloat(Memo1.Lines[I-1]);

// поиск максимального элемента массива методом прямого выбора

// алгоритм аналогичен поиску минимального элемента.

// отличие состоит в знаке сравнения

For I:=1 to N-1 do

begin

max:=I;

For j:=I+1 to N do

if Massiv[j] > Massiv[max] then max:=j;

buf:=Massiv[I];

Massiv[I]:=Massiv[max];

Massiv[max]:=buf;

end;

//вывод результатов сортировки

st:='Отсортированный по убыванию массив'+#13;

For I:=1 to N do

st:=st+IntToStr(i)+ ' '+FloatToStrF(Massiv[I],Fffixed,10,2)+#13;

ShowMessage(st);

end;

end.

Задачи для самостоятельного решения

№ 5.1 Дан массив действительных чисел. Найти сумму элементов массива.

№ 5.2 Дан массив действительных чисел. Найти произведение элементов массива.

№ 5.3 Дан массив действительных чисел. Найти сумму квадратов элементов массива.

№ 5.4 Дан массив действительных чисел. Найти модуль суммы и квадрат произведения элементов массива.

№ 5.5 Дан массив действительных чисел. Найти наибольший элемент массива.

№ 5.6 Дан массив действительных чисел. Найти наименьший элемент массива.

№ 5.7 Дан массив действительных чисел. Найти наибольший элемент массива.

№5.8 Дан массив действительных чисел. Найти наименьший из элементов массива с четными номерами.

№5.9 Написать программу для определения среднего роста студентов группы.

№5.10 Написать программу для вычисления среднего гармонического

Mn = n / (1/a1+ 1/a2+...+ 1/an), где ai0.