No Image

Сортировка двумерного массива змейкой

1 460 просмотров
10 марта 2020

При обработке массивов часто требуется вычислить сумму элементов массива, их среднее арифметическое значение или найти значение и номер максимального и минимального элементов, а также изменить значения элементов массива.

Условимся, что в векторе a содержится n элементов.

<Вычислим сумму элементов:>

for i:= 1 to n do

<Вычислим произведение элементов:>

for i:= 1 to n do

<Подсчитаем количество четных элементов:>

for i:= 1 to n do

if a[i] mod 2 = 0 then

<Найдем номер первого из элементов массива, имеющего нулевое значение. Если такого элемента нет, то выведем соответствующее сообщение:>

until (a[i] = 0) or (i = n);

if a[i] = 0 then writeln(‘Номер нулевого элемента = ‘, i)

writeln(‘Таких элементов нет’);

<Если требуется найти номера всех нулевых элементов, то лучше применить оператор FOR:>

for i:= 1 to n do

if a[i] = 0 then write(i, ‘ ‘);

<Поиск максимального элемента и его номера. Переменная max хранит максимальное значение элемента, а k – его номер.>

for i:= 2 to n do

if a[i] > max then

Многомерные массивы (матрицы).

Организация доступа к элементам двумерного массива

Для описания многомерных массивов в Pascal существует целый ряд способов. Следующие группы операторов задают описание одного и того же двумерного массива А, представляющего собой таблицу размером 2´3 (2 строки, 3 столбца)

Первый способ:

Type

Stroka = array [1..3] of real;

Matr = array [1..2] of stroka;

Var

V: stroka;

A: matr ;

Второй способ:

Type

Matr= array [1..2] of array [1..3] of real;

Var

Третий способ:

Type

Matr = array [1..2,1..3] of real;

Var

A: matr;

Четвёртый способ:

Var

A: array [1..2,1..3] of real;

В первом способе описания переменная V объявлена как одномерный массив из трёх элементов вещественного типа. Переменная А имеет смысл двумерного массива из двух строк, в каждую из которых включено по три элемента.

Второй, третий и четвертый способы описания массива получаются из первого путем его последовательного упрощения. Так второй способ описания получен из первого путём исключения определения типа stroka в определении типа matr.

Задание значений элементам массива может выполняться при помощи операторов присваивания:

A [1, 2] := 2.3 + P1

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

Действия с двумерными массивами

Для обработки двумерных массивов применяются вложенные циклы FOR. Рассмотрим примеры обработки двумерных массивов.

Читайте также:  Центр колониальной империи называется цитадель

Пример 1.

Поиск минимального (максимального) элемента матрицы и индексов его строки и столбца.

Тема: Двумерные массивы. Заполнение двумерного массива по заданному правилу.

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

1. Актуализация знаний

Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Структура такого массива может быть представлена прямоугольной матрицей. Каждый элемент матрицы однозначно определяется указанием номера строки и столбца, номер строки – i, номер столбца – j.
Рассмотрим матрицу А размером n*m:

а11 а12 а13 а14
а21 а22 а23 а24
а31 а32 а33 а34

Матрица из 3 строк и 4 столбцов, количество строк n=3, количество столбцов m=4. Каждый элемент имеет свой номер, который состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца. Например, а23 – это элемент, стоящий во второй строке и в третьем столбце.
Двумерный массив на языке Турбо Паскаль можно описать по-разному. Чтобы описать двумерный массив, надо определить какого типа его элементы, и каким образом они пронумерованы (какого типа его индекс). Существует несколько способов описания двумерного массива.

1 способ

Type Mas = array [1..maxN] of ; <Одномерный массив>
Type TMas = array [1..maxM] of Mas;

2 способ

Type TMas = array [1..maxN] of array [1..maxM] of ;

3 способ

Type = array [1..maxN, 1..maxM] of ;

Предпочтение отдается третьему способу описания двумерного массива.

Const N=3; M=4;
Type TMas= array [1..N, 1..M] of integer;

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

1) Формирование двумерного массива при помощи ввода с клавиатуры и алгоритм построчного вывода элементов матрицы.

Const N=10;M=10;
Type Tmas= array [1..N,1..M] of integer;
Var A:Tmas; i,j:integer;
Begin
<Ввод элементов матрицы>
For i:=1 to N do
For j:=1 to M do
Read(A[i,j]);
<Вывод элементов матрицы>
For i:=1 to N do begin
For j:=1 to M do
Write(A[i,j]:4); <Печатается первая строка>
Writeln <Переход на новую строку>
end;
End.

Читайте также:  Microsoft visual studio git

2) Фрагмент программы формирования двумерного массива через генератор случайных чисел.

2. Изучение нового материала. Заполнение массива по правилу

Рассмотрим несколько фрагментов программ заполнения двумерного массива по некоторому закону. Для этого необходимо вывести правило заполнения.

1. Заполнить массив А размером n*m следующим образом, например

1 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
17 18 19 20 21 22 23 24
32 31 30 29 28 27 26 25
33 34 35 36 37 38 39 40
48 47 46 45 44 43 42 41

Массив заполняется по принципу «змейки». Правило заполнения: если номер строки – нечетное число, то A[i,j]=(i-1)*m+j, иначе A[i,j]=i*m-j+1.

program M1А;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
begin
readln(n,m);
for i:=1 to n do begin
for j:=1 to m do
begin
if i mod 2 = 1 then
A[i,j]=(i-1)*m+j
else
A[i,j]=i*m-j+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
end.

Приведем пример программы другого способа заполнения по заданному правилу:

program M1В;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
c: integer;
begin
readln(n,m);
c:=1;
for i:=1 to n do
begin
for j:=1 to m do
begin
A[i,j]:=c;
if (i mod 2 = 0) and (j<>m) then
dec(c)
else
inc(c);
write(A[i,j]:3);
end;
c:=c+m-1;
writeln;
end;
readln;
end.

2. Заполнить массив A по следующему принципу:

1 0 2 0 3 0 4
0 5 0 6 0 7 0
8 0 9 0 10 0 11
0 12 0 13 0 14 0

program M2;
var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
c: integer;
begin
readln(n,m);
c:=0;
for i:=1 to n do
begin
for j:=1 to m do
begin
if (i-1+j) mod 2 = 0 then
A[i,j]:=0
else
begin
inc(c);
A[i,j]:=c;
end;
write(A[i,j]:5);
end;
writeln;
end;
readln;
end.

3. Заполнить массив A по следующему принципу:

1 12 13 24 25 36
2 11 14 23 26 35
3 10 15 22 27 34
4 9 16 21 28 33
5 8 17 20 29 32
6 7 18 19 30 31

var A:array[1..100,1..100] of integer;
n,m,i,j: integer;
c: integer;
begin
readln(n,m);
c:=1;
for j:=1 to m do
begin
for i:=1 to n do
begin
A[i,j]:=c;
if (j mod 2 = 0) and (i<>n) then
dec(c)
else
inc(c);
end;
c:=c+n-1;
end;
for i:=1 to n do
begin
for j:=1 to m do
write(A[i,j]:5);
writeln;
end;
readln;
end.

4. Заполнить массив A по следующему принципу:

1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4

var i,j,m,c,d: integer;
A:array[1..100,1..100] of integer;
begin
c:=1;
readln(m);
for j:=1 to m do
begin
i:=c;
d:=1;
repeat
A[i,j]:=d;
inc(i);
if i>m then
i:=1;
inc(d);
until i=c;
dec(c);
if c 21.07.2009

Читайте также:  Программа для разлочки модема huawei

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

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

Как описываются двумерные массивы? Для записи двумерных массивов есть несколько способов, я рассмотрю 2 из них.

1 способ описание массива: array [1..m, 1..n] of тип переменных в массиве (integer/real/byte);

2 способ описания массива: array [1..m] of array [1..n] of тип переменных в массиве;

Сначала описываются строки (1..m), а потом столбцы (1..n).

Во втором способе описывается как бы два одномерных массива, которые вместе образуют один двумерный.

Двумерный массив может описываться в разделе Type, для последующего обращения к нему несколько раз или же в разделе описания переменных Var, хочу обратить внимание, что вместо m и n можно подставить и числа, а можно и пользоваться константами.

Пример задания двумерного массива в разделе описания переменных:

В этом случае мы задали двумерный массив a размера 100 на 100, то есть у нас получилась квадратная матрица.

Пример задания матричного массива при помощи раздела Type:

Во втором примере мы задали два одинаковых матричных массива размерами 100 на 100, при описании массива b нам не пришлось снова описывать его размеры и тип данных.

Как обращаться к ячейке-переменной двумерного массива?

Чтобы обратиться к двумерному массиву, нужно указать сначала номер строки, а потом номер столбца следующим образом:

x-любая переменная, a – название массива, i-номер строки, j – номер столбца.

Причём i и j может быть как переменными, так и целыми числами.

Пример записи данных в массив:

//присваивание ячейке с номером строки i и номером столбца j случайного значения

Мы заполнили массив случайными числами от 1 до 100.

Пример программы с использованием двумерного массива, в котором мы заполняем массив случайными числами и выводим его на экран:

Комментировать
1 460 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock
detector