Файл: Особенности и примеры использования массивов при разработке программ (Способы описания алгоритмов).pdf
Добавлен: 30.03.2023
Просмотров: 259
Скачиваний: 2
Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к созданию систем "быстрой разработки", таких как Borland Delphi и Microsoft Visual Basic. Основа систем быстрой разработки (RAD-систем, Rapid Application Development) в технологии визуального проектирования и событийного программирования, суть которой в том, что среда разработки занимается большей частью рутинной работы, позволяя программисту работать над конструированием диалоговых окон и функциями обработки событий. Производительность программиста с использованием RAD-систем повышается в разы. [15]
Delphi представляет среду быстрой разработки с использованием языка программирования Delphi — строго типизированного объектно-ориентированного языка, основу которого составляет хорошо знакомый программистам Object Pascal. Рассмотрим такие конструкции языка Delphi, как операторы присваивания, ввода-вывода, безусловного и условного перехода, выбора, цикла. [8, c. 18-24]
Язык Delphi — строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal. Слово Delphi – это название города в древней Греции, в котором пророчествовали оракулы. Такое название выбрано разработчиками Delphi для того, чтобы подчеркнуть способность программ, создаваемых в Delphi, взаимодействовать с базами данных Oracle. Имя приобрело популярность, и коммерческий продукт под этим же названием был выпущен на рынок. [8, c. 18-24]
Версия Delphi 1 была выпущена в феврале 1995 г., Delphi 2 – в марте 1996г., а Delphi 3 – в мае 1997г. затем было решено интегрировать эту платформу программирования с CORBA (Common Object Request Broker Architecture – технология построения объектных приложений, предложенная компанией IBM), быстро развивающейся технологией создания распределенных приложений. Версия Delphi 4 со встроенными средствами CORBA появились на рынке в июне 1998г. Версия Delphi 5 была выпущена в августе 1999г., версия Delphi 6 выпущена в мае 2001г. и обновленная версия Delphi 7 выпущена в 2002 году. Система Delphi – ключевой программный продукт компании Borland. [11, c. 21-25]
Среда Delphi - это сложный механизм, обеспечивающий высокоэффективную работу программиста. Среда DELPHI визуально реализуется в виде нескольких одновременно раскрытых на экране монитора окон. Количество, расположение, размер и вид окон может меняться программистом в зависимости от его текущих нужд, что значительно повышает производительность работы.
Главное окно всегда присутствует на экране и предназначено для управления процессом создания программы. Основное меню содержит все необходимые средства для управления проектом. Пиктограммы облегчают доступ к наиболее часто применяемым командам основного меню. [15]
2.3. Использование массивов в Дельфи
В Турбо Паскале и Дельфи могут использоваться объекты, содержащие множество однотипных элементов. Это массивы — формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое. К необходимости применения массивов мы приходим всякий раз, когда требуется связать и использовать целый ряд родственных величин. Например, результаты многократных замеров температуры воздуха в течение года удобно рассматривать как совокупность вещественных чисел, объединенных в один сложный объект — массив измерений.
Массивом называют упорядоченные данные одного типа, состоящие из переменных (элементов массива). Каждый элемент массива имеет свой индекс и значение. Значение может быть присвоено отдельно каждому элементу массива, или сразу всем элементам массива (копированием одного массива в другой в случае массивов одного типа). Массив может быть многомерный (без ограничений), но должен занимать не больше 65520 байт. [8, c. 124-128]
Примеры описания:
VAR
P1: array[1..400] of integer;
D1: array[200..300] of real;
c1: array['A'..'Z'] of char;
c2: array[0..255] of char;
{ P1, D1 -одномерные массивы целых и вещественных чисел }
{ с1, c2 -одномерные массивы символов }
Примеры присвоения значения: [9, с. 40-42]
P1[1]:=5; P1[2]:=8; P1[3]:= P1[1]; P1[100]:=32;
D1[201]:=0.2; D1[202]:=2.31; c1['B']:='C'; c2[1]:='!'
Тип-диапазон и перечисляемый тип задают программисты. Примеры описания:
TYPE
Dat_M= 1..31; Rus_b= 'А..Я'; Lat_b= 'A..Z';{тип диапазон}
Oсenka= (2,3,4,5); Ball= (1,2,3,4,5,6,7,8,9,10); {перечисляемый тип}
VAR
d1,d2: Dat_M; cr1:Rus_b; cr2:Lat_b; o1,o2:Ocenka; b:Ball;
Примеры присвоения значения:
d1:= 10; cr1:= 'Л'; cr2:= 'F'; o1:=5; b:= 8;
Как видим, при описании массива используются зарезервированные слова array и OF (массив, из). За словом array в квадратных скобках указывается тип-диапазон, с помощью которого компилятор определяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива, так что массив А1 состоит из 100 элементов, массив М1 — из 200, а массив сh2 — из 256 элементов. За словом OF указывается тип элементов, образующих массив. [11, c. 40-43]
Доступ к каждому элементу массива в программе осуществляется с помощью индекса — целого числа, служащего своеобразным именем элемента в массиве (если левая граница типа-диапазона равна 1, индекс элемента совпадает с его порядковым номером). При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например: [8, с. 42-44]
var
a: array [1..10] of Integer;
b: array [0..40] of Char;
с: array [-2. .2] of Boolean;
k: Integer;
begin
b[17] := 'F-;
c[-2] := a[l] > 12];
for k .= 1 to 10 do
a[k] := 0,
end.
В правильно составленной программе индекс не должен выходить за пределы, определенные типом-диапазоном. Например, допустимыми являются элементы а[1], b[38], с[0], а ошибочными будут— а[0] или с[38].
При работе с массивами часто используется оператор цикла FOR.
Структура счетного оператора цикла FOR следующая:
FOR <парам_цикла> := <нач_значение> ТО <кон_значение> DO <оператор>
Здесь FOR/ TO, DO - зарезервированные слова (для/до, делать);
<парам_цикла> - параметр цикла в виде переменной типа INTEGER (может быть любой порядковый тип);
<нач_значение> - начальное значение - выражение такого же типа;
<кон_значение> - конечное значение - выражение такого же типа;
< оператор > - любой оператор.
При выполнении оператора FOR сначала вычисляется выражение <нач_значение> и присваивается <парам_цикла> : = <нач_значение>. После этого циклическое повторение:
- проверки условия <парам_цикла <= <кон_значение>; при не выполнении условия завершается работа оператора FOR;
- выполнения оператора <оператор>;
- наращивания переменной <парам_цикла> на единицу. [10, с. 82-84]
Для иллюстрации приемов работы с массивами составим программу, которая создает массив случайных целых чисел, подсчитывает их среднее арифметическое, а также выводит на экран.
Procedure Proc(Sender: TObject);
{Программа создает массив из N случайных целых чисел, равномерно распределенных в диапазоне от О до MAX_VALUE-1, подсчитывает среднее арифметическое этих чисел. }
const
N= 1000; {Количество элементов массива}
MAX_VALUE = 100+1; {Диапазон значений случайных чисел)
var
m : array [1..N] of Integer; {Массив чисел}
i : Integer; {Индекс массива)
s : Real; {Сумма чисел}
begin
{Наполняем массив случайными числами:}
for i := 1 to N do
m[i] := random(MAX.VALUE) ;
{Задаем начальные значения переменных: t
s := 0;
{цикл вычисления суммы всех случайных чисел }
for i := 1 to N do
s : = s+m [ i ] ;
{Вычисляем среднее значение и печатаем результат:)
WriteLn(' Среднее = ‘,s/N)
end. [7, с. 93]
Для создания массива используется встроенная функция RANDOM (MAX), которая возвращает случайное целое число, равномерно распределенное в диапазоне от 0 до max-1 (max — параметр обращения).
Для работы с массивом как с единым целым надо использовать имя массива (без указания индекса в квадратных скобках). Для доступа к элементу массива необходимо указать имя массива и в квадратных скобках порядковый номер элемента массива, например x[1], y[5], c[25], А[8]. В языке Delphi определена операция присваивания для массивов, идентичных по структуре (с одинаковыми типами индексов и компонентов). [11, c. 40-43]
Например, если массивы C и D описаны как
var C,D: array [0..30] of real;
то можно записать оператор
C:=D;
Такая операция сразу всем элементам массива C присвоит значения соответствующих им по номерам элементов массива D. Выполнение любой другой операции над массивом надо организовывать поэлементно, для чего необходимо организовать цикл, в котором последовательно обрабатывать элементы массива; сначала обрабатываем первый элемент массива, затем второй, третий,..., n-й. Для обработки элементов массива удобно использовать цикл for..do. [11, c. 40-43]
//Ввод элементов массива X с помощью цикла while.
var x: array [1..10] of real ;
i ,n: integer ;
begin
writeln ( ’введите␣размер␣массива’ );
readln(N);
i :=1;
while (i<=N) do
begin
write( ’x( ’ ,i , ’)= ’ );
readln(x[ i ]);
i:=i+1;
end;
end.
//Ввод элементов массива X с помощью цикла for.
var x: array [1..10] of real ;
i ,n: integer ;
begin
readln(N);
for i:=1 to N do
begin
write( ’x( ’ ,i , ’)= ’ );
readln(x[ i ])}
end; end.
Цикл for..do удобнее использовать для обработки всего массива. Вывод массива организуется аналогично вводу, только вместо блока ввода элемента массива будет блок вывода. [2, с. 189-191]
Массивы, рассмотренные выше, имеют элементы, упорядоченные по одному индексу и называются одномерными массивами или векторами. Массив может быть двумерным, трехмерным и т.д. Двумерные массивы имеют элементы, упорядоченные по двум индексам и часто называются матрицами. В Дельфи при описании многомерного массива диапазоны изменения индексов перечисляются через запятые, например: [2, c. 189-191]
Var A: array[1..30, 1..7] of byte;
Рассмотрим пример работы с двумерными массивами. В двумерном массиве (матрице) строки можно считать первым измерением, а столбцы вторым. Для доступа к данным, хранящимся в этом массиве, необходимо указать имя массива и два индекса: первый должен соответствовать номеру строки, а второй номеру столбца, в которых хранится необходимый элемент.
Для описания массива возможно использование предварительно определённых констант:
const m=10; n=12; var b: array [1.. m] of real ; c: array [0..n] of byte;
Константы должны быть определены до использования, так как массив не может быть переменной длины. Двумерный массив (матрицу) можно описать, применив в качестве базового типа (типа компонентов) одномерный:
type
massiv=array [1..200] of real ;
matrica=array [1..300] of massiv ;
var ab: matrica ;
При всех определениях мы получали матрицу вещественных чисел, состоящую из 300 строк и 200 столбцов. [2, с. 187-189]
3. Работа с массивами
3.1. Программа с одномерным массивом
Напишем программу, вводящую 5 элементов массива целых чисел и определяющую минимальный элемент массива и его номер. Блок – схема алгоритма представлена на рис. 1. [7, с. 37-83]
начало
Ввод а[5]
m=1; i=2;
да
m=i;
A[i]<a[m]
нет
i=i+1;
да
i<=5
нет
Вывод а[m] m
конец
Рисунок 1 – Блок – схема алгоритма программы massiv.pas
Ниже приведен листинг программы для работы с массивом данных massiv.pas. Выполняемый модель Рmassiv.ехе приложен к работе.
// поиск мин. числа из введенного массива 5 чисел, вывод его и его №
unit Massiv;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Memo1: TMemo;
Button1: TButton;
procedure VvodM(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.VvodM(Sender: TObject); [3]
var
a: array [1..5] of integer;
i,m: integer;
sa: string;
begin
//Memo1.Clear;
// ввод массива чисел
for i:=1 to 5 do begin
sa:=Memo1.Lines[i-1];
a[i]:=StrToInt(sa);
end;
// поиск min
m:=1;
for i:=2 to 5 do
if a[i]<a[m] then m:=i;
// вывод мин. элемента и его номера
sa:='min='+IntToStr(a[m])+' № min='+IntToStr(m);
ShowMessage(sa);
Application.Terminate;
end;
end.
На рисунке 2 приведен результат программы Рmassiv.ехе. [4]
Рисунок 2 – Результат работы программы Рmassiv.ехе
Программа вводит 5 элементов одномерного массива и выводит минимальный элемент массива и его номер. В 1-ом случае минимальный элемент массива – 5, его номер – 5; во 2-ом случае минимальный элемент массива – 4, его номер – 2.
3.2. Программа с двумерным массивом
Теперь составим программу с двумерным массивом, которая вводит все элементы двумерного массива (3х3), определяет и выводит максимальный элемент матрицы. Блок-схема алгоритма представлена на рис. 3.
начало
нет
I=1,n
да
Ввод mij а[m] m
j=1,n
да
нет
Max=m11;
нет
I=1,n