Подпрограммы 33 Функции, определяемые пользователем 34 Работа со строковыми типами данных 36 Оператор line input 36

Вид материалаСправочник

Содержание


Одномерные массивы
Определение массивов
Виды ошибок
Заполнение массива
1. Пример статического заполнения массива.
2. Пример динамического заполнения массива
Порядок работы с массивами
Действия над элементами одномерного массива
Двумерные массивы
Заполнение массива
Пример динамического заполнения и печати двумерного массива.
Пример заполнения массива с помощью стандартной функции RND.
Действия над элементами двумерного массива
Подобный материал:
1   2   3   4   5   6   7   8

Массивы



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

Массив - набор однотипных данных, хранящихся вместе и имеющих общее имя.

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

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

Одномерные массивы


Основные понятия:

Массив обозначается одним именем. Так всю совокупность действительных чисел

1.6, 14.9, -5.0, 8.5, 0.46

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

A(1), A(2), A(3), ..., A(n).

Индекс определяет положение элемента массива данных относительно его начала.

Для рассмотренного выше примера элементами массива А являются:

A(1)=1.6, A(2)=14.9, A(3)=-5.0, A(4)=8.5, A(5)=0.46

Определение массивов



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

Массивы, содержащие от 1 до 10 элементов, можно использовать без их объявления в операторе DIM. Максимальное количество элементов любого массива определяется только объемом свободной ОП.

Формат записи оператора DIM:

DIM имя_массива (максимальный_индекс)

"Имя_массива" обычно выбирается по тем же правилам, что и имена простых переменных.

"Максимальный_индекс" указывает максимально допустимый в программе индекс и должен быть положительным.

Примеры описания массивов:

DIM X(50) ' объявление одномерного числового массива X для 50 чисел;

DIM V$(12) 'объявление одномерного массива V для 12 символьных элементов.

Объявление массива с переменным размером.

INPUT K

DIM A(K)

........

Виды ошибок

Если указать в программе элемент массива с индексом большим, чем значение размерности, объявленное в операторе DIM или принятое по умолчанию, то выдается сообщение об ошибке 9:

Subscript out of range (выход за пределы массива).

Если оператор DIM указан после использования имени массива или массив повторно объявлен, то появляется сообщение 10:

Redimensioned array (повторное задание размерности массива).

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



Существует два способа присваивания значений элементам массива:

1) cтатический, с использованием операторов DATA, READ и оператора присваивания;

2) динамический, с использованием оператора INPUT и функции RND.

При работе с массивами очень удобно пользоваться оператором цикла FOR...NEXT. В качестве индекса массива используют параметр цикла.

1. Пример статического заполнения массива.

DATA слива,ананас,груша

DATA яблоко,вишня,абрикос

DIM A$(6)

FOR I=1 TO 6

READ A$(I)

NEXT I

Цикл FOR...NEXT последовательно присваивает значения всем переменным из списка.

2. Пример динамического заполнения массива

INPUT "Введите количество элементов массива ";N

DIM A(N)

FOR I=1 TO N

INPUT A(I)

NEXT I

В данном примере используется переменное задание размерности массива.

3. Пример заполнения массива с помощью стандартной функции RND

DIM V(12)

FOR I=1 TO 12

V(I)=INT(RND(1)*10)

PRINT V(I);

NEXT J

Порядок работы с массивами

  1. объявление массива (задание максимального размера массива);
  2. заполнение массива;
  3. обработка элементов массива;
  4. вывод результата обработки.



Действия над элементами одномерного массива



Пример 1. Подсчитать общую сумму 10 чисел, записанных статически в массив и количество отрицательных чисел в этом массиве.

DATA 3,4,5,-8,10.67,2.7,765,-6.98,9,-1

DIM A(10)

FOR I=1 TO 10

READ A(I)

S=S+A(I)

IF A(I)<0 THEN N=N+1

NEXT I

PRINT " сумма=";S,"N=";N

END


Пример 2. Задан массив К(45). Определить минимальный элемент массива и его индекс.


DIM K(45)

FOR I=1 TO 45 ' Заполнение массива

INPUT K(I)

NEXT I

MIN=A(1) ' Переменной MIN присваивается первое значение массива

FOR I=2 TO 45

IF A(I) < MIN THEN MIN=A(I):K=I

NEXT I

PRINT "Минимальный элемент=";MIN, "его индекс=";K

END


Пример 3. Задан массив A(18). В массиве поменять местами значения 1-го и 2-го элемента, 3-го и 4-го и т.д. Измененный массив вывести на экран.

DIM A(18)

FOR I=1 TO 18

A(I)=INT(RND(1)*10)

PRINT A(I);

NEXT I

FOR I=1 TO 18 STEP 2

SWAP A(I),A(I+1) ' Меняются местами значения элементов массива

NEXT I

PRINT

FOR I=1 TO 18

PRINT A(I); ' Вывод измененного массива

NEXT I

END


Пример 4. Дан массив М(30). Элементы массива - произвольные числа. Выдать на экран значения каждого пятого элемента. Указанные элементы выдать в строку.

DIM M(30)

FOR I=1 TO 30

M(I)=INT(RND(1)*15)

PRINT M(I);

NEXT I

PRINT

FOR I=5 TO 30 STEP 5

PRINT M(I); ' Вывод каждого пятого элемента массива

NEXT I


Пример 5. Сформировать из N элементов одномерный массив А и вывести его на печать в виде K столбцов.

INPUT " Введите количество элементов массива ";N

DIM A(N)

FOR I=1 TO N

A(I)=INT(RND(1)*10)

NEXT I

INPUT " Введите количество столбцов ";K

FOR I=1 TO N

PRINT A(I);

IF I MOD K = 0 THEN PRINT

NEXT I

END

Пример 6. Составить программу вычисления и печати значений функции

Y=(SIN X+1) COS 4X

Значения аргумента заданы статически в массиве X(10). Значения функции записать в массив Y(10) и распечатать в пять строк.

DATA 5,6.78,56,7.34,678,89,5,23.9,10,34.7

DIM X(10),Y(10)

FOR J=1 TO 10

READ X(J)

NEXT J

FOR J=1 TO 10

Y(J)=(SIN(X(J))2+1)*SQR(COS(4*X(J))2)

PRINT Y(J);

IF J MOD 2 = 0 THEN PRINT

NEXT J

END


Двумерные массивы




Основные понятия



Бейсик позволяет работать с массивами, имеющими до 255 измерений и содержащими до 32767 элементов по каждому из них. Однако следует хорошо подумать, стоит ли использовать эти возможности в полном объеме. Если вы сделаете свои массивы слишком большими, то будете долго вспоминать, как получить доступ к той или иной информации. В то же время иногда решение задачи возможно только при наличии многомерных массивов, или матриц. Наиболее часто применяются двумерные массивы, поскольку описывать информацию по ее позиции в одномерном списке весьма неудобно. Представьте себе, как трудно было бы найти свое место на стадионе, если бы на билете указывался лишь порядковый номер сиденья - один из многих тысяч! Билеты же, на которых проставлены и номер ряда, и номер места, существенно упрощают эту задачу. Составители географических карт тоже пользуются таким приемом. Координаты Парижа, Осло, Рима, обозначаются не как 1, 2 или 300, а в терминах градусов широты и долготы. Эти два числа указывают местоположение города относительно экватора и начального (Гринвичского) меридиана.

В Бейсике предусмотрены средства, с помощью которых вы можете организовать информацию таким же образом. Составляя программу, представьте себе прямоугольную таблицу наподобие пчелиных сот, или матрицу, где будут храниться данные. Каждое значение можно "положить в ячейку" и "вынуть из нее", если указаны номер соответствующих строки и столбца.

Имя и размерность матрицы определяется оператором

DIM A(3,4)

Этот оператор зарезервирует 12 ячеек:

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

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

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

Каждый элемент описывается двумя индексами: первый обозначает номер строки, а второй - номер столбца.




Столбец 1

столбец 2

столбец 3

столбец 4

строка 1

1,1

1,2

1,3

1,4

строка 2

2,1

2,2

2,3

2,4

строка 3

3,1

3,2

3,3

3,4

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

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



Пример статического заполнения и печати двумерного массива.

DATA Настя,Ульяна,Женя

DATA Щербакова,Евланова,Клочко

DIM A$(2,3)

FOR I=1 TO 2 ' Заполнение массива

FOR J=1 TO 3

READ A$(I,J)

NEXT J,I

FOR I=1 TO 2

FOR J=1 TO 3 ' Печать значений массива по строкам

PRINT A$(I,J);

NEXT J

PRINT

NEXT I

Пример динамического заполнения и печати двумерного массива.

DIM A(5,4)

FOR I=1 TO 5 ' Заполнение массива

FOR J=1 TO 4

INPUT A(I,J)

NEXT J,I

FOR I=1 TO 5 ' Печать значений массива по строкам

FOR J=1 TO 4

PRINT A(I,J);

NEXT J

PRINT

NEXT I

Пример заполнения массива с помощью стандартной функции RND.

DIM M(2,8)

FOR I=1 TO 2

FOR J=1 TO 8

M(I,J)=INT(RND(1)*10) ' Заполнение массива случайными

PRINT M(I,J); ' числами и печать значений массива

NEXT J ' по строкам

PRINT

NEXT I

Действия над элементами двумерного массива



Пример 1. Задана матрица U(7,3). Отрицательные элементы матрицы заменить на 0. Измененный массив вывести на экран.

DIM U(7,3)

FOR I=1 TO 7 ' Заполнение массива отрицательными и

FOR J=1 TO 3 ' положительными числами

U(I,J)=INT(RND*20-10)

PRINT U(I,J);

NEXT J

PRINT

NEXT I: PRINT

FOR I=1 TO 7

FOR J=1 TO 3

IF U(I,J)<0 THEN U(I,J)=0

PRINT U(I,J);

NEXT J

PRINT

NEXT I

END


Пример 2. Найти сумму положительных элементов четных строк матрицы C(5,3).

DIM С(5,3)

FOR I=1 TO 5

FOR J=1 TO 3

С(I,J)=INT(RND(1)*20)

PRINT С(I,J);

NEXT J

PRINT

NEXT I: PRINT

S=0

FOR I=2 TO 5 STEP 2

FOR J=1 TO 3

S=S+C(I,J)

NEXT J

NEXT I

END


Пример 3. Дана матрица U(7,3). Получить массив Q(7), элементами которого являются количество отрицательных элементов соответствующих строк матрицы U(7,3).

DIM U(7,3),Q(7)

FOR I=1 TO 7 ' Заполнение массива отрицательными и

FOR J=1 TO 3 ' положительными числами

U(I,J)=INT(RND(1)*20-10)

PRINT U(I,J);

NEXT J

PRINT

NEXT I: PRINT

FOR I=1 TO 7

K=0

FOR J=1 TO 3

IF U(I,J)<0 THEN K=K+1

NEXT J

Q(I)=K: PRINT Q(I);

NEXT I

END


Пример 4. Задан массив C(5,3). В массив К(5) записать суммы элементов соответствующих строк массива C(5,3). Вывести на экран значения элементов массива K(5).

DIM С(5,3),K(5)

FOR I=1 TO 5

FOR J=1 TO 3

С(I,J)=INT(RND(1)*20)

PRINT С(I,J);

NEXT J

PRINT

NEXT I: PRINT

FOR I=1 TO 5

S=0

FOR J=1 TO 3

S=S+C(I,J)

NEXT J

K(I)=S: PRINT K(I); ' Формирование и печать массива К

NEXT I

END


Пример 5. Задана матрица М(6,3), подсчитать количество строк, в которых первый элемент строки меньше нуля.

DIM M(6,3)

FOR I=1 TO 6

FOR J=1 TO 3

U(I,J)=INT(RND(1)*20-10)

PRINT M(I,J);

NEXT J

PRINT

NEXT I: PRINT

FOR I=1 TO 6

IF M(I,1)<0 THEN K=K+1 ' Подсчет количеств строк

NEXT I

PRINT " Количество строк=";K


Пример 6. В заданной матрице N(4,6) поменять местами строки L и K. Измененную матрицу вывести на экран.

DIM N(4,6)

FOR I=1 TO 4

FOR J=1 TO 6

N(I,J)=INT(RND(1)*20)

PRINT N(I,J);

NEXT J

PRINT

NEXT I

INPUT " Введите строки, которые необходимо поменять местами ";L,K

FOR J=1 TO 6

SWAP N(L,J),N(K,J) ' Меняются местами строки

NEXT J

FOR I=1 TO 4 ' Печать измененного массива

FOR J=1 TO 6

PRINT N(I,J);

NEXT J

PRINT

NEXT I


Объявление размерности массива бывает переменным, т.е. размерность выясняется в процессе работы программы.

Пример 7. Задана матрица A(n,m), получить массив B(n), элементами которого являются сумма наименьшего и наибольшего элементов соответственной строки матрицы A(n,m).

INPUT " Введите количество строк и столбцов матрицы A "; N,M

DIM A(n,m),B(n)

FOR I=1 TO N ' Динамическое заполнение

FOR J=1 TO M ' массива

INPUT A(I,J)

NEXT J,I

FOR I=1 TO N ' Печать элементов массива A

FOR J=1 TO M

PRINT A(I,J);

NEXT J

PRINT

NEXT I: PRINT

FOR I=1 TO N

MI=A(I,1): MA=A(I,1) ' Первый элемент каждой строки

FOR J=2 TO M ' запоминается в переменных MI,MA

IF A(I,J) < MI THEN MI=A(I,J)

IF A(I,J) > MA THEN MA=A(I,J)

NEXT J

B(I)=MI+MA: PRINT B(I); ' Формирование массива В

NEXT I

END


Матрица, у которой количество строк равно количеству столбцов, называется квадратной.

Пример 8. Задана квадратная матрица A порядка N. Получить массив B(n), элементами которого являются первый положительный элемент соответствующей строки квадратной матрицы A.

INPUT " Введите количество строк и столбцов матрицы A "; N

DIM A(n,n),B(n)

FOR I=1 TO N

FOR J=1 TO N

INPUT A(I,J)

NEXT J,I

FOR I=1 TO N

FOR J=1 TO N

PRINT A(I,J);

NEXT J

PRINT

NEXT I: PRINT

FOR I=1 TO N

FOR J=1 TO N

IF A(I,J)>0 THEN B(I)=A(I,J):J=N ' Формирование массива В

NEXT J

PRINT B(I);

NEXT I

END


Элементы квадратной матрицы, у которых номер строки совпадает с номером столбца, располагаются на главной диагонали матрицы.

В квадратной матрице B(4,4)

B(1,1), B(1,2), B(1,3), B(1,4)

B(2,1), B(2,2), B(2,3), B(2,4)

B(3,1), B(3,2), B(3,3), B(3,4)

B(4,1), B(4,2), B(4,3), B(4,4)

элементы B(1,1), B(2,2), B(3,3), B(4,4) располагаются на главной диагонали матрицы.

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

DIM A(5,5)

FOR I=1 TO 5

FOR J=1 TO 5

A(I,J)=INT(RND(1)*20)

PRINT A(I,J);

NEXT J

PRINT

NEXT I: PRINT

FOR I=1 TO 5 ' Замена нулями элементов, расположенных на

A(I,I)=0 ' главной диагонали

NEXT I

FOR I=1 TO 5

FOR J=1 TO 5

PRINT A(I,J); ' Печать измененной матрицы

NEXT J

PRINT

NEXT I


Пример 10. Дана квадратная матрица порядка N. В строках с отрицательным элементом на главной диагонали найти сумму всех элементов строки. На экран вывести сумму элементов и номер строки.

INPUT " Введите количество строк и столбцов "; N

DIM С(N,N)

FOR I=1 TO N

FOR J=1 TO N

С(I,J)=INT(RND(1)*20)

PRINT С(I,J);

NEXT J

PRINT

NEXT I

FOR I=1 TO N

S=0

FOR J=1 TO N

IF C(I,I)<0 THEN S=S+C(I,J)

NEXT J

IF S<>0 THEN PRINT " Сумма элементов =";S," Номер строки =";I

NEXT I