Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
1
Практическое занятие 3
Программирование в Mathcad
ОГЛАВЛЕНИЕ
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ .................................................................. 2
ПРОГРАММНЫЙ МОДУЛЬ И ЕГО ОПЕРАТОРЫ ................................................................. 6
ПРОГРАММИРОВАНИЕ ЛИНЕЙНЫХ АЛГОРИТМОВ ........................................................ 7
ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ ................................... 10
ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ ............................................... 14
Цикл с известным числом повторений (цикл с параметром) ......................................................................... 14
Цикл с условием ...................................................................................................................................................... 17
Оператор прерывания ............................................................................................................................................ 19
Оператор продолжения .......................................................................................................................................... 20
Оператор прерывания программного модуля ................................................................................................... 20
Оператор обработки ошибок ................................................................................................................................. 20
Вложенные циклы типа for ................................................................................................................................... 21
ПРИМЕРЫ ПРОГРАММИРОВАНИЯ ...................................................................................... 25
Численное интегрирование ................................................................................................................................... 25 1. Постановка задачи. ....................................................................................................................................... 25 2. Метод прямоугольников. ............................................................................................................................. 26 3. Метод трапеций. ........................................................................................................................................... 28 4. Метод парабол (Симпсона). ........................................................................................................................ 29 5. Реализация в Mathcad ................................................................................................................................... 31 6. Общая практическая часть .......................................................................................................................... 33
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ ............................................................................................ 34
Задачи линейной структуры ................................................................................................................................. 34
Задачи на условную и циклическую структуру ................................................................................................ 36
2
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ
Алгоритм – это базовое понятие информатики. На понятии алгоритма построены все
основные принципы программирования – составления программ для вычислительных машин.
Существуют различные определения алгоритма, приведем одно из них.
Алгоритм - это однозначно определенная последовательность действий, записанная на
понятном исполнителю алгоритмическом языке и определяющая процесс перехода от исходных
данных к результату.
Принято выделять следующие свойства алгоритма:
дискретность - алгоритм состоит из отдельных инструкций (шагов), информационный
процесс разделен на отдельные команды;
определенность (детерминированность) - однозначность результатов выполнения
алгоритмов в одинаковых начальных условиях, при этом каждый шаг интерпретируется
исполнителем единственным образом;
результативность - за конечное число шагов достигается некоторый результат, иногда
конечность алгоритма выделяют как отдельное свойство;
массовость - алгоритм работает при меняющихся в некоторых пределах входных данных,
то есть, может быть применен для решения класса задач, различающихся исходными данными.
Иногда выделяют и другие свойства, например, правильность алгоритма означает
правильность результатов, получаемых с его помощью. Алгоритм считается правильным, если он
дает правильные результаты для любых допустимых начальных условий. Алгоритм содержит
ошибки, если его выполнение приводит к сбоям, неправильным результатам, либо вовсе не дает
результатов.
Наряду с понятием алгоритма используют термин алгоритмизация, под которой
понимают совокупность приемов и способов составления алгоритмов для решения
алгоритмических задач. Процесс программирования начинается, как правило, с составления алгоритма –
последовательности операций, описывающих процесс решения задачи. На практике
получили распространение 2 основных формы записи алгоритмов:
словесная или текстовая форма представления алгоритма представляет собой описание
алгоритма на естественном языке или в виде структурированной записи на псевдокоде – также
естественном, но частично формализованном языке;
графическим представлением алгоритма в виде блок–схемы называют описание структуры
алгоритма с помощью геометрических фигур с линиями–связями, показывающими порядок
выполнения отдельных инструкций.
Первый из этих способов не имеет строгой формализации и редко используется в учебных
целых, второй, напротив, является удобным средством изображения алгоритмов и получил
широкое распространение в научной и учебной литературе.
Блок-схема – это последовательность блоков, предписывающих выполнение определенных
операций, и связей между этими блоками. Внутри блоков указывается информация об операциях,
подлежащих выполнению. Конфигурация и размеры блоков, а также порядок графического
оформления блок-схем регламентированы ГОСТ 19002-80 и ГОСТ 19003-80 "Схемы алгоритмов и
программ".
В табл. 1 приведены наиболее часто используемые блоки, изображены элементы связей
между ними и дано краткое пояснение к ним. Блоки и элементы связей называют элементами
блок-схем. Представленных в табл. 1 элементов, как правило, достаточно для изображения всех
алгоритмов, необходимых при выполнении студенческих работ. При соединении блоков следует
использовать только вертикальные и горизонтальные линии потоков.
Горизонтальные потоки, имеющие направление справа налево, и вертикальные потоки,
имеющие направление снизу вверх, должны быть помечены стрелками. Прочие потоки могут быть
помечены или оставлены непомеченными. Линии потоков должны быть параллельны линиям
внешней рамки или границам листа.
3
Таблица 1. Основные элементы блок-схем
Название Элемент Комментарий Процесс
Вычислительное действие или
последовательность
вычислительных действий
Решение
Проверка условия
Модификация
Заголовок цикла
Предопределенный
процесс
Обращение к процедуре
Документ
Вывод данных, печать данных
Перфокарта
Ввод данных
Ввод/Вывод
Ввод/Вывод данных
Соединитель
Разрыв линии потока
Начало, Конец
Начало, конец, пуск, останов,
вход и выход во вспомогательных
алгоритмах Комментарий
Используется для размещения
надписей
Горизонтальные и
вертикальные потоки
Линии связей между блоками,
направление потоков
Слияние
Слияние линий потоков
Межстраничный
соединитель
Нет
4
Составление алгоритма заключается в логическом описании процесса решения
задачи и требует знания элементов математической логики. Следует отметить, что
программированию предшествует важнейший этап – постановка задачи. Постановка
задачи может включать широкий спектр вопросов (разработка математических и
физических моделей, вывод расчетных формул и т.п.). Программист должен четко
представлять явление или формулу, которые он алгоритмизирует.
Алгоритмы можно представлять как некоторые структуры, состоящие из
отдельных базовых (т.е. основных) элементов. Естественно, что при таком подходе к
алгоритмам изучение основных принципов их конструирования должно начинаться с
изучения этих базовых элементов.
Логическая структура любого алгоритма может быть представлена комбинацией трех
базовых алгоритмических структур:
следование или линейный алгоритм;
ветвление или разветвляющийся алгоритм;
циклический алгоритм.
Характерной особенностью базовых структур является наличие в них одного входа
и одного выхода. Ниже приведены графические обозначения (обозначения на блок-схемах) базовых
алгоритмических структур. Используются следующие обозначения: «Серия» обозначает
один или несколько любых операторов (рис.1 и рис.2); «ЛВ» – логическое выражение
(рис.2 и рис.3); «ПЦ» – параметр цикла, «НЗ» – начальное значение параметра цикла,
«КЗ»– конечное значение параметра цикла, «Ш» – шаг изменения параметра цикла (рис.3,
в).
1. Базовая структура «следование». Образуется последовательностью действий,
следующих одно за другим:
Рис.1 Схема базовой структуры «следование».
2. Базовая структура «ветвление». Обеспечивает в зависимости от результата проверки
условия выбор одного из альтернативных путей работы алгоритма. Если его значение
ИСТИНА, переход происходит по ветви Да, иначе – по Нет. Каждый из путей ведет к
общему выходу, так что работа алгоритма будет продолжаться независимо от того,
какой путь будет выбран.
а б
Рис. 2 Схема базовой структуры «ветвление»: а – полная развилка; б – неполная развилка
Серия
Серия
ЛВ
Серия 2 Серия 1
Нет Да
ЛВ
Серия
Да Нет
5
3. Базовая структура «цикл». Обеспечивает многократное выполнение некоторой
совокупности действий, которая называется телом цикла.
а б
в
Рис.3 Схема базовой структуры «цикл»: а – цикл с предусловием(цикл ПОКА); б – цикл
с постусловием(цикл ДО); в - цикл с параметром
Да
Тело
цикла
Нет
ЛВ
ПЦ := НЗ, КЗ, Ш
Тело
цикла
Да
Тело
цикла
ЛВ
Нет
6
ПРОГРАММНЫЙ МОДУЛЬ И ЕГО ОПЕРАТОРЫ
Для создания Mathcad-программы следует воспользоваться панелью инструментов
Программирование/Programming, вызвав ее кнопкой, расположенной на
математической панели
С точки зрения программирования вообще Mathcad-программа представляет собой
подпрограмму-функцию, которая возвращает в качестве результата число, вектор или
матрицу.
Mathcad-программа создается в виде программного модуля. Это самостоятельный
блок, который отличает жирная вертикальная черта.
Оператор Add Line вставляет в рабочий документ конструкцию в виде блока,
который ограничен жирной вертикальной линией, справа от которой расположены поля
ввода команд программного модуля. Чтобы расширить программный блок путем
добавления новых полей ввода, надо повторно вызвать оператор Add Line, но уже внутри
программного модуля. Причем можно не только сделать блок длиннее, но и создать
всевозможные вложенные структуры.
Программный модуль может существовать в рабочем документе как функция без
имени. Рассмотрим пример расчета площади круга обычным способом и в программном
блоке.
Пример 1. Программный модуль без имени.
Площадь круга с радиусом
составит
Вычисление площади при R = 2 в программном блоке:
Вне программного блока значение переменной не меняется
R 3
S R2
S 28.274
R 3 S 28.274
7
Операторы программного блока содержит панель Programming:
Add Line - создание блока для ввода команд Mathcad-программы
← - операция присваивание, локальное определение
if - условный (оператор if условие)
otherwise оператор альтернативного выбора (используется вместе с
условным)
for оператор цикла с известным числом повторений
while оператор условного цикла
break оператор прерывания
сontinue оператор продолжения
return оператор возврата
on error оператор обработки ошибки
Программирование линейных алгоритмов
Линейным называется алгоритм, в котором результат получается путем однократного
выполнения заданной последовательности действий при любых значениях исходных
данных. Операторы программы выполняются последовательно, один за другим, в
соответствии с их расположением в программе.
Пример 2. Программный модуль как функция пользователя. Расчет площади
треугольника по формуле Герона, где a, b, c – стороны треугольника, P – полупериметр.
Этапы решения задачи:
1. Математическая модель: вычисление полупериметра
треугольника по формуле cbaP 2
1, вычисление
площади треугольника по формуле Герона
cpbpappS
2. Составление схемы линейного алгоритма.
3. Mathcad-программа:
4. Тестирование программы по тестовым примерам
5. Использование функции при различных входных параметрах
S a b c( ) Pa b c
2
S P P a( ) P b( ) P c( )
S
S 1 2 3 ( ) 0 S 3 4 5 ( ) 6
S 2 8 7 ( ) 6.437
Начало
Ввод a, b, c
cbaP 2
1
Вывод S
Конец
cpbpappS
8
Пример 3. Определить расстояние на плоскости между двумя точками с заданными
координатами 111 , yxM и 222 , yxM
Этапы решения задачи:
1. Математическая модель: расстояние на плоскости между двумя точками 111 , yxM и
222 , yxM высчитывается по формуле 212
2
12 yyxxd
2. Составим схему линейного алгоритма
Введем дополнительные промежуточные
переменные 21 xxx и 21 yyy
3. Mathcad-программа
4. Проверка тестовым примером:
Примечание. Можно было посчитать расстояние без использования программного
модуля:
Пример 4. Вычислить длину окружности, площадь круга и объем шара одного и того же
заданного радиуса r: 32
4
3,,2 rVrSrl .
d x1 y1 x2 y2 ( ) x1 x2( )2
y1 y2( )2
d 1 1 4 5 ( ) 5
d x1 y1 x2 y2 ( ) x x1 x2
y y1 y2
d x2
y2
d
d 0 0 3 4 ( ) 5
Начало
Ввод 111 , ухМ и
222 , ухМ
22 yxd
Конец
Вывод d
21,21 yyyxxx
9
Примечание. В качестве результата функция возвращает несколько значений, формируя
матрицу-строку из этих значений.
Другая версия возврата результата в виде матрицы-столбца, используя индексные
переменные:
Пример 5. Вычислить объем цилиндра и площадь боковой поверхности цилиндра с
заданными радиусом основания r и высотой h: hrV 2π , rhS π2
Пример 6. Найти площадь треугольника по двум сторонам и углу между ними.
Примечание. Учитывать переход от градусной мере к радианной ,
,
S 2 2 30 ( ) 1
deg 0.017
1800.017 180 deg 3.141593
primer r( ) L 2 r
S r2
V3
4 r
3
L S V( )
primer 1( ) 2 3
4
6.283 3.142 2.356( )
primer 2( ) 4 4 6 ( ) 12.566 12.566 18.85( )
primer r( ) x0 2 r
x1 r2
x23
4 r
3
x
primer 1( )
2
3
4
6.283
3.142
2.356
primer 2( )
4
4
6
12.566
12.566
18.85
primer5 r h ( ) V r2
h
S 2 r h
V S( )
primer5 1 2 ( ) 2 4 ( ) 6.283 12.566( )
S a b ( ) deg
Sa b
2sin ( )
S
10
Программирование разветвляющихся алгоритмов
Алгоритм называется разветвляющимся, если он содержит несколько ветвей,
отличающихся друг от друга содержанием вычислений. Выход вычислительного процесса
на ту или иную ветвь алгоритма определяется исходными данными задачи.
Условный оператор if реализует алгоритм типа "ветвление" и предназначен для
выбора одного из двух возможных действий (операторов) в зависимости от некоторого
условия, при этом одно из действий может отсутствовать. Отсюда следует два возможных
формата записи условного оператора.
Формат 1 (Неполная развилка)
Условный оператор имеет следующую
структуру:
оператор if условие,
где оператор – действие, которое выполняется, в случае если условие истинно. Если
условие ложно, управление передается следующему за if оператору.
Конструкция условного оператора
Пример 4. Применение условного оператора
3 < 6, следовательно, ,
3 > 6, следовательно,
Формат 2 (Полная развилка)
Оператор1 if условие Оператор2 otherwise
Если условие истинно, то выполнить
оператор1, иначе – оператор2.
Конструкция условного оператора
c 3 6 12 c 21
c 12
if
otherwise
if
F a b ( ) c 0
c a b a bif
c c 12
F 3 6 ( ) 21
F 8 1 ( ) 12
ЛВ
Серия
да нет
ЛВ
оператор2 оператор1
нет да
11
Пример 7. Применение условного оператора с альтернативным выбором. Определить
наибольшее из двух заданных чисел:
Пример 8. Применение условного оператора сложной структуры. Функция выводит
текстовое сообщение о том какое из двух заданных чисел больше
Пример 9.Определить координаты вершины параболы y = a x² + b x + c. Коэффициенты
a, b, c вводить с клавиатуры.
Пример 10. Вычислите площадь кольца.
Этапы решения задачи:
1. Математическая модель: площадь кольца вычисляется по формуле 22 rRS ,
R - радиус большего круга, r - радиус меньшего круга.
2. Составим схему разветвляющего алгоритма, с проверкой на выявление радиуса
большего круга
3. Mathcad-программа
maxi a b( ) a a bif
b otherwise
maxi 6 6( ) 6 maxi 7 5( ) 7 maxi 2 9( ) 9
F a b( ) "a>b" a bif
"a<b" a bif
"a=b" otherwise
otherwise
F 4 4( ) "a=b" F 3 7( ) "a<b"
12
4. Проверка тестовым примером:
Пример 11. Дано действительное а. Вычислить значение функции y(a), график которой
представлен на рисунке:
Этапы решения задачи:
1. Математическая модель: функция вычисляется по следующей формуле
.21,4
;10,4
;02,2
;2,
2
2
x
xx
xx
xx
xy
2. Фрагмент алгоритма:
So r1 r2 ( ) S r12
r22
r1 r2if
S r22
r12
otherwise
S
So 3 2 ( ) 15.708
So 2 3 ( ) 15.708
Начало
Ввод 1r и 2r
22 21 rrS
Конец
Вывод S
21 rr
да нет
22 12 rrS
y = -2x
y = x2
y = x2
y = 4x2
x
y
4
2 -1 0 1 -2
13
3. Mathcad-программа
4. Проверка тестовым примером:
f x( ) x2
x 2if
2 x 2 x 0if
4 1 x 2if
4x2
0 x 1if
f 3( ) 9 f 0( ) 0 f 0.5( ) 1
3 2 1 0 1 2 3
2
4
6
8
10
f x( )
x
|а| > 2
-2 ≤ а 0
1 а 2
да
да
да
нет
нет
нет
у = a2 y = -2a y = 4 y = 4 a
2
14
Программирование циклических алгоритмов
Алгоритм называется циклическим, если он содержит многократное выполнение
одних и тех же операторов при различных значениях промежуточных данных. Число
повторений этих операторов может быть задано в явной (цикл с известным заранее
числом повторений) или неявной (цикл с неизвестным заранее числом повторений)
форме.
Цикл с известным числом повторений (цикл с параметром)
Структурно оператор цикла с параметром состоит из заголовка и тела. В заголовке
определяются начальное и конечное значения параметра цикла. Телом цикла с
параметром является принципиально один оператор, выполняющий определенное
действие. Если же в теле цикла с параметром нужно выполнить несколько операторов, то
организуется составной оператор, используя оператор Add Line.
Оператор for предоставляет возможность организовать цикл по некоторой переменной,
изменяющейся в заданном диапазоне. Схема выполнения оператора цикла с параметром
имеет вид:
Здесь i – параметр цикла, N1, N2 - начальное и конечное значения параметра цикла i, h –
шаг.
Оператор записывают так:
for переменная ∊ начальное значение, шаг . . конечное значение
Эта запись означает, что оператор выполнится для значений переменной, изменяющейся
в диапазоне от начального значения до конечного, с заданным шагом.
Конструкция оператора
Пример 12. Использование оператора цикла с известным числом повторений.
a) Сумма цифр от 1 до 10
шаг автоматически берется за единицу
for
sum S 0
S S i
i 1 10for
sum 55
i ∊ N1, N1+h .. N2
оператор
15
b) Сумма цифр от 1 до 10 с шагом 0.5
c) Сумма нечетных цифр от 1 до 10
d) Сумма четных цифр от 10 до 2
Границы диапазона могут быть заданы не только конкретными значениями, но и
переменными, а диапазон – представлен в виде вектора.
Пример 13. Способы задания диапазона изменения переменной цикла
a) Сумма цифр от m до n
b) Сумма цифр, заданных вектор-строчкой
sum 10 20( ) 165
sum S 0
S S i
i 1 1.5 10for
sum 104.5
sum_chetN S 0
S S i
i 1 3 10for
sum_chetN 25
sum_nechetN S 0
S S i
i 10 8 2for
sum_nechetN 30
sum m n( ) S 0
S S i
i m nfor
sum_V v( ) S 0
S S i
i vfor
v 1 7 3 4 6( ) sum_V v( ) 21
f 12 14 65( ) sum_V f( ) 91
S:= S + i
Начало
ввод n, m
вывод S
Конец
i ∊ m .. n
S:= 0
16
c) Сумма цифр, заданных вектор-столбцом
Пример 14. Создание функции с применением циклического оператора, которая
вычисляет одновременно сумму и произведение элементов от 1 до n.
нумерация элементов в векторе начнется с единицы
Mathcad-программа:
Присвоение начальных
значений
Вычисление значений
суммы и произведения
от 1 до n
Формируется вектор
из значений суммы и
произведения
Результат работы:
ORIGIN 1
sumV v n m( ) S 0
S S vi
i n mfor
h
1
1
0
1
0
4
1
f
10
2
4
6
sumV f 2 3( ) 6 sumV h 3 6( ) 5
ORIGIN 1
P n( ) S 0
P 1
S S i
P P i
i 1 nfor
V1 S
V2 P
V
P 5( )15
120
S := S + i
Начало
ввод N
вывод S, P
Конец
i ∊ 1 .. N
S:= 0, P :=1
P := P · i
17
Цикл с условием
С помощью оператора While создается цикл, количество повторений которого неизвестно,
но предусмотрен выход из него по некоторому логическому условию. Запись цикла имеет
вид
While Логическое условие
оператор
Это означает, что оператор будет выполняться в цикле до тех пор, пока истинно условие.
Схема выполнения оператора имеет вид:
В цикле While оператор выполняется если условие
верно (True), если условие ложно (False), то цикл
заканчивается, т. е. цикл While повторяется, пока
выполняется условие. Цикл While начинается
проверкой условия, поэтому, если начальное условие
ложно, то оператор не выполняется ни разу. Для
включения в тело цикла нескольких операторов
применяется составной оператор, через дополнительное
введение оператора Add Line, которых будет
объединять серию операторов, являющихся телом
цикла. Действия в цикле должны приводить к
изменению заданного условия, иначе получится
"бесконечный" цикл.
Конструкция оператора
В принципе, описанный ранее цикл for можно
заменить условным циклом(см. пример 13 а)).
Пример 15. Применение условного циклического
оператора. Сумма цифр от m до n.
while
sum m n( ) S 0
i m
S S i
i i 1
i nwhile
S
sum 10 20( ) 165
да
серия
нет
ЛУ
нет
да
i ≤ n
S := S + i
i := i + 1
вывод S
Конец
i := m
s := 0.0
ввод n, m
Начало
18
Рассмотрим использование оператора While в задаче определения наибольшего
общего кратного двух чисел. По алгоритму Евклида числа сравниваются друг с другом и
большее уменьшается на величину меньшего до тех пор, пока они не станут равными.
Пример 16. Функция для определения НОД двух натуральных чисел (проверки на
правильность ввода данных в данном модуле нет)
Пример 17. Функция для определения НОД множества натуральных чисел, используя
функцию из прошлого примера.
Пример 18. Функция для определения НОД двух натуральных чисел (с проверкой на
правильность ввода данных)
NOD a b( )
a a b a bif
b b a otherwise
a bwhile
a
NOD 72 36( ) 36
ORIGIN 1
x
21
14
49
35
R V( ) a V1
a NOD a Vi
i 1 rows V( )for
a
R x( ) 7
NOD a b( ) m a 0( ) b 0( )
n a 0( ) b 0( )
"oshibka vvoda"return n m( )if
areturn a 0( ) b 0( )if
breturn a 0( ) b 0( )if otherwise
otherwise
a a b a bif
b b a otherwise
a bwhile
areturn
NOD 0 0( ) "oshibka vvoda" NOD 0 4( ) "oshibka vvoda"
NOD 8 40( ) 8 NOD 8 0( ) 8
NOD 24 36( ) 12 NOD 0 9( ) 9
NOD 4 5( ) "oshibka vvoda"
19
Пример 19. Функция для определения НОК двух натуральных чисел
Пример 20. Найти сумму всех цифр числа
Оператор прерывания
Иногда бывает необходимо завершить цикл досрочно. Для этого предназначен
оператор break.
Пример 21. Найти индекс первого нулевого элемента в одномерном массиве. Понятно,
что если такой элемент найден, то нет смысла проверять массив до конца. Посредством
оператора прерывания управление в этом случае передается на конец цикла.
NOK a b( ) m a b
a a b a bif
b b a otherwise
a bwhile
mm
a
m
NOK 24 36( ) 72
SUMM a( ) S 0
S S mod a 10( )
aa mod a 10( )( )
10
a 0while
S
n 1234567
SUMM n( ) 28
ORIGIN 1
indexNull a( ) k 0
k i
break
ai 0if
i 1 rows a( )for
k
f
1
1
2
0
5
h
1
2
3
indexNull f( ) 4 indexNullh( ) 0
20
Оператор продолжения
Оператор continue – это также оператор прерывания, но в отличие от break,
прерывающего цикл, он останавливает выполнение только текущей итерации.
Пример 22. Вычисление суммы ненулевых элементов в одномерном массиве оператором
continue
Оператор прерывания программного модуля
Оператор return прерывает выполнение программного модуля в любой точке и
возвращает значение выражения или переменной либо текстовое сообщение, стоящее
следом за ним.
Пример 23. Функция определяет, является ли вектор единичным. При наличии хотя бы
одного элемента вектора, отличного от единицы, программный модуль прерывается.
Оператор обработки ошибок
Если при составлении программного модуля предполагается, что какая-либо
команда может вызвать ошибку (например, деление на ноль), то можно воспользоваться
оператором on error для перехвата этой ошибки.
Оператор перехвата ошибки имеет следующую конструкцию:
выражение1 on error выражение2
ORIGIN 1
g
1
1
1
0
0
2
6
0
f
1
1
2
0
5
sumNulla( ) S 0
continue ai 0if
S S ai
i 1 rows a( )for
S
sumNullf( ) 9 sumNullg( ) 11
ORIGIN 1
a
1
1
1
1
1
1
b
1
1
1
1
0
1
E V( )
"NO"return Vi 1if
i 1 rows V( )for
"YES"
E a( ) "YES" E b( ) "NO"
21
где выражение2 – действие, которое должно выполниться в данной строке программного
модуля, но если при этом произойдет ошибка, то вместо него будет выполнено
выражение1.
Пример 24. Использование оператора обработки ошибок
Вложенные циклы типа for
Вложенные циклы типа for особенно часто используются при обработке матриц
(двумерных массивов, прямоугольных таблиц) и векторов (одномерных массивов,
линейных таблиц).
Схема вложенных циклов
типа для
Блок схема
f x( ) y x
"divide by zero"1
y2
1
on error
f 1( ) "divide by zero"f 2( ) 0.333 f 1( ) "divide by zero"
j A2 B2for
i A1 B1forJ ∊ А2 ,. В2
тело
внутреннего
цикла
I ∊ А1 .. В1
главной
и
побочной
диагонал
и
тело
внешнего
цикла
22
Пример 25. Для заданной матрицы А размерности N M найдите сумму всех её
элементов
Mathcad-программа: фрагмент алгоритма суммирования
элементов массива:
Примечание: rows – количество строк в матрице, cols – количество столбцов в матрице.
rows(A) = 3 cols(A) = 3
Пример 26. Для заданной матрицы А размерности N N найдите сумму элементов
главной диагонали
Mathcad-программа: фрагмент алгоритма суммирования
диагональных элементов массива:
ORIGIN 1
sumMASa( ) S 0
S S ai j
j 1 cols a( )for
i 1 rows a( )for
A
1
4
1
1
8
0
2
2
7
sumMASA( ) 26
ORIGIN 1
diagMAS a( )
S 0
S S ai i
i 1 rows a( )for
rows a( ) cols a( )if
"oshibra vvoda" otherwise
A
1
4
1
1
8
0
2
2
7
B12
8
1
7
5
1
diagMAS A( ) 16
diagMAS B( ) "oshibra vvoda"
S := 0
I ∊ 1 .. N
J ∊ 1 .. M
S := S + AI, J
S
S := 0
I ∊ 1.. N
S := S + A I, I
S
23
Пример 27. Для заданной матрицы А размерности N M найдите сумму элементов строк
Mathcad-программа: фрагмент алгоритма суммирования
элементов строк матрицы:
Пример 28. Для заданной матрицы А размерности N N найдите значения
наибольшего и наименьшего из элементов главной диагонали.
ORIGIN 1
ORIGIN 1
sumMAS_stra( )
bi 0
bi bi ai j
j 1 cols a( )for
i 1 rows a( )for
b
A
1
4
1
1
8
0
2
2
7
sumMAS_strA( )
4
14
8
primer a( ) n rows a( )
di ai i
i 1 nfor
maximum max d( )
minimum min d( )
cols a( ) nif
"error of enter" otherwise
maximum minimum( )
a
2
1
2
1
1
4
2
2
1
1
3
1
1
1
1
5
primer a( ) 5 2( )
I ∊ 1.. N
J ∊1.. M
BI := BI + AI, J
B
BI := 0
24
Пример 29. Для заданной матрицы А размерности N M найдите количество четных
элементов матрицы.
Пример 30 . Найти сумму положительных элементов в массиве.
Этапы решения задачи:
1. Алгоритм решения довольно прост - в цикле будем "пробегать" массив, сравнивая его
ячейки с 0 и суммировать, если они >0.
2. Составим блок-схему программы
3. Mathcad-программа
Пусть m – вектор-столбец элементов
n – количество элементов
chetMAS a( ) S 0
S S 1 mod ai j 2 0 if
j 1 cols a( )for
i 1 rows a( )for
S
A
1
4
1
1
8
0
2
2
7
chetMASA( ) 5
ORIGIN 1
Sum m n( ) S 0
S S mi mi 0if
i 1 nfor
S
v
2
3
0
1
1
9
Sum v 6( ) 4
Начало
S := 0
i = 1 ,. n
mi > 0
S := S + mi
конец
нет да
вывод S
25
ПРИМЕРЫ ПРОГРАММИРОВАНИЯ
Численное интегрирование
1. Постановка задачи.
Пусть требуется вычислить определенный интеграл
b
a
dxxf )( , (1)
где f(x) – непрерывная на отрезке [a; b] функция.
С геометрической точки зрения интеграл (1) при f(x) > 0 равен площади
криволинейной трапеции, ограниченной кривой y = f(x), осью Ox и прямыми x = a, x = b
(рис. 1). Другими словами, b
a
dxxf )( равен площади заштрихованной фигуры на рис. 4.
Рис. 4. Геометрический смысл определенного интеграла.
Вычислить определенный интеграл (1) можно с помощью аналитической формулы
Ньютона-Лейбница (2):
)()()( aFbFdxxf
b
a
, (2)
где F(x) – первообразная функция для заданной функции f(x).
Однако во многих случаях не удается найти никакой аналитической формулы в
виду невозможности определения F(x).
В таких случаях приходится применять методы численного интегрирования.
Основной принцип построения всех приближенных формул численного
интегрирования состоит в том, что интервал интегрирования разбивается на множество
меньших отрезков, внутри которых подынтегральная кривая y = f(x) заменяется с
некоторой степенью точности более простыми функциями, интегралы от которых можно
вычислить. С геометрической точки зрения выполняется следующее: искомая площадь
криволинейной трапеции приближенно заменяется суммой площадей элементарных
геометрических фигур.
О
y = f(x)
b a
y
x
26
2. Метод прямоугольников.
Как говорилось выше, вычисление интеграла dxxfS
b
a
)( равносильно
вычислению площади некоторой фигуры – криволинейной трапеции с параллельными
«основаниями» x = a, x = b и «боковыми сторонами» y = 0, y = f(x) (рис. 4).
Разобьем интервал интегрирования на n равных частей, каждая длиной n
abh
.
Приближенное значение интеграла получается в виде суммы площадей n
прямоугольников, высота которых равна значению f(x) на левом краю каждого
подынтервала (рис. 5).
110110)( nn
b
a
yyyhyhyhyhdxxfS
То есть формула численного интегрирования имеет вид:
1
0
)(
n
i
i
b
a
yhdxxfS (4)
и называется формулой «левых» прямоугольников.
Рис. 5. Геометрическая интерпретация метода «левых» прямоугольников.
Если в качестве приближенного значения площади для каждого подынтервала
принять площадь прямоугольника, высота которого равна значению f(x) на правом краю
подынтервала (рис. 6), то формула численного интегрирования имеет вид (5):
n
i
i
b
a
yhdxxfS
1
)( (5)
и называется формулой «правых» прямоугольников.
O x
y y = f(x)
a=x0 x1 x2 b=xn x3 xn-1 …
…
h h h h h
y0 = f(x0)
y1 = f(x1)
y2 = f(x2)
yn-1 = f(xn-1)
27
Рис. 6. Геометрическая интерпретация метода «правых» прямоугольников. Существует третья модификация метода прямоугольников – метод «средних»
прямоугольников. В этом случае в качестве приближенного значения площади для
каждого подынтервала принимается площадь прямоугольника, высота которого равна
значению f(x) в средней точке подинтервала (рис. 7).
Рис. 7. Геометрическая интерпретация метода «средних» прямоугольников.
Тогда формула численного интегрирования имеет вид (6):
n
i
ii
b
a
xxfhdxxfS
1
1
2)( (6)
Метод прямоугольников – это наиболее простой и вместе с тем наиболее грубый
метод приближенного интегрирования. Очевидно, что чем больше будет число n отрезков
разбиения, тем более точный результат дадут формулы (4)-(6). Однако увеличение числа
отрезков разбиения промежутка интегрирования не всегда возможно. Поэтому большой
интерес представляют формулы, дающие более точные результаты при том же числе
точек разбиения. Заметно меньшую погрешность дает другой метод – метод трапеций.
O x
y y = f(x)
a=x0 x1 x2 b=xn x3 xn-1 …
…
h h h h h
y1 = f(x1)
y2 = f(x2)
yn = f(xn)
O x
y y = f(x)
a=x0 x1 x2 b=xn x3 xn-1 …
…
h h h h h
2
01 xxf
2
12 xxf
2
1nn xxf
28
3. Метод трапеций.
В этом методе отрезок [a; b] так же разбивается на n равных частей. На каждом
отрезке [xi; xi+1] кривая y = f(x) заменяется прямой, проходящей через две известные точки
с координатами )(; ii xfx и )(; 11 ii xfx , где ni ,...,1,0 и строится прямоугольная трапеция с
высотой n
abh
(рис. 8).
Рис. 8. Геометрическая интерпретация метода трапеций.
В итоге искомая площадь криволинейной трапеции приближенно заменяется
суммой площадей элементарных геометрических трапеций. (Площадь трапеции с высотой
h и основаниями a, b вычисляется по формуле: 2
bahS
). Из геометрических
соображений понятно, что площадь такой фигуры будет, вообще говоря, более точно
выражать площадь криволинейной трапеции, нежели площадь ступенчатой фигуры,
рассматриваемая в методе прямоугольников. Тогда
dxxfS
b
a
)(
2
)()(
2
)()(...
2
)()(
2
)()( 1122110 nnnn xfxfh
xfxfh
xfxfh
xfxfh
вынесем h за скобку, получим
2
)()(
2
)()(...
2
)()(
2
)()( 1122110 nnnn xfxfxfxfxfxfxfxfh
разобьем каждую дробь на две дроби
2
)(
2
)(
2
)(
2
)(...
2
)(
2
)(
2
)(
2
)( 1122110 nnnn xfxfxfxfxfxfxfxfh
приведем подобные слагаемые, получим
2
)()(...)()(
2
)(121
0 nn
xfxfxfxf
xfh .
Итак, dxxfS
b
a
)(
2
)()(...)()(
2
)(121
0 nn
xfxfxfxf
xfh .
Коротко полученную формулу можно записать в виде (7).
O x
y y = f(x)
a=x0 x1 x2 b=xn x3 xn-1 …
…
h h h h h
y0 = f(x0)
y1 = f(x1)
y2 = f(x2)
yn-1 = f(xn-1)
29
dxxfS
b
a
)(
1
1
0 )(2
)(
2
)(n
i
in xf
xfxfh (7)
Заметим, что в данном методе получаем ступенчатую фигуру, составленную из
трапеций, которая «плотнее» прилегает к заданной криволинейной трапеции, нежели
фигура, составленная из прямоугольников в предыдущем методе.
4. Метод парабол (Симпсона).
Значительное повышение точности приближенных формул численного
интегрирования дает метод парабол (Симпсона). Идея метода исходит из того, что на
частичном промежутке дуга некоторой параболы в общем случае теснее прилегает кривой
y = f(x), чем хорда, соединяющая концы дуги этой кривой (метод трапеций). Поэтому
значения площадей соответствующих элементарных трапеций, ограниченных сверху
дугами парабол, являются более близкими к значениям площадей соответствующих
частичных криволинейных трапеций, ограниченных сверху дугой кривой y = f(x), чем
значения площадей соответствующих прямолинейных трапеций.
Рис. 9. Геометрическая интерпретация метода парабол.
Рассмотрим функцию y = f(x). Будем считать, что на отрезке [a; b] она
положительна и непрерывна. Найдем площадь криволинейной трапеции aABb (рис. 9).
Для этого разделим отрезок [a, b] точкой c = 2
ba пополам и в точке C(c, f(c))
проведем касательную к линии y = f(x). После этого разделим [a, b] точками p и q на три
равные части и проведем через них прямые x = p и x = q. Пусть P и Q – точки пересечения
этих прямых с касательной. Соединив A с P и B с Q, получим три прямолинейные
трапеции aAPp, pPQq, qQBb. Тогда площадь трапеции aABb можно приближенно
посчитать по следующей формуле
111222
hbBqQ
hqQpP
hpPaA
I
,
где 3
1ab
h
.
O x
y y = f(x)
a
A
p b c
B
q
P
C Q
h1 h1
30
Откуда получаем
bBqQpPaAab
I
26
.
Заметим, что aA = f(a), bB = f(b), а pP + qQ = 2f(c) (как средняя линия трапеции), в
итоге получаем малую формулу Симпсона
)()(4)(6
bfcfafab
I
(8)
В данном случае дуга ACB заменяется параболой, проходящей через точки A, P, Q,
B.
Малая формула Симпсона дает интеграл с хорошей точностью, когда график
подынтегральной функции мало изогнут, в случаях же, когда дана более сложная
функция, малая формула Симпсона непригодна. Тогда, чтобы посчитать интеграл
заданной функции нужно разбить отрезок [a, b] на n частей и к каждому из отрезков
применить формулу (8).
Обязательным требованием, вытекающим из геометрического смысла метода
парабол, является то, что n должно быть четным. Пусть n
abh
, точки деления будут
х0=а, x1, x2, …xn-2, xn-1, xn=b, а y0, y1, …yn – соответствующие значения подынтегральной
функции на отрезке [a, b].
Тогда, применяя малую формулу Симпсона к каждой паре получившихся отрезков,
имеем
.)()(4)(6
...........................................................
;)()(4)(6
;)()(4)(6
122
2
43224
2
21002
1
nnnnn
n xfxfxfxx
I
xfxfxfxx
I
xfxfxfxx
I
Тогда 2
21 ...)( n
b
a
IIIdxxfS . (9)
Заметим, что во всех выражениях 2
21 ,, nI I I первый множитель равен 3
h:
.36
2
6
.........................
;36
2
6
;36
2
6
2
24
02
hhxx
hhxx
hhxx
nn
(10)
Сделав замену по формулам (10), вынося общий множитель 3
h за скобку, в (9) получаем:
2
21 ...)( n
b
a
IIIdxxfS
31
)()(4)(...)()(4)()()(4)(3
12432210 nnn xfxfxfxfxfxfxfxfxfh
группируем слагаемые
)()(...)()(2)(...)()(4)(3
2421310 nnn xfxfxfxfxfxfxfxfh
.
Таким образом, получаем «большую» формулу Симпсона, которая имеет вид:
dxxf
b
a
)( )()(...)()(2)(...)()(4)(3
2421310 nnn xfxfxfxfxfxfxfxfh
(11)
Предлагаем для запоминания следующий вид формулы:
dxxf
b
a
)( четнечкр YYYh
243
(11’)
где Yкр = y0 + yn, Yнеч = y1 + y3 + … + yn-1, Yчет = y2 + y4 + … + yn-2, а n
abh
.
5. Реализация в Mathcad
Пример 31. Вычислить приближенное значение определенного интеграла
2.3
0
34 8 dxxx
с помощью
а. формулы трапеций;
б. формулы Симпсона,
разбивая отрезок интегрирования на 10 частей, на 20 частей. Все вычисления проводить с
округлением до третьего десятичного знака
Точное значение:
II
0
3.2
xx4
x3
8
d 13.431879991952648554 13.432
f x( ) x4
x3
8
0 0.8 1.6 2.4 3.22
4
6
8
10
f x( )
x
32
Создадим программный модуль для табулирования функции, где a – начало интервала
интегрирования, b – конец интервала интегрирования, n – количество разбиений отрезка
интегрирования
разбивая отрезок интегрирования на 20 частей:
разбивая отрезок интегрирования на 10 частей:
По формуле трапеций:
tabul a b n ( ) x0 a
y0 f x0
hb a
n
xi xi 1 h
yi f xi
i 1 nfor
d augment x y ( )
tabul 0 3.2 20 ( )
0 1
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
0 2.828
0.16 2.828
0.32 2.824
0.48 2.818
0.64 2.812
0.8 2.81
0.96 2.822
1.12 2.858
1.28 2.93
1.44 3.052
1.6 3.234
1.76 3.485
1.92 3.809
2.08 4.209
2.24 4.684
2.4 5.23
2.56 5.846
2.72 6.528
2.88 7.274
3.04 8.082
3.2 8.949
tabul 0 3.2 10 ( )
0
0.32
0.64
0.96
1.28
1.6
1.92
2.24
2.56
2.88
3.2
2.828
2.824
2.812
2.822
2.93
3.234
3.809
4.684
5.846
7.274
8.949
trap a b n ( ) d tabul a b n ( )
hb a
n
I 0
I Ih
2di 1 di 1 1
i 1 nfor
I
33
Точность вычислений оцениваем с помощью разности:
По формуле Симпсона
Точность вычислений оцениваем с помощью разности:
Вывод: при одинаковом числе точек разбиения формула Симпсона дает более точный
результат.
6. Общая практическая часть
Вычислить приближенное значение определенного интеграла
2.3
0
34 8 dxxx с помощью
формул «левых» прямоугольников, «правых» прямоугольников и «средних»
прямоугольников, разбивая отрезок интегрирования на 10 частей, на 20 частей. Все
вычисления проводить с округлением до третьего десятичного знака. Результат
проанализировать.
trap 0 3.2 20 ( ) 13.444trap 0 3.2 10 ( ) 13.4797
1 II trap 0 3.2 10 ( ) 0.048
2 II trap 0 3.2 20 ( ) 0.012
3 trap 0 3.2 10 ( ) trap 0 3.2 20 ( ) 0.036
simpson a b n ( ) d tabul a b n ( )
hb a
n
I d0 1 dn 1
I I 2 di 1 mod i 2 ( ) 0( )if
I I 4 di 1 otherwise
i 1 n 1( )for
I Ih
3
I
simpson 0 3.2 10 ( ) 13.43192 simpson 0 3.2 20 ( ) 13.43188
1 II simpson 0 3.2 10 ( ) 0.00004
2 II simpson 0 3.2 20 ( ) 0.000003
3 simpson 0 3.2 10 ( ) simpson 0 3.2 20 ( ) 0.000038
34
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
Задачи линейной структуры
1. Составьте алгоритм решения задачи линейной структуры и программно его
реализуйте
1.1.В треугольнике известны три стороны a, b и c. Найти (в градусах) углы этого
треугольника, используя формулы:
bc
acbA
2cos
222 ;
a
AbB
sinsin ; С = 180
- ( А + В )
1.2.В треугольнике известны две стороны a, b и угол C (в градусах) между ними. Найти
сторону c и угол A (в радианах), используя формулы:
c
CaA
sinsin ; с
2 = a
2 + b
2 - 2ab cos C.
1.3.В треугольнике известны две стороны a, b и угол C (в градусах) между ними. Найти
сторону c и угол B (в градусах), используя формулы:
c
CbB
sinsin ; с
2 = a
2 + b
2 - 2ab cos C.
1.4.В треугольнике известны две стороны a, b и угол C (в градусах) между ними. Найти
площадь треугольника и сторону с, используя формулы:
2
sinCabS ; с
2 = a
2 + b
2 - 2ab cos C.
1.5.В треугольнике известны три стороны a, b и c; найти радиус описанной окружности R
и угол A (в градусах), используя формулы:
R
abcS
4 ;
app
cpbpAtg
2, где p = (a + b + c) / 2.
1.6.Треугольник задан величинами своих углов (в градусах) и радиусом описанной
окружности R. Вычислите стороны треугольника и его площадь, используя формулы :
Rcba
2sinsinsin
,
2
sin
baS
1.7.В правильной треугольной пирамиде известны сторона основания a и угол A (в
градусах) наклона боковой грани к плоскости основания. Найти объем, площадь
основания и высоту пирамиды, используя формулы:
HSV осн 3
1, где
4
32aSосн , Atg
aH
6
3 .
1.8.В правильной треугольной пирамиде известны сторона основания a и угол A (в
градусах) наклона боковой грани к плоскости основания. Найти площади боковой и
полной поверхности пирамиды, используя формулы:
ASSSS оснбокоснполн
cos
11 , где
4
32aSосн .
1.9.В усеченном конусе известны радиусы оснований R и r и угол A (в градусах) наклона
образующей к поверхности большего основания. Найти высоту и объем усеченного
конуса, используя формулы:
22
3
1rRrRHV , где AtgrRH .
1.10. В усеченном конусе известны радиусы оснований R и r и угол A (в градусах)
наклона образующей к поверхности большего основания. Найти апофему, площади
35
боковой и полной поверхности усеченного конуса, используя формулы: 2
22
1 , rSRS - площади оснований.
21 SSSS бокполн , где RrlSбок , апофема A
rRl
cos
,
1.11. В правильной усеченной четырехугольной пирамиде стороны нижнего и верхнего
оснований равны a и b, а высота Н. Найти апофему, объем и площадь боковой
поверхности усеченной пирамиды, используя формулы:
2221 4
2baHba
PPlSбок
, где 21, PP - периметры оснований, апофема
2242
1baНl , 2211
3
1SSSSHV , 21, SS - площади оснований.
1.12. В правильной четырехугольной пирамиде сторона основания равна a, а боковое
ребро наклонено к плоскости основания под углом A (в градусах). Найти высоту,
объем пирамиды и площадь сечения, проходящего через вершину пирамиды и
диагональ основания d, используя формулы:
HSV осн 3
1, dHSсеч
2
1, где Atg
aH
2
2 , 2ad .
1.13. В правильной четырехугольной пирамиде сторона основания равна a, а боковое
ребро наклонено к плоскости основания под углом A (в градусах). Найти площади
боковой и полной поверхности пирамиды, используя формулы: бокоснполн SSS ,
где 12 22 AtgaSбок
1.14. Прямоугольный треугольник с катетами a и b вращается около гипотенузы. Найти
гипотенузу c, объем и площадь полной поверхности полученного тела вращения,
используя формулы:
c
bacRV
222
33
, baRSполн , где
с
abR .
1.15. Длина образующей конуса равна l , а длина окружности основания – с . Найдите
высоту, объем и площадь полной поверхности конуса, используя формулы:
HRV 2
3
1 , lRRSполн , где Rc 2 ,
2
4 222 clH
1.16. В правильной усеченной четырехугольной пирамиде стороны нижнего и верхнего
оснований равны a и b, а боковое ребро наклонено к плоскости нижнего основания
под углом A (в градусах). Найти высоту, объем и площадь полной поверхности
усеченной пирамиды, используя формулы:
22113
1SSSSHV , 21 SSSS бокполн ,
где
Atgba
H2
,
A
SSSбок
cos
21 , 22
21 , bSaS - площади оснований .
1.17. Образующая конуса l составляет с плоскостью основания угол A (в градусах).
Найдите высоту и объем конуса, радиус и длину окружности основания , используя
формулы:
HRV 2
3
1 , Rc 2 , где AlR cos , AlH sin
1.18. Вычислить угол (в градусах) между прямой p
zz
n
yy
m
xx 111
и плоскостью
0 DCzByAx , найти расстояние d от точки 111 ,, zyxM до данной плоскости,
используя формулы:
36
222222arcsin
pnmCBA
CpBnAm,
222
111
CBA
DCzByAxd
.
1.19. Найти центр и радиус окружности R, проходящей через три заданные точки на
плоскости 111 , yxM , 222 , yxM , 333 , yxM , используя формулы:
R
abcS
4 , где a, b и c стороны треугольника. Расстояние между двумя точками
2122
12 yyxxd . Площадь треугольника по формуле Герона:
cpbpappS , где p – полупериметр треугольника.
1.20. По координатам трёх вершин некоторого треугольника 111 , yxM , 222 , yxM ,
333 , yxM найдите его площадь и угол 321 MMM (в градусах),
2/sin 3213221 MMMMMMMS .
Задачи на условную и циклическую структуру
Составить схему алгоритма решения задачи. Реализовать программно.
№
варианта Из заданной матрицы А[ N, M ] создать линейный массив из:
1 максимальных элементов каждой строки
2 суммы положительных элементов каждого столбца
3 минимальных элементов каждой строки
4 произведений модулей отрицательных элементов каждой строки
5 количества нулевых элементов каждой строки
6 количества четных чисел каждой строки
7 минимальных элементов каждого столбца
8 произведений положительных элементов каждой строки
9 максимальных элементов каждого столбца
10 количества нечетных чисел каждого столбца
11 количества отрицательных элементов каждого столбца
12 индексов первых минимальных элементов каждого столбца
13 количества положительных элементов каждого столбца
14 количества четных чисел каждого столбца
15 количества чисел кратных 3 каждой строки
16 суммы положительных элементов каждой строки
17 суммы нечетных элементов каждого столбца
18 индексов первых максимальных элементов каждой строки
19 количества чисел кратных 5 каждого столбца
20 суммы нечетных чисел каждой строки