• Название:

    Arrays

  • Размер: 0.09 Мб
  • Формат: DOCX
  • или


Муниципальное образовательное учреждение

средняя общеобразовательная школа №90 г. Ярославля

Реферат по информатике

Тема: «Двумерные массивы»

Выполнил:

ученик 9 «В» класса

средней школы №90

Оразов Андрей

Учитель:

Татьяна Андрианова

Ярославль, 2016 год.

Содержание.

TOC \o "1-3" \h \z \u Введение3

Глава 1. Двумерные массивы. PAGEREF _Toc200534793 \h 4

Глава 2. Использование массивов на примере реализации игры «Охота на лис»12

Заключение16

Источники информации16

Введение.

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

Ни одна игра не обходится без них, в частности в игре «Охота на лис» двумерные массивы использовались для индексации координат. А, например, в С++ с помощью динамических массивов и типа char был создан тип string.

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

Глава 1. Двумерных массивы.

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

Все компоненты обозначаются одним именем (именем массива), а для обращения к ним используются индексы.

Размер массива позволяет определить количество ячеек в памяти, выделенных для хранения одного элемента. Причем для хранения элементов могут использоваться разные типы данных, такие как int(целочисленный тип), char(символьный тип), real(числа с плавающей точкой), bool(истина и ложь) и т.д.

Определение массивов в Pascal происходит так:

var

massiv: array[0..3] of integer;

Определение происходит в блоке var.

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

Далее пишется служебное слово array (от англ. массив) и в квадратных скобках указываются промежутки индекса массива (в данном случае от 0 до 3 т.е. массив включает 4 элемента).

После пишется служебное слово of и указывается тип данных (конкретно здесь, integer).

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

Определение происходит так же, за исключением того, что индексы перечисляются через запятую и их два.

var

massiv: array[0..3, 32..34] of integer;

Массив можно заполнить сразу при объявлении или во время выполнения программы.

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

var

massiv: array[0..3, 32..34] of integer;

counterX, counterY: integer;

begin

for counterX:= 0 to 3 do

begin

for counterY:= 32 to 34 do

massiv[counterX, counterY]:= counterX*counterY;

end;

end.

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

Вот что получится в результате выполнения кода:

Массивы и циклы так же связаны между собой, как поезда и железные дороги. Одни без других в обоих случаях имеют мало смысла. Хотя человек может придумать способ использования поездов без железных дорог и массивов без циклов, но, видимо, раз поезда (за редкими исключениями) ходят по железным дорогам, то массивы проще обрабатывать в циклах, по крайней мере, пока у нас в языках высокого уровня нет операций обработки целых массивов.

Но во многих задачах нам потребуется отсортировать такой массив. Сделаем это с помощью сортировки пузырьком. Она довольно медленная, но простая в исполнении. Смысл в том, чтобы сравнивать пары элементов и, если один больше другого, менять их местами.

Я разобью код для лучшей читаемости.

var

mas: array[0..5, 0..3] of integer;

coun1, coun2, coun3, temp: integer;

Я инициализировал массив и несколько переменных для циклов.

Далее заполним его случайными числами от 0 до 9 и выведем массив на экран.

begin

Randomize;

for coun1:= 0 to 5 do

begin

for coun2:= 0 to 3 do

mas[coun1,coun2]:= Random(10);

end;

for coun1:= 0 to 5 do

begin

Writeln(mas[coun1]);

end;

Допустим, что получился такой массив.

for coun1:= 0 to 4 do

begin

for coun3:= 0 to 2 do

for coun2:= 0 to 2 do

if mas[coun1,coun2] < mas[coun1, coun2+1] then

begin

temp:= mas[coun1,coun2];

mas[coun1,coun2]:= mas[coun1, coun2+1];

mas[coun1, coun2+1]:= temp;

end;

end;

Здесь мы идём по столбцам от 0 до 4 и в каждом из них идём по объектам от 0 до 3.

Если данный объект меньше следующего, то меняем их местами с помощью переменной temp.

После таких преобразований получится что-то вроде:

Самые большие элементы «всплыли» к левому краю.

А теперь сделаем то же ещё один раз, но теперь пойдем по столбцам.

for coun1:= 0 to 3 do

begin

for coun2:= 0 to 3 do

for coun3:= 0 to 3 do

if mas[coun3, coun1] < mas[coun3+1, coun1] then

begin

temp:= mas[coun3, coun1];

mas[coun3, coun1]:= mas[coun3+1, coun1];

mas[coun3+1, coun1]:= temp;

end;

end;

Готово. Сортировка прошла успешно.

Глава 2. Использование массивов в “Охоте на лис”.

В «Охоте на лис» массивы нашли себе применение, в действительности, вся игра строится на них.

Что это вообще за игра? – спросите вы.

Это логическая головоломка, в которой нужно отгадать расположение 5 лис на поле 6х6 клеток. При непопадании даётся информация о местонахождении лис по вертикали, горизонтали и диагоналям.

Вот как это выглядит. Допустим, мы пошли в клетку 3х3, но лисы там не оказалось. Лисы – желтые. Нам будет дана информация о местонахождении лис. А именно «3», ведь одна лиса попадает под вертикаль, одна под горизонталь и одна на диагоналях.

Рассмотрим код, отвечающий за это.

const N = 6; // константа величины поля

var

realm: array[1..N, 1..N] of integer; // для программы

fake: array[1..N, 1..N] of string; // для пользователя

a, b, a0, b0, c, d, fox, counter, fox_ar, coun: integer;

Здесь инициализируются два массива. Один будет «видеть» программа, а другой пользователь. N определяет величину поля.

Теперь заполним массив программы лисами.

Randomize;

repeat

a := random(N) + 1;

b := random(N) + 1;

if realm[a, b] = 0 then begin

realm[a, b] := 1;

fox := fox + 1;

end;

until fox = 5; // расстановка лис

Лиса – 1,

нет лисы – 0,

убитая лиса – 2.

Дальше в цикле просим ввести координаты и проверяем, нет ли там лисы, если есть, ставим туда 2 и из счетчика лис fox вычитаем единицу. Проводим это пока лис не останется 0.

Если лисы нет, с помощью алгоритма проверяем клетки и выводим число. В упрощённом виде (без проверки правильности ввода) алгоритм выглядит так:

for counter := 1 to N do

if (realm[a, counter] = 1) or (realm[a, counter] = 2) then

fox_ar := fox_ar + 1; // поиск по вертикали

repeat

a0 := a0 + 1;

b0 := b0 + 1;

if (realm[a0, b0] = 1) or (realm[a0, b0] = 2) then

fox_ar := fox_ar + 1;

until (a0 = N) or (b0 = N); // поиск в право-нижнем секторе

fox_ar – это счетчик лис поблизости. Если лиса есть, неважно, живая или мертвая, увеличиваем его.

a и b – координаты, которые ввел пользователь. Во втором алгоритме я вынес их значения в a0 и b0, чтобы значения ввода не изменялось (во втором алгоритме значения a0 и b0 изменяются).

Я привел только два алгоритма из шести, потому что они отражают суть, остальные отличаются лишь парой знаков.

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

Заключение.

В целом, можно сказать, что сегодня программирование – это бурно развивающаяся отрасль, которая даёт большие возможности для реализации себя.

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

В дальнейшем я планирую изучить ООП и сделать игру наподобие тетриса.

Источники материала:

1. ru.wikipedia.org/wiki/Массив_(программирование)

2. habrahabr.ru/post/204600/

3. life-prog.ru/2_92339_ispolzovanie-massivov.html

4. prog-cpp.ru/c-massiv/

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

2016 г.