Алгоритмизация поиска правовой информации кратко

Обновлено: 02.07.2024

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

Любой алгоритм существует не сам по себе, а предназначен для определенного исполнителя (человека, робота, компьютера, языка программирования и т.д.). Свойством, характеризующим любого исполнителя, является то, что он умеет выполнять некоторые команды. Совокупность команд, которые данный исполнитель умеет выполнять, называется системой команд исполнителя. Алгоритм описывается в командах исполнителя, который будет его реализовывать. Объекты, над которыми исполнитель может совершать действия, образуют так называемую среду исполнителя. Исходные данные и результаты любого алгоритма всегда принадлежат среде того исполнителя, для которого предназначен алгоритм.

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

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

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

Рассмотрим следующие способы описания алгоритма: словесное описание, псевдокод, блок-схема, программа.

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

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

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

Рассмотрим некоторые основные конструкции, использующиеся для построения блок-схем (рис. 1).

1

(1) Блок, характеризующий начало/конец алгоритма (для подпрограмм – вызов/возврат);

(2) Блок - процесс, предназначенный для описания отдельных действий;

(3) Блок - предопределенный процесс, предназначенный для обращения к вспомогательным алгоритмам (подпрограммам);

(4) Блок - ввода/вывода с неопределенного носителя;

(5) Блок - ввод с клавиатуры;

(6) Блок - вывод на монитор;

(7) Блок - вывод на печатающее устройство;

(8) Блок – решение (проверка условия или условный блок);

(9) Блок, описывающий блок с параметром;

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

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

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

Линейная алгоритмическая конструкция

Линейной называют алгоритмическую конструкцию, реализованную в виде последовательности действий (шагов), в которой каждое действие (шаг) алгоритма выполняется ровно один раз, причем после каждого i- гo действия (шага) выполняется (i+ 1)-е действие (шаг), если i-e действие – не конец алгоритма.

Опишем алгоритм сложения двух чисел на псевдокоде в виде блок-схемы (рис. 2).

Ввод двух чисел а, b .

Вычисляем сумму S = а + b .

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

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

1

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

Заданы три числа. Найти значение наименьшего из них Заданные числа обозначим: а, b, с; результирующее наименьшее – min. На рис. 5 представлена блок-схема алгоритма решения данной задачи.

1

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

Рассмотрим три типа циклических алгоритмов: ц uкл с параметром (который называют арифметическим циклом), цикл с предусловием и цикл с постусловием (их называют итерационными) .

Арифметический цикл

В арифметическом цикле число его шагов (повторений) однозначно определяется правилом изменения параметра, которое задается с помощью начального (N) и конечного (К) значений параметра и шагом (h) его изменения. Т.е., на первом шаге цикла значение параметра равно N, на втором – N + h, на третьем – N + 2h и т.д. На последнем шаге цикла значение параметра не больше К, но такое, что дальнейшее его изменение приведет к значению, большему, чем К.

1

Цикл с предусловием

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

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

5

Цикл с постусловием

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

1

Рекурсивный алгоритм

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

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

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

Переменная – есть именованный объект (ячейка памяти), который может изменять свое значение. Имя переменной указывает на зн ачение, а способ ее хранения и адрес остаются скрытыми от программиста. Кроме имени и значения, переменная имеет тип, определяющий, какая информация находится в памяти. Тип переменной задает:

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

Структурированные данные и алгоритмы их обработки

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

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

1

В заданном числовом массиве A(l0) найти наибольший элемент и его индекс, при условии, что такой элемент в массиве существует, и единственный.

Обозначим индекс наибольшего элемента т. Будем считать, что первый элемент массива является наибольшим = 1). Сравним поочередно наибольший с остальными элементами массива. Если оказывается, что текущий элемент массива а i (тот, c которым идет сравнение) больше выбранного нами наибольшего ат, то считаем его наибольшим =i) (рис.10).

1

Рассмотрим двумерный массив (шкаф с множеством ящиков, положение которых определяется двумя координатами – по горизонтали и по вертикали). В математике двумерный массив (таблица чисел) называется матрицей. Каждый ее элемент имеет два индекса а ij , первый индекс i определяет номер строки, в которой находится элемент (координата по горизонтали), а второй j – номер столбца (координата по вертикали). Двумерный массив характеризуется двумя размерностями N и М, определяющими число строк и столбцов соответственно (рис. 11).

1

Ввод элементов двумерного массива осуществляется построчно, в свою очередь, ввод каждой строки производится поэлементно, тем самым определяется циклическая конструкция, реализующая вложение циклов. Внешний цикл определяет номер вводимой строки ( i ), внутренний – номер элемента по столбцу ( j ). На рис. 12 представлен алгоритм ввода матрицы A(MxN) .

1

2. Алгоритм – это последовательность действий со строго опре­деленными правилами выполнения.

В соответствии с теорией алгоритмов, понятие алгоритма
может рассматриваться (и применяться) на трех уровнях:
интуитивно-содержательном, формальных уточнений и так
называемом прикладном уровне.
Сферой приложения первого и второго уровней являются
математика и общая кибернетика. Здесь понятием
"алгоритм" обычно обозначают точное предписание,
задающее вычислительный процесс, ведущий от начальных
данных, которые могут варьироваться, к искомому результату,
или всякую систему вычислений, выполняемых по строго
определенным правилам, которая после какого-либо числа
шагов (операций) приводит к решению поставленной задачи.
АЛГОРИТМ – ЭТО
ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ СО
СТРОГО ОПРЕДЕЛЕННЫМИ ПРАВИЛАМИ
ВЫПОЛНЕНИЯ.

Алгоритмы
делятся
на
вычислительные
и
невычислительные.
Алгоритм состоит из команд.
Команда

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

Свойства алгоритма
1. Определенность – это однозначность предписываемой последовательности действий, не
допускающая произвольного ее толкования.
2. Дискретность – это деление алгоритма на отдельные действия (команды), которые выполняются
только последовательно, причем каждое действие должно быть закончено исполнителем прежде, чем он
прейдет к выполнению следующего. Запись алгоритма должна быть такова, чтобы, выполнив очередную
команду, исполнитель точно знал, какую команду надо выполнять следующей (свойство точности
алгоритма).
3. Массовость означает, что алгоритм можно применять для решения любых задач одного и того же
типа, которые отличают только исходными данными.
4. Результативность означает, что при точном выполнении всех команд алгоритма процесс
заканчивается получением определенного результата за конечное число шагов. Если задача решения не
имеет, – это тоже результат.
5. Инвариантность по отношению к вычислителю – это независимость последовательности
действий и результата от конкретного типа вычислителя (исполнителя).

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

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

СПОСОБЫ ЗАДАНИЯ АЛГОРИТМОВ
Словесный способ – отражает содержание выполняемых действий средствами естественного языка. К
достоинствам этого способа описания следует отнести его общедоступность, а также возможность описывать
алгоритм с любой степенью детализации. Недостатки: возможность неоднозначного понимания предписаний и
утверждений; громоздкость, связанная с избыточностью разговорных языков (наличие в предложениях слов, без
которых можно обойтись); отсутствие наглядности логических связей между частями алгоритма.
Формально-словесный способ – основан на записи содержания выполняемых действий с использованием
изобразительных возможностей языка математики, дополненного с целью указания необходимых пояснений
средствами естественного языка. Данный способ, обладая всеми достоинствами словесного способа, вместе с тем
более лаконичен, а значит, и более нагляден, имеет большую формализацию, однако также не является строго
формальным.
Графический способ (в виде блок-схемы) – представляет собой изображение логико-математической
структуры алгоритма, при котором все этапы процесса обработки данных представляются с помощью
определенного набора геометрических фигур (блоков), имеющих строго определенную конфигурацию в
соответствии с характером выполняемых действий.

ВИДЫ АЛГОРИТМИЧЕСКИХ (ВЫЧИСЛИТЕЛЬНЫХ) ПРОЦЕССОВ
Линейный
процесс

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

Критерии качества алгоритмов
1. Связность алгоритма - определяется количеством промежуточных результатов, которые должны одновременно
храниться в памяти исполнителя. Алгоритм тем лучше, чем меньше его связность, т.к. при этом уменьшается
количество ячеек, занятых в оперативной памяти.
2. Объем алгоритма - количество операций (шагов), которые необходимо выполнить для получения конечного
результата. Уменьшение количества шагов экономит не только время составителя алгоритма, но и время исполнителя,
сокращает длительность решения задачи.
3. Длительность решения определяется количеством шагов алгоритма, а также сложностью этих шагов. Если все
операции достаточно просты и наглядны, длительность решения сокращается, и наоборот. Алгоритм тем лучше, чем
быстрее он выполняется.
4. Разветвленность алгоритма характеризует логическую сложность и определяется количеством путей, по
которым может реализоваться процесс вычислений. Излишняя разветвленность увеличивает сложность алгоритма, а
значит, и трудоемкость его разработки и исполнения.
5. Цикличность алгоритма заключается в том, что фактическое количество операций, которые должны быть
выполнены в ходе процесса реализации, превышает количество операций, содержащихся в записи алгоритма.
Цикличность повышает качество алгоритма из-за сокращения числа шагов.

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

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

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

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

Зачем нужна алгоритмизация и программирование?

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

Понятие алгоритма и его свойства (Полевой).

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

Алгоритмы могут применяться и в нематематических (ЭВМ) сферах, в этом случае они могут подчиняться не таким строгим правилам.

Программирование – это реализация алгоритма на формализованном языке.

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

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

- Результативность алгоритма - это его способность всегда обеспечивать решение задачи при условии, что были заданы надлежащие исходные данные.

1. Место алгоритмизации[3] в решении правовых задач.

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

Зачем нужна алгоритмизация и программирование?

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

Понятие алгоритма и его свойства (Полевой).

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

Алгоритмы могут применяться и в нематематических (ЭВМ) сферах, в этом случае они могут подчиняться не таким строгим правилам.

Программирование – это реализация алгоритма на формализованном языке.

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

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

- Результативность алгоритма - это его способность всегда обеспечивать решение задачи при условии, что были заданы надлежащие исходные данные.

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

Любой алгоритм существует не сам по себе, а предназначен для определенного исполнителя (человека, робота, компьютера, языка программирования и т.д.). Свойством, характеризующим любого исполнителя, является то, что он умеет выполнять некоторые команды. Совокупность команд, которые данный исполнитель умеет выполнять, называется системой команд исполнителя. Алгоритм описывается в командах исполнителя, который будет его реализовывать. Объекты, над которыми исполнитель может совершать действия, образуют так называемую среду исполнителя. Исходные данные и результаты любого алгоритма всегда принадлежат среде того исполнителя, для которого предназначен алгоритм.

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

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

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

Рассмотрим следующие способы описания алгоритма: словесное описание, псевдокод, блок-схема, программа.

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

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

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

Рассмотрим некоторые основные конструкции, использующиеся для построения блок-схем (рис. 1).

1

(1) Блок, характеризующий начало/конец алгоритма (для подпрограмм – вызов/возврат);

(2) Блок - процесс, предназначенный для описания отдельных действий;

(3) Блок - предопределенный процесс, предназначенный для обращения к вспомогательным алгоритмам (подпрограммам);

(4) Блок - ввода/вывода с неопределенного носителя;

(5) Блок - ввод с клавиатуры;

(6) Блок - вывод на монитор;

(7) Блок - вывод на печатающее устройство;

(8) Блок – решение (проверка условия или условный блок);

(9) Блок, описывающий блок с параметром;

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

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

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

Линейная алгоритмическая конструкция

Линейной называют алгоритмическую конструкцию, реализованную в виде последовательности действий (шагов), в которой каждое действие (шаг) алгоритма выполняется ровно один раз, причем после каждого i- гo действия (шага) выполняется (i+ 1)-е действие (шаг), если i-e действие – не конец алгоритма.

Опишем алгоритм сложения двух чисел на псевдокоде в виде блок-схемы (рис. 2).

Ввод двух чисел а, b .

Вычисляем сумму S = а + b .

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

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

1

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

Заданы три числа. Найти значение наименьшего из них Заданные числа обозначим: а, b, с; результирующее наименьшее – min. На рис. 5 представлена блок-схема алгоритма решения данной задачи.

1

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

Рассмотрим три типа циклических алгоритмов: ц uкл с параметром (который называют арифметическим циклом), цикл с предусловием и цикл с постусловием (их называют итерационными) .

Арифметический цикл

В арифметическом цикле число его шагов (повторений) однозначно определяется правилом изменения параметра, которое задается с помощью начального (N) и конечного (К) значений параметра и шагом (h) его изменения. Т.е., на первом шаге цикла значение параметра равно N, на втором – N + h, на третьем – N + 2h и т.д. На последнем шаге цикла значение параметра не больше К, но такое, что дальнейшее его изменение приведет к значению, большему, чем К.

1

Цикл с предусловием

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

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

5

Цикл с постусловием

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

1

Рекурсивный алгоритм

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

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

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

Переменная – есть именованный объект (ячейка памяти), который может изменять свое значение. Имя переменной указывает на зн ачение, а способ ее хранения и адрес остаются скрытыми от программиста. Кроме имени и значения, переменная имеет тип, определяющий, какая информация находится в памяти. Тип переменной задает:

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

Структурированные данные и алгоритмы их обработки

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

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

1

В заданном числовом массиве A(l0) найти наибольший элемент и его индекс, при условии, что такой элемент в массиве существует, и единственный.

Обозначим индекс наибольшего элемента т. Будем считать, что первый элемент массива является наибольшим = 1). Сравним поочередно наибольший с остальными элементами массива. Если оказывается, что текущий элемент массива а i (тот, c которым идет сравнение) больше выбранного нами наибольшего ат, то считаем его наибольшим =i) (рис.10).

1

Рассмотрим двумерный массив (шкаф с множеством ящиков, положение которых определяется двумя координатами – по горизонтали и по вертикали). В математике двумерный массив (таблица чисел) называется матрицей. Каждый ее элемент имеет два индекса а ij , первый индекс i определяет номер строки, в которой находится элемент (координата по горизонтали), а второй j – номер столбца (координата по вертикали). Двумерный массив характеризуется двумя размерностями N и М, определяющими число строк и столбцов соответственно (рис. 11).

1

Ввод элементов двумерного массива осуществляется построчно, в свою очередь, ввод каждой строки производится поэлементно, тем самым определяется циклическая конструкция, реализующая вложение циклов. Внешний цикл определяет номер вводимой строки ( i ), внутренний – номер элемента по столбцу ( j ). На рис. 12 представлен алгоритм ввода матрицы A(MxN) .

1

Читайте также: