Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Двумерные и многомерные массивы



Лекция

Двумерные и многомерные массивы

 

Организация данных в виде массивов помогает нам

решать многие задачи. Вот еще одна: разработать программу,

обслуживающую шахматный турнир.

Мы уже решали похожую "спортивную" задачу о конькобежных

соревнованиях. Теперь нужно понять, чем отличается от них

турнир по шахматам (с точки зрения организации данных). В

одиночных соревнованиях каждый участник имеет один результат,

поэтому данные о результатах соревнований удобно хранить в

знакомых нам массивах. Игровой турнир предполагает встречи

участников друг с другом, при этом каждый участник имеет

столько результатов, со сколькими соперниками он встречался.

Обычно результаты турниров заносятся в турнирные таблицы.

Средством обработки таких таблиц в языках программирования

служат двумерные массивы.

 

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

 

В языке паскаль описание двумерного массива

записывается так:

<Имя_массива>: array[<n1>..<n2>,<k1>..<k2>] of [<тип>]

 

где строки таблицы имеют номера с n1 по n2, а столбцы - с k1

по k2. Запись <Имя_массива>[n,k] указывает на элемент,

стоящий на пересечении n-й строки и k-го столбца. Например,

описание

Tab: array[1..10,1..15] of Integer

задает таблицу из 10 строк и 15 столбцов (всего 10 х 15 = 150

элементов), состоящую из целых чисел. Tab[3,5] указывает на

5-й элемент в 3-й строке.

 

2. Примеры программ с двумерными массивами.

 

Пр.1. Транспонировать массив A=(2 1 5)

(3 4 1)

Program Transp;

{const A:array [1..2,1..3] of integer=((2,1,5)(3,4,1));}

 

var

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

At:array [1..3,1..2] of integer;

j,i:integer;

begin

writeln('Введите элементы массива после каждого нажимая "ввод" ');

for i:=1 to 2 do {колличество строк}

for j:=1 to 3 do {колличество столбцов}

begin

readln(a[i,j]);

At[j,i]:=a[i,j]; {транспонирование}

end;

{печать массива At}

writeln('Транспонированный массив');

for i:=1 to 3 do {колличество строк}

begin

wrireln;

for j:=1 to 2 do write(At[i,j]) {колличество столбцов}

end;

end.

Результат на экране:

2 3

1 4

5 1

 

Пр.2. Турнирную таблицу для N участников удобно хранить в

двумерном массиве N x N типа Real, т.к. результатом шахматной

партии для каждого участника может быть победа (1 очко),

поражение (0 очков) или ничья (0.5 очка). Вот описание

таблицы: Tab: array[1..N,1..N] of Real.

 

Для простоты не будем пока рассматривать фамилии

участников, а будем различать их по номерам. Вводить

результаты встреч будем в таком виде: номер первого

участника, номер второго участника, результат первого



участника (количество очков). Понятно, что одна встреча

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

выглядеть фрагмент программы, предназначенный для ввода

результата одной встречи:

writeln('Введите номера участников встречи');

readln(n1,n2);

writeln('Сколько очков у участника ',n1,'?');

readln(Tab[n1,n2]);

Tab[n2,n1]:= 1-Tab[n1,n2];

 

Эти действия нужно повторять столько раз, сколько

встреч состоится в турнире. Если все запланированные встречи

состоятся, то их количество можно сосчитать по формуле

n(n-1) - подумайте, почему. Однако, может случиться, что по

каким-то причинам часть встреч не состоится, а какие-то будут

сыграны дважды. Поэтому удобнее как-то обозначить окончание

ввода данных в программе, например, после каждой встречи

выяснять, будут ли еще вводиться данные. Вот фрагмент

программы, предназначенный для ввода результатов всех встреч

турнира:

kon:= 'Д';

while kon <> 'Н' do

begin

writeln('Введите номера участников встречи');

readln(n1,n2);

writeln('Сколько очков у участника ',n1,'?');

readln(Tab[n1,n2]);

Tab[n2,n1]:= 1-Tab[n1,n2];

writeln('Будут ли еще встречи? (Д/Н)');

readln(kon);

end;

5. По окончании турнира нужно вывести турнирную таблицу

на экран:

for i:= 1 to N do

begin

for k:= 1 to N do

write(Tab[i,k]:3:1);

writeln;

end;

 

6. Бывают задачи, в которых данные удобно хранить в виде

трехмерного (и даже четырех- и более -мерного) массива.

Например, результат встречи в футбольном турнире представляет

собой не одно, а три числа - количество забитых и пропущенных

мячей и количество очков (2 - победа, 0 - поражение, 1 -

ничья). Такую таблицу удобно заносить в массив

Football: array[1..N,1..N,1..3] of Integer;

Элемент Football[3,5,2] содержит информацию о количестве

мячей, пропущенных 3-й командой в матче с 5-й командой.

Поразмышляйте самостоятельно над процедурой ввода

результатов футбольного турнира.

 


Дата добавления: 2015-11-04; просмотров: 22 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
 | Special schools for special children

mybiblioteka.su - 2015-2024 год. (0.01 сек.)