Массив — это набор упорядоченных по номерам переменных одного типа, с общем именем.




Массив характеризуется именем, типом и размерностью.

Имя массива образуется по общему правилу образования имен в QBASIC’е, но его имя не должно совпадать ни с одним другим именем простых переменных, используемых в программе.

 

Линейные массивы.

Пусть массив носит имя А и имеет 10 элементов. Тогда его можно описать, как совокупность переменных с индексом: А(1), А(2),..., А(10). Индексы определяют положение элемента в массиве. Число индексов определяет размерность массива.

Для хранения элементов массива в памяти компьютера необходимо выделить место. Количество ячеек памяти для массива определяется его размерностью. Для выделения памяти под массив используют оператор DIM (от англ. dimension — размер).

ОБЩИЙ ВИД:

DIM A(I), B(J),..., Z(N)

где A, B,..., Z — имена массивов, I, J,..., N — размерности массивов.

Например: DIM?A(5), RS(10), J1(15) — означает, что компьютер отведет место для массива А из пяти элементов, массива RS из 10 элементов и массива J1 из 15.

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

 

Заполнение массива.

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

Есть несколько способов заполнения массивов:

1 способ. С помощью блока данных DATA и READ.

ПРИМЕР. Заполним массив А из пяти элементов числами 1, 2, 3, 4 и 5.

DIM A(5)

DATA 1, 2, 3, 4, 5

READ A(1), A(2), A(3), A(4), A(5)

Этот способ лучше использовать, если в задаче заданы конкретные значения элементов массива.

2 способ. С помощью оператора INPUT.

ПРИМЕР. Заполнить с клавиатуры массив В из 4 элементов.

DIM B(I)

FOR I=1 TO 4 STEP 1

INPUT B(I)

NEXT I

В этом случае в цикле переменная I является индексом элементов массива, и оператором INPUT B(I) будут запрашиваться по очереди В(1), В(2), В(3), В(4).

Этот способ удобно использовать, если массив содержит небольшое количество элементов. Представьте сколько времени при отладке программы вы потратите, если нужно будет заполнять таким способом массив из 100 элементов!

3 способ. С помощью генератора случайных чисел (см. §10.5).

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

ПРИМЕР:

DIM C(10)

FOR I=1 TO 10 STEP 1

C(I)=RND

NEXT I

 

Вывод массива на печать.

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

Например, чтобы распечатать произвольный массив А(10), надо написать программу:

FOR I=1 TO 10 STEP 1

PRINT A(I)

NEXT I

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

В некоторых случаях (большой массив, вывод на экран двух или более массивов одновременно) удобнее печатать массив в одну строку. Для этого надо поставить после оператора PRINT точку с запятой или использовать оператор LOCATE.

Например, FOR I=1 TO 10 STEP 1

PRINT A(I);

NEXT I

PRINT

Пустой оператор PRINT отменяет дальнейший вывод в этой строке и переводит курсор для печати на следующую строку.

 

Решение задач.

Задача 1.

Удвоить все элементы произвольного массива из 10 элементов, заданного на интервале [-50,50]. Вывести на экран оба массива.

Примечание. Поскольку массив произвольный, то лучше заполнить его случайным образом. Формула образования случайных чисел из диапазона
[-50,50] — INT (100*RND - 50). В программе на экран будут выводиться два массива, поэтому печать лучше оформить как подпрограмму.

 

Решение:

CLS

DIM A(10) ® определение массива

FOR I=1 TO 10 STEP 1:’ задание

A(I)= INT (100 *RND-50):’элементов массива

NEXT I:’случайным образом

GOSUB PR:’обращение к подпрограмме печати

FOR I=1 TO 10 STEP 1:’изменение

A(I)=A(I)*2:’элементов

NEXT I:’исходного массива

GOSUB PR:’ обращение к п/п печати

END

PR: FOR I=1 TO 10 STEP 1:’подпрограмма печати

PRINT USING”####”;A(I);

NEXT I

PRINT

RETURN

 

Задача 2.

Определить количество отрицательных элементов массива А(10), который задан случайным образом на интервале [-100,100].

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

CLS

DIM A(10):’ определение массива

FOR I=1 TO 10 STEP 1:’ задание элементов массива

A(I)= INT (200 *RND-100):’случайным образом

PRINT USING”####”;A(I);:’ и вывод на печать

NEXT I:’одной строкой

N=0:’инициализация переменной-копилки

FOR I=1 TO 10 STEP 1

IF A(I)<0 THEN N=N+1:’проверка знака элементов массива

NEXT I

PRINT N; “Отрицательных элементов “

END

 

Задача 3.

В произвольном массиве A(N), заданном случайным образом на интервале [-50, 50], найти максимальный элемент.

Алгоритм:

1. Заведем вспомогательную переменную МАХ и присвоим ей значение первого элемента массива А(1).

2. Сравним МАХ со следующим элементом массива.

Если МАХ < А(I),
то ячейке МАХ присвоим А(I)
Иначе перейдем к следующему элементу.

CLS

INPUT “ “;N

DIM A(N)

FOR I=1 TO N STEP 1

A(I)= INT(100*RND-50)*100

PRINT USING”####”; A(I);

NEXT I

MAX=A(1)

FOR I=2 TO N STEP 1

IF MAX < A(I) THEN MAX=A(I)

NEXT I

PRINT “Максимальный элемент массива “;MAX

END

 

 

Символьные массивы.

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

Например, DIM A$(5), B$(10).

Над элементами строкового массива можно производить те же операции, что и над простыми строковыми переменными, то есть склейку слов и выделение подслов.

Задавать символьный массив можно тоже одним из трех, выше описанных способов — с помощью INPUT, DATA и READ и генератором случайных чисел RND.

Рассмотрим последний способ. Здесь мы будем использовать функцию CHR$(N), где N — натуральное число от 0 до 255. Эта функция переводит число в соответствующий ему символ.

Известно, что коды латинских букв упорядочены по алфавиту и, начиная с 65 идут коды заглавных букв, а с 97 — коды маленьких букв. Коды заглавных русских букв — с 128 до 159, а коды строчных русских букв по алфавиту не упорядочены.

Например, INT(RND*25+65) даст случайное число в интервале от 65 до 90, то есть в интервале больших латинских букв, а CHR$(INT(RND*25+65)) преобразует этот код в символ.

Задача 1.

Даны символы s1,s2,...,s30. Получить символы данной последовательности в обратном порядке.

Решение.

CLS

DIM S$(30), A$(30):’отводим место в памяти

FOR I=1 TO 30 STEP 1:’задаем массив

S(I)= CHR$(INT(RND*25+65)):’ из больших латинских букв

PRINT S$(I);:’печать массива в одну строку

NEXT I

PRINT:’отмена вывода в текущей строке

FOR I=1 TO 30 STEP 1:’задаем массив A$

A$(I)= S$(31-I):’А$(1)=S$(30), А$(2)=S$(29)...

PRINT A$(I);:’печать массива в одну строку

NEXT I

PRINT

END

 

Задача 2.

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

Примечание: Необходимо завести переменную, которая будет служить “сигнальной лампочкой”, то есть будет показывать есть ли в массиве слова, кончающиеся на “о” или нет. В начале программы “лампочке” присваивается значение, равное нулю. Если значение останется нулевым, то это значит, что таких слов нет.

Решение.

CLS

DIM A$(10):REM oтводим место в памяти

DATA Окно, Дом, Труба, Дерево, Цветы, Бревно

DATA Золото, Сон, Поле, Дело

FOR I=1 TO 10 STEP 1

READ A$(I):REM задаем массив

PRINT A$(I);:REM печатаем массив

NEXT I

PRINT

L=0:REM “сигнальная лампочка”

FOR I=1 TO 10 STEP 1

C$=MID$(A$(I), LEN(A$(I)), 1): ‘копируем последнюю букву и

IF C$=“o” THEN PRINT A$(I), I, “элемент”:’сравниваем с “о”

L=1:’ если буквы совпадают,

NEXT I:’ лампочка меняет значение

IF L=0 THEN

PRINT “Слов с последней буквой /О/ в массиве нет”

END IF

END

 

Задача 3.

Список содержит фамилии 12 учеников и из возраст. Найти фамилии тех, кому больше 16 лет.

Решение:

CLS

DIM N$(12), W(12)

DATA ИВАНОВ, ПЕТРОВ, ВАСЕЧКИН, КРЫЛОВА

DATA ФЕДИНА, БОБКОВА, ЗАЙЦЕВ, ХРУЩЕВ, ГРИШИН

DATA СИДОРОВА, БОБРОВ, МОКРУШИНА

DATA 12, 14, 16, 17, 7, 10,12, 9, 17, 17, 8, 17

FOR I=1 TO 12 STEP 1

READ N$(I)

NEXT I

FOR I=1 TO 12 STEP 1

READ W(I)

NEXT I

FOR I=1 TO 12 STEP 1

PRINT N$(I); “-”; W(I)

NEXT I

PRINT “ Старше 16 лет:“

FOR I=1 TO 12 STEP 1

IF W(I) > 16 THEN PRINT N$(I);

NEXT I

END

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: