Файл: Особенности и примеры использования массивов при разработке программ (Способы описания алгоритмов).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