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

Лабораторная работа 4. Программирование с использованием массивов

Цель лабораторной работы: изучить свойства компонента TStringGrid. Рассмотреть способы ввода массивов с помощью компонентов: TEdit, TStringGrid, TMemo. Написать программу с использованием массивов.

4.1. Работа с массивами

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

Каждый элемент массива обозначается именем, за которым в квадратных скобках следует один или несколько индексов, разделенных запятыми, например: a[1], bb[i], c12[i, j*2], q[1, 1, i*j-1]. В качестве индекса можно использовать любые порядковые типы за исключением LongInt.

Массив объявляется с помощью ключевого слова array:

type

<имя типа массива> = array [<перечисляемый тип>] of <тип элемента массива>;

var

<имя массива> : array [<перечисляемый тип>] of <тип элемента массива>;

Примеры описания массивов:

type

TMas=array[1..10] of integer; // Описание типа одномерного массива

var

A : TMas; // Массив типа TMas

B : array[1..10] of extended; // Одномерный массив действительных чисел

D : array[1..10,1..10] of char; // Двумерный массив символьного типа

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

A[j] := 5;

B[k ] := B[i]+A[j*2+k];

D[i, j] := 2*A[i];

причем значение индексов не должно выходить за грaницы диапазона (m≤j≤n) указанного в описании. Чаще всего используются индексы целого типа, хотя возможны индексы порядкового типа (например Char).

Нумерация элементов в одномерных массивах ведется слева направо, а в двумерных массивах – первый индекс (номера строк) – сверху вниз, а второй индекс (номера столбцов) – слева направо. Например:

4.2. Операции над массивами

Однотипные массивы могут участвовать в операциях отношения «рaвно», «не рaвно» и в операторе присваивания. Например, если массивы объявлены

type

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

var

A, B : Tmas;

C : array[1..10] of integer;

то, допустимы следующие операции:

выражение A = B принимаeт значения true если все элементы массива А и массива В одинаковы и false в противном случае;

выражение A <> B принимает значение true если массивы А и В отличаются хотя бы в одном элементе;

A := B элементам массива А присваиваются значения всех соответствующих элементов массива B.

Следует обратить внимание на то, что вышеперечисленные операции определены только для однотипных массивов. В данном примере массивы А и B являются однотипными, а массив C не является однотипным с массивами А и B, несмотря на то, что все эти массивы имеют одинаковую структуру. При попытке присваивания A := C компилятор выдаст сообщение о несовместимости типов.

4.3. Примеры часто встречающихся алгоритмов работы с массивами

Пример 4.1. Вычислить сумму n элементов одномерного массива А .

S:=0;

for i:=1 to n do

S:=S+A[i];

Пример 4.2. Вычислить сумму модулей всех элементов матрицы В .

S:=0;

for i:=1 to n do

for j:=1 to m do

S:=S+abs(B[i, j]);

Пример 4.3. Вычислить сумму диагональных элементов квадратной матрицы В

S:=0;

for i:=1 to n do

S:=S+B[i, i];

Пример 4.4. Вычислить значение и номер максимального элемента одномерного массива А.

max:=A[1]; // за максимум принимается первый элемент массива

nmax:=1; // номер максимального элемента массива равен 1

for i:=1 to n do

if A[i]>max then begin // если A[i] больше максимального, то ...

max:=A[i]; // за максимум принимается A[i]

nmax:=i; // номер максимального элемента равен i

end;

Пример 4.5. Переставить местами элементы одномерного массива А: первый элемент меняется с n-м, второй - с (n-1)-м, третий - с (n-2)-м и т.д.

i := 1; j := n;

repeat

r := A[i];

A[i] := A[j];

A[j] := r;

i := i+1;

j := j-1;

until i >= j;

Для обмена данными между ячейками используется вспомогательная переменная r.

Пример 4.6. Переставить местами элементы квадратной матрицы А (размером n×m) относительно главной диагонали: все элементы, стоящие ниже главой диагонали поменять с элементами, которые стоят выше главной диагонали.

В квадратной матрице А размером n×m элементы главной диагонали имеют одинакорые индексы (ai,i , i=1, n). Каждому элементу, стоящему выше главой диагонали (ai,j , 1≤ i ≤ n-1, i+1≤ j ≤ n) соответствует симметричный ему элемент, стоящий ниже главной диагонали (aj,i , 1≤ i ≤ n-1, i+1≤ j ≤ n).

for i := 1 to n-1 do

for j := i+1 to n do begin

r:=A[i, j];

A[i, j] := A[j, i];

A[j, i] := r;

end;

Пример 4.7. В матрице А размера n×m переставить местами строки с номерами k1 и k2.

for j:=1 to n do begin

r:=A[k1, j];

A[k1, j] := A[k2, j];

A[k2, j] := r;

end;

Пример 4.8. Отсортировать одномерный массив А в порядке возрастания элементов. Использовать метод пузырька.

for i := 2 to n do

for j := n downto i do

if A[j-1] > A[j] then begin

r := A[j];

A[j] := A[j-1];

A[j-1] := r;

end;

Для данного примера возможен и другой алгоритм (тот же метод пузырька):

for i := 1 to n-1 do

for j := i+1 to n do

if A[j] < A[i] then begin

r := A[i];

A[i] := A[j];

A[j] := r;

end;

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