Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Pascal: Общие вопросы > Что такое массивы и как с ними бороться


Автор: vot 01.10.04, 11:28
vot вам лекция на тему

Что такое массивы и как с ними бороться

© vot


Как, вы не знаете, что такое "массивы"?! Ну, это враки!
Вы давно и близко с ними знакомы, еще с детства,
просто бывают на свете такие талантливые преподаватели,
которые умудряются так запудрить нам мозги,
что мы перестаем понимать даже элементарные вещи...

Итак начнем...

Тетрадку в клеточку знаете? Ну, конечно, кто ж ее не знает! :)))

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

А сейчас обратим внимание на самое главное, на то,
что, собственно, дает название такой тетрадке!

Так что же там "главное"? Правильно! Ну конечно же - клетка!

Память можно рассматривать именно как набор клеточек или ячеек
(припоминаются еще и пчелиные соты), в которые можно "складывать"
нашу информацию, по одной штучке в каждую ячейку.
(Кстати, ячейки памяти могут быть разными, но этот вопрос мы тоже
рассмотрим попозже.)

Ну, а теперь перейдем непосредственно к массивам.
Возьмите ручку и обведите на тетрадном листке несколько ячеек подряд,
например, пусть это будет горизонтальный прямоугольник высотой в одну
клетку и шириной в 10 клеток.
Мы получили группу объединенных клеток (ячеек).
Теперь пора открыть вам страшный секрет - это и есть массив!

Давайте придумаем ему название, например Massive1, и подпишем его слева
от нашей "полоски клеток". Теперь это уже "именованный" массив ячеек.
Осталось только пронумеровать ячейки нашего массива от 1 до 10:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                1  2  3  4  5  6  7  8  9  10
               -------------------------------
      Massive1 |  |  |  |  |  |  |  |  |  |  |
               -------------------------------

Такой массив в Паскале описывается следующим образом:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var
      Massive1 = Array[1..10] of тип_данных_в_ячейке.


Теперь мы можем указать (адресовать) любую ячейку этого массива
как "ячейка № N в массиве Massive1".

В языке Паскаль это записывается как Massive1[n],
например Massive1[2] - вторая ячейка массива,
или Massive1[10] - десятая ячейка.

Теперь давайте вспомним игру "Морской бой" и обведем в тетрадке
прямоугольник высотой 10 клеток и шириной тоже 10 клеток.
Назовем его, к примеру, SeaBattle, и пронумеруем колонки и строки
этого массива:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                1  2  3  4  5  6  7  8  9  10
               -------------------------------
    SeaBattle 1|  |  |  |  |  |  |  |  |  |  |
               -------------------------------
              2|  |  |  |  |  |  |  |  |  |  |
               -------------------------------
              3|  |  |  |  |  |  |  |  |  |  |
               -------------------------------
              4|  |  |  |  |  |  |  |  |  |  |
               -------------------------------
              5|  |  |  |  |  |  |  |  |  |  |
               -------------------------------
              6|  |  |  |  |  |  |  |  |  |  |
               -------------------------------
              7|  |  |  |  |  |  |  |  |  |  |
               -------------------------------
              8|  |  |  |  |  |  |  |  |  |  |
               -------------------------------
              9|  |  |  |  |  |  |  |  |  |  |
               -------------------------------
             10|  |  |  |  |  |  |  |  |  |  |
               -------------------------------

Такой массив в Паскале описывается следующим образом:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var
      SeaBattle = Array[1..10,1..10] of тип_данных_в_ячейке.

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

Вспомните, как адресуется каждая клеточка в игре "Морской бой".
Помните - А9, В1, Г3... Ну, и здесь почти так же!
Единственная разница - мы используем для нумерации не буквы,
а цифры!
Например, SeaBattle[1,5] - ячейка, расположенная на пересечении
первой строки и пятого столбца.
SeaBattle[9,2] - ячейка, расположенная в девятой строке и втором столбце.

Ну а теперь - зачем это все нужно?
Да просто затем, что иногда информацию гораздо удобнее представлять
именно в виде массивов. Например, когда вы работаете с матрицами -
легче всего разместить ее именно в двумерном массиве.
Часто исходная информация от природы имеет структуру,
которая наиболее логично умещается именно в массив.
Приглядитесь к пофамильному списку студентов вашей группы -
да ведь это же обыкновенный одномерный массив!
Только ячейками массива являются не числовые значения,
а фамилии и имена, т.е. строки символов (strings).
Еще один пример массивов - карта в какой-нибудь игре.

Всё, дальше сами придумывайте аналогии, а то мне уже надоело :)))

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)