Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Действия над элементами двумерного массива
Пример 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
Подпрограммы Подпрограммой называется участок программы, оформленный определенным образом, к которому можно обращаться из разных точек программы любое число раз. При этом подпрограмма может решать каждый раз одну и ту же задачу с разными значениями исходных данных. Использование подпрограмм позволяет существенно уменьшить объем рабочей программы. Деление программы на подпрограммы делает программу более понятной. Обращение к подпрограмме осуществляется с помощью команды GOSUB номер строки или метка По этой команде управление передается подпрограмме - блоку команд, первая из которых помечена номером строки или меткой. Последней выполняемой командой подпрограммы является RETURN. По этой команде управление передается в основную программу на оператор, стоящий за оператором GOSUB. Если нарушено согласование операторов RETURN и GOSUB, то выводится сообщение об ошибке “RETURN without GOSUB”. Подпрограммы располагаются в конце основной программы и отделяются от основной программы оператором END. Пример 1. Написать подпрограмму вывода подчеркивания информации. Длина черты переменная. N=5 GOSUB A ‘вызов подпрограммы для вывода знака подчеркивания 5 раз N=30 GOSUB A ‘вызов подпрограммы для вывода знака подчеркивания 30 раз END A: FOR I=1 TO N ‘подпрограмма вывода знака подчеркивания PRINT ”_“; NEXT I RETURN ‘оператор возврата в основную программу Пример 2. Вычислить функцию: C = m! n! /(m-n)! 1 INPUT “Введите m> n”; m, n IF M< =N THEN 1 ‘проверка входных данных R=M GOSUB A ‘вызов подпрограммы для вычисления m! R1=F: R=N GOSUB A ‘вызов подпрограммы для вычисления n! R2=F: R=M-N GOSUB A ‘вызов подпрограммы для вычисления (m-n)! C=(R1+R2)/F: PRINT “C=”; C END A: F=1 ‘подпрограмма вычисления факториала FOR I=2 TO R F=F*I NEXT I RETURN ‘оператор возврата в основную программу Для самостоятельного решения Составить программу расчета заработной платы по формуле: оклад * количество дней * 1.4-подоходный налог. Расчет заработной платы оформить в подпрограмме. Функции, определяемые пользователем
Помимо стандартных числовых функций (sin, cos и т.д.) или символьных функций пользователь может определить и свои собственные. Иногда при решении задач возникает необходимость вычисления одного и того же выражения при различных значениях величин, входящих в это выражение. Вот тогда и применяются функции, определяемые пользователем. Формат: DEF FN < имя функции> (< список формальных параметров> )=< выражение> Обращение к функции пользователя осуществляется FN < имя функции> (< список фактических параметров> ) Имя определяемой функции должно быть уникально: оно не может повторять имя другой процедуры, переменной или функции. Формальные параметры резервируют место в памяти для фактических параметров, которые должны быть определены к моменту выполнения функции. Параметры могут быть любого типа. Примеры определения функции: DEF FNKT(X)=COS(X)/SIN(X) DEF FNP(A, B)=A/B*100 X, A, B – формальные параметры Между формальными и фактическими параметрами и их типами существует однозначное позиционное соответствие слева направо. Примеры обращения: FNKT(X) FNP(C, D) X, C, D - фактические параметры Имена формальных и фактических параметров могут не совпадать. С помощью оператора DEF FN можно описать более сложную функцию, занимающую несколько строк Формат: DEF FN < имя функции> (< список аргументов> ) < блок команд> FN< имя функции> =< выражение> END DEF В строке FN< имя функции> =записывается выражение, значение которого функция возвращает. Пример1. Отрезки заданы координатами концов. Сравнить эти отрезки. DEF FNL(x1, x2, y1, y2)=SQR((x1-x2)^2+(y1-y2)^2) ‘функция нахождения длины отрезка INPUT “введите координаты первого отрезка”, x1, x2, y1, y2 L1=FNL(x1, x2, y1, y2) INPUT “введите координаты второго отрезка”, x1, x2, y1, y2 L2=FNL(x1, x2, y1, y2) IF L1> L2 THEN ? “длина первого отрезка больше” ELSEIF L2> L1 THEN ? “длина второго отрезка больше ELSE ? “отрезки равны” END IF Пример 2. Вычислить сложное выражение, используя определяемую функцию для вычисления повторяющейся в нем части. K=½ (1+m^2)/cos(1-m)½ –5*Ö ½ (c+d^2)/cos(c-d)½ +tg½ (x+y^2)/cos(x-y)½
DEF FNT(a, b)=abs((a+b^2)/cos(a-b)) INPUT “Введите 5 значений”, m, c, d, x, y K=FNT(1, m)-5*sqr(FNT(c, d))+tan(FNT(x, y)) ? “K=”; K Пример 3. Вычислить сумму N членов ряда. Факториал вычислять с помощью функции пользователя. S=1! /4! +4! /5! +9! /6! +16! /7! +…+(n^2)! /(n+3)!
DEF FNFACT(M) P=1 FOR I=1 TO M P=P*I NEXT I FNFACT=P END DEF INPUT “Введите n”; N S=0 FOR J=1 TO N S=S+FNFACT(J^2)/FNFACT(J+3) NEXT J ? “S=”; S
Задание: 1. Вычислить сложное выражение, используя определяемую функцию для вычисления повторяющейся в нем части. C=Ö (d+½ e½ )/tg(de)+(x+½ y½ )/tg(xy)-(z+½ t½ )/tg(zt) 2. Вычислить функцию: C = m! n! /(m-n)!. Для вычисления факториала использовать определяемую функцию.
Практическое занятие с использованием подпрограмм и функций пользователя 1 вариант
2 вариант 1. Дан одномерный массив со значениями веса кур на птицефабрике. Найти средний вес кур. Найти вес самой тяжелой курицы. Заполнение массива, подсчет среднего веса и нахождение веса самой тяжелой курицы оформить отдельными подпрограммами.
Популярное:
|
Последнее изменение этой страницы: 2017-03-08; Просмотров: 838; Нарушение авторского права страницы