Подпрограммы 33 Функции, определяемые пользователем 34 Работа со строковыми типами данных 36 Оператор line input 36
Вид материала | Справочник |
- Любая программа для обработки данных должна выполнять три основных функции: ввод новых, 298.05kb.
- Лекция 11. Расчеты на листе Excel, 115.64kb.
- Отчет по дисциплине «методы оптимизации и принятия решения» на тему «лабараторная работа, 20.52kb.
- Отчет по дисциплине «методы оптимизации и принятия решения» на тему «лабараторная работа, 20.92kb.
- Программа дисциплины Базы данных Семестры, 12.06kb.
- Expression Line Complex 5 Линия diamond 7 special fx line 17 spa line коллекция, 5511.84kb.
- Паспорт подпрограммы наименование подпрограммы основание для разработки подпрограммы, 277.86kb.
- Новый способ архивирования данных передаем фильм с помощью sms, 198.04kb.
- С. Д. Кузнецов. Основы современных баз данных, 460.72kb.
- Уроки №5-6 тема: " Программирование ветвящихся алгоритмов. Оператор выбора, 58.01kb.
Массивы
Одним из важных инструментов программиста является возможность работы с массивами переменных.
Массив - набор однотипных данных, хранящихся вместе и имеющих общее имя.
Возможность объединения групп элементов в массив позволяет, с одной стороны, облегчить массовую обработку данных, а с другой - упростить идентификацию элементов массива.
Каждому элементу массива может быть присвоено одно числовое или символьное значение, поэтому различаются массивы числовые и символьные. Кроме того, массивы могут быть одномерными и многомерными.
Одномерные массивы
Основные понятия:
Массив обозначается одним именем. Так всю совокупность действительных чисел
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. Подсчитать общую сумму 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
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
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
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
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 ' по строкам
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
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
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
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
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
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
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
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
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
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
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
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
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
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
0>0>0>0>0>