Вопрос 21.doc

  • doc
  • 13.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Вопрос 21.doc

Вопрос 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.