
- •13 Исполнитель Чертежник и работа с ним
- •13.1. Особенности записи чисел в информатике
- •13.2. Исполнитель Чертежник
- •13.3. Команды с параметрами
- •13.4. Абсолютное и относительное смещение
- •13.5. Пример алгоритма управления Чертежником
- •13.6. Рисование букв
- •13.7. Использование вспомогательных алгоритмов
- •14 Алгоритмы с аргументами
- •14.1. Пример алгоритма с аргументом
- •Выполнение вспомогательного алгоритма с аргументами
- •Модель памяти компьютера
- •Алгоритмы с несколькими аргументами
- •14.5. Аргументы в заголовке цикла n раз
- •14.6. Закрашивание прямоугольника
- •14.7. Заголовок алгоритма с аргументами
- •15 Арифметические выражения и правила их записи
- •15.1. Арифметические выражения в алгоритмическом языке
- •15.2. Выражения вычисляет компьютер
- •15.3. Правила записи арифметических выражений в алгоритмическом языке
- •15.4. Операции и стандартные функции алгоритмического языка
- •15.5. Порядок действий в арифметических выражениях
- •16 Величины в алгоритмическом языке. Команда присваивания
- •16.1. Измерение радиации и температуры
- •16.2. Компьютер запоминает информацию
- •16.3. Компьютер выполняет подсчет
- •16.4. Величины и их характеристики
- •16.5. Описание величин
- •6.6. Модель памяти компьютера
- •16.7. Команда присваивания
- •Примеры использования команды присваивания
- •Еще один пример алгоритма, работающего с величинами
- •Рисование параболы
- •17 Алгоритмы с результатами
- •17.1. Простейший пример алгоритма с результатами
- •17.2. Выполнение алгоритма с результатами
- •17.3. Общие правила выполнения команды вызова вспомогательного алгоритма
- •Алгоритм с результатами при управлении Роботом
- •Алгоритм Евклида
- •Сумма цифр десятичного числа
- •Исполнение алгоритмов
Алгоритм с результатами при управлении Роботом
А57
алг средний уровень радиации в коридоре (рез вещ г)
дано | Робот в левой клетке коридора, уходящего вправо
надо | r = средний уровень радиации в коридоре, Робот
| вышел из коридора вправо
нач цел n, вещ S
n := 0; S := 0
нц пока снизу стена
n := n + 1; S:= S + радиация
вправо
кц
утв | n = длина коридора, S = суммарная радиация
r:= S /n
кон
Алгоритм Евклида
Рассмотрим такую задачу: найти наибольший общий делитель двух натуральных чисел. Один из способов решения этой задачи был предложен древнегреческим математиком Евклидом, жившим более двух тысяч лет назад. Суть метода Евклида в следующем: большее из двух чисел надо заменить разностью этих чисел. При этом все общие делители, а значит, и наибольший из них, сохраняются. Если проделать эту операцию несколько раз, то, в конце концов, числа станут равны друг другу и полученное значение будет искомым.
Запишем алгоритм Евклида на алгоритмическом языке.
а
А58
дано а > 0 и b > 0
надо | d = НОД (а, b)
нач цел m, n | дополнительные величины нужны, чтобы не менять
| значения аргументов
m := а; n := b
нц пока m <> n
утв | инвариант цикла: НОД (m, n) = НОД (а, b)
если m > n
то m:= m – n
иначе n:= n – m
все
кц
утв m = n | НОД (m, n) = НОД (а, b)
d:= m
кон
Докажем правильность этого алгоритма. Рассмотрим инвариант цикла. Ясно, что он справедлив при первом выполнении цикла — в этот момент значения т и п совпадают со значениями а и b.
Предположим, что при некотором выполнении цикла инвариант справедлив. Пусть в этот момент т > п. Тогда выполнится команда m:= m - n и величина т получит новое значение. При этом все общие делители тип остаются прежними, так как если т и п делятся на х, то т - п также делится на х. Аналогично сохраняются все делители, если п > т.
Таким образом, инвариант цикла справедлив при первом выполнении и сохраняется при переходе от одного выполнения к следующему. Следовательно, он справедлив при любом выполнении цикла и после его завершения.
Условие, записанное после цикла, следует из инварианта цикла и условия окончания цикла (т = п). Из чего очевидно вытекает НОД (а,b) = т.
Осталось доказать, что выполнение цикла завершится. Для этого заметим, что при каждом выполнении цикла большее из чисел т и п уменьшается, но при этом они остаются положительными. Ясно, что это не может продолжаться бесконечно долго, следовательно, выполнение цикла когда-нибудь завершится.
Сумма цифр десятичного числа
Задача. Найти сумму цифр заданного десятичного числа.
Составим сначала заголовок алгоритма. В задаче есть одна входная величина — заданное число и одна выходная — сумма его цифр. Значит, в алгоритме будет один аргумент и один результат.
а
А59
дано n > 0
надо | s = сумма цифр числа n
Чтобы решить эту задачу, надо научить компьютер раскладывать число на цифры. Дело в том, что в памяти компьютера числа представляются совсем не так, как мы пишем их на бумаге, и привычное нам понятие «цифра» к величинам не применимо.
Для разделения числа на цифры надо понять, как устроена привычная нам десятичная запись числа. Последняя цифра числа — это остаток от его деления на 10, а все число без последней цифры — результат деления числа нацело на 10.
В алгоритмическом языке есть специальные операции для нахождения остатка и результата деления нацело (см. § 15). С их помощью алгоритм решения этой задачи можно записать так:
нач цел nn, с
nn := n | значение аргумента нельзя изменять, поэтому нужна
| дополнительная промежуточная величина
s:=0
нц пока nn > 0
с:= mod (nn, 10)
s := s + с
nn := div (nn, 10)
кц
кон