Автор работы: Пользователь скрыл имя, 20 Января 2012 в 23:42, курсовая работа
Развитие вычислительной "техники" шло паралельно с развитием понятия числа. Исторически первым был пальцевый счёт - для небольшого числа предметов. Даже счёт на пальцах стал возможен после того, как сформировалась абстракция числа - когда люди осознвли, что два дерева и две овцы имеют общее ,их число - два.
Возникновение "следующего поколения" - абак, русские и китайские счёты, стало возможным после изобретения позиционной системы счисления (до этого были непозиционные системы, например римская, иероглифическая, древнеславянская, алфавитная и т.д.)
Средства, используемые
для записи алгоритмов, в значительной
степени определяются тем, для
кого предназначается алгоритм.
Если для человека, то его запись
может быть не полностью
1. Словесная запись
алгоритмов.
Пример: алгоритм Евклида для нахождения
НОД двух натуральных чисел.
Шаг 1. Если числа равны, то взять первое
в качестве ответа и остановиться, иначе
перейти к 2.
Шаг 2. Определить большее из двух чисел.
Шаг 3. Заменить большее число разностью
большего и меньшего чисел.
Шаг 4. Перейти к шагу 1.
Словесное описание алгоритма используется
на первых этапах разработки алгоритма,
т.к. словесная запись недостаточно формализована
(это и плюс и минус).
2. Блок-схема алгоритмов.
Особенности блок-схем. Предписания алгоритма
помещаются внутрь блоков, соединённых
стрелками, показывающими очерёдность
выполнения.
Приняты определённые стандарты графических
изображений блоков (Гост 19.003-80) (стандарты
есть и на документацию!)
Схемы обладают большей наглядностью,
но занимают много места. Поэтому наглядность
быстро теряется при записи больших алгоритмов.
3. Псевдокоды.
Псевдокод - это система обозначений и
правил для записи алгоритмов. Он занимает
промежуточное место между естественным
и формальным языком. С одной стороны,
не нужна строгость в синтаксисе, как в
естественном языке, с другой стороны
в псевдокоде используется математическая
символика и управляющие конструкции,
присущие формальным языкам, что облегчает
переход от записи на псевдокоде к записи
алгоритма на формальном языке.
Пример записи алгоритма Евклида на псевдокоде.
Алгоритм Евклида:
начало
ввод k1, k2
пока k1
k2 повторять
если k1 > k2
то k1 := k1-k2
иначе k2 := k2-k1
всё
кц (* конец цикла пока *)
вывод k1
конец
4. Запись на алгоритмическом
языке.
Этот способ и есть программирование.
Такая запись предназначена для выполнения
ЭВМ, точнее, программой - транслятором
с данного языка программирования. Однако
такая запись предназначена не только
для машины, но и для человека - она должна
легко читаться и содержать пояснения
(комментарии), облегчающие её понимание.
Элементарной
структурной единицей любого
алгоритма является простая
x := 1;
y := y+1;
Команды ввода-вывода
Ввод х;
Ввод y;
Из простых команд и проверок условий
образуются более сложные конструкции.
Среди них выделяются базовые конструкции:
следование, ветвление, повторение и их
модификации.
1. Следование. Эта конструкция образуется
из последовательных блоков, следующих
друг за другом, причём каждый блок может
представлять собой или простую команду
или любую более сложную конструкция базовых
элементов.
Схема следования:
2. Ветвление.
С помощью ветвления осуществляется выполнение
одного из двух возможных блоков в зависимости
от результата проверки условия.
Схема ветвления:
Запись на псевдокоде:
Если <условие>
То <блок 1>
Иначе <блок 2>
Всё
Каждый блок может представлять собой
любую конструкцию базовых элементов.
Команда ветвления может использоваться
в сокращённом виде (неполное ветвление).
На псевдокоде это выглядит так:
Пример. Составить на псевдокоде алгоритм
вычисления функции:
Решение.
если x < 0
то y := x 2
иначе если x < 1
то y := x
иначе y := 1
всё
всё
(вложенные ветвления!)
3. Выбор.
Вложенные ветвления можно заменить одной
конструкцией, которая называется выбор.
На псевдокоде она записывается следующим
образом:
выбор
при <условие 1>: <блок 1>
при <условие 2>: <блок 2>
........
при <условие n>: <блок n>
иначе <блок n+1>
всё
Решим тот же пример с помощью выбора:
выбор
при x<0: y:=x2
при 0
x<0: y:=x
при x
1: y:=1
всё
Последнюю альтернативу можно заменить
на иначе у:=1
Условие можно упростить! Но так можно
не думать о порядке альтернатив.
Конструкция "выбор" существует
во всех современных алгоритмических
языках, слегка отличается синтаксисом
и семантикой. Стандартная семантика -
выполняется только одна ветвь (альтернатива)
выбора.
4. Повторение (цикл)
Для записи многократно повторяющихся
команд используется специальная конструкция,
называемая циклом. Цикл состоит из заголовка
и тела цикла. Тело цикла - это повторяемые
команды, а заголовок определяет, сколько
раз будет повторено тело цикла.
а) Цикл "повторить"
повторить k раз - заголовок
<тело цикла> - повторить к раз
Kц -ограничитель (конец цикла)
б) Цикл "пока"
Порядок (семантика) работы цикла пока:
Шаг 1. Проверяем условие.
Шаг 2. Если условие истинно, то выполняем
тело цикла, иначе переходим к шагу 4.
Шаг 3. Переходим к шагу 1.
Шаг 4. Продолжаем выполнение программы
(команд, следующих за "Kц")
в) Цикл "до"
г) Цикл "для" (цикл
с параметром)
для <параметр> от <начальное значение>
до <конечное значение> шаг <значение>
выполнить
<тело цикла>
Kц
Шаг, равный 1, обычно не указывается.
Цикл с параметром существует во всех
алгоритмических языках программирования,
отличаясь несущественными особенностями.
Стандарт выполнения:
Шаг 1. Вычисляем начальное и конечное
значение, присваиваем параметру начальное
значение.
Шаг 2. Проверяем выполнение условия
При положительном шаге: параметр
конечное значение
При отрицательном шаге: параметр
конечное значение
Шаг 3. Если условие истинно, то выполняем
тело цикла, иначе переходим к шагу 5.
Шаг 4. Изменяем параметр на величину шага
и переходим к шагу 2.
Шаг 5. Продолжаем выполнение программы.
(команд, следующих за Кц.
Пример. Вычислить сумму:
Решение:
сумма := 0
для k от 1 до n [шаг 1]
выполнить
сумма := сумма + xkyk
Кц
Решение можно записать любым из вариантов
цикла, например, с помощью цикла "пока":
сумма := 0
k := 1
пока k
n повторять
сумма := сумма + xkyk
k := k + 1
Кц
Пример. Вычислить
(n двоек)
Решение:
ввод n
y := 0
повторить n раз
Кц
вывод y
Домашнее задание
Составить алгоритм решения задачи.
100 гномов едят одно яблоко весом 200 г.
Каждый откусывает 1/100 того, что ему досталось
и ещё 1 г. Найти вес огрызка.
Реализация циклов на паскале:
Цикл "повторить k раз" - моделируется
циклом для
Цикл "пока" while <условие>
do begin ... end;
Цикл "до" repeat ... until <условие
выхода> ;
Цикл "для" for <параметр> :=
<начальное значение> to <конечное
значение> do
begin ... end;
to - шаг = 1
downto - шаг = -1
Цикл "для" с произвольным шагом
- моделируется циклом "пока"
параметр := начальное значение;
while параметр
конечн.значен. do begin
<тело цикла>
параметр := параметр + шаг;
end;
Заметим, что в этом случае есть возможность
влиять на конечное значение и шаг в теле
цикла.