АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ...

32
1 Министерство образования Российской Федерации Государственное образовательное учреждение высшего профессионального образования Ульяновский государственный технический университет М.В. Петрова АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧ Методические указания для студентов специальности 180400 дневной и заочной форм обучения Ульяновск 2003

Upload: others

Post on 17-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

1

Министерство образования Российской Федерации Государственное образовательное учреждение высшего

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

М.В. Петрова

АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧ

Методические указания

для студентов специальности 180400 дневной и заочной форм обучения

Ульяновск 2003

Администратор
1 образования
Page 2: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

2

УДК 681.3.06 (076) ББК 22.18я7 П 30

Рецензент кандидат технических наук Кузнецов А. В. Петрова М. В.

П 30 Алгоритмизация и программирование задач: Методические указания. − Ульяновск: УлГТУ, 2003. – 32 с.

Разработаны на кафедре «Электропривод и автоматизация промышленных устано-

вок». Содержат методические указания к разработке алгоритмов и практическому програм-мированию на языке Турбо Паскаль, которые могут быть использованы для подготовки к выполнению контрольных, лабораторных и практических заданий по следующим дисципли-нам: «Численные методы решения задач», «Основы алгоритмизации», «Теоретические осно-вы электротехники».

Указания предназначены для студентов вузов специальности 180400 дневной и заоч-ной форм обучения.

УДК 681.3.06 (076) ББК 22.18 я 7

Петрова Марина Валерьевна

АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧ

Методические указания Редактор Н. А. Евдокимова

Подписано в печать 30.11.2003. Формат 60×84/16

Бумага тип. №1. Печать трафаретная. Усл. печ. л. 1,86. Уч.-изд.л 1,50. Тираж 100экз. Заказ

Ульяновский государственный технический университет 432027, г. Ульяновск, ул. Сев. Венец, д. 32

Типография УлГТУ, 432027, г. Ульяновск, ул. Сев. Венец, д. 32.

Page 3: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

3

ОГЛАВЛЕНИЕ Введение………………………………………………………………………….. 4 1. Программирование алгоритмов линейной структуры……………………… 7 2. Программирование алгоритмов разветвляющейся структуры……………….. 8 3. Программирование алгоритмов циклической структуры…………………... 11 4. Массивы……………………………………………………………………… . 15 5. Характерные приемы алгоритмизации задач……………………………… . 16 5.1. Вычисление в цикле с несколькими одновременно изменяющимися

параметрами………………………………………………………………… 16 5.2. Запоминание результатов……………………………………………….. 17 5.3. Вычисление суммы и произведения……………………………………. 19 5.4. Вычисление суммы членов бесконечного ряда………………………. 22 5.5. Вычисление полинома………………………………………………….. 23 5.6. Нахождение наибольшего и наименьшего значения……………….. . 24 5.7. Уточнение корней уравнения………………………………………… . 27 6. Алгоритмы со структурой вложенных циклов…………………………… 29 7. Список литературы………………………………………………………….. 32

Page 4: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

4

ВВЕДЕНИЕ Язык программирования Паскаль назван в честь французского математика

Блеза Паскаля. Он разработан в начале 70-х годов 20 века профессором Швей-царской высшей технической школы Никлаусом Виртом.

Интегрированная среда программирования Турбо Паскаль разработана фирмой Borland.

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

Таким образом, наличие в одной среде редактора, компилятора и отладчи-ка значительно увеличивает эффективность разработки программ.

Работа в интегрированной среде

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

Выполняются последовательно такие действия: 1. Создать исходный текст программы. 2. Записать ее на диск в виде файла. 3. Запустить программу на компиляцию. 4. Найти и устранить синтаксические ошибки. 5. Запустить программу на выполнение.

Запуск системы

Запуск интегрированной среды программирования Турбо Паскаль осуще-ствляется следующим образом:

1. Находим директорию с именем ТР7 (Turbo Pascal 7.версия). 2. Находим файл turbo.exe. При нажатии клавиши Enter произойдет запуск программы, устанавли-

вающей интегрированную среду программирования с выдачей на экран основ-ного меню.

Основное изображение экрана содержит четыре части: 1. Основное меню (верхняя строка экрана). 2. Окно редактирования (поле экрана). 3. Окно просмотра (поле экрана расположенное под надписью «Watch»). 4. Нижняя строка (назначение функциональных клавиш). Для всех элементов основного меню выводится перечень подрежимов. Для

того чтобы активизировать основное меню (верхнюю строку), необходимо на-жать клавишу F10, далее, перемещая с помощью клавиш управления курсором, выбирается нужный режим (опция), затем, нажав клавишу Enter, открывается падающее меню, содержащее подрежимы.

Page 5: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

5

Система меню Все управление средой Турбо Паскаля осуществляется в основном с по-

мощью системы последовательно разворачивающихся меню. Главное меню со-держит фактически лишь оглавление дополнительных меню.

FILE (Файл) - действие с файлами и выход из системы; EDIT (Редактировать) - восстановление испорченной строки и операция с временным буфером; SEARCH (искать) - поиск текста, процедуры, функции или места ошибки; RUN (работа) - прогон программы; COMPILE (компиляция) - компиляция программы; DEBUG (отладка) - отладка программы; TOOLS (инструменты) - вызов вспомогательных программ (утилит); OPTIONS (варианты) - установка параметров среды; WINDOW (окно) - работа с окнами; HELP (помощь) - обращение к справочной службе.

Разработка алгоритма решения задачи Алгоритм − некоторая конечная последовательность предписаний, опре-

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

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

Таблица 1 Символ Выполняемые действия

Обозначает начало и конец алгоритма

Ввод и вывод данных

Вычислительные действия

Наличие условия в алгоритме

Наличие цикла в алгоритме

Наличие подпрограммы

Разрыв алгоритма

Внесение комментариев

При составлении алгоритма необходимо обеспечить, чтобы он обладал

рядом свойств:

Page 6: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

6

1. Однозначность алгоритма − единственность толкования исполните-лем правил выполнения действий и порядка их выполнения.

2. Конечность алгоритма − обязательность завершения каждого из дей-ствий.

3. Результативность алгоритма − выполнение алгоритма завершается получением определенных результатов.

4. Массовость алгоритма − возможность применения данного алгорит-ма для решения целого класса задач.

5. Правильность алгоритма − способность алгоритма давать правиль-ные результаты решения поставленных задач.

Простые типы данных

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

Var v1,v2,…: type; где v1,v2…. − список переменных, а type задает тип переменных из данного

списка. Все имеющиеся в Паскале типы принято делить на группы. Типы, принад-

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

Таблица 2 Название Идентификатор Множество допустимых символов

Порядковый Короткий целый shortint -128..127 Байтовый byte 0..255 Слово word 0..65535 Целый integer -32768..32767 Длинный целый longint -2147483648..2147483647 Символьный char Набор символов кода ASCII Булев boolean True, False

Вещественный Вещественный Real -1,7×1038..-2,9×10-39, 2,9×10-39..1,7×1038

С одинарной точностью Single -3,4×1038..-1,5×10-45, 1,5×10-45..3,4×1038

С двойной точностью Double -1,7×10308..-5,0×10-324, 5,0×10-324..1,7×10308

С повышенной точностью Extended -1,1×104932..-1,9×10-4951, 1,9×10-4951..1,1×104932

Сложный comp -263+1..263-1

Page 7: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

7

1. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЛИНЕЙНОЙ СТРУКТУРЫ

Алгоритм, в котором действия выполняются последовательно друг за другом, называется линейным алгоритмом.

1.1. Вычислить высоты треугольника со сторонами a,b,c по формулам:

.2/)(

,))()(()/2(

;))()(()/2(

;))()(()/2(

cbapгде

cpbpappch

cpbpappbh

cpbpappah

c

b

a

++=

−−−=

−−−=

−−−=

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

При организации решения задачи 1.1 для исключения повторений вычис-лять высоты следует не по приведенным выше формулам, а используя проме-жуточную переменную:

,))()((2 cpbpappt −−−= тогда ./,/,/ cthbthath cba ===

С учетом преобразований схема алгоритма решения задачи будет иметь вид, представленный на рис.1.1.

Начало

a, b, c

конец

p=(a+b+c)/2

t=2√p(p-a)(p-b)(p-c)

ha=t/a

hb=t/b

hc=t/c

ha , hb , hc

конец

Начало

x, n

y=sin x + 0,5

y=0

z=x3/y

z

y=0

да нет

нет

нет

Начало

конец

a, b, x

x≤a

z=sin x

x≥b

z=tg x

z=cos x

z

да

да

Рис.1. Рис.2. Рис Рис.3.

Page 8: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

8

1.2. Вычислить площадь поверхности и объем усеченного конуса по следующим формулам:

.)()3/1(;)(

22

22

hRrrRVrRlrRS

++=

+++=

π

πππ

1.3. Вычислить координаты центра тяжести трех материальных точек с массами 321 ,, mmm и координатами ),();,();,( 332211 yxyxyx по формулам:

)./()();/()(

321332211

321332211

mmmymymymymmmxmxmxmx

c

c

++++=++++=

1.4. Вычислить координаты точки, делящей отрезок 21aa в отношении 21 : nn , по формулам:

./

),1/()();1/()(

21

21

21

nnгде

yyyxxx

=

++=++=

γ

γγγγ

1.5. Вычислить медианы треугольника со сторонами cba ,, по формулам:

.225,0

;225,0

;225,0

222

222

222

cbam

bcam

acbm

c

b

a

−+=

−+=

−+=

1.6. Вычислить значение функции ωϕπω /)2/(sin −== − xприxaey ax .

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

.2/)4(

,2/)4(

,/)(

;2/)(

22

21

21

21

aacbbx

aacbbxгде

cxbxaz

eey xx

−−=

−+=

−=

+= −−

1.8. Определить высоту треугольника, если его площадь равна S, а осно-вание больше высоты на величину a.

2. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ

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

2.1. Вычислить значение функции 5,0sin,/3 +== nxyгдеyxz .

Page 9: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

9

Казалось бы, решение этой задачи можно описать алгоритмом линейной структуры. Однако для удовлетворения свойств массовости и результативности алгоритма необходимо, чтобы при любых исходных данных был получен ре-зультат или сообщение о том, что задача не может быть решена при заданных исходных данных. Действительно, если 0=y , задача не может быть решена, так как деление на 0 невозможно. Поэтому в алгоритме необходимо предусмотреть этот случай и выдать в качестве результата информацию о том, что 0=y . Таким образом, рассматриваемый вычислительный процесс должен иметь две ветви: в одной, если 0≠y , необходимо вывести и отпечатать значение переменной z , а в другой − вывести на печать информацию, что 0=y .

Блок-схема алгоритма решения этой задачи представлена на рис.2. Этот вычислительный процесс можно описать условным выражением: Вычислить z=x3/y, если y≠0. Вывести y=0, если y=0. В блок−схеме до блока номер 4 располагаются блоки сначала одной ветви

(блоки 5,6), а затем второй ветви (блок 7). Поскольку после выполнения блоков первой ветви нет необходимости выполнять блоки второй ветви, осуществляет-ся переход сразу к концу алгоритма (к блоку 8).

В алгоритме дважды нарушается естественный порядок выполнения бло-ков: 1) при проверке условия y=0 (условный переход); 2) после выполнения блоков первой ветви (безусловный переход).

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

.

,

,cos

,sin

<<

=

bxеслиtgx

bxaеслиx

axеслиx

z

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

Блок 3 проверяет условие x≤ a, а в случае его выполнения осуществляется переход к блоку 4, вычисляющему z=sin x. Если x>a, то блок 5 проверяет усло-вие x≥ b. Если это условие выполняется, то осуществляется переход к блоку 6, вычисляющему z=tg x. В противном случае x лежит в интервале между a и b и происходит переход к блоку 7, вычисляющему z=cos x. После вычисления по любой из формул осуществляется переход в общую ветвь к блоку печати.

2.3. Вычислить корни квадратного уравнения ax2+bx+c=0.

Page 10: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

10

Если d=b2-4ac≥0, то корни действительные; следовательно, необходимо вычислить x1,2=e± f. Если d<0, то корни мнимые; следовательно, необходимо вычислить e и f по формулам e=-b/(2a), f=√ |b2-4ac|/(2a).

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

<−

≥−=

0,89,0

0,67,3

2

2

xnеслиe

xпеслиez

x

x

.

2.5. Найти квадрат наибольшего из двух чисел a и b и вывести на печать

признак 1=N , если наибольшим является a , и 2=N , если наибольшим является b .

2.6. Определить, попадает ли точка с координатами 00 , yx в круг радиусом r . Присвоить признаку 1=N , если точка находится внутри круга, и 0=N , если точка вне круга.

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

−≤

<<−

=

1,

11,1

1,ln

xеслиe

xесли

xеслиx

z

x

.

2.8. Определить в каком квадранте находится точка с координатами yx, , и вывести на печать номер квадранта.

2.9. Округлить действительное положительное число x , меньшее 5, до ближайшего целого числа:

<≤

<≤

<≤

<≤

<

=

5,4,5

5,45,3,4

5,35,2,3

5,25,1,2

5,15,0,1

5,0,0

xесли

xесли

xесли

xесли

xесли

xесли

NX .

2.10. Составить программу для решения квадратного уравнения 02 =++ cbxax .

2.11. Определить максимальное четное число из двух введенных. 2.12. Определить, можно ли из отрезков с длинами cba ,, построить тре-

угольник. 2.13. Для двух чисел yx, определить, являются ли они корнями уравнения:

024 =++ cbyax .

2.14. Вычислить значения функции z в зависимости от значения x :

Page 11: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

11

+

>−

−<+

=

случаепротивномвx

xеслиx

xеслиx

z

,1

1,1

8,0,)(sin1

7,1 .

2.15. Если среди трех чисел zyx ,, имеется хотя бы одно четное, то найти максимальное число, иначе − минимальное.

2.16. Ввести два числа a и b . Меньшее заменить полусуммой, а большее удвоенным произведением.

3. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ

Алгоритм, в котором вычисления повторяются по одной и той же сово-купности формул, называется циклическим алгоритмом.

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

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

Если число повторений тела цикла заранее известно, то чаще всего при-меняется оператор цикла с параметром: FOR<параметр цикла>:=<нач. знач.>TO<кон. знач.>DO<оператор> FOR<пар. цикла>:=<нач.знач.>DOWNTO<кон.знач.>DO<оператор>, где <параметр цикла> − величина, которая изменяется в цикле (переменная ти-па Integer); <нач.знач.> − величина, задающая начальное значение параметра цикла; <кон.знач.> − величина, задающая конечное значение параметра цикла. Шаг наращивания параметра цикла строго равен 1. При замене зарезервирован-ного слова TO на DOWNTO шаг наращивания параметра цикла равен (-1).

3.1. Осуществить ввод с клавиатуры целого числа N и вычислить суммы всех целых чисел от 1 до N.

Составим программу: Var i,N,S: integer; Begin Write ('введите N'); Readln (N); S:=0; FOR i:=1 TO N DO S:=S+i; Writeln ('S=',S); End. 3.2. Вычислить и вывести на печать значения функции )/( 223 xaay += при

x , изменяющемся от 0 до 3 с шагом 0,1.

Page 12: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

12

Это цикл с заданным числом повторений, которое определяется по формуле ] [ 1/)( 0 +−= hxxn m ;

где 0x и mx − соответственно начальное и конечное значение аргумента; h− шаг изменения аргумента. Перед первым выполнением цикла необходимо задать начальное значение, равное 0, а затем организовать 31 раз вычисление и печать значений функции. При каждом новом выполнении цикла необходимо изменять аргумент на шаг, равный 0,1. Чтобы процесс был конечным, необходимо задать условие оконча-ния цикла. Таким образом, для организации цикла необходимо: 1. Задавать перед циклом начальное значение переменной, изменяющейся в

цикле. 2. Изменять значение переменной перед каждым новым повторением цикла. 3. Проверять условие окончания цикла. 4. Управлять циклом, т. е. переходить к его началу, если он незакончен, или

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

Схема алгоритма приведена на рис.4 На схеме блок 3 выполняет первую функцию, необходимую для органи-

зации цикла, блок 6 – вторую, блок 7 – третью и четвертую функции. Схема ал-горитма получается во многих случаях более компактной и наглядной, если для ее построения использовать блок начала цикла, который выполняет все функ-ции, необходимые для его организации (рис.5).

Начало

a

x=0

y

x=x+0,1

конец

нет да

y=a3/(a2+x)

x≤3

Начало

конец

a

x = 0..3,0.1

y=a3/(a2+x2)

y

Начало

конец

x, ε

y=1

n=1

y=y⋅x/n

y

n=n+1

y>ε да

нет

Рис. 4. Рис. 5. Рис. 6.

Page 13: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

13

3.3. Вычислить значения членов бесконечного ряда

.!/,...!

,...,!3

,!2

,32

ε≤nxчленадоnxxxx n

n

Здесь имеет место итерационный цикл, так как заранее не известно, при каком n выполняется условие xn/n!≤ε. Для итерационных циклов число повто-рений зависит от некоторого промежуточного или окончательного результата, а не от параметра цикла.

Сравнивая два соседних члена ряда, видим, что yn/yn-1=x/n. Поэтому для уменьшения времени счета, при вычислении текущего члена ряда целесообраз-но использовать в цикле рекуррентную формулу yn=yn-1 x/n. Чтобы использовать эту формулу для вычисления значения первого члена ряда y1=y0(x/1), необхо-димо, заданное начальное значение y0 приравнять 1. Параметром, изменяющим-ся в этом цикле, будет номер n члена ряда. Тогда формула для вычисления зна-чения текущего члена ряда будет иметь вид y=yx/n.

Схема алгоритма такого вычислительного процесса приведена на рис.6. Если использовать для организации цикла блок начала цикла, то в нем надо указать в качестве последнего значения параметра цикла некоторое большое число, заведомо большее того n, при котором выполняется условие y≤ε.

Оператор цикла с предпроверкой условия

WHILE <условие>DO<оператор>

Указанный оператор выполняется повторно до тех пор, пока условие ис-

тинно. Действие его таково: если при выполнении этого цикла условие ложно сразу же, то оператор, стоящий после DO , не выполняется ни разу.

Оператор цикла с постпроверкой условия

REPEAT<группа операторов>UNTIL<условие>

В этом операторе, в отличие от оператора цикла с предусловием, условие

проверяется после выполнения тела цикла. При этом тело цикла выполняется хотя бы один раз и до тех пор, пока условие ложно.

Если в цикле WHILE выполняется несколько операторов, то они объеди-няются в один составной и заключаются в операторные скобки BEGIN и END, а в цикле REPEAT это не делается.

3.4. Вычислить значение функции 1||

143

++−

=x

xxy , пользуясь оператором

цикла WHILE, при x , изменяющемся в диапазоне КОННАЧ xxx ≤≤ с шагом x∆ . Представим решение этой задачи в виде блок-схемы (рис.7).

Page 14: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

14

Составим программу: Var x,y,xN,xK,dx:real; Begin Writeln ('введите xN,xK,dx); Read (xN,xK,dx); X:=xN; WHILE x<=xK DO begin Y:=(x*sqr(x)-4*x+1)/(abs(x)+1); Writeln('x=',x,' y=',y); X:=x+dx; End; End. Рис.7

3.5. Вычислить сумму целых четных чисел до 10 включительно. Представим решение этой задачи в виде блок-схемы (рис.8). Составим программу:

Var S,i:integer; Begin S:=0; i:=0; Repeat S:=S+i; i:=i+2 Until (i>10); Writeln ('i=',i' S=',S); End. Рис.8

4. МАССИВЫ Массив − это совокупность переменных, которые имеют одно и то же имя

и тип. Элементы массива различаются по индексу. Имя общее, индекс ориги-нальный. Упорядоченность данных в массиве позволяет обращаться к любому

Начало

xN,xK,dx

x=xN

x≤xK

1||143

++−

=x

xxy

x, y

x=x+dx конец

нет

да

Начало

S=0

i=0

i=i+2

S=S+i

i>10

i,S

конец

нет

Page 15: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

15

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

Различают одномерные массивы (1 индекс) − они используются для пред-ставления векторов и двумерные массивы (2 индекса) − они используются для представления матриц.

В Паскале можно описать массив любой размерности с учетом следую-щих ограничений:

1. Границы изменения индексов (тип − диапазон) необходимо опреде-лить в описании массива или до его объявления.

2. Максимальный объем памяти, выделенной под массив не должен пре-вышать 64 кБ.

Переменные типа массив − объявляются следующим образом: Var A: array [1..10] of integer; − одномерный массив из 10 целых чисел, B: array [1..20] of real; − одномерный массив из 20 вещественных чисел, C: array [1..4,1..7] of integer; − двумерный массив из 28 целых чисел. При описании массива используются зарезервированные слова:

ARRAY - массив OF - из За словом array в квадратных скобках указывается тип − диапазон, с по-

мощью которого компилятор определяет общее число элементов массива. 4.1. Вычислить значения функции 2/)( ii axz += , если ix и ia − элементы

массивов, состоящие из 40 элементов каждый. 4.2. Записать в массив x , состоящий из 20 элементов, нули. 4.3. Вычислить значения функции, если ia − элементы массива

)...,,( 2521 aaa .

0,0

0,

≤=

>=

ii

iii

aеслиa

aеслиaa.

4.4. Вывести на печать положительные элементы массива )...,,( 2521 aaa . 4.5. Вывести на печать первый отрицательный элемент массива

)...,,( 2521 aaa и его порядковый номер, полагая, что в массиве есть хотя бы один отрицательный элемент.

4.6. Вывести на печать номера элементов массива )...,,( 2521 aaa , удовлетво-ряющих условию 10 << ia .

4.7. Вычислить 3 3/iii cbaz = , где iii cba ,, − элементы массивов, состоящие из 20 элементов каждый.

4.8. Вывести на печать элементы массива )...,,( 2521 aaa , кратные трем. 4.9. Вывести на печать номера точек, лежащих в круге радиусом r .

Координаты точек заданы массивами ).,..,,(),,...,,( 10211021 yyyxxx

Page 16: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

16

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

4.11. Найти минимальное значение элемента массива и его порядковый номер.

4.12. Найти минимальное значение элемента массива из нечетной пози-ции.

4.13. Найти максимальное значение элемента массива и его порядковый номер.

4.14. Дан массив, состоящий из 30 элементов, найти второй положитель-ный элемент.

4.15. Дан массив, состоящий из 50 элементов, найти предпоследний не-четный элемент.

4.16. В одномерном массиве перенести элемент, стоящий на первом месте в конец массива.

5. ХАРАКТЕРНЫЕ ПРИЕМЫ АЛГОРИТМИЗАЦИИ ЗАДАЧ Рассмотрим приемы, наиболее часто используемые при решении практи-

ческих задач. 5.1. Вычисление в цикле с несколькими одновременно

изменяющимися параметрами В рассмотренных ранее примерах алгоритмов циклической структуры в

цикле изменялся только один параметр. На практике часто встречаются задачи, в которых необходимо использовать несколько параметров цикла, изменяю-щихся одновременно. Цикл с несколькими одновременно изменяющимися па-раметрами организуется по схеме, аналогичной схеме организации цикла с од-ним параметром. Для остальных параметров перед циклом необходимо задавать их начальные значения, а внутри его вычислять текущие.

5.1.1. Вычислить значение функции 2/)( axz i += , если ix являются эле-ментами массива ),...,,( 3021 xxx , a изменяется от 2 с шагом 0,5. Считать 0>+ axi .

5.1.2. Вычислить значение функции icbaz i /)( ++= , если a изменяется от 0 до 1 с шагом 0,1, b изменяется от 1 до 3 с шагом 0,2, ic являются элементами массива ).,...,,( 1121 ccc

5.1.3. Вычислить значения функции 12/)( −+= ii zyxu , если ix являются эле-ментами массива ),..,,( 5021 xxx , iz − массива ),..,,( 10021 zzz , а y изменяется от 1 с ша-гом 0,25.

5.1.4. Вычислить значение функции )/( ii yxxyz += , если x изменяется од-новременно с iy от начального значения a с шагом h , где iy являются элемен-тами массива ),...,,( 2021 yyy .

Здесь в цикле, выполняемом 20 раз, изменяются два параметра: простая переменная x и i индекс переменной y . Схема алгоритма решения этой задачи представлена на рис.9, где блок 4 задает закон изменения параметра i от 1 до 20

Page 17: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

17

с шагом 1, блок 3 – перед циклом начальное значение параметра x , а блок 7 вы-числяет новое значение параметра x .

5.1.5. Вычислить значения функции xyxz = , где x изменяется от 1 с ша-гом 0,1 до 2, y изменяется от 0y с шагом h . Считать 0>y .

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

4120,...,

12,...,

73,

52,

3hx

nnhxhxhxhx ++

++++

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

,...)12()12(

,...,53

,3 0

0

0

0

0

0

nnnxnx

nnxx

nnxx

∆++∆−+

∆+∆+

∆+∆+ .

Последнее значение знаменателя принять равным m.

5.2. Запоминание результатов Если результатом вычислений является значение простой переменной, то

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

5.2.1. Вычислить и запомнить значения функции ixz ii /)1( 2 += , где ix − элементы массива ),..,,( 5021 xxx . Схема алгоритма, результирующего этот вычис-

Начало

конец

a, h, y

x =a

i=1..20

z =x⋅yi/(x+yi)

x=x+h

z

Начало

конец

zi=√(xi2+1)/i

i=1..50

x

z

Начало

конец

z=z+xi2/i

i=1..20

z

z=0

x

Рис.9 Рис.10 Рис.11

Page 18: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

18

лительный процесс, представлена на рис. 10. В схеме блок печати стоит за цик-лом, так как на печать выводится массив Z .

5.2.2. Вычислить и запомнить значения функции 2cxbxaez −= при изменении аргумента x от 0 до 2 с шагом 0,1.

5.2.3. Вычислить и запомнить значения функции 2/)( iii yxz += , где

YX , − массивы из 45 элементов каждый.

5.2.4. Вычислить и запомнить значения функции

,0,1

;0,0

;0,

<−

=

>

=

i

i

ii

i

xесли

xесли

xеслиx

y

где ix − элементы массива из 20 элементов. 5.2.5. Записать положительные элементы массива ),...,( 3021 xxx подряд в

массив Y . 5.2.6. Переписать в массив Y элементы массива ),...,( 3021 xxx в обратном

порядке. 5.2.7. Записать в массив Y подряд номера положительных элементов

массива ),...,( 3021 xxx . 5.2.8. Вычислить значение функции nxxny cossin −= , если x изменяется

от 0x до mx с шагом h . Записать в массив Z подряд значения функции, удовле-творяющие условию 10 ≤≤y .

5.2.9. Записать подряд в массив B элементы массива ),...,( 3021 xxx , имею-щие четные индексы.

5.2.10. Записать подряд в массив B элементы массива ),...,( 3021 xxx , стоя-

щие на четных местах, а элементы, стоящие на нечетных местах, − в массив C . 5.2.11. Запомнить в массиве Z положительные значения y для монотонно

убывающей функции cbxaxxy +++−= 23 , если x изменяется от 0 с шагом 0,1 до 10. Отрицательные значения функции не вычислять. Считать, что функция име-ет хотя бы один отрицательный элемент.

5.2.12. Переписать положительные элементы массива ),...,( 3021 xxx в массив

Z , а отрицательные – в массив Y . Элементы в массивах располагать подряд. 5.2.13. Запомнить в массиве A значения n , при которых 0>z для знако-

чередующейся функции )sin( ϕ+= nxz , а в массиве B − значения n , при которых 0≤z )10,..,3,2,1( =n .

5.2.14. Переписать элементы главной диагонали матрицы )( nnA × в од-номерный массив B , считая 30≤n .

Page 19: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

19

5.3. Вычисление суммы и произведения Если необходимо вычислить сумму значений некоторой функции )(xfy =

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

nnn yzz += −1 . Поскольку надобности в запоминании значений всех слагаемых и промежуточных сумм нет, в качестве z и y нужно использовать простые пере-менные и накопление суммы вести в цикле по формуле yzz += , где знак «=» означает присваивание значения. Если начальное значение z предварительно приравнять к нулю, то после первого выполнения цикла значение z будет равно первому значению функции.

Аналогично накапливается и произведение с той лишь разницей, что для его накопления используется формула zyz = , а начальное значение произведе-ния должно быть равно единице.

5.3.1. Вычислить значение функции Схема алгоритма решения этой задачи представлена на рис.11. Блок 3,

задающий начальное значение суммы, стоит перед циклом, в котором накапли-вается эта сумма. Блок 5 вычисляет значение слагаемого и накапливает сумму. Поскольку результат решения этой задачи одно число, блок печати стоит за циклом и выполняется один раз.

5.3.2.Вычислить произведение положительных элементов массива (x1, x2,…x100).

Схема алгоритма решения задачи представлена на рис.12. Значения сомножителей вычислять не требуется, поскольку они уже

имеются в массиве. Однако прежде чем накапливать произведение, надо прове-рить, является ли сомножитель положительным (блок 5). Блок 3 задает началь-ное значение произведения, равное единице. В одной из ветвей этого процесса стоит блок 6, осуществляющий накопление произведения. При невыполнении условия xi>0 никаких действий не предусматривается, а осуществляется пере-ход к концу цикла.

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

+=20

1

/sini

xixz , если x изменяется от

0 с шагом h одновременно с i. 5.3.4. Вычислить значения функции ∏

=

+=15

1

/)(i

iinz .

5.3.5. Вычислить сумму положительных элементов массива (x1,x2,…,x55). 5.3.6. Вычислить среднее арифметическое элементов массива (a1,a2,…,a60). 5.3.7. Вычислить среднее арифметическое отрицательных элементов мас-

сива (c1,c2,…c30), полагая, что в массиве есть отрицательные значения.

Page 20: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

20

5.3.8. Вычислить среднее геометрическое положительных элементов мас-

сива ),...,,( 6021 xxx , имеющих четные индексы. Если таких элементов нет, то вы-вести на печать признак 0.

5.3.9. Вычислить среднее геометрическое элементов массива ),...,,( 2521 yyy , удовлетворяющих условию ayi > , считая, что в массиве есть элементы, для ко-торых выполняется это условие.

5.3.10. Подсчитать количество элементов целочисленного массива ),...,,( 6021 xxx , кратных трем.

5.3.11. Для целочисленного массива ),...,,( 6021 xxx определить, является ли сумма его элементов четным числом, и вывести на печать ДА или НЕТ.

5.3.12. Подсчитать для массива ),...,,( 6021 xxx количество элементов, бли-жайшим целым числом для которых является 1.

5.3.13. Вычислить сумму четных и сумму нечетных чисел натурального ряда от 1 до N.

5.3.14. Вычислить сумму элементов массива ),...,,( 6021 xxx , стоящих на чет-ных местах.

5.3.15. Вычислить сумму 20 первых элементов ряда

∑=

+=++++=19

1

192

119

...2

1i

i

ixxxxS .

Для определения ix использовать прием накопления произведения, т. е. xxx ii 1−= .

Начало

конец

x

i=1..100

z

z=z⋅xi

xi >0

z =1

нет

да

Начало

конец

x, ε

y=1, z=1, n=1

y=y⋅(x)2/2n(2n-1)

z=z+y

n=n+1

y >ε

z

да

нет

Начало

конец

a, n

y=a1

i=2, n+1

y=y⋅x+ai

y

Рис.12 Рис.13 Рис.14

Page 21: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

21

5.3.16. Вычислить среднее арифметическое элементов S массива ),...,,( 8021 aaa , удовлетворяющих условию 21 ≤≤ ia . Если таких элементов нет, то

считать 0=S . 5.3.17. Подсчитать количество положительных и количество отрицатель-

ных элементов массива ),...,,( 6021 xxx . 5.3.18. Вычислить сумму элементов главной диагонали матрицы

)2020( ×A . 5.3.19. Вычислить значение функции z=n!.

5.3.20. Вычислить сумму членов ряда ∑=

+=++++=10

1

22042

)!2(1

!20...

!4!21

i

i

ixxxxz .

Для вычисления значения члена ряда использовать рекуррентную формулу [ ])12(2/2

1 −= − nnxyy nn . 5.3.21. Вычислить сумму членов ряда

!21

...)!12(

)1(...!5!3

1211253 x

nxxxxz

nn −+

−−++−+−=

.

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

)12(2

2

1 +−

=+ nnxyy nn . Начальное значение z=1-x, а y=-x.

5.3.22. Вычислить значение функции ∏−

=

+=

−=

mn

i

mn i

immnm

nc1)!(!

! .

5.3.23. Вычислить сумму элементов двух главных диагоналей матрицы А (10×10). Элементами i-й строки, лежащими на главных диагоналях, являют-ся aij и ai,11-i.

5.3.24. Вычислить сумму положительных и сумму отрицательных значе-ний функции )sin()cos( anxanxz −+= , где .10,...,2,1=n

5.3.25. Вычислить приближенное значение функции Бесселя

∑∑=

+

=

+

+

+

=+

=100

1

2

100

0

2

)!(!2

)1(

!2

)!(!2

)1()(

k

nkk

n

k

nkk

knk

x

n

x

knk

x

xJ .

Для определения n! использовать отдельный цикл, а слагаемого – рекур-

рентную формулу )(

)2/( 2

1 knkxyy kk +

−= − . В качестве начальных значений суммы и

слагаемого использовать член ряда при 0=k , равный !)2/(

nx n

.

5.3.26. Вычислить размещение из n элементов по m, т. е.

))1()...(2)(1( −−−−= mnnnna mn .

5.4. Вычисление суммы членов бесконечного ряда Задачи этого типа являются типичными задачами, использующими ите-

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

Page 22: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

22

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

5.4.1. Вычислить сумму членов ряда

∑∞

=

−+=+−+−+−=1

2242

)!2()1(1...

)!2()1(...

!4!21

n

nn

nn

nx

nxxxz

с точностью до члена ряда, меньшего ε. В целях уменьшения затрат времени на вычисление значения текущего члена ряда использовать рекуррентную форму-лу. Схема алгоритма решения этой задачи представлена на рис. 13.

Блок 3 задает начальное значение y , равное 1, начальное значение суммы, равное члену ряда с номером 0, так как вычислять его нет надобности, и на-чальное значение параметра цикла. В цикле блок 4 вычисляет значение текуще-го члена ряда, блок 5 накапливает сумму, блок 6 изменяет параметр цикла. Блок 7 проверяет условие повторения цикла и осуществляет переход к началу цикла, если y>ε, или выход из него в противном случае.

5.4.2. Вычислить сумму членов ряда

...!

...!2

12

+++++=nxxxz

n

с точностью до члена ряда, меньшего ε. 5.4.3. Вычислить сумму членов ряда

...)!3(

)2)(1()!2()1(

)!1(1 32 +

+−−

++−

++

+= xm

mmmxm

mmm

mxz

с точностью до члена ряда, меньшего ε. Для определения текущего значе-ния члена ряда использовать рекуррентную формулу

mnnmxyy nn ++−

= −)1(

1 , где n –

номер члена ряда. Начальное значение y принять равным !

1m

.

5.4.4. Вычислить сумму членов ряда ...

)2)(1(...

432

321

+++

++⋅

+⋅

=nn

ny

с точностью до члена ряда, меньшего 10-4. 5.4.5. Вычислить сумму членов ряда

...cos...93cos

42coscos 2 +++++=

nnxxxxz

с точностью до члена ряда, меньшего ε. 5.4.6. Вычислить сумму членов ряда

+

++−

+++−

++−

++−

= +

+

...)1)(12(

)1(...)1(5)1(

)1(3)1(

112 12

12

5

5

3

3

n

n

xnx

xx

xx

xxz

с точностью до члена ряда, меньшего 10-6. 5.4.7. Вычислить сумму членов ряда

...)12)(12(

2cos...534cos

312cos

++−

++⋅

+⋅

=nn

nxxxy

с точностью до члена ряда, меньшего 10-4. 5.4.8. Вычислить сумму членов ряда

Page 23: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

23

...2

11

11...211 11 +

++

+++++= −− x

nnx

nxxy nn

с точностью до члена ряда, меньшего 10-6. Для определения текущего члена ряда использовать рекуррентную формулу.

5.5. Вычисление полинома Для вычисления полинома n-й степени 1

121 ... +

− ++++= nnnn axaxaxay удоб-

но использовать формулу Горнера 1321 )...))(...(( ++++++= nn axaxaxaxay . Если вы-ражение, стоящее внутри скобок, обозначить iy , то значение выражения в сле-дующих скобках можно вычислить, используя рекуррентную формулу

11 ++ += iii axyy . Значение полинома y получается после повторения этого процес-са в цикле n раз. Начальное значение 1y целесообразно взять равным 1a , а цикл начинать с i=2. Если обозначить y простой переменной, то схема примет вид, показанный на рис.14. Все коэффициенты полинома и свободный член, как правило, сводятся в массив, состоящий из n+1 элементов (n порядок полинома). Если полином не содержит членов с некоторыми степенями x , то на соответст-вующем месте в массиве необходимо поместить коэффициент, равный 0.

5.5.1. Вычислить значение многочлена 16542 2568 ++−+−= xxxxxy , ис-пользуя формулу Горнера. Коэффициенты полинома удобно представить мас-сивом (2; 0; -1; 4; 0; 0; -5; 6; 1). Порядок полинома n равен 8. Схема алгоритма будет аналогична схеме алгоритма, представленной на рис.14.

5.5.2. Вычислить значение функции xxcxcxcxcxcx +++++= 53

45

37

29

1sin , используя формулу Горнера xxcxcxcxcxcx +++++= ))))((((sin 5

24

23

22

21 , где

521 ,...,, ccc − элементы массива. 5.5.3. Вычислить значение многочлена, используя формулу Горнера.

15,035,42 24791012 +−−++−= xxxxxxz . 5.5.4. Вычислить значение полинома

987654321 2345678 ++++++++= xxxxxxxxz . Так как коэффициенты полинома – числа натурального ряда, то сводить

их в массив не имеет смысла. Вычисление их целесообразно производить в процессе решения. Тогда формула для вычисления текущего значения полино-ма будет иметь вид nxzz nn += −1 .

5.5.5. Вычислить значение 8)1( xs += , используя формулу Горнера

181...631

721

81... +

++

+

+= xxxxs .

Множитель, на который умножается любая скобка, можно представить как )1/( +−= imixhi , где 8=m .

5.5.6. Вычислить сумму членов ряда !12

...!2

1122 xxxz ++++= , используя фор-

мулу Горнера 11...1...10

111

112

... +

++

++

+

+= x

nxxxxz .

Page 24: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

24

5.6. Нахождение наибольшего и наименьшего значения Нахождение наибольшего и наименьшего значения функции )(xfy = вы-

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

>=.,

;,

maxmax

maxmax

yyеслиy

yyеслиyyi

ii где ni ,...,2,1= . (1)

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

<=.,

;,

minmin

minmin

yyеслиy

yyеслиyyi

ii (2)

После первого выполнения цикла вычисляется 1y и сравнивается с на-чальным значением maxy или miny . После сравнения maxy или miny принимает значе-ние 1y . Тогда после вычисления 2y будет находить наибольшее или наименьшее из этих первых двух значений функции. Необходимо в качестве начального значения maxy брать число порядка –1010, чтобы наверняка выполнилось условие

max1 yy > , а в качестве начального значения miny − очень большое число, чтобы выполнилось условие min1 yy < .

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

5.6.1. Найти наименьшее значение функции )sin( ϕω += − xaey bx в интервале изменения аргумента x от 0 до с с шагом h.

Схема алгоритма решения этой задачи представлена на рис.15. Блок 3 за-дает перед циклом начальное значение 19

min 10=y . Блок 5 вычисляет текущее значение функции, а блоки 6 и 7 реализуют условную формулу (2).

5.6.2. Найти наибольший элемент массива ),...,,( 4021 xxx и его порядковый номер.

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

Схема алгоритма решения этой задачи представлена на рис.16. Блок 3 пе-ред циклом задает начальное значение 1max xx = и 1max =N . В цикле блоки 5 и 6 реализуют условную формулу (1), блок 7 определяет номер наибольшего эле-мента массива.

Page 25: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

25

5.6.3. Найти экстремальное значение функции 2

|| cxbxeay += при изменения аргумента x от 0 до 4 с шагом h. Функция такого вида имеет один экстремум. Если 0>c , то следует искать минимум, если 0<c , то максимум.

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

>=.,

;,

max

maxmax

yyеслициклаизвыход

yyеслиyyi

ii

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

<=.,

;,

min

minmin

yyеслициклаизвыход

yyеслиyyi

ii

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

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

Схема алгоритма приведена на рис.17. Блок 3 проверяет знак величины с, и если он положительный, то 1=N (функция имеет минимум), а если отрица-тельный, то 1−=N (функция имеет максимум). Блок 6 задает начальное значе-ние my (экстремум). Если 1=N , то 1910=my ; если 1−=N , то 1910−=my . Блок 9 в цикле проверяет условие mNyNy < . Если 1=N , то условие аналогично условию

myy < (как и надо при нахождении минимума); если 1−=N , то условию myy > (как и надо при нахождении максимума). Если условие mNyNy < выполня-

ется, то y считается новым экстремальным значением функции. В противном случае осуществляется выход из цикла к блоку 11. Выход из цикла может осу-ществляться и естественным образом, когда цикл будет выполнен для всех зна-чений аргумента x , и условие выхода из цикла ни разу не выполнится. Блок 11 выдает на печать значение N − признак экстремума и my − экстремальное зна-чение. Сокращение времени счета осуществляется за счет выхода из цикла, если условие mNyNy < не выполняется.

Page 26: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

26

5.6.4. Найти номер (индекс) наименьшего элемента массива ).,...,,( 10021 xxx 5.6.5. Найти наибольшее значение )( ii yx + для массивов ),...,,( 4021 xxx и

).,...,,( 4021 yyy 5.6.6. Найти наименьшее значение функции dcxbxaxy +++= 23 и значение

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

5.6.7. Найти экстремум функции dcxbxaxy +++= 23 , имеющий один мак-симум и один минимум при 0>a и 03 2 <−bac , если x изменяется от –10 до 10 с шагом 0,2, и максимума функция достигает при меньших значениях аргумента.

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

5.6.9. Найти экстремум функции cxax beaey −−= , если x изменяется от 0x до mx с шагом h . Функция имеет один экстремум. Для определения того, является

Начало

конец

ymin

нет

да

y=a⋅e-bxsin(ωx+ϕ)

ymin=y

y=ymin

x = 0..c,

ymin=1019

a, b, c, ϕ, ω, h

Начало

конец

x

xmax=x1,Nmax=1

i=2…40

xi > xmax

xmax = xi

Nmax =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

да

да

нет

нет

Рис.15 Рис.16 Рис.17

Page 27: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

27

этот экстремум максимумом или минимумом, можно использовать следующий способ. Вычислить два значения функции 1y и 2y . Если 21 yy > , то функция име-ет максимум, в противном случае – минимум.

5.6.10. Записать +1 вместо максимального элемента массива ),...,,( 5021 xxx , а – 1 вместо минимального.

5.6.11. Найти и записать вместо 1x наибольший элемент, а вместо 2x − наименьший для массива ).,...,,( 10021 xxx

5.6.12. Для массива ),...,( 8021 aaa вычислить наибольшее и наименьшее зна-чение модуля разности между соседними элементами.

5.6.13. Для функции )sin( ϕω += − xaey bx найти первый максимум и первый минимум и значения аргумента, при которых они достигаются. Функция снача-ла достигает максимума. Величина x изменяется от 0 до 6 с шагом 0,1.

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

5.6.15. Найти наименьший из положительных элементов массива ),...,,( 4021 xxx .

5.7. Уточнение корней уравнения Аналитическое решение для многих алгебраических и трансцендентных

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

Уточнение значения корня уравнения рассматривается на примере метода итераций. Сущность метода заключается в том, что исходное уравнение пред-ставляется в виде )(xfx = .

Если в интервале между приближенным значением корня 0x и корнем уравнения x выполняется условие |1)(| <′ xf , то метод дает возможность вычис-лить значение корня с заданной точностью. Если это условие не выполняется, то надо перейти к обратной функции. Новое значение корня вычисляется через предыдущее по формуле )(1 ii xfx =+ . Повторяя этот процесс для ,...,, 32,1 xxx можно найти значение корня с заданной точностью, определяемой с помощью отно-шения ε≤− + || 1ii xx .

5.7.1. Вычислить наименьший положительный корень уравнения 0=− tgxx с точностью 510−=ε .

Преобразуем уравнение к виду tgxx = . Для этого уравнения 1|| >′xgt , по-этому перейдем к обратной функции arctgxx = , где πkarctgxarctgx += − неглав-ное значение функции. Будем считать все значения ix (приближенные значения корня) простыми переменными. Для решения задачи требуется два смежных значения корня. Обозначим 0x − предыдущее значение корня, а 1x − последую-щее значение корня. Начальное значение наименьшего положительного корня

Page 28: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

28

.7,40 =x Для вычисления нового значения корня будем использовать формулу π+= 01 arctgxx . Схема алгоритма решения этой задачи приведена на рис.18. Блок

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

5.7.2. Вычислить приближенное значение корня уравнения )2ln( += xx с

точностью 410−=ε , используя метод итераций ).( 0 bx = 5.7.3. вычислить значение функции xy /1= по итерационной формуле

31 2

123

iii xyyy −=+ , с точностью 510−−=ε , принять ).22(20 −=y

5.7.4. Определить корень уравнения 02/)( 2

=− − axex , используя метод итера-ций, с точностью ).(10 0

5 bx == −ε

5.7.5. Решить систему уравнений

+−=++=

.23,0;05,0

22

22

yxyyxx методом итераций с

точностью 410−=ε . Принять .0,0 00 == yx

Начало

конец

x0=4,7

xi=arctgx0+π

|x1 – x0|≤10-5

x0= x1

да

нет

x0, x1

i =1…10

Начало

конец

a

S=0

j =1..8

aij>0

s =s+aij

s

да

нет

Начало

конец

x

k =1..99

xmin= xk, n=k

j =k+1..100

xj < xmin

xmin= xj,n=j

xn= xk, xk =xmin

x

да

нет

Рис.18 Рис.19 Рис.20

Page 29: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

29

6. АЛГОРИТМЫ СО СТРУКТУРОЙ ВЛОЖЕННЫХ ЦИКЛОВ Любой цикл, содержащий внутри себя один или несколько других цик-

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

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

6.1. Вычислить сумму положительных элементов каждой строки матрицы )810( ×A .

Для вычисления суммы положительных элементов одной строки матрицы необходимо организовать цикл с целью перебора всех элементов строки, по-этому параметром этого цикла следует выбрать номер столбца j . Перед циклом нужно задать начальное значение суммы 0=S . После окончания цикла резуль-тат необходимо вывести на печать. Если действия повторить во внешнем цикле, изменяя индекс строки i , то будут вычислены все 10 сумм. Схема алгоритма решения этой задачи приведена на рис.19.

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

Все приемы программирования, изложенные выше, можно использовать и при организации вложенных циклов.

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

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

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

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

=10

1 1

)(sin

i

n

k

ik

kx

z , где ix заданы масси-

вом .,..,2,1),...,,( 1021 nkxxx =

Page 30: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

30

6.4. Вычислить значения функции ))/(11(20

1j

i

ij xez ++=∏

=

, где ix заданы мас-

сивом )....,,( 2021 xxx Результаты запомнить в массиве z . 6.5. Упорядочить элементы массива )...,,( 5021 xxx , расположив их по убыва-

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

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

записать их в массив Y . 6.7. Найти среднее арифметическое положительных элементов каждого

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

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

6.9. Из матрицы X (10×15) построить матрицу Y , поменяв местами стро-ки и столбцы.

6.10. Вычислить наибольшие значения функции 252 xxbi

iey −= , если ib задано массивом ),...,,( 2021 bbb . Аргумент x изменяется от -2 до 2 с шагом 0,1. Все maxy запомнить в массиве C .

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

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

матрицы X (20×20) и запомнить их в массиве Y .

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

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

6.15. Вычислить значение функции 2/)(10

1

20

1

baazk

ii

i += ∏∑==

, где ia заданы мас-

сивом ),...,,( 2021 aaa , b изменяется от 0 с шагом 0,1. 6.16. Перемножить матрицы A (n×m) и B (m×l). Элементы результи-

рующей матрицы вычислить с помощью выражения ∑=

=m

jjkijik bac

1

.

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

=100

11001

iix xm и дисперсию

2100

1

)(100

1x

iix mxD −= ∑

=

случайных величин, записанных в массивах BA, и C по

Page 31: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

31

100 элементов каждый. В целях экономии памяти все исходные данные хранить в массиве A .

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

6.19. Вычислить значения полинома 1098

29

1 .. iiiii axaxaxay ++++= при раз-личных значениях коэффициентов, используя формулу Горнера

109321 )...))(...(( iiiiii axaxaxaxay +++++= . Коэффициенты сведены в матрицу

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

функция xaxy ln−= достигает минимума при x , изменяющемся от 0,2 до 10. Можно было бы решать эту задачу, взяв шаг изменения аргумента, рав-

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

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

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

Таким образом, при первом нахождении минимума шаг изменения аргу-мента равен 0,2, а его начальное значение 2,00 =x . При повторном нахождении минимума шаг равен 0,01, а 2,0min0 −= xx .

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

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

6.21. Найти значение аргумента x для функции 2cxbxaey += , имеющей один максимум, при котором достигается максимум с точностью 005,0=ε . Аргумент изменяется от -2 до 2 с шагом 0,1.

Page 32: АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ ЗАДАЧvenec.ulstu.ru/lib/2003/5_Petrova.pdf · Содержат методические указания к разработке

32

Список литературы

1. Фаронов В. В. Турбо Паскаль (в 3-х книгах).- М.: Учебно-инженерный центр

«МВТУ – ФЕСТО ДИДАКТИК», -1992.-304 с. 2. Алексеев В. Е., Ваулин А. С., Петров Г. Б. Вычислительная техника в инже-

нерных и экономических расчетах. Сборник задач и упражнений: Учеб.пособие для вузов./Под ред. А. В. Петрова. – М.: Высш.шк., 1984.-136 с., ил.

3. Пильщиков В. Н. Сборник упражнений по языку Паскаль: Учеб. Пособие для вузов.-М.: Высш. Шк., 1990.-223 с.

i =1..51

Начало

конец

a

y < ymin

ymin= y; xmin= x

да

нет

да

нет

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

y =ax-lnx

h = 0,01

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

xmin

Рис.21

6.22. Найти минимальные элементы ка-

ждой строки матрицы X (10×10) и поместить их на главную диагональ, а диагональные эле-менты записать на место минимальных.

6.23. Найти максимум функции dcxbxaxy +++= 22 при изменении аргумента x

от -10 до +10 с шагом 0,1 и минимум с шагом 0,01. Функция y имеет один максимум и один минимум при 0>a и 03 2 <− bac и достигает максимума при меньших значениях аргумента.

6.24. Найти и запомнить в массиве Z , начиная с первого максимума все максимумы и минимумы функции )sin( ϕω += − xaey bx при изменении аргумента x от 0 до 5 с шагом 0,1.

6.25. Вычислить значения функции kji cbaz /)( += , где iii bca ,, заданы массивами из

10, 8 и 5 элементов соответственно.