Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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




 

Для двумерных массивов:

 

var

a :array[1..n ,1..m] of <тип>;

 

Где a - имя массива;

n, m - количество строк и столбцов в массиве;

<тип> - тип элементов массива.

Количество элементов в массиве - n m.

Например:

var

mas: array [1…10,1..10] of real;

begin

 

Описан массив mas - содержащий 100 элементов вещественного типа (10 строк и 10 столбцов).

Размер массива должен быть задан в явном виде (как в предыдущем фрагменте), или через const.

 

Например:

const

n = 5, m=5;

var

mas: array[1…n,1..m] of real;

begin

Описан массив mas - содержащий 25 элементов целого типа (5 строк и 5 столбцов).

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

a[i, j] - элемент стоящий на пересечении i-ой строки и j-го столбца.

a[i, i] - элементы главной диагонали.

a[i, 2] - элементы второго столбца.

Индекс может быть - переменной, константой, арифметическим выражением целого типа.

Если количество строк равно количеству столбцов, матрица называется квадратной.

Обработка двумерных массивов производится при изменении индексов элементов.

Все элементы главной диагонали удовлетворяют условию:

i=j

(номер строки равен номеру столбца).

 

Все элементы побочной диагонали удовлетворяют условию:

i+j=n+1

(n - количество строк и столбцов).

Элементы, расположенные над главной диагональю удовлетворяют условию:

i<j

(номер строки строго меньше номера столбца).

Элементы, расположенные под главной диагональю удовлетворяют условию:

i>j

(номер строки строго больше номера столбца).

 

Ввод элементов двумерного массива

for i:=1 to n do

for j:=1 to m do

readln(a[i]);

 

Данный фрагмент позволит ввести элементы массива по строкам.

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

 

Вывод элементов двумерного массива

for i:=1 to n do

begin

for j:=1 to n do

write(a[I,j],‘ ‘);

writeln;

end;

 

Данный фрагмент позволит вывести элементы массива в виде матрицы.

 

Обработка двумерных массивов

Рассмотрим типовые задачи обработки двумерных массивов с использованием вложенных циклов.

 

Задача.

 

Составить программу подсчета суммы и произведения элементов двумерного массива вещественных чисел.

Таблица идентификаторов

Наименование переменной Обозначения в программе
1 Имя массива a
2 Количество строк n
3 Количество столбцов m
4 Индексы массива I,j
5 Сумма элементов s
6 Произведение элементов p

 

program matr;

uses

crt;

var

a:array [1...10, 1...10] of real;

i, j, n, m: integer;

s,p :real;

begin

clrscr;

writeln(‘ Введите n<=10 , m<=10 ’);

readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to m do

readln(a[i, j]);

s:=0; p:=1;

{ поиск суммы и произведения }

for i:=1 to n do

for j:=1 to m do

begin

s:=s + a[i,j];

p:=p * a[i,j];

end;

writeln(‘ Сумма элементов s=’,s:8:3);

writeln(‘ Произведение элементов p=’,p:8:3);

readln;

end.

 

Задача.

 

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

 

Таблица идентификаторов

 

Наименование переменной Обозначения в программе
1 Имя массива a
2 Количество строк и столбцов n
3 Индексы массива I,j
4 Сумма элементов над главной диагональю s

 

program matr_1;

uses

crt;

var

a:array [1...10, 1...10] of real;

i, j, n, m: integer;

s,p :real;

begin

clrscr;

writeln(‘ Введите n<=10 , m<=10 ’);

readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to m do

readln(a[i,j]);

for i:=1 to 3 do

for j:=i +1 to 3 do

s:=s+a[i,j];

writeln('Сумма элементов s=', s);

readln;

end.

 

Для ввода элементов массива используются вложенные циклы с указанием номера вводимого элемента.

Для поиска суммы элементов над главной диагональю во внутреннем цикле задан закон изменения параметра внутреннего цикла:

j:=i+1

 

Задача.

 

Задана целочисленная квадратная матрица. Определить является ли она симметричной относительно главной диагонали.

 

Таблица идентификаторов

 

Наименование переменной Обозначения в программе
1 Имя массива a
2 Количество строк и столбцов n
3 Индексы массива I,j
4 Флажок f

 

program matr_2;

uses

crt;

var

a: array [1...10, 1...10] of integer;

i, j, n, f : integer;

begin

clrscr;

writeln(‘ Введите n<=10 ’);

readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to n do

readln(a[i,j]);

f:=0

for i:=1 to n do

for j:=i to n do

if a[i,j]<>a[j,i] then f:=1;

if f=0 then writeln(‘ матрица симметрична’)

else writeln (‘матрица не симметрична’);

readln;

end.

 

При решении этой задачи сравниваются элементы расположенные над главной диагональю ( a[ i,j ] ) с элементами, расположенными под главной диагональю ( a[ j,i ] ) .

 

Задача.

 

Задана матрица вещественных чисел. Образовать одномерный массив, где каждый j – й элемент равен произведению элементов j-ого столбца двумерного массива.

Таблица идентификаторов

 

Наименование переменной Обозначения в программе
1 Имя двумерного массива a
2 Имя одномерного массива b
3 Количество строк n
4 Количество столбцов m
5 Индексы массива I,j

program matr_3;

uses crt;

var

a: array [1...10, 1...10] of integer;

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

i, j, n, f : integer;

begin

clrscr;

writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to m do

readln (a[i, j]);

writeln(‘ Исходная матрица ’);

for i:=1 to n do

begin

for j:= 1 to n do

write( a[I,j] , ‘ ‘);

writeln;

end;

writeln(‘ Образованный одномерный массив ’);

for j:=1 to m do

begin

b[ j ]:=1;

{ накапливается произведение элементов j столбца }

for i:=1 to n do

b[ j ]:= b[ j ] * a[ i, j ];

write( b[ j] , ‘ ‘);

end;

readln;

end.

 

Задача.

Задана целочисленная матрица a(m*n). Упорядочить элементы каждой строки по возрастанию.

Таблица идентификаторов

Наименование переменной Обозначения в программе
1 Имя двумерного массива a
2 Количество строк, столбцов n, m
3 Индексы массива I,j
4 Флажок f
5 Дополнительная переменная для обмена соседних элементов p

 

program mart_4;

uses crt;

var

a: array[1...10, 1...10] of integer;

i,j,n,f : integer;

begin clrscr;

writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to m do

readln(a[i, j]);

writeln(‘ Исходная матрица ’);

for i:=1 to n do

begin

for j:=1 to n do

write(a[I,j],‘ ‘);

writeln;

end;

{ переход от строки к строке }

for i:=1 to n do

{ сортировка i-ой строки }

repeat

f:=0;

for j:=1to m-1 do

if a[i,j]>a[i,j+1] then

begin p:=a[i,j]; a[i,j]=a[i,j+1]; a[i,j+1]:=p; f:=1; end;

until f=0;

writeln(‘ Преобразованная матрица ’);

for i:=1 to n do

begin

for j:= 1 to n do

write( a[I,j] , ‘ ‘);

writeln;

end;

readln;

end.

 

f =0 - признак того, что все элементы данной строки упорядочены.

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 377.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...