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

4.1. Массивы

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

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

Если в определении массива задан один индекс, то массив называется одномерным, если два индекса – двумерным, если – индексов, то - мерным.

Форма объявления массива:

51

{Тип zk определяет одномерный целочисленный массив,}

{состоящий из 10 элементов}

type

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

{Определение перечисленного типа}

p = (p1, p2, p3, p4)

var

a: zk; {Переменной a присвоен тип zk}

{Описание массива из 10 элементов}

{логического типа}

b: array[1..10] of boolean;

{Описание символьного массива,}

{состоящего из 11 элементов}

c: array[-5..5] of char;

{Описание массива перечисленного типа }

d: array[1..12] of p;

{Описание массива вещественного типа}

{ с символьными индексами}

e: array[‘a’..’f’] of real;

{Описание двумерного массива}

{ символьного типа}

f: array[1..10,1..10] of char;

{Описание двумерного массива}

{через раннее описанный тип}

g: array[1..10] of zk;

Пример. Дан одномерный целочисленный массив размерности и целое число . Переставить элементы массива с по в начало массива, а элементы с первого по в конец массива. Решить эту задачу, когда дополнительный массив можно использовать, и когда дополнительного массива использовать нельзя.

{Программа, использующая дополнительный массив}

program per;

var a,b:array[1..20] of integer;

52

n,m,i,k,l:integer;

begin

n:= 10;

m:= 3;

for i:=1 to n do

begin

writeln('Введите элементы массива');

readln(b[i]);

end;

for i:=1 to n do

write(b[i],' ');

writeln;

k: = m+1; l: = 1;

for i:=1 to n do

begin

{Перезапись элементов массива , начиная с - го элемента}

{в начало массива }

if i<=n-m then

begin

a[i]:=b[k];

k:=k+1;

end

else

{Перезапись элементов массива от 1-го до - го элемента}

begin

a[i]: = b[l]; l: = l+1;

end;

end;

for i:=1 to n do

write (a[i],' ');

writeln;

end.

53

Алгоритм решения данной задачи без использования дополнительного массива предусматривает циклический сдвиг элементов массива раз и состоит из двух шагов:

- запоминаем первый элемент массива;

- сдвигаем все элементы массива на один элемент

и помещаем в конец массива значение первого элемента;

этот шаг повторяем раз.

{Программа, не использующая дополнительного массива}

var

a,b:array[1..20] of integer;

n,m,i,k,l,c:integer;

begin

n:=10;

m:=3;

for i:=1 to n do

a[i]:=i;

for i:=1 to n do

writeln(a[i]);

{Цикл, обеспечивающий - кратный сдвиг }

for k:=1 to m do

begin

{Запоминаем первый элемент массива}

c:=a[1];

for i:=1 to n-1 do

begin

{Циклически сдвигаем на один элемент}

a[i]:=a[i+1];

end;

{Помещаем в конец массива значение первого элемента}

a[n]:=c;

end;

54

for i:=1 to n do

writeln(a[i],' ');

writeln;

end.

Контрольные вопросы и упражнения

1. Дана последовательность из 100 различных целых чисел. Найти сумму чисел этой последовательности, расположенных между максимальным и минимальным числами.

2. Дано два целочисленных массива, упорядоченных по возрастанию. Поместить элементы этих двух массивов в третий массив, сохранив упорядоченность по возрастанию.

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

4. Дана последовательность из вещественных чисел. Если в результате замены отрицательных элементов последовательности их квадратами элементы будут образовывать неубывающую последовательность, то получить сумму элементов исходной последовательности, в противном случае получить их произведение.

5. Дано целое десятичное число N(1<N<65535). Записываем это число в двоичном формате и циклически сдвигаем вправо, т.е. берем последнюю цифру числа и переносим ее в начало. Написать программу, которая для заданного числа N определяет максимальное значение числа, которое может получиться в результате раннее описанных сдвигов.

55

6. Напечатать все цифры десятичной записи числа ,

представив ”длинные” натуральные числа в виде массивов из цифр, и реализовать нужные операции над ними.

7. Напечатать все цифры десятичной записи числа , представив ”длинные” натуральные числа в виде массивов из цифр, и реализовать нужные операции над ними.

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

9. В одномерном массиве, состоящем из элементов, упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах.

10. Одномерный массив заполнен нулями и единицами. Найти самую длинную подпоследовательность, состоящую только из нулей.

11. Двумерный массив размерности , заполнен простыми числами. Найти номера столбцов, содержащих одинаковые элементы. Порядок следования элементов в столбце не учитывать.

12. Дан двумерный массив размерности . Осуществить циклический сдвиг всех строк исходного массива вверх раз. Дополнительного двумерного массива не использовать.

13. Дан двумерный массив. Не используя дополнительного массива переставить первый столбец с последним, второй – с предпоследним и так далее.

14. Дан двумерный массив, заполненный целыми числами. Определить номера строк, элементы которых являются членами арифметической прогрессии.

15. Дана матрица, заполненная целыми числами,

размерностью .

56

Проверить, равны ли элементы главной и побочной диагоналей.

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

17. Дана квадратная матрица, заполненная целыми числами. Найти сумму элементов, находящихся в левом и правом треугольниках, образованных пересечением главной и побочной диагоналей матрицы.

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

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

31 -41 59 26 -53 58 97 -93 -23 84

таким подвектором будет: 59 26 -53 58 97, сумма элементов которого равна 167.

20. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце или, наоборот. Для заданной матрицы напечатать индексы всех ее седловых точек.

21. Дана вещественная матрица. Перестановкой ее строк и столбцов добиться, чтобы наибольший элемент оказался в верхнем левом углу.

22. Дана квадратная матрица. Получить вектор, элементами которого являются минимальные элементы всех диагоналей, параллельных главной (включая главную).

57