Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Основные структуры алгоритмов: сравнительный анализ и примеры их использования (Программная реализация основных алгоритмических структур на языке высокого уровня Паскаль)

Содержание:

ВВЕДЕНИЕ

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

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

Для достижения цели работы поставлены задачи:

- определены понятие и принципы построения алгоритмов;

- приведены способы описания алгоритмов;

- рассмотрены основные алгоритмические структуры;

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

Предмет исследования - основные алгоритмические структуры и их реализация на языке высокого уровня.

При подготовке работы в качестве источников использованы учебное пособие Г.Р. Кадыровой «Основы алгоритмизации и программирования»; учебное пособие «Программирование и основы алгоритмизации» авторов А.Г. Аузяк, Ю.А. Богомолов, А.И. Маликов, Б.А. Старостин; учебное пособие В. В. Фаронова «Турбо Паскаль 7. 0» и другие.

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

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

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

Алгоритм является точным предписанием, определяющим последовательность действий для получения нужного результата из исходных данных [2; С. 6].

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

  • дискретностью (прерывностью, раздельностью) - алгоритм должен быть процессом решения задачи в виде последовательного выполнения простых шагов. Каждое действие алгоритма выполняется только после конца исполнения предыдущего;
  • определенностью - каждое правило алгоритма должно быть четко, однозначно и без произвола. Благодаря определенности выполнение алгоритма происходит механически и не нужны никакие дополнительные указания или сведения о решаемой задаче [7; С. 5];
  • результативностью (конечностью) - алгоритм должен решать задачу за конечное количество шагов;
  • массовостью - алгоритм решения задачи разрабатывают в общем виде с целью применения для однотипного класса задач с различными исходными данными, выбираемыми из некой области, называемой областью применимости алгоритма [12; С. 15];

Выражение «свойства алгоритма» является не совсем корректным. Свойствами обладают объективно существующие реальности. Алгоритм же является искусственной конструкцией, сооружаемой для достижения определенных целей. Для выполнения алгоритмом своего предназначения, он должен строиться по определенным правилам. Поэтому корректно говорить не о свойствах алгоритма, а о правилах построения алгоритма, или о требованиях, предъявляемых к алгоритму.

Первое правило – при построении алгоритма, прежде всего, задается множество объектов, с которыми будет работать алгоритм. Название данных является формализованным (закодированным) представлением этих объектов. Алгоритм начинает работу с входными данными, и в результате своей работы выдает данные, называемые выходными. Таким образом, алгоритмом преобразуются входные данные в выходные. Этим правилом сразу отделяются алгоритмы от «методов» и «способов». Для построения алгоритма нужны формализованные входные данные [7; С. 5].

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

В теории алгоритмов размеры памяти не ограничены, т.е. алгоритму можно предоставить любой необходимый для работы объем памяти. Практическая работа с алгоритмами (программирование) начинается именно с этих двух правил. В языках программирования распределение памяти осуществляют декларативные операторы (операторы описания переменных). При запуске программы транслятором языка анализируются все идентификаторы в тексте программы и отводится память для соответствующих переменных [2, С. 6].

Третье правило – дискретность. Алгоритм состоит из отдельных шагов, которые являются конечными.

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

Пятое правило – сходимость (результативность). Завершение работы алгоритма должно быть после конечного числа шагов с указанием, что считается результатом работы алгоритма [12, С. 15].

Итак, алгоритм – понятие теории алгоритмов, каждому определенному набору входных данных ставящий в соответствие некоторый набор выходных данных, т.е. вычисляющий (реализующий) функцию. Рассматривая конкретные вопросы в теории алгоритмов всегда имеют в виду какую-то конкретную модель алгоритма [8; с. 4-7].

1.2. Способы описания алгоритмов

 Основные способы описания алгоритмов состоят из:

  • словесно-формульного (на естественном языке);
  • структурного или блок-схемного;
  • с использованием специальных алгоритмических языков;
  • посредством граф-схем (графом называют совокупность точек и линий, в которой каждой линией, называемой ребром, соединяется две точки, называемые вершинами);
  • посредством сетей Петри [2; с. 6-7].

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

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

у=3b-(х+7).

Словесно-формульный способ записи алгоритма решения этой задачи может выглядеть так: 

1. Ввод значений а и х. 

2. Сложение х и 7. 

3. Умножение b на 3. 

4. Вычитание из 3b суммы (х+7). 

5. Вывод результата у [7; с. 9-10].

Блок-схемы. Наиболее удобным для программиста является блок-схемное описание алгоритма, изображаемое геометрическими фигурами (блоками), связанными линиями со стрелками. В блоках записывают последовательность действий [13].

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

Программы должны быть оформлены в соответствии с определенными требованиями. В настоящее время действует единая система программной документации (ЕСПД), устанавливающая правила разработки, оформления программ и программной документации. ЕСПД определяет и правила оформления блок-схем алгоритмов (ГОСТ 10.002-80 ЕСПД, ГОСТ 10.003-80 ЕСПД) [12; С. 17].

Операции обработки данных и носители информации изображены на схемах соответствующими блоками. В одной схеме рекомендуется изображение блоков одинаковых размеров с их нумерацией. Линии соединений блоков и указывающие последовательность связей между ними, проводятся параллельно линиям рамки. Стрелку в конце линии можно не ставить, если линия направляется слева направо либо сверху вниз. В блок может входить несколько линий. Из блока (кроме логического) может выходить только одна линия. Из логического блока выходят две линии и он может иметь в качестве продолжения один из двух блоков [15].

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

В качестве идентификатора, как правило, используют порядковый номер блока, к которому направляется соединительная линия. Если схема расположена на более чем одном листе, то при разрыве линии вместо окружности используют межстраничный соединитель. Внутри каждого соединителя указывают адрес — откуда и куда направляется соединительная линия. Запись адреса в две строки: в первой указывается номер листа, во второй — порядковый номер блока. Основные блоки схем алгоритмов даны в табл. 1 Приложения [13].

Блок-схема должна состоять из всех разветвлений, циклов и обращений к подпрограммам, содержащихся в программе [15].

1.3 Основные алгоритмические структуры

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

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

Линейными алгоритмами описываются линейные вычислительные процессы, выполнение этапов которого однократно и последовательно. Линейный алгоритм включает последовательное выполнение этапов:

  • ввода исходных данных в память ЭВМ;
  • вычисления искомых величин по формулам;
  • вывода результатов из памяти ЭВМ на внешний носитель [7; C. 15].

Пример 1. Разработать алгоритм определения площади круга по формуле S = πR2. Блок-схема алгоритма дана на рис. 1 [8].

Начало

Ввод R

S=π R2

Вывод S

Конец

Рисунок 1 - Линейный алгоритм [8]

Разветвляющимся алгоритмом описывается вычислительный процесс, реализуемый по одному из нескольких заранее предусмотренных направлений - ветвей. Выбор конкретной ветви вычисления зависим от результатов проверки выполнения некого логического условия. Результатом проверки является: «истина» (да) при выполнении условия, и «ложь» (нет), если не выполняется условие [7; C. 16].

Пример 2. Разработать алгоритм определения функции

F(x) = 2x при x > 0 и

F(x) = х2 при x < 0.

Блок - схему разветвляющегося алгоритма представляет рис. 2 [2; C. 10].

Начало

Начало

Ввод х

Стр. 11

11

11 1

Стр. 10

x>0

F=0

F=x*x

Конец

Вывод F

Рисунок 2 - Разветвляющийся алгоритм [7; С. 16]

Циклическим алгоритмом описывается вычислительный процесс, многократно повторяющийся. Существуют простые циклы, не содержащие внутри себя другие циклы, и сложные (вложенные), содержащие несколько вложенных циклов. Существуют циклы с известным числом повторений и циклы с неизвестным числом повторений [2; С. 8].

Цикл с известным числом повторений состоит из последовательности:

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

Существуют структуры повторения «повторение ДО» (повторение до выполнения условия окончания цикла) или «повторение ПОКА» (повторение пока выполняется условие продолжения цикла). В первом случае проверка условий окончания цикла осуществляется в конце цикла (рис. 3, а), во втором - в начале цикла (рис. 3, б) [12; C. 21].

Как видно из блок-схем, цикл «повторение ДО» выполняется, по крайней мере, один раз, а цикл «повторение ПОКА» может сразу выйти из цикла.

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

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

Условие окончания

да

Тело цикла

Подготовка выполнения следующего цикла

нет

Тело цикла

Подготовка выполнения следующего цикла

Условие окончания

нет

да

а б

Рисунок 3 - Циклы с известным числом повторений [7; с. 16-17]

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

│Yi –Yi-1│<d, где d – допустимая точность вычисления.

Типовую структуру алгоритма итерационных вычислений демонстрирует рис. 4 [2; с. 11-13].

Y1=Y(0)

Задание начальных условий

Первая итерация

Y=f (Y1)

Вычисление текущей ошибки

D=│Y -Y1

Y1=Y

Переприсвоение

D≤d

Оценка точности

нет

да

Рисунок 4 - Циклы с неизвестным числом повторений [7; C. 19]

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

Пример 5. Разработать алгоритм вычисления и вывода на печать функции y = x*z / (b + c) при изменении аргументов 1< x < 8 c шагом ∆x = 1 и 1< z<5 c шагом ∆z = 1. Алгоритм решения примера приведен на рис. 5.

Внутренний цикл организован по переменной z, а внешний - по переменной x. При каждом значении переменной x (переменной внешнего цикла) от 1 до 8 переменная z (переменная внутреннего цикла) изменяется от 1 до 5 с шагом 1 [8].

Блок вывода на печать находится во внутреннем цикле, что позволяет отслеживать значения переменных на всем диапазоне их изменения. На рис. 6 эту же задачу решает модифицированная блок-схема алгоритма, в которой циклы представлены более компактными условными обозначениями, принципы организации которых проясняет рис. 7 [7; С. 21].

Ввод А,В

y=x*z/(A+B)

z=1

x=1

Ввод А,В

Х=1,10,1

Вывод x, y, z

z=1,4,1

z=z+1

да

y=x*z/(A+B)

z≤4

нет

Вывод x, y, z

x=x+1

x≤10

да

нет

Конец

Конец

Рис. 5 - Алгоритм со сложным циклом

Рис. 6 - Модифицированная блок-схема алгоритма

Вход в цикл

Х=1,10,2

Вход i+1 Выход из цикла

шага цикла

Выход i-го шага цикла

Рис. 7 – Компактные условные обозначения [7; С. 22]

Первой цифрой внутри фигуры (рис. 7) задается начальное значение переменной, второй ее конечное значение, а третьей - шаг изменения переменной. При отсутствии последней цифры шаг изменения переменной по умолчанию равен 1 [7; с. 18-22].

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

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

2. Программная реализация основных алгоритмических структур на языке высокого уровня Паскаль

2.1. О языке высокого уровня Паскаль

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

Под переносимостью обычно понимают возможность «переноса» текста программы без изменений на другую виртуальную машину, т.е. возможность решения задачи не только с применением другой версии системы программирования, но и, возможно, другого типа ЭВМ.

Паскаль - язык профессионального программирования, названный в честь французского математика и философа Блеза Паскаля (1623-1662гг.) и разработанный в 1968-1971гг. Никлаусом Виртом, профессором Цюрихского технического университета (Швейцария). Первоначально язык разработан для обучения, но вскоре стал использоваться для разработки программ [4; с. 5-17].

Не менее впечатляющей, в том числе и финансовой, удачи добился Филип Кан, француз, разработавший систему Турбо-Паскаль. Суть его идеи состояла в объединении последовательных этапов обработки программы – компиляции, редактирования связей, отладки и диагностики ошибок – в едином интерфейсе. Версии Турбо-Паскаля заполонили практически все образовательные учреждения, программистские центры и частные фирмы. На базе языка Паскаль созданы несколько более мощных языков (Модула, Ада, Дельфи) [2; c. 20].

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

Паскаль популярен среди программистов по следующим причинам:

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

Программа – это алгоритм, записанный на языке программирования. Вышеприведенные алгоритмы задач переведем на язык программирования Паскаль [11].

2.2. Операторы цикла в Паскаль

Операторами цикла описываются повто­ряющиеся процессы. Повторяющиеся действия называют телом цикла. В общем случае число повторений тела цикла каким-то образом задается. В ином случае такой процесс будет бесконечен­.

Для окончания повторений нужно связать возврат в начало тела цикла с условием, задаваемым в виде явного счетчика или иным способом. Основной способ проверки возможного окончания цикла - определение функции f(x) (X – множество переменных программы) такой, что f(X) ≤ 0 удовлетворяет условию окончания, а также доказательство убывания этой функции.

Простейший вид такой функции - обычный счетчик, т.е. функция вида i:=i-1 либо i:=i+1 (происходит вычита­ние или прибавление единицы после каждого повтора). В первом случае происходит убы­вание некоторого начального значения i (к примеру, n) до некоторого конеч­ного значения (к примеру, 1). Тогда условие завершения цикла будет i ≤ 1 и число повторений равно n. Во втором случае счет может быть начат с i равного 1 и убывает разность между текущим значением i и ко­нечным значением n, проверка которой на меньше-равно нулю аналогична проверке условия i ≤ n.

Язык Паскаль имеет три разных оператора, посредством которых возможно программирование повторяющихся фрагментов программ [9; с. 58].

2.2.1 Оператор цикла FOR

Структура счетного оператора цикла FOR следующая:

FOR <парам_цикла> := <нач_значение> ТО <кон_значение> DO <оператор>

Здесь FOR/ TO, DO - зарезервированные слова (для/до, делать);

<парам_цикла> - параметр цикла в виде переменной типа INTEGER (может быть любой порядковый тип);

<нач_значение> - начальное значение - выражение такого же типа;

<кон_значение> - конечное значение - выражение такого же типа;

< оператор > - любой оператор Паскаля.

При выполнении оператора FOR сначала вычисляется выражение <нач_значение> и присваивается <парам_цикла> : = <нач_значение>. После этого циклическое повторение:

  • проверки условия <парам_цикла <= <кон_значение>; при не выполнении условия завершается работа оператора FOR;
  • выполнения оператора <оператор>;
  • наращивания переменной <парам_цикла> на единицу [10; С 37].

При этом, условие, которое управляет работой оператора FOR, проверяется до выполнения оператора <оператор>, при не выполнении условия в самом начале работы оператора FOR, исполняемый оператор не выполняется ни разу. Шаг параметра цикла строго постоянный и равен (+1). Есть другая форма оператора:

FOR <парам_цикла>: = <нач_значение> DOWNTO <кон_значение> DO <оператор>

При замене зарезервированного слова ТО на DOWNTO шаг наращивания параметра цикла становится (-1), а управляющее условие становится <парам_цикла> = <кон_значение> [10; С. 37].

2.2.2 Оператор цикла WHILE…DO

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

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

Здесь WHILE, DO - зарезервированные слова (пока [выполняется условие], делать);

<условие> - логическое выражение;

<Оператор> - любой оператор Паскаля.

При значении выражения <условие> TRUE выполняется <оператор>, после вычисляется выражение <условие> и повторяется его проверка.

При значении <условия> FALSE , прекращается работа оператора WHILE.

Приведем пример 2 для иллюстрации использования оператора WHILE.

While Counter < 10 do

begin

Writeln(‘Значение счетчика равно ’,Counter);

Counter:= Counter+2;

End; [16]

2.2.3 Оператор цикла Repeat…until

Оператор цикла REPEAT. .. UNTIL с постпроверкой условия имеет вид:

REPEAT <тело__цикла> UNTIL <условие>

Здесь:

REPEAT, UNTIL — зарезервированные слова (повторять до тех пор, пока не будет выполнено условие);

<тело_цикла> — является произвольной последовательностью операторов Паскаля;

<условие> — логическое выражение.

Операторы <тело_цикла> выполняются хотя бы один раз, после этого вычисляется выражение <условие>: при его значении FALSE, происходит повтор операторов <тело_цикла>, иначе завершение работы оператора REPEAT. .. UNTIL [11; С. 37].

Пара REPEAT. .. UNTIL аналогична операторным скобкам begin .. end, и потому перед UNTIL точка с запятой не обязательна.

Для гибкости управления операторами цикла FOR, WHILE и REPEAT в составе Паскаля есть две процедуры:

BREAK — реализация немедленного выхода из цикла; управление передается оператору, следующему сразу за концом оператора цикла;

CONTINUE — реализация досрочного завершения очередного прохода цикла; эквивалентна передаче управления в самый конец циклического оператора.

Введением в язык этих процедур практически исключается необходимость использования оператора безусловного перехода GOTO, который нежелательно использовать [11; С. 38].

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

Программа расчета площади круга на языке Паскаль:

Program SR;

Var

R,s,pi: real;

Begin

Writeln(‘Vvedite radius r=’);

Readln(r);

Pi:=3.14;

S:=pi*r*r;

Writeln(‘Ploshad kruga s= ’,s, ‘ radius r= ’,r);

End.

Ниже на рис. 8 приведен скриншот выполнения программы - при радиусе 5 площадь круга равна 78,5 [11].

Рис. 8 - Результат выполнения программы SR.pas

Программа реализации разветвляющегося алгоритма Vetvi.pas:

Program Vetvi;

Var

X,f: integer;

Writeln(‘Vvedite x= ’);

Readln(x);

If x>0 then f:=2*x

Else f:=x*x;

Writeln(‘x= ’,x,’ f= ’,f);

End. [12]

На рисунке 9 приведен скриншот выполнения программы Vetvi.pas.

При х = 4 f = 8,

при х = -3 f = 9.

Рис. 9 - Результат выполнения программы Vetvi.pas

2.4. Реализация циклических алгоритмов

Цикл for

Program Cycle1;

Var

P,pi: real;

R,n: integer;

Begin

Writeln(‘Vvedite n= ’);

Read(n);

Pi:=3.14;

For r:=1 to n do

Begin

P:=2*pi*r;

Writeln(‘r= ’,r,’ p= ’,p);

End;

End. [14]

Результат выполнения программы Cycle1.pas с циклом for дан на рис. 10.

Рис. 10 - Результат выполнения программы Cycle1.pas с циклом for

Программа Cycle2.pas с использованием цикла Repeat …until.

Program Cycle2;

Var

P,pi: real;

R,n: integer;

Begin

Writeln(‘Vvedite n= ’);

Read(n);

Pi:=3.14;

R:=1;

Repeat

P:=2*pi*r;

Writeln(‘r= ’,r,’ p= ’,p);

r:=r+1;

until r>n;

end. [16]

На рис. 11 приведен скриншот выполнения программы Cycle2.pas с использованием цикла Repeat …until.

Рис.11 - Результат выполнения программы Cycle2.pas с использованием цикла Repeat …until

Программа Cycle3.pas с циклом while.

Program Cycle3;

var P,pi: real;

R,n: integer;

Begin

Writeln(‘Vvedite n= ’);

Read(n);

Pi:=3.14;

R:=1;

While (r<=n) do

begin

P:=2*pi*r;

Writeln(‘r= ’,r,’ p= ’,p);

r:=r+1;

end;

end. [9]

На рис. 12 приведен результат выполнения программы Cycle3.pas с использованием цикла while.

Рис. 12 - Результат выполнения программы Cycle3.pas с использованием цикла while

Программа Cycle4.pas с циклом с неизвестным числом повторений.

Программа вычисляет значение функции у = 2cos(x)+sin(x) c шагом dx=0,5 с точностью 0,01 [12].

Нарисуем блок-схему алгоритма решения задачи.

Блок-схема вычисления функции у = 2cos(x)+sin(x) c шагом dx=0,5 с точностью 0,01 [13]

Начало

Ввод х

dx=0.5

n=1

Y1=2cos(x)+sin(x)

x=x+dx

Y2=2cos(x)+sin(x)

Dy=Abs(y2-y1)

Вывод x, y

Y1=y2

Dy>0.01

да

Вывод n

Конец

Исходный код программы вычисления функции у = 2cos(x)+sin(x) c шагом dx=0,5 с точностью 0,01.

Program Cycle4;

var

x,dx,y1,y2,dy,d: real;

n: integer;

Begin

Writeln(‘Vvedite x= ’);

Read(x);

dx:=0.5;

d:=0.01;

n:=1;

y1:=2*cos(x)+sin(x);

repeat

x:=x+dx;

y2:=2*cos(x)+sin(x);

dy:=Abs(y2-y1);

Writeln(‘x= ’,x,’ y1= ’,y1);

Y1:=y2;

n:=n+1;

until dy<d;

writeln(‘n= ’,n);

end. [16]

На рис. 13 приведен результат выполнения программы Cycle4.pas с неизвестным числом повторений (цикл repeat).

Рис. 13 - Результат выполнения программы Cicle4.pas с неизвестным числом повторений

Программа Cycle5.pas со сложным циклом, вычисляет функцию y:=x*z/(с+b) при изменениях х от 2 до 8 с шагом 1 и z от 1 до 5 с шагом 1.

Приведем сначала блок-схему алгоритма [12].

Блок-схема алгоритма вычисления функции y:=x*z/(с+b) при изменениях х от 2 до 8 с шагом 1 и z от 1 до 5 с шагом 1 [13]

Начало

Ввод b,с

i=0

Х=2,8,1

Вывод i

z=1,5,1

Конец

y=x*z/(b+c)

Вывод x, y, z

i=i+1

Программа вычисления функции y:=x*z/(с+b) при изменениях х от 2 до 8 с шагом 1 и z от 1 до 5 с шагом 1

Program Cicle5;

var

x,z,a,b,i: integer;

y: real;

Begin

Writeln(‘Vvedite b = ’);

Read(b);

Writeln(‘Vvedite с= ’);

Read(с);

i:=0;

for x:=2 to 8 do

for z:=1 to 5 do

begin

y:=x*z/(с+b);

Writeln(‘x= ’,x,’ z=’,z,’ y= ’,y);

i:=i+1;

end;

writeln(‘chislo iteracii = ’,i);

end. [1, 3]

Скриншот выполнения программы приведен на рис. 14.

Рис. 14 - Результат выполнения программы Cycle5.pas со сложным циклом

Программа Cycle51.pas со сложным циклом нахождения максимального элемента в двумерном массиве. Составим блок-схему алгоритма [3].

Блок-схема алгоритма нахождения максимального элемента в двумерном массиве

Начало

Ввод m

Max=mij

i=1,n,1

j=1,n,1

Вывод max

Mij>max

Конец

Max=mij

Программа Cycle51.pas нахождения максимального элемента в двумерном массиве

Program Cycle51;

var

m: array[0..9,0..9] of integer;

i,j,n,max: integer;

Begin

Writeln(‘Введите элементы массива 3x3 построчнo’);

Writeln;

for i:=1 to n do

for j:=1 to n do

Read(m[i,j]);

{поиск max элемента}

for i:=1 to n do

for j:=1 to n do

if m[i,j]>max then max:=m[i,j];

Writeln(‘max= ’,max);

end. [4, 5, 6]

Скриншот выполнения программы Cicle51.pas дан на рис. 15.

Рис. 15 - Результат выполнения программы Cycle51.pas с двумерным массивом

Вывод: В главе рассмотрены операторы цикла, используемые в Паскале для программирования циклических алгоритмических структур: FOR, WHILE…DO, REPEAT …UNTIL.

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

Таким образом, реализованы все рассмотренные в теоретической главе основные алгоритмические структуры.

ЗАКЛЮЧЕНИЕ

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

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

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

В циклических алгоритмах рассмотрены и составлены программы с известным и неизвестным числом итераций, с использованием циклов for, while, repeat, а также вложенных сложных циклов.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Епанешников А.М., Епанешников В. А. Программирование в среде Турбо -Паскаль 7. 0 – М.: Диалог, 2015.
  2. Кадырова Г.Р. Основы алгоритмизации и программирования : учебное пособие /Г. Р. Кадырова. – Ульяновск: УлГТУ, 2014. – 95 с.
  3. Культин Н. Turbo Pascal в задачах и примерах . – СПб. : БХВ -Петербург , 2014. – 256 с.
  4. Павловская Т.А. Паскаль . Программирование на языке высокого уровня . – СПб.: Питер, 2013. – 320 с.
  5. Попов В. Паскаль и Дельфи. Самоучитель. – СПб.: Птер, 2013. – 544 с.
  6. Потопахин В. В. Turbo Pascal : решение сложных задач . – СП б.: БХВ -Петербург , 2014. – 208 с.
  7. Программирование и основы алгоритмизации: Для инженерных специальностей технических университетов и вузов. /А.Г. Аузяк, Ю.А. Богомолов, А.И. Маликов, Б.А. Старостин. - Казань: Изд-во КНИТУ- КАИ, 2013. - 153 с.
  8. Программирование на языке Pascal. http://hi-intel.ru/800/101.html
  9. Рапаков Г.Г., Ржеуцкая С.Ю. Программирование на языке Pascal. – СП б.: БХВ -Петербург , 2014. – 315 с.
  10. Фаронов В. В. Турбо Паскаль 7. 0. Начальный курс : учебное пособие . – М.: ОМД Групп, 2013. – 616 с.
  11. Фаронов В. В. Turbo Pascal . Наиболее полное руководство. – СП б.: БХВ -Петербург , 2014. – 1056 с.
  12. Федоренко Ю. Алгоритмы и программы на Turbo Pascal . Учебный курс . – СПб.: Питер, 2011. – 240 с.
  13. Блок-схемы. Графическая реализация алгоритмов. Лекции Интуит. 2017. URL: http://www.intuit.ru/studies/courses/19752/1301/lecture/25625 (Дата обращения: 10.02.2018).
  14. Паскаль для начинающих. URL: http://schools.keldysh.ru/sch887/pascal.htm (Дата обращения: 10.02.2018).
  15. Учебник по информатике. URL: http://dssp.petrsu.ru/p/tutorial/zonna/3_ychebnik_9.htm (Дата обращения: 10.02.2018).
  16. Язык Pascal. Программирование для начинающих. URL: http: //pas1.ru /programming (Дата обращения: 10.02.2018).

Приложение

Таблица 1 - Условные обозначения элементов блок-схем алгоритмов  

Наименование

0бозначение

Функции

Процесс

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

Ввод-вывод

Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод).
 

Решение

Выбор направления выполнения алгоритма в зависимости от некоторых переменных условии.

Предопределенный процесс

Использование ранее созданных и отдельно написанных программ (подпрограмм).

Документ

Вывод данных на бумажный носитель.

Магнитный диск

Ввод - вывод данных, носителем которых служит магнитный диск.

Пуск-останов
 

Начало, конец, прерывание процесса обработки данных.

Соединитель
 

Указание связи между прерванными линиями, соединяющими блоки.
 

Межстраничный соединитель

Указание связи между прерванными линиями, соединяющими блоки, расположенные на разных листах.

Комментарий

http://dssp.petrsu.ru/p/tutorial/zonna/images/bloksh10.JPG

Связь между элементом схемы и пояснением.