Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы и величины исп Чертежн.doc
Скачиваний:
14
Добавлен:
01.03.2025
Размер:
531.46 Кб
Скачать
    1. Алгоритм с результатами при управлении Роботом

А57

алг средний уровень радиации в коридоре (рез вещ г)

дано | Робот в левой клетке коридора, уходящего вправо

надо | r = средний уровень радиации в коридоре, Робот

| вышел из коридора вправо

нач цел n, вещ S

n := 0; S := 0

нц пока снизу стена

n := n + 1; S:= S + радиация

вправо

кц

утв | n = длина коридора, S = суммарная радиация

r:= S /n

кон

    1. Алгоритм Евклида

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

Запишем алгоритм Евклида на алгоритмическом языке.

а

А58

лг Евклид (арг цел а, b, рез цел d)

дано а > 0 и b > 0

надо | d = НОД (а, b)

нач цел m, n | дополнительные величины нужны, чтобы не менять

| значения аргументов

m := а; n := b

нц пока m <> n

утв | инвариант цикла: НОД (m, n) = НОД (а, b)

если m > n

то m:= mn

иначе n:= nm

все

кц

утв m = n | НОД (m, n) = НОД (а, b)

d:= m

кон

Докажем правильность этого алгоритма. Рассмотрим инвариант цикла. Ясно, что он справедлив при первом выполнении цикла — в этот момент значения т и п совпадают со значениями а и b.

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

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

Условие, записанное после цикла, следует из инварианта цикла и условия окончания цикла (т = п). Из чего очевидно вытекает НОД (а,b) = т.

Осталось доказать, что выполнение цикла завершится. Для этого заметим, что при каждом выполнении цикла большее из чисел т и п уменьшается, но при этом они остаются положительными. Ясно, что это не может продолжаться бесконечно долго, следовательно, выполнение цикла когда-нибудь завершится.

    1. Сумма цифр десятичного числа

Задача. Найти сумму цифр заданного десятичного числа.

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

а

А59

лг сумма цифр (арг цел n, рез цел s)

дано n > 0

надо | s = сумма цифр числа n

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

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

В алгоритмическом языке есть специальные операции для нахождения остатка и результата деления нацело (см. § 15). С их помощью алгоритм решения этой задачи можно записать так:

нач цел nn, с

nn := n | значение аргумента нельзя изменять, поэтому нужна

| дополнительная промежуточная величина

s:=0

нц пока nn > 0

с:= mod (nn, 10)

s := s + с

nn := div (nn, 10)

кц

кон