Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Одномерные массивы - векторы
Пример 1 Рассчитать функцию Т по формуле Т при а = 2, 34 для пяти значений аргумента х1=0, 1; х2=3, 5; х3=0, 01; х4=-14; х5=3. Все значения функции T сохранить в памяти компьютера. Дополнительно найти произведение четных элементов массива T для заданных значений хi. Программа
CLS REM Программа массив-строка DIM X[5], T[5] A = 2.34: P=1 FOR I=1 TO 5 INPUT X[I] T[I]=(X[I]^2+SIN(X[I])^2)/SQR(X[I]*A+1) PRINT " T[" I]="; T[I], " X[" I" ]="; X[I] IF INT((I/2)-I/2< 0 GOTO L P=P*T[I] L: NEXT I PRINT " P="; P END Описание программы: После очистки экрана и ввода названия программы оператором DIM X[5], T[5] резервируется память для шести элементов массива Х и шести элементов массива Т (счёт индексов с 0, при этом ячейки для X[0] и T[0] использоваться не будут, т.к. индекс I начинается с единицы). Величине А присваивается значение 2, 34 и первому значению произведения Р присваивается 1. Оператором FOR… первому значению I присваивается 1, затем оператором INPUT X[I] с клавиатуры вводится X[1]= 0.1, для этого значения элемента рассчитывается T[1]=f (X[1], A) и распечатываются величины Т[1] и Х[1]. В строке IF INT((I/2)-I/2< 0 проверяется чётность индекса I - номера элемента массива Здесь функция INT(…) отбрасывает дробную часть элемента, поэтому для I=1 получим INT(1/2) – 1/2 или 0 – 0, 5 = - 0, 5 < 0, т.е. условие IF выполняется, программа оператором GOTO переходит по метке L к оператору NEXT I, а в произведение P=P*T[I] нечётный элемент T[I] не попадает. Оператор NEXT I возвращает цикл к оператору FOR…, где I присваивается следующее значение 2, затем вводится X[2]= 3.5, вычисляется T[2]=f (X[2], A) и распечатывается вместе с Х[2]. Снова выполняется проверка на чётность, теперь INT((2/2)-2/2 даёт значение 0, а это не < 0, т.е. условие не выполняется, поэтому программа переходит к следующему оператору P=P*T[I], где первое значение Р=1 умножается на чётный элемент Р[2]. Затем оператор NEXT снова возвращает вычислительный процесс на начало цикла FOR… и так далее, до I=5. Когда все пять элементов функции T[I] будут рассчитаны, а её чётные значения перемножены в произведении Р, оператор PRINT " P="; P распечатывает его на экране и END – конец программы. Двумерные массивы – матрицы. Обработка массивов Пример 2 Вычислить сумму элементов массива А[3, 4] Программа CLS REM Программа массив-матрица DIM А[3, 4]: S=0 FOR I=1 TO 3 FOR J=1 TO 4 INPUT A[I, J] S=S+A[I, J] NEXT J NEXT I ? " S="; S END Описание программы: После задания размерности массива (4х5=20 ячеек) оператором DIM А[3, 4] и ввода первого значения сумы S=0 открывается цикл по номеру строки массива I, первое значение I=1, затем открывается вложенный цикл по номеру столбца массива J и присваивает первому J значение 1, т.е. в массиве указывается элемент первой строки первого столбца А[1, 1]. Оператором INPUT A[I, J] вводится элемент А[1, 1], т.е. число 9, затем оно складывается с первым значение S=0, т.е. S=0+9=9. Оператор NEXT J возвращает программу к своему FOR…, где J становится равным 2 (индекс строки I ещё равен 1), далее вводится элемент A[1, 2], равный -4, он прибавляется к предыдущему S, т.е. получается S=9+(-4) = 5 и т.д. Нетрудно заметить, что при такой организации вложения циклов элементы массива А считываются построчно – 1-я строка I проходится по всем столбцам J, затем 2-я строка и т.д. После перебора построчно всех элементов значение накопленной суммы S выводится на экран и программа завершается.
Пример 3 Вычислить произведение элементов главной диагонали массива А[4, 4]
Программа CLS REM Программа матрица -ввод, обработка DIM А[4, 4]: Р=1 FOR I=1 TO 4 ' Блок ввода: FOR J=1 TO 4 ' ввод всех INPUT A[I, J] ' элементов NEXT J ' массива NEXT I ' в ОЗУ I=1: J=1 ' обработка m14: P=P*A[I, J] ' введённых I-I+1: J=J+1 ' элементов IF I< =4 THEN m14 ' массива ? " P="; Р ' END Описание программы: После задания размерности массива и присвоения начальному произведению Р значения 1 (DIM А[4, 4]: Р=1) во вложенном цикле по I и J вводятся все элементы матрицы (построчно), затем введённый массив обрабатывается, в данном случае вычисляется произведение главной диагонали. Поскольку в главной диагонали задействованы только элементы А11, А12, А21, А22, то можно заметить, что для них индексы I и J изменяются (увеличиваются на 1) одновременно, поэтому цикл нужно организовать вручную, с помощью оператора IF…. Для этого присваиваем I и J значе- ния 1, тем самым получим элемент A[1, 1], потом умножаем его на предыдущее значение Р=1, затем увеличиваем I и J на 1 и выполняем проверку – если I ещё меньше 4, то программа возвращается по метке m14 к увеличению произведения, если I уже больше 4, т.е. программа вышла за пределы матрицы, то Р распечатывается и программа заканчивается. Проверка на выход из размеров матрицы могла бы быть организована и по J< =4, это некритично. Особенностью программы является то, что она состоит из двух частей – ввод массива в память и обработка массива, уже находящегося в ОЗУ компьютера. В примерах 1 и 2 элемент массива вводился и сразу обрабатывался согласно заданию ( найти произведение чётных элементов, найти сумму всех элементов). Данная программа является универсальной, т.к. этап ввода массива в память должен выполняться всегда, а виды обработки могут быть в каждой задаче разными (см. примеры 4 и 5).
Пример 4 Вычислить сумму и количество отрицательных элементов второго и третьего столбцов массива А[4, 4] из примера 3. Программа CLS DIM А[4, 4]: S=0: t=0 FOR I=1 TO 4 ' ввод FOR J=1 TO 4 ' всех INPUT A[I, J] ' элементов NEXT J ' массива NEXT I ' в ОЗУ FOR I=1 TO 4 ' задание индексов (номеров) строк с 1-й по 4-ю FOR J=2 TO 3 ' задание номеров столбцов, только 2-го и 3-го IF A[I, J] < 0 THEN S=S+A[I, J]: t=t+1 ' вычисл. суммы отриц. ' эл-тов A[I, J] массива и их количества t NEXT J NEXT I ? " S="; S, " t="; t ' вывод S и t END Описание программы: После объявления размерности массива оператором DIM А[4, 4] задаются начальное значение суммы отрицательных элементов (S=0) и счётчика t элементов в сумме (t=0). Блок ввода выполнен аналогично, как и в примере 3 для всех элементов матрицы. В блоке выполнения для отбора из всей матрицы только элементов 2-го и 3-го столбцов цикл выборки организован для индексов I=1…4 и J = 2 и 3. Если элемент A[I, J] < 0, то он прибавляется к предыдущей сумме S и t увеличивается на 1, если =0 или положительный, то выполняется переход к следующему элементу.
Пример 5 Найти максимальный и минимальный элементы четвёртой строки массива А[4, 4] из примера 3. Программа CLS DIM А[4, 4] FOR I=1 TO 4 ' ввод FOR J=1 TO 4 ' всех INPUT A[I, J] ' элементов NEXT J ' массива NEXT I ' в ОЗУ max = А[4, 1] ' присвоение переменной max значения элемента A[4, 1] min= А[4, 1] ' присвоение переменной min значения элемента A[4, 1] FOR J=1 TO 4 ' задание номеров столбцов 1…4 IF A[4, J] > max THEN max = A[4, J] ' сравнение max с текущим A[4, J] и присвоение max его значения, если оно > max IF A[4, J] < min THEN min = A[4, J] ' сравнение min с текущим A[4, J] NEXT J ' и присвоение min его значения, если оно < min ? " max="; max, ? " min="; min ' вывод на экран max и min END Описание программы: Программа аналогична предыдущей, но в блоке обработки зафиксирована строка 4 с помощью переменной A[4, J] (цикл по I не нужен), а элементы строки перебираются с помощью цикла по J. Для определения максимального элемента 4-й строки введена переменная max, которой присвоено значение А[4, 1] - первого элемента в 4-й строке (может быть присвоено значение любого элемента этой строки). Далее новой переменной min присваивается значение того же А[4, 1] (может быть любой элемент строки). В цикле FOR… элементы 4-й строки перебираются и, если какой-то из них окажется больше, чем max, то переменной max присваива- ется его значение. В следующей строке элементы проверяются на минимум - если какой-то из них окажется меньше, чем min, то переменной min присваивается его значение По окончании цикла значения max и min распечатываются на экране. 3 Контрольные вопросы 1 Что такое массив данных? 2 Какого назначение оператора DIM? 3 Как описываются одномерные и двумерные массивы? 4 Объясните организацию циклов, содержащих индексированные переменные. 5 Как задать обработку элементов только 2-го столбца? 6 Как задать обработку элементов, расположенных ниже главной диагонали? 7 Как определить максимальный элемент массива? 8 Как определить нечётные элементы массива? Задания 4.1. Рассчитать значения функции согласно своему варианту (№ компьютера в аудитории). Предусмотреть сохранение в памяти вычисленных значений функции.
Содержание отчета 1 Название, цель, содержание работы 2 Задание для своего варианта. 3 Программа расчёта 4 Результаты расчётов в среде QB. 5 Письменные ответы на контрольные вопросы. 6 Выводы по работе Лабораторная работа № 7 Популярное: |
Последнее изменение этой страницы: 2016-05-03; Просмотров: 677; Нарушение авторского права страницы