Опубликовано: 2018-06-24 08:00:00
Ввод-вывод одномерного массива (вектора)
Работа с массивами – третий и самый сложный тип задач. Я остановлюсь на нём поподробнее. Автоматическая работа с массивами обеспечивается операторами цикла, обычно, это цикл с параметром FOR.
Пусть массив носит имя А и имеет 5 элементов. Тогда его можно описать, как совокупность переменных с индексом: А(1), А(2), ..., А(5). Индексы определяют положение элемента в массиве. Число индексов определяет размерность массива.
Для хранения элементов массива в памяти компьютера необходимо выделить место. Количество ячеек памяти для массива определяется его размерностью. Для выделения памяти под массив используют оператор DIM (от англ. dimension – размер).
Какие же задачи решаются с помощью массивов? Это, например, «найти максимальный элемент в массиве A(N)» и множество других похожих задач. Такие задачи мы решим позже, а сейчас нам необходимо понять, как работает ввод-вывод одномерного массива. Это необходимо, чтобы решать задачи на массивы.
Вообще существует как минимум два способа заполнения массива:
- С помощью блока данных DATA и READ;
Этот способ лучше использовать, если в задаче заданы конкретные значения элементов массива.
- С помощью оператора INPUT.
При помощи оператора ввода INPUT легче всего заполнить массив непосредственно с клавиатуры.
Посмотрим на шаблон ввода элементов вектора с клавиатуры и выводом их на экран:
- CONST N = 5
- DIM A(N)
- FOR I = 1 TO N
- PRINT USING "A[#]: "; I
- INPUT A(I)
- NEXT
- FOR I = 1 TO N
- PRINT USING "##.## "; A(I);
- NEXT
Рисунок 1 – Ввод и вывод одномерного массива
Рисунок 2 – Результат ввода-вывода одномерного массива
В цикле FOR переменная I является индексом элементов массива. В операторе INPUT A(I) будут запрашиваться по очереди все значения массива: A(1), A(2), A(3), A(4), A(5).
Оператор DIM может быть использован в любом месте программы, но до первого обращения к массиву.
Элементы массива могут быть использованы для вычислений только после того, как их значения будут записаны в память компьютера. Запись элементов массива в зарезервированную область памяти может осуществляться в любом порядке.
Размерность массива необязательно задавать константой, а можно ввести, например, непосредственно с клавиатуры.
Первый способ удобно использовать, если массив содержит небольшое количество элементов. Представьте, сколько времени при отладке программы вы потратите, если нужно будет заполнять таким способом массив из 100 элементов
Следующий пример покажет как заполнить одномерный массив случайными числами с помощью генератора случайных чисел RANDOMIZE TIMER.
- REM ZAPOLNENIYE SLUCHAYNYMI CHISLAMI OT 0 DO 10
- RANDOMIZE TIMER
- CONST N = 5
- DIM A(N)
- A = 0: B = 10
- FOR I = 1 TO N
- A(I) = INT((B - A + 1) * RND + A)
- PRINT USING "## "; A(I);
- NEXT
Рисунок 3 – Заполнение массива случайными числами от 0 до 10
Рисунок 4 – Вывод случайных чисел от 0 до 10
Если при решении задачи не рассматривается конкретный массив, то удобно будет доверить заполнение массива компьютеру.
В этом примере интервал случайных чисел это [A..B]. Если вам необходимо будет генерировать вещественные случайные числа просто уберите INT и измените формат вывода PRINT USING на решётки с точкой.
Кстати, есть и ещё одна форма заполнения массива через, знакомый нам, оператор DATA. Выглядит примерно так:
- DATA 23,13,98,77,45,56,32
- CONST N = 7
- DIM MASS(N)
- FOR I = 1 TO N
- READ MASS(I)
- PRINT MASS(I);
- NEXT
Рисунок 5 – Чтение и вывод массива из DATA
Рисунок 6 – Вывод значений массива третьим способом
Да, программа становится несколько короче, так как в этом случае можно совместить чтение из DATA и одновременный вывод их на экран – ведь мы освободили пользователя от необходимости вводить данные с клавиатуры. Может кому то этот способ покажется гораздо экономичней, но я вам скажу следующее – оператор DATA, к сожалению, сокращает массовость алгоритма. Что это значит? Алгоритм должен быть применим не только для конкретной задачи, но и для всех подобных задач. То есть, для любых вводимых данных. Скажем, программа запускается 5 раз. Одно дело ввести 5 разных списков данных, другое 5 раз переписывать программу. А для отладки – согласен, DATA здесь облегчает ввод, но на практике подумайте что вам конкретно нужно.
Какой способ ввода-вывода одномерного массива использовать – решать только вам и никому другому.
Спасибо за прочтение этой статьи.