Навигация по странице:
|
Лабораторная работа ## Обработка массивов в среде Mathcad. Цель работы
Методические указания к лабораторной работе
"Обработка массивов в среде Mathcad"
Лабораторная работа № ##
Обработка массивов в среде Mathcad.
Цель работы:
Изучить основные типовые алгоритмы обработки одномерных массивов.
Научиться разрабатывать схемы для задач обработки одномерных массивов.
Освоить приёмы перехода от схемы алгоритма к программе.
Порядок выполнения работы
Изучение типовых алгоритмов обработки одномерных массивов.
Изучение правил разработки схем типовых алгоритмов обработки одномерных массивов.
Изучение приёмов перехода от схемы алгоритма к программе.
Разработка математического описания, схемы алгоритма и программы для задач, выданных преподавателем.
Краткие теоретические сведения.
1Основные алгоритмы обработки одномерных массивов
В данной лабораторной работе рассматриваются следующие типовые алгоритмы обработки одномерных массивов:
- формирование элементов массива по заданным формулам;
- накопление суммы всех элементов массива или суммы элементов массива удовлетворяющих заданному условию;
- накопление произведения всех элементов массива или произведения элементов массива удовлетворяющих заданному условию;
- вычисление количества элементов массива, удовлетворяющих заданному условию;
- вычисление среднего значения (среднего арифметического и среднего геометрического) элементов массива а также среднего значения элементов массива, удовлетворяющих заданному условию;
- нахождение минимального (максимального) элемента массива и его порядкового номера (индекса).
Напомним, что массивом называется упорядоченная последовательность данных, обозначенная одним именем. Положение конкретного элемента массива определяется его порядковым номером (индексом). Начальное значение индекса в массиве зависит от системной переменной ORIGIN. По умолчанию ORIGIN=0, но, по желанию пользователя, этой переменной можно присвоить любое целое число (положительное или отрицательное).
Обработка массивов осуществляется с использованием циклического алгоритма, так как над каждым элементом массива, как правило, выполняются однотипные операции. Обычно в качестве переменной цикла выступает номер (индекс) элемента массива, принимающий последовательно все значения, начиная с номера первого элемента до номера последнего элемента массива с шагом единица. Ниже приведено краткое описание типовых алгоритмов с примерами блок-схем для обработки некоторого исходного массива X из n элементов. Для определенности примем начало отсчета индекса с единицы, т.е. ORIGIN=1.
1.1Формирование элементов нового массива по заданным формулам. Пусть задан массив {Xi}, i=. Сформировать n элементов нового массива Y по формулам:
Пример схемы алгоритма формирования нового массива показан на рис. 1.
Рис.1.Пример схемы алгоритма формирования нового массива.
|
Здесь по переменной i (индексу элемента массива) организован цикл, который будет выполняться n раз. При каждом выполнении тела цикла вычисляется элемент массива Yi по одной из двух заданных формул в зависимости от проверяемого условия.
1.2Накопление суммы элементов массива .
Задача сводится к организации цикла, в котором будет накапливаться сумма элементов массива путем прибавления текущего значения Xi к сумме предыдущих по формуле S=S+Xi (рис. 2). Начальному значению суммы S перед выполнением цикла следует присвоить значение ноль.
Рис. 2. Пример схемы алгоритма накопления суммы элементов массива.
|
Рис. 3. Пример схемы алгоритма накопления суммы элементов Xi >5 .
|
Если нужно вычислить сумму только тех элементов массива, которые удовлетворяют заданному условию, то накопление суммы должно выполняться в случае истинности проверяемого условия (рис. 3).
1.3Накопление произведения элементов массива . Задача сводится к организации цикла, в котором будет накапливаться произведение элементов массива путем умножения текущего значения Xi на произведение предыдущих по формуле P=P*Xi (рис. 4). Начальному значению переменной P перед началом цикла следует присвоить значение единица. Для вычисления произведения элементов массива, удовлетворяющих заданному условию, необходимо предварительно проанализировать истинность проверяемого условия (рис. 5).
Рис. 4. Пример схемы алгоритма накопления произведения элементов массива.
|
Рис. 5. Пример схемы алгоритма накопления произведения элементов Xi >5.
|
1.4Вычисление количества элементов массива, удовлетворяющих заданному условию. Задача сводится к организации цикла, в котором будет анализироваться каждый элемент массива и, в случае выполнения заданного условия, накапливаться их количество путем прибавления единицы. Начальному значению количества перед началом цикла следует присвоить значение ноль. На рис. 6 приведена схема алгоритма для подсчета количества элементов массива Хi, для которых выполняется условие: Хi>5. 1.5
Рис. 6. Пример схемы алгоритма
вычисления количества элементов Xi>5.
|
Вычисление среднего арифметического элементов массива, удовлетворяющих заданному условию. Для этого в цикле анализируется каждый элемент массива и, в случае выполнения заданного условия, накапливаться их сумма путем прибавления выбранного элемента к сумме предыдущих и количество путем прибавления единицы. Начальному значению суммы и количества перед началом цикла следует присвоить значение ноль. После завершения цикла вычисляется среднее значение по формуле , где k – количество элементов массива, удовлетворяющих заданному условию (рис. 7).
Рис. 7. Пример схемы алгоритма вычисления среднего арифметического элементов Xi>5
|
Для вычисления среднего геометрического элементов массива следует организовать цикл, в котором будет накапливаться произведение и количество элементов массива, удовлетворяющих заданному условию. Значение среднего геометрического вычисляется после завершения цикла по формуле .
1.6Нахождение максимального (минимального) элемента массива и его порядкового номера (индекса).Рассмотрим алгоритм нахождения в массиве Х максимального элемента и его номера. Введем обозначения: Мах – имя переменной для хранения максимального элемента массива, nMax – имя переменной для хранения индекса максимального элемента. Предварительно (условно) в качестве стартового значения переменной Мах присвоим значение первого элемента массива (Х1), а переменной nMax - его номер (1). Нахождение максимального элемента выполняется в цикле. Алгоритм основан на сравнении текущего i-го элемента массива Хi со значением переменной Мах. Если значение очередного элемента массива Хi окажется больше значения Мах, то это значение следует считать максимальным, а его индекс – номером максимального элемента. В противном случае переменные Мах и nMax сохраняют прежние значения. Схема алгоритма приведена на рис. 8.
В ряде случаев требуется определить максимальный (минимальный) элемент среди особых элементов массива, т.е. среди элементов, удовлетворяющих некоторому заданному условию. Данный алгоритм во многом аналогичен алгоритму, приведенному выше, только перед началом цикла в ячейку для хранения значения искомого максимального (минимального) элемента рекомендуется записать значение, заведомо не являющееся максимальным (минимальным) для данного массива, а в ячейку для хранения номера искомого элемента - значение ноль.В цикле следует дополнительно проверять удовлетворяет ли текущий i-й элемент массива Хi заданному условию. Пример схемы алгоритма поиска в массиве максимального положительного элемента и его порядкового номера приведен на рис. 9.
Рис. 8. Схема алгоритма нахождения максимального элемента массива и его порядкового номера.
|
Рис. 9. Схема алгоритма нахождения максимального положительного элемента массива и его порядкового номера.
|
2Программирование задач обработки одномерных массивов
Рассмотрим на примерах основные этапы решения задач обработки одномерных массивов.
Пример№1. Задан вектор vX из n элементов. Cоставить функцию пользователя для формирования нового вектора vY по следующим формулам:
I Математическое описание задачи
Дано: вектор vX=vXi,
Основные зависимости, необходимые для решения задачи:
vYi=vXi-5 (1)
vYi=vXi+5 (2)
Ограничения:
Зависимость (1) выполняется, если vXi>5;
Зависимость (2) выполняется, если vXi5;
Найти: вектор vY=vYi, .
II Схема алгоритма формирования нового вектора vY с краткими комментариями представлена на рис. 10.
Рекомендация! Количество элементов в векторе можно определить с помощью встроенной функции rows(имя вектора ) или length(имя вектора ).
Определение количества элементов в исходном векторе с помощью встроенной функции rows()
Цикл вычисления элементов нового массива vY на основе исходного vX по заданным формулам, в зависимости от результатов проверки условия.
Рис. 10. Схема алгоритма формирования
нового вектора vY
|
III Определение функции пользователя Fun_2V(vX) для формирования элементов нового массива. Fun_2V –имя функции (задано произвольно), vX - формальный параметр функции.
Листинг 1 с текстом функции пользователя.
IV Вызов функции пользователя. Для проверки работы функции создадим с помощью шаблона вектор vA из 5-ти произвольных элементов:
Функция Fun_2V(vA) возвращает массив, элементами которого являются два вектора: исходный и результирующий (т.е., возвращает массив массивов).
Ответ в виде ( {5,1} {5,1} ) означает вывод двух массивов, каждый из которых содержит 5 строк и 1 столбец. Чтобы отобразить содержимое этих массивов достаточно выполнить двойной щелчок мыши в правой части оператора вывода и в появившемся диалоговом окне Формат Результата на закладке Параметры экрана включить опцию Развернуть вложенные массивы.
В ряде случаев целесообразно объединить возвращаемые массивы, представив их в виде матрицы. В листинге 2 представлен второй вариант программного блока для формирования нового вектора, отличающийся от предыдущего только последней строкой. В последней строке используется функция аugment(vX,vY), с помощью которой два вектора будут объединены в матрицу. В этом случае при обращении к функции Fun_2V(vA) будет выведена матрица, в первом столбце которой находится исходный вектор, а во втором – результирующий.
Листинг 2 с текстом функции пользователя.
Пример№2. В массиве целых чисел vA={vAi}, i= вычислить количество чётных, положительных элементов. Если в массиве таких элементов не окажется, то вывести об этом сообщение Исходный массив создать на интервале [-10,10] с помощью встроенной функции для генерации случайных чисел. Количество элементов в массиве n задать произвольно.
I Математическое описание задачи
Дано: n, {vAi},i=
Основные зависимости:
к=к+1 (1)
Ограничения:
зависимость (1) выполняется, если i-й элемент массива vAi >0 и четный;
если в массиве не окажется четных положительных элементов, то вывести об этом сообщение.
Найти: к.
Рекомендация: Для проверки четности элемента можно использовать встроенную функцию mod(x, y). Эта функция возвращает остаток от деления x на y. Результат имеет один знак с x.
II Схема алгоритма представлена на рис. 11.
Рис. 11. Схема алгоритма
III Листинг 3 с текстом функции пользователя
IV Вызов функции пользователя. Для проверки работы функции Fun_Count( ) сначала создадим вектор vC из 15-ти элементов на интервале [-10, 10], а затем обратимся к функции Fun_Count с фактическим параметром vC.
- Создание вектора vC:
- Вызов функции с Fun_Count(vC)
В созданном векторе оказалось 4 элемента, которые удовлетворяют заданному условию.
При повторном обращении к функции runif( ) будут получены другие значения вектора vC.
- Создание вектора vC:
- Вызов функции с Fun_Count(vC):
В созданном массиве не оказалось элементов, удовлетворяющих заданному условию.
Содержание отчета по лабораторной работе
Тема и цель лабораторной работы;
-
Условия задач, выданные преподавателем;
Математическое описание задач.
Схемы алгоритмов.
Записи функций пользователя с текстом программ.
Листинги с текстом программ (с комментариями) и результатами выполнения.
Анализ результатов.
Контрольные вопросы.
Какие типовые алгоритмы используются при обработке массивов?
Как подсчитать сумму (произведение) всех элементов массива?
Как подсчитать сумму (произведение) особых элементов массива?
Какой принцип используется при подсчете количества особых элементов массива?
Как организуется вычисление среднего арифметического элементов массива?
Как организуется вычисление среднего геометрического элементов массива?
На каком принципе основан поиск максимального (минимального) элементов массива?
На каком принципе основан поиск максимального (минимального) среди особых элементов массива?
Назначение встроенной функции mod(x,y).
Использование встроенной функции mod(x,y) для проверки кратности чисел.
Назначение встроенной функции rnd(X).
Назначение встроенной функции runif(n,a,b).
Отличие в использовании функций rnd( ) и runif( ).
Назначение встроенной функции trunc(х).
Назначение встроенной функции round(х).
Назначение встроенной функции floor(х).
Назначение встроенной функции ceil().
Для справки:
Функции для получения псевдослучайных чисел:
- функция rnd(x) возвращает универсальное случайное вещественное число на интервале от 0 до х; для получения случайного вещественного числа на интервале от a до b используется обращение к функции в виде: a+rnd(b-a);
- функция runif(n,a,b) возвращает вектор из n вещественных случайных чисел с универсальным распределением на интервале от a до b.
Для получения целочисленных случайных чисел достаточно к результату, возвращаемому функцией rnd(x) или runif(n,a,b) применить одну из функций округления.
Функции для округления вещественного числа:
1. trunc(х) - возвращает целую часть вещественного числа х;
2. round(х) - возвращает число, округленное до ближайшего целого;
3. floor(х) - возвращает наибольшее целое, меньшее или равное х;
4. ceil() - возвращает наименьшее целое, большее или равное х.
Примеры создания векторов с помощью функций для генерации случайных чисел:
- с помощью функции rnd( ):
a) вектор vB из 25 вещественных чисел на интервале от -5 до 15:
i:=1,2..25 vBi :=-5+rnd(21);
b) - вектор vX из 50 целых чисел на интервале [20,35]
i:=1,2..50 vBi :=20+round(rnd(16));
c) – вектора из 45-ти вещественных и целых чисел на интервале от -4 до 4. Ниже приведены первые 10 элементов созданных массивов.
Функции rows( ) или length( ) используются для определения количества элементов в векторе.
Функция mod(x, y) возвращает остаток от деления x на y. Результат имеет один знак с x. Эта функция может быть использована для проверки кратности числа х числу y.
Функция concat(S1, S2, S3, …) возвращает строку, образованную присоединением строки S2 к концу строки S1, строки S3 к концу строки S2 и т.д.
Функция num2str(x) возвращает строку, символы которой соответствуют десятичному числу х.
ст. преп. каф. ЭВМ Скабалланович Т.И.
|
|
|