Вопрос 21.
7.Массивы данных. Многомерные массивы – матрицы.
К структурированным типам данных относятся: массивы, множества, записи и файлы. Элементами структурированных типов могут быть простые типы, а также сложные типы.
В Турбо Паскале имеются еше два структурированных типа; строка типа string и строка типа PChar, являющиеся разновидностями, массива.
Массивы
В математике, экономике, информатике часто используются упорядоченные наборы данных, например, последовательности чисел, таблицы, списки фамилий и т. д.
Массив представляет собой фиксированное количество упорядоченных компонент, снабженных индексами. Он может быть одномерным и многомерным (одномерный - вектор, двумерный -матрица).
Массив в программе должен быть описан: имя массива, тип индексов, тип элементов.
многомерные массивы
В Паскале можно определять массивы различной размерности.
В зависимости от того, как мы будем трактовать реальный объект - матрицу, мы будем использовать различные формы описания двумерного массива.
I. Матрица рассматривается как двумерная таблица. Пусть t1 -тип индекса 1, t2 - тип индекса 2, t3 - тип компонента. Формат записи двумерного массива (матрицы).
a) type
<имя типа> = array [tl, t2] of t3;
var
<имя массива> : <имя типа>;
b) var
<имя массива> : array [t1, t2] оf t3;
П. Матрица рассматривается как вектор, элементы которой -векторы. Для удобства введем обозначения: М1 и М - имена типов. А - имя двумерного массива, В - имя одномерного массива Формат записи двумерного массива.
1) type
М = array [t1] of array [t2] of t3;
var
A: M;
или
var
A : array [t1] of array [t2] of t3;
2) type
M1 = array [t2] of t3;
M = array [t1] of M1;
var
A : M;
В : Ml;
Последнее описание дает большое удобство в работе. Мы можем обрабатывать матрицу, вызывая ее строки, или второй вариант
type
Ml = array [t2] of t3;
var
A : array [tl] of Ml;
В : Ml
Каждый элемент двумерного массива обозначается именем массива, а в квадратных скобках указывается список индексов через запятую. Например, M1[1, 2], M1[2, 4], M1[3, 3], M2[red, 1], M2[green, 2].
При задании двумерных типизированных констант типа массив компоненты каждой строки заключаются в дополнительные круглые скобки, строки отделяются запятыми, например:
const
matr : array [1..3, 1..4] of byte = ((1,0,1,4), (2,0,3,23), (12,213,200,14));
Пример. Опишем матрицу, состоящую из трех строк и четырех столбцов. Элементами матрицы являются целые числа.
1 способ:
type
mas = array [1..3, 1..4] of integer;
var M1 : mas;
2 способ:
1) type
mas = array [1..3] of array [1..4] of integer;
var M1 : mas;
2) type
mas = array [1..4] of integer;
matr = array [1..3] of mas;
var M1 : matr;
Пример. Описать матрицу, строки которой имеют названия: red, black, green, white, а столбцы – номера 1, 2, 3. Элементами матрицы являются целые числа.
Type
color = (red, black, green, white);
massiv = array [color, 1..3] of integer;
var
M2 : massiv;
Каждый элемент двумерного массива обозначается именем массива, а в квадратных скобках указывается список индексов через запятую. Например, M1[1, 2], M1[2, 4], M1[3, 3], M2[red, 1], M2[green, 2].
При задании двумерных типизированных констант типа массив компоненты каждой строки заключаются в дополнительные круглые скобки, строки отделяются запятыми, например:
const
matr : array [1..3, 1..4] of byte = ((1,0,1,4), (2,0,3,23), (12,213,200,14));
Пример 1. Сформировать матрицу X(5 х 5), вычисляя ее элементы по формуле X(i, j) = 100i + j.
Program MATRICA;
type mas = array [1..5, 1..5] of integer;
var X : mas; i, j : integer;
begin
for i :=1 to 5 do
begin
for j :=1 to 5 do
begin X[i, j]:= 100*i + j;
Write(X[i, j]:6)
end;
Writeln
end
end.
Пример 2. Дана матрица m´n целых чисел. В каждой строке обязательно есть отрицательные и неотрицательные числа. Получить новую матрицу, состоящую из трех столбцов: 1-й столбец состоит из первых отрицательных чисел каждой строки; 2-й столбец – из первых неотрицательных чисел каждой строки; 3-й столбец – из суммы элементов первых двух столбцов.
Program MATRICA;
uses crt;
const m=4; n=3;
type mas=array[1..m,1..n] of integer;
var i,j:integer; A,B:mas;
begin clrscr;
Writeln(‘Vvedite elem matr’);
for i:=1 to m do
begin Write(i,’ troke:’);
for j:=1 to n do
Read(A[i,j]);
Writeln
end;
for i:=1 to m do
begin j:=1;
while A[i,j]>=0 do j:=j+1; {ищем первое отрицательное число}
B[i,1]:=A[i,j]; j:=1;
while A[i,j]<0 do j:=j+1; {ищем первое неотрицательное число}
B[i,2]:=A[i,j];
B[i,3]:=B[i,1]+B[i,2];
end;
for i:=1 to m do
begin for j:=1 to n do
Write(B[i,j],’’:3);
Writeln
end
end.
Пример 3. Дан список имен мужчин и женщин с указанием пола (M или W) и роста (от 140см до 200см ). Составить программу, выдающую имя и рост самого высокого мужчины из списка.
Program M_and_W;
type
name = (SVETA, KOLYA, IVAN, MASHA, SASHA, PETR, NINA);
pol = (M, W);
var
rost : array [name] of 140..200;
i, imya : name; max : integer;
const
p : array [name] of pol = (W, M, M, W, M, M, W);
procedure W_NAME(j:name);
begin
case j of
SVETA : Writeln(‘СВЕТА’);
KOLYA : Writeln(‘КОЛЯ’);
IVAN : Writeln(‘ИВАН’);
MASHA : Writeln(‘МАША’);
SASHA : Writeln(‘САША’);
PETR : Writeln(‘ПЕТР’);
NINA : Writeln(‘НИНА’)
end
end;
begin
for i := SVETA to NINA do
begin
Write('Очередное имя списка: ');
W_NAME(i);
Write(‘Введите рост ‘); Readln(rost[i])
end;
max:=140;
for i := SVETA to NINA do
if (p[i]=M) and (rost[i]>max) then
begin
max:= rost[i]; imya:= i
end;
Writeln('Самый высокий мужчина – ');
W_NAME(imya);
Writeln(‘ его рост – ‘, max)
end.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.