тест |
Базовые алгоритмические структуры
" Алгоритм " является базовым основополагающим понятием информатики, а алгоритмизация (программирование) – основным разделом курса информатики (ядром курса). Понятие алгоритма, как и понятие информации, точно определить невозможно. Поэтому встречаются самые разнообразные определения – от "наивно-интуитивных" (" алгоритм – это план решения задачи") до "строго формализованных" (нормальные алгоритмы Маркова).
В качестве рабочего определения алгоритма возьмем следующее определение.
Алгоритм – это упорядоченная совокупность точных (формализованных) и полных команд исполнителю алгоритма (человек, ЭВМ), задающих порядок и содержание действий, которые он должен выполнить для нахождения решения любой задачи из рассматриваемого класса задач.
Алгоритм удовлетворяет следующим основным свойствам:
- Конечность (дискретность) команд и выполняемых по ним действий алгоритма.
- Выполнимость в определенной операционной среде (в определенном классе исполнителей).
- Результативность отдельных команд и всего алгоритма.
- Применимость алгоритма ко всем возможным входным данным конкретного класса задач.
- Определенность (детерминированность) команд и всего алгоритма для всех входных данных.
- Формализованное, конструктивное описание (представление) команд алгоритма.
- Минимальная полнота системы команд алгоритма.
- Непротиворечивость любых команд алгоритма на любом наборе входных данных.
Любой алгоритм ориентирован на некоторый общий метод решения класса задач и представляет собой формализованную запись метода, процедуры.
Алгоритм, записанный на некотором алгоритмическом, формальном языке, состоит из заголовка алгоритма (описания параметров, спецификаций класса задач) и тела алгоритма (последовательности команд исполнителя, преобразующих входные параметры в выходные).
Для записи, исполнения, обмена и хранения алгоритмов существуют различные средства, языки, псевдокоды – блок-схемы, структурограммы (схемы Нэсси-Шнайдермана), Р-схемы, школьный алгоритмический язык (ШАЯ), различные языки программирования.
В качестве языка описания алгоритмов нами используется далее язык программирования Паскаль, так как он наиболее подходит для целей обучения и часто (обоснованно) используется в обучении.
На алгоритмическом языке Паскаль любой алгоритм простой (не модульной, не составной) структуры имеет следующий стандартный вид:
Program <имя (заголовок) алгоритма>; Uses <список подключаемых библиотек, если они нужны>; { комментарии, если нужны } Label <список меток (имен участков программ), если они нужны>; { комментарии } Const <список констант (не изменяемых величин), если они нужны>; { комментарии } Type <список имен и типов структур данных, если они нужны>; { комментарии } Var <список имен и типов переменных, если они нужны>; { комментарии } { < условия задачи и применимости алгоритма > } { < цель составления и выполнения алгоритма > } Begin <команды ввода входных данных, если они нужны>; { комментарии } <тело алгоритма (команды управления и преобразования алгоритма)>; { комментарии } <команды вывода результатов (выходных данных), если они нужны>; { комментарии } End.
Пример. Программа вычисления объема v правильного цилиндра с радиусом основания r и высотой h.
Program VСil; Uses Crt; { подключение библиотеки ввода/вывода на экран "в звуке и цвете" } Const pi = 3.14; Var r, h, v: real; { для правильного цилиндра с радиусом основания r и высотой h } { вычислить и выдать на экран значение его объема v } Begin ClrScr; { команда очистки экрана (от данных предыдущей задачи) } ReadLn (r, h); { ввод входных параметров } v:=pi*r*r*h; { вычисление объема по формуле для цилиндра } WriteLn (‘Вычисленный объем цилиндра равен ’, v) { вывод результата } End.
Приведем таблицу наиболее часто используемых в языке Паскаль функций и процедур.
Обычная запись | Паскаль |
---|---|
Квадрат числа х | sqr(x) |
Корень квадратный из x | sqrt (x) |
Модуль |х| | abs (x) |
sin x | sin(x) |
cos x | cos(x) |
tg x | tg(x) |
ctg x | ctg(x) |
arcsin x | arcsin (x) |
arccos x | arccos(x) |
arctg x | arctg(x) |
Натуральный логарифм ln x | ln(x) |
Степень числа е = 2, 7... или еx | exp(x) |
Остаток от деления целого х на целое у | x mod y |
Частное от деления целого х на целое y | x div y |
Целая часть числа х (вещественного) | int(x) |
Случайное число от 0 до х | rnd(x) |
Длина текста х в символах | length (x) |
Пример. Результаты применения этих функций: sqrt(9) = 3, abs(–5) = 5, sin(0) = 0, cos(0) = 1, ln(1) = 0, exp(1 ) =e, 23 mod 5 = 3, 20 mod 5 = 0, 23 div 5 = 4, 20 div 5 = 4, int(2.7) = 2, int(2) = 2, rnd(0) = 0.231356, length(‘информ’) = 6.
Порядок выполнения операций (старшинство операций – по убыванию) в языке Паскаль:
- вычисление выражений в скобках;
- вычисление стандартных функций;
- умножение и деление (обозначаются "*" и "/");
- сложение и вычитание (обозначаются "+" и "–").
Пример. Выражение b*c + (d/t*(v/n/m))*sin(x) вычисляется в следующем порядке (слева направо): v/n, (v/n)/m, d/t, (d/t)*(v/n/m), sin(x), b*c, (d/t*(v/n/m))*sin(x), b*c+(d/t*(v/n/m))*sin(x) и эквивалентно математическому выражению: .
Рассмотрим базовые простые команды языка Паскаль.
-
Команда описания (заголовка) алгоритма (программы) :
Program <имя алгоритма>;,
где <имя алгоритма> – имя, задаваемое составителем программы (краткое, полное, грамотное отражение сути алгоритма ).
-
Ввод – команда ввода в рассмотрение (в тело алгоритма ) тех или иных входных параметров:
Read (<список вводимых параметров>);
или
ReadLn (<список вводимых параметров>);.
Первая команда вводит данные с текущей позиции экрана (где стоит курсор), вторая – с новой строки экрана.
-
Вывод – команда вывода на экран тех или иных входных или выходных параметров алгоритма:
Write (<список выводимых параметров>);
или
WriteLn (<список выводимых параметров>);.
Первая команда выводит данные с текущей позиции экрана (где стоит курсор), вторая – с новой строки экрана.
-
Присваивание – команда изменения текущего значения переменной вида:
<идентификатор> := <выражение>;,
где <идентификатор> соответствует имени переменной, <выражение> – корректно записанное выражение. Знак ":=" означает последовательное выполнение двух действий: определение текущего значения <выражения> и замена текущего значения переменной, имя которой задано <идентификатором>, на новое значение, равное значению <выражения>.
- Команда начала алгоритма (блока) – команда Begin.
- Команда завершения алгоритма (блока) – команда End.
-
Команда вставки комментариев в текст алгоритма имеет вид:
<комментируемое в программе> <текст комментария>.
Комментировать можно любой объект в программе. Обычно комментируют переменную, структуру данных, команду, группу команд.