или с помощью оператора ввода:
DIM Q(1 TO 4)
INPUT Q(1), Q(2), Q(3), Q(4)
Вывод массива осуществляется с помощью оператора PRINT:
PRINT Q(1); Q(2); Q(3); Q(4) – этот оператор выводит значения элементов в строку.
PRINT Q(1), Q(2), Q(3), Q(4) – этот оператор выводит значения элементов массива в строку в зонном формате (на каждое значение отводится по 14 колонок).
В случае, когда массив содержит много элементов и перечисление их при вводе-выводе становится неудобным, организуются циклы. Поскольку количество элементов массива всегда известно, для ввода и вывода значений элементов массива используются циклы с заранее известным числом повторений
Ниже приведены фрагменты программ, представляющие возможные варианты ввода и вывода значений элементов одномерных массивов:
REM Ввод массива с помощью ' оператора "INPUT"* DIM n, I AS INTEGER INPUT n DIM Q(n) FOR I=1 TO n INPUTQ(I) NEXT I | REM Ввод массивас помощью 'оператора " INPUT " из файла OPEN "d:dan.dat" FOR INPUT AS #1 DIM n, I AS INTEGER INPUT n DIM Q(n) FOR I=1 TO n INPUT#1, Q(I) NEXT I |
REM Ввод массива с помощью 'оператора "READ"** DIM I AS INTEGER DATA 5,7,12,2,0,7,23,6,4,8,1 DIM Q(1 TO11) FOR I=1 TO 11 READQ(I) NEXT I | REM Ввод массива с помощью ' датчика случайных чисел*** RANDOMIZE TIMER DIM n, I AS INTEGER INPUT n DIM Q(n) FOR I=1 TO n Q(I)= FIX(RND*60) ' любая формула NEXT I |
REM Вывод массива на экран в строку FOR I=1 TO N PRINT Q(I); NEXT I REM Вывод массива на экран в столбик FOR I=1 TO N PRINT Q(I) NEXT I | REM вывод массива в файл OPEN "d:rez.dat" FOR OUTPUT AS #2 FOR I=1 TO N PRINT #2,Q(I); NEXT I |
ПРИМЕР 12.1 Дан массив целых чисел. Найти значение максимального элемента. Если таких элементов несколько, то определить их количество.
REM Нахождение максимального элемента массива
DIN N, I, K YMAX AS INTEGER
INPUT "Введите размер массива N= ", N
DIM X(1 TO N) AS INTEGER
REM Формируем массив с помощью датчика случайных чисел
RANDOMIZE TIMER
FOR I = 1 TO N
X(I) = RND*50 + 20
PRINT X(I); 'выводим массив на экран в строку
NEXT I
PRINT 'переходим на новую строку после вывода массива
REM Введем переменную YMAX для хранения в ней максимального значения
YMAX = X(1) 'Начальное значение переменной YMAX
K = 1 'Начальное значение счетчика равных максимальных элементов
FOR I = 2 TO N
IF X(I) > YMAX THEN 'Если YMAX окажется меньше очередного элемента
YMAX = X(I) 'то его значение заменяем
K = 1 'устанавливаем начальное значение счетчика максимальных элементов
ELSEIF X(I) = YMAX THEN 'Если очередной элемент окажется равным YMAX
K = K + 1 'увеличиваем значение счетчика равных максимальных элементов
END IF
NEXT I
PRINT 'Пропускаем строку
REM Выводим значение максимального элемента массива и их количество
PRINT "YMAX="; YMAX, "КОЛИЧЕСТВО="; K
END
Пояснения к программе:
- описываем целочисленные переменные: N - размер массива, I - переменная (счетчик) цикла, K - счетчик элементов, равных максимальному, YMAX – переменная для хранения максимального элемента массива;
- вводим размер массива N и описываем целочисленный массив X из N элементов;
- в цикле формируем массив с помощью датчика случайных чисел и выводим его на экран в одну строку;
- устанавливаем начальное значение переменной YMAX – значение первого элемента массива X и начальное значение счетчика K;
- последовательно просматриваем элементы массива и если очередной элемент больше, чем YMAX, то меняем значение YMAX и устанавливаем начальное значение счетчика K, если очередной элемент массива равен YMAX, то значение счетчика K увеличивается на 1.
- после завершения цикла выводим результаты.
ПРИМЕР 12.2 Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.
REM Нахождение пар одинаковых элементов массива
DIN N, I, K AS INTEGER
INPUT "Введите размер массива N= ", N
DIM MAS(1 TO N)
REM Формируем массив с помощью датчика случайных чисел
RANDOMIZE TIMER
FOR I = 1 TO N
MAS(I) = RND*50 + 20
PRINT MAS(I); 'выводим массив на экран в строку
NEXT I
PRINT 'переходим на новую строку после вывода массива
K = 0 'Начальное значение счетчика пар равных элементов массива
FOR I = 1 TO N-1
IF MAS(I) = MAS(I+1) THEN K=K+1
NEXT I
PRINT 'пропускаем строку
REM Выводим количество пар равных соседних элементов массива
PRINT "K= "; K
END
Пояснения к программе:
- начало программы аналогично предыдущему примеру;
- устанавливаем начальное значение счетчика K равное 0;
- последовательно сравниваем пары элементов массива и если они совпадают, то значение счетчика K увеличивается на 1. Следует обратить внимание на то что переменная цикла I изменяется от 1до (N-1), поскольку в цикле сравниваются элементы массива с индексами I и (I+1) – изменение переменной цикла до N приведет к выходу за границу диапазона;
- после завершения цикла выводим результаты.
ПРИМЕР 12.3 Дан массив чисел. Упорядочить его по убыванию.
Для решения задачи можно использовать алгоритм сортировки с помощью прямого выбора:
- выбираем наибольший элемент в массиве;
- меняем его местами с первым элементом;
- повторяем процесс с оставшимися (N-1) элементами, (N-2) элементами и т.д. до тех пор, пока не останется последний, самый маленький элемент.
REM Сортировка массива
DIN N, I, J AS INTEGER
INPUT "Введите размер массива N= ", N
DIM A(1 TO N)
REM Формируем массив с помощью датчика случайных чисел
RANDOMIZE TIMER
FOR I = 1 TO N
A(I) = RND*50 + 20
PRINT A(I); 'выводим массив на экран в строку
NEXT I
PRINT 'переходим на новую строку после вывода массива
FOR I = 1 TO N-1
MAX = A(I) 'устанавливаем начальное значение текущего максимума
NM = I 'устанавливаем начальное значение номера максимального элемента
FOR J = I + 1 TO N
IF MAX <= A(J) THEN
MAX = A(J)
NM = J
END IF
NEXT J
SWAP A(I), A(NM) 'меняем местами элементы массива
NEXT I
REM Вывод упорядоченного массива на экран
FOR I = 1 TO N
PRINT A(I); 'выводим упорядоченный массив на экран в строку
NEXT I
END
Пояснения к программе:
- вводим размер массива, формируем массив и выводим его на экран;
- организуем два вложенных цикла: внешний цикл регулирует размер неупорядоченного массива, во внутреннем цикле осуществляется поиск максимального элемента неупорядоченного массива и его индекса;
- меняем местами первый элемент неупорядоченного массива и найденный максимальный элемент – оператор SWAP;
- с каждым витком внешнего цикла размер неупорядоченного массива уменьшается на единицу;
- после завершения внешнего цикла выводим на экран упорядоченный массив.