Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика,методичка

.pdf
Скачиваний:
86
Добавлен:
20.04.2015
Размер:
626.21 Кб
Скачать

Продолжение приложения В

Нахождение наибольшего и наименьшего значения: нахождение наибольшего и наименьшего значения функции y= f(x)выполняется в цикле, в

котором вычисляется текущее значение функции, и сравнивается с наибольшим или наименьшим из всех предыдущих значений этой функции. Если текущее значение функции окажется больше наибольшего из предыдущих значений, то его надо считать новым наибольшим значением. В противном случае наибольшее значение остается прежним. Это можно описать условной математической формулой:

 

 

ymax

= yi ,

если

yi >ymax ;

 

 

 

 

ymax = ymax , если

yi ymax .

 

 

Аналогично для наименьшего значения

 

 

 

 

 

 

ymin = yi

, если

yi < ymin

;

 

 

 

ymin =

ymin , если

yi

ymin .

y1

 

 

После первого выполнения цикла вычисляется

и

сравнивается с

начальным

значением

ymax или

ymin .

После сравнения

ymax или ymin

принимает

значение

y1 .

Тогда

после

вычисления

y2 будет находить

наибольшее или наименьшее из этих первых двух значений функции. Необходимо в качестве начального значения ymax брать число порядка –1010,

чтобы наверняка выполнилось условие y1>ymax , а в качестве начального

значения

ymin

очень большое число, чтобы выполнилось условие

y1<ymin .

Следует

отметить, что здесь речь идет не о максимуме или

минимуме функции, а о наибольшем или наименьшем из вычисленных значений функции. Это объясняется тем, что ЭВМ вычисляет дискретные значения функции и истинный минимум или максимум может находиться между ними.

5.59.Найти наименьшее значение функции y=ae bxsin( x+ f)

винтервале изменения аргумента x от 0 до сс шагом h.

Схема алгоритма решения этой задачи представлена на рис. В.13. Блок 3

задает перед циклом начальное значение ymin=1019 . Блок 5 вычисляет

текущее значение функции, а блоки 6 и 7 реализуют условную формулу (2). 5.60. Найти наибольший элемент массива и его порядковый номер.

Здесь нет надобности вычислять сравниваемые значения, так как они уже имеются в массиве. Поэтому в качестве начального значения берется первый элемент массива.

Поскольку сравнивать первый элемент массива с собой не имеет смысла, цикл выполняется, начиная со второго элемента.

51

Продолжение приложения В

Схема алгоритма решения этой задачи представлена на рис. В.14. Блок 3 перед циклом задает начальное значение xmax=x1 и Nmax=1. В цикле блоки

5 и 6 реализуют условную формулу (1), блок 7 определяет номер наибольшего элемента массива.

5.61.Найти экстремальное значение функции y=|a|ebx cx2 при

изменения аргумента x от 0 до 4 с шагом h. Функция такого вида имеет один

экстремум. Если c>0, то следует искать минимум, если c<0, то максимум.

Рассмотренный выше алгоритм нахождения наибольшего или наименьшего является универсальным, так как позволяет решить задачу даже в том случае, если функция не имеет экстремума или имеет несколько экстремумов. Если же функция имеет один экстремум, то затраты времени на решение такой задачи можно существенно сократить, используя другой алгоритм. Пусть функция имеет один максимум. Тогда вычисляя ее значения, лежащие до максимума, всегда будем получать новое значение функции, большее, чем наибольшее из всех предыдущих, т. е. всегда будет выполняться

условие yi >ymax . После максимума функция начинает убывать; следовательно, все последующие yi будут меньше наибольшего. Условие yi <ymax можно использовать для выхода из цикла, так как среди

последующих значений функции не может быть наибольшего. Этот процесс можно описать условной формулой:

ymax = yi , если yi > ymax ;

ymax = выход из цикла, если yi ymax . Аналогично, для нахождения наименьшего значения:

ymin = y i , если yi < ymin ;

ymin = выход из цикла , если yi ymin . Рассматриваемая функция всегда положительна. В зависимости от знака

величины с она имеет максимум или минимум. Поэтому алгоритм должен

начинаться с проверки знака величины с.

Схема алгоритма приведена на рис. В.15. Блок 3 проверяет знак величины с, и если он положительный, то N=1(функция имеет минимум), а если отрицательный, то N= 1 (функция имеет максимум). Блок 6 задает начальное значение ym (экстремум). Если N=1, то ym=1019 ; если N= 1, то

ym= 1019 . Блок 9 в цикле проверяет условие Ny<N ym . Если N=1, то условие аналогично условию y<ym (как и надо при нахождении минимума);

52

Продолжение приложения В

если N= 1, то условию y>ym (как и надо при нахождении максимума).

Если условие Ny<N ym выполняется, то y считается новым экстремальным

значением функции. В противном случае осуществляется выход из цикла к блоку11. Выход из цикла может осуществляться и естественным образом, когда

цикл будет выполнен для всех значений аргумента x и условие выхода из цикла ни разу не выполнится. Блок 11 выдает на печать значение N - признак экстремума и ym - экстремальное значение. Сокращение времени счета

осуществляется за счет выхода из цикла, если условие Ny<N ym не выполняется.

5.62.Найти номер (индекс) наименьшего элемента массива.

5.63.Найти наибольшее значение (xi+yi )для двух массивов.

5.64.Найти наименьшее значение функции y=ax3+bx2+cx+d и

значение аргумента, при котором оно получено. Значение аргумента x изменяется от 0 до 10 с шагом 0,1.

5.65. Найти экстремум функции y=ax3+bx2+cx+d , имеющий один

максимум и один минимум при a>0 и 3ac b2<0, если x изменяется от –10 до 10 с шагом 0,2, и максимума функция достигает при меньших значениях аргумента.

5.66. Для условия задачи 5.65 найти значения аргумента, при которых функция имеет наибольшее и наименьшее значения.

5.67. Найти экстремум функции y=aeax be cx , если x изменяется от x0 до xm с шагом h. Функция имеет один экстремум. Для определения того, является этот экстремум максимумом или минимумом, можно использовать следующий способ. Вычислить два значения функции y1 и y2 . Если y1>y2 , то функция имеет максимум, в противном случае – минимум.

5.68.Записать +1 вместо максимального элемента массива, а – 1 вместо минимального.

5.69.Найти и записать вместо x1 наибольший элемент, а вместо x2

наименьший для массива.

5.70.Для массива вычислить наибольшее и наименьшее значения модуля разности между соседними элементами.

5.71.Для функции y=ae bxsin( x f)найти первый максимум и первый минимум и значения аргумента, при которых они достигаются.

Функция сначала достигает максимума. Величина x изменяется от 0 до 6 с шагом 0,1.

53

Продолжение приложения В

Начало

a, b, c, , , h

Ymin= 1019

x = 0..c,

y=a e-bxsin( x+ )

нет

y = ymin

да

ymin= y

ymin

конец

Начало

x

Xmax= x1, Nmax= 1

 

i=2…40

нет

xi > xmax

 

 

да

 

xmax = xi

 

N = i

 

Nmax, xmax

 

конец

Начало

a, b, c, h

нет

c > 0

да

N=1

N = -1

ym=N 1019

x=0..4, h

y=|a|ebx+cx2

нет

Ny<Nym

да

ym=y

N, ym

конец

Рис. В.13

Рис. В.14

Рис. В.15

5.72.Найти наибольший элемент главной диагонали матрицы и вывести на печать всю строку, в которой он находится.

5.73.Найти наименьший из положительных элементов массива.

Уточнение корней уравнения: аналитическое решение для многих алгебраических и трансцендентных уравнений получить не удается. Для решения таких уравнений используют приближенные итерационные методы (методы последовательных приближений). Решение уравнений производится определением грубого значения корня (например, графическим путем) и последующим его уточнением. Уточнение значения корня уравнения рассматривается на примере метода итераций. Сущность метода заключается в

том, что исходное уравнение представляется в виде x= f(x).

54

нового значения корня будем использовать формулу
Для вычисления

Продолжение приложения В

Если в интервале между приближенным значением корня x0 и корнем

уравнения x выполняется условие | f '(x)<1|, то метод дает возможность

вычислить значение корня с заданной точностью. Если это условие не выполняется, то надо перейти к обратной функции. Новое значение корня

вычисляется через предыдущее по формуле xi 1= f(xi ). Повторяя этот процесс для x1,x2 ,x3 ,..., можно найти значение корня с заданной точностью, определяемой с помощью отношения |xi xi 1| ε.

5.74.Вычислить наименьший положительный корень уравнения

x tg( x )=0с точностью ε=10-5 .

Преобразуем уравнение к

виду x=tg( x ). Для

этого уравнения

|tg'( x )|>1, поэтому перейдем

к обратной функции

x=arctg( x ), где

arctg( x )=arctg( x )+kπ – неглавное значение функции. Будем считать все значения xi (приближенные значения корня) простыми переменными. Для решения задачи требуются два смежных значения корня. Обозначим x0 – предыдущее значение корня, а x1 – последующее значение корня. Начальное

значение наименьшего положительного корня x0=4,7.

x1=arctg( x0 )+π.

Схема алгоритма решения этой задачи приведена на рис.В.16. Блок 2 задает начальное (грубое) значение корня. Блок 3 вычисляет новое значение корня. Блок 4 проверяет достижение заданной точности. Если точность достигнута, то осуществляется выход из цикла, в противном случае выполняется блок 5 и переход к началу цикла. Блок 5 присваивает предыдущему значению корня только что вычисленное значение. На печать выводятся два смежных значения корня, так как корень уравнения лежит между ними.

5.75. Вычислить приближенное значение корня уравнения

x=ln(x+2 )с

точностью ε=10-4 , используя метод итераций (x =b).

 

 

 

 

 

0

 

5.76. вычислить значение функции

y=1 / x по итерационной формуле

y =3 y

1 xy3 , с точностью ε= 10-5 , принять y =2( 2

2 ).

i 1

2 i

2

i

0

 

5.77. Определить корень уравнения

x e ( ax )2 / 2=0, используя метод

итераций, с точностью ε=10-5(x =b).

 

 

 

 

 

0

 

 

 

 

 

55

 

 

Продолжение приложения В

Начало

 

x0=4,7

 

xi=arctgx0+

 

|x1 – x0| 10-5

да

нет

 

x0= x1

 

x0, x1

конец

Рис. В.16

Начало

a

i =1…10

S=0

j =1..8

нет

aij>0

да

s =s+aij

s

конец

Рис. В.17

6. Алгориты со структурой вложенных циклов

Начало

x

k =1..99

xmin= xk, n=k

j =

k+1..100

нет

xj < xmin

да

xmin= xj, n=j

xn= xk, xk =

xmin

x

конец

Рис. В.18

Любой цикл, содержащий внутри себя один или несколько других циклов, называется вложенным. Цикл, охватывающий другие циклы, называется внешним, а остальные циклы – внутренними. Правила организации как для внешнего, так и внутреннего циклов такие же, как и для простого цикла. Параметры этих циклов изменяются не одновременно, т. е. при одном значении параметра внешнего цикла параметр внутреннего цикла принимает по очереди все свои значения.

6.1. Вычислить сумму положительных элементов каждой строки матрицы. Необходимо организовать цикл с целью перебора всех элементов строки,

поэтому параметром этого цикла следует выбрать номер столбца j . Перед

циклом нужно задать начальное значение суммы S=0. После окончания цикла результат необходимо вывести на печать. Если действия повторить во внешнем

цикле, изменяя индекс строки i, то будут вычислены все 10 сумм.

В рассмотренной задаче внешний цикл обязательно должен быть по i(индексу строки), так как в противном случае были бы вычислены суммы положительных элементов каждого столбца.

56

Продолжение приложения В

Схема алгоритма решения этой задачи приведена на рис. В.17. Часто встречаются задачи, в которых не имеет значения, по какому параметру организовать внешний и внутренний цикл. Все приемы программирования, изложенные выше, можно использовать и при организации вложенных циклов.

6.2.Упорядочить элементы массива, расположив их в порядке возрастания

втом же массиве.

Для решения этой задачи требуется найти наименьший элемент. Поэтому перед внутренним циклом необходимо задать начальное значение наименьшего, а внутри цикла искать наименьшее и его порядковый номер. После окончания цикла необходимо записать наименьший элемент в первую ячейку, а первый – в ячейку, где ранее был наименьший. Повторяя эти действия начиная со второго, затем третьего элемента и т.д., можно добиться того, что элементы массива будут упорядочены по возрастанию.

Схема алгоритма решения задачи представлена на рис. В.18. Внешний цикл повторяется 99 раз, так как находить наименьший элемент из одного

элемента x100 не имеет смысла. Блок 4 задает начальные значения x min и номер n наименьшего элемента. Блоки 6,7 находят наименьший элемент и его порядковый номер. Блок 8 записывает k-й элемент в n-ю ячейку и наименьший элемент в k-ю ячейку.

6.3. Вычислить значения функции

 

10

n

sink x

 

, где

x

заданы

z

 

i

 

 

 

i 1 k 1

k

 

 

i

 

массивом (x1,x2 ...,x10 ),k=1,2,..,n.

 

 

 

 

 

 

20

1 1 / ei x

 

, где

 

 

6.4. Вычислить значения функции z

 

 

x

заданы

j

 

j

 

i 1

 

 

 

i

 

массивом (x1,x2 ...,x20 ). Результаты запомнить в массиве z .

6.5.Упорядочить элементы массива, расположив их по убыванию.

6.6.Найти наибольшие элементы каждой строки матрицы X(10×20) и записать их в массив Y.

6.7.Найти среднее арифметическое положительных элементов каждого столбца матрицы X (10×20) при условии, что в каждом столбце есть хотя бы один положительный элемент.

6.8.Вычислить суммы элементов каждой строки матрицы C (20×20), определить наименьшее значение этих сумм и номер соответствующей строки.

6.9.Построить матрицу B, поменяв местами строки и столбцы.

6.10.Вычислить наибольшие значения функции yi=2ebi x 5x2 , если bi задано массивом. Аргумент x изменяется от -2 до 2 с шагом 0,1. Все ymax запомнить в массиве C .

57

Продолжение приложения В

6.11.Определить количество положительных и отрицательных элементов матрицы A(20×20).

6.12.Определить количество положительных элементов каждого столбца матрицы X(20×20) и запомнить их в массиве Y.

6.13.Найти наибольший элемент матрицы Y(20×30) и номер строки и столбца, в которых он находится.

6.14.Найти наименьший элемент матрицы X(10×15) и записать нули в ту строку и столбец, где он находится.

20

 

10

a b / 2

, где

a

6.15. Вычислить значение функции z a

 

i 1

i k 1

i

 

i

заданы массивом (a1,a2 ,...,a20 ), bизменяется от 0 с шагом 0,1.

6.16. Перемножить матрицы A(n×m) и B(m×l). Элементы

m

результирующей матрицы вычислить с помощью выражения cik aijbjk . j 1

 

 

 

 

 

 

 

 

 

1

100

 

 

 

6.17. Вычислить математическое ожидание mx =

 

xi

и дисперсию

 

 

 

 

 

 

1

100

 

 

 

 

100 i=1

 

D

 

=

x m

 

2

случайных величин, записанных в массивах A,Bи

 

 

 

 

x

 

100 i 1

i

x

 

 

 

 

 

C по 100 элементов каждый.

6.18.Переписать первые элементы каждой строки матрицы X (10×15), большие c , в массив B. Если в строке нет элемента, большего c , то записать ноль в массив B.

6.19.Вычислить значения полинома yi=ai1x9+ai2x8+..+ai9 x+ai10

при различных значениях коэффициентов, используя формулу Горнера

yi=( ...((ai1x+ai2 )x+ai3 )x+...+ai9 )x+ai10 . Коэффициенты сведены в

матрицу A(5×10).

6.20. Определить с точностью ε=0,01значение аргумента, при котором

функция y=ax ln( x )достигает минимума при x , изменяющемся от 0,2 до

10.

Можно было бы решать эту задачу, взяв шаг изменения аргумента, равный 0,01. Однако это приведет к увеличению времени счета. Поэтому решение задачи разбивается на два этапа:

1.Определение грубого значения минимума функции при большом шаге изменения аргумента, например 0,2.

2.Повторение процесса в районе минимума при шаге изменения аргумента, равном 0,01.

58

Продолжение приложения В

Таким образом, при первом нахождении минимума шаг изменения аргумента равен 0,2, а его начальное значение x0=0,2 . При повторном

нахождении минимума шаг равен 0,01, а x0=xmin 0,2 .

Схема алгоритма решения задачи приведена на рис. В.19. Во внутреннем цикле осуществляется поиск наименьшего значения функции и значения аргумента, при котором оно достигается. Поскольку функция имеет один

минимум, выход из цикла происходит при y ymin . В качестве параметра

цикла взята некоторая переменная i, которая выполняет роль счетчика количества повторений цикла. После окончания внутреннего цикла проверяется

условие h=0,01. Если выполнение условия имеет место, то осуществляется выход из внешнего цикла. В противном случае задаются новое начальное значение переменной x , новый шаг h, и внешний цикл повторяется еще один

раз.

 

 

6.21. Найти значение аргумента x для

Начало

функции y=aebx cx2

, имеющей один

a

максимум, при котором достигается максимум

с точностью ε=0,005. Аргумент изменяется

от -2 до 2 с шагом 0,1.

6.22. Найти минимальные элементы каждой строки матрицы и поместить их на главную диагональ, а диагональные элементы записать на место минимальных.

6.23.Найти максимум функции

y=ax3+bx2+cx+d при

изменении

аргумента x от -10 до +10 с шагом 0,1 и минимум с шагом 0,01. Функция y имеет один максимум и один минимум при a>0 и

3ac b2<0 и достигает максимума при меньших значениях аргумента.

6.24. Найти и запомнить в массиве Z , начиная с первого максимума все максимумы и

минимумы функции y=ae bxsin( x f)

при изменении аргумента x от 0 до 5 с шагом

0,1.

h=0,2; x=0,2;ymin=1019

i =1..51

y =ax-lnx

нет

y < ymin

да

ymin= y; xmin= x

x = x+h

да

h = 0,01

нет

x = xmin- 0,2 h =0,01

xmin

конец

Рис. В.19.

59

Продолжение приложения В

Процедуры и функции

Нередко в программах встречаются повторяющиеся или похожие фрагменты. Имеется возможность оформлять такие фрагменты специальным образом – выделять их в подпрограммы.

Подпрограмме дается имя, по которому к ней можно обращаться (вызывать подпрограмму). Использование подпрограмм не только улучшает структуру и внешний вид программы, но и уменьшает вероятность ошибок и облегчает отладку.

В Паскале имеется два вида подпрограмм – процедуры и функции. Их структура очень похожа на структуру основной программы.

Описание процедуры

Описание процедуры начинается с заголовка, который является обязательным (в отличие от заголовка программы). Заголовок состоит из служебного слова Procedure, за которым следует имя процедуры и, в круглых скобках, список формальных параметров. В конце заголовка ставится точка с запятой.

Общий вид описания процедуры (в квадратных скобках заключена часть, которая может отсутствовать):

Procedure Имя [(список формальных параметров)]; Описательная часть

Begin

Тело процедуры

End;

При вызове процедуры ее формальные параметры заменяются соответствующими фактическими.

Фактические параметры – это параметры, которые передаются процедуре при ее вызове.

Количество и типы формальных и фактических параметров должны в точности совпадать.

Формальные параметры описываются в заголовке процедуры и определяют тип и место подстановки фактических параметров. Формальные параметры делятся на два вида: параметры-переменные и параметры-значения.

Параметры-переменные отличаются тем, что перед ними стоит служебное слово Var. Они используются тогда, когда необходимо, чтобы изменения значений формальных параметров в теле процедуры приводили к изменению соответствующих фактических параметров.

Параметры-значения отличаются тем, что перед ними слово Var не ставится. Внутри процедуры можно производить любые действия с параметрами-значениями, но все изменения никак не отражаются на значениях соответствующих фактических параметров, то есть какими они были до вызова процедуры, такими же и останутся после завершения ее работы.

60