Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / ЛЕКЦИИ / POSIBNIK / Проектирование цикла с помощью инварианта.doc
Скачиваний:
39
Добавлен:
23.03.2015
Размер:
89.09 Кб
Скачать

5) Структура цикла:

Нет

Да

ВЫХОД

  1. ПОДГОТОВКА ЦИКЛА:

C:=n; { Начнем с исходного числа}

k:=0; { Из условия истинности инварианта}

  1. УСЛОВИЕ ЦИКЛА: C<>0.

  2. МОДИФИКАТОР ЦИКЛА:

C:=C div 10; { В соответствии со стратегией задачи }

9) ТЕЛО ЦИКЛА:

inc(i); { Из условия сохранения инварианта цикла }

  1. ТЕКСТ ПРОГРАММЫ:

<< Подготовить n (например, ввести) >>

C:=n; k:=0;

while C<>0 do begin

C:=C div 10;

inc(i);

end;

11) ЧАСТИЧНАЯ КОРРЕКТНОСТЬ ЦИКЛА: Из условия выхода из цикла (C=0) следует, что в переменной k учтены все значащие цифры числа – ч.т.д.

12) ПОЛНАЯ КОРРЕКТНОСТЬ ЦИКЛА: В качестве функции декремента цикла можно взять значение < Количество значащих цифр в числе C>. Эта величина неотрицательна и конечная. При каждом выполнении тела цикла она убывает на 1. Когда она становится равной нулю срабатывает условие выхода из цикла (C=0) и цикл завершается.

Из доказательства частичной корректности цикла следует, что он завершается именно в состоянии Q (В k находится количество значащих цифр числа).

Задача 3. Найти сумму цифр натурального числа n.

  1. P: Подготовить натуральное число n.

  2. Q: S = <Сумма цифр числа n>.

  3. СТРАТЕГИЯ РЕШЕНИЯ ЗАДАЧИ: Будем обрезать число справа. Текущее обрезаемое число обозначим C, а сумму уже отрезанных цифр будем хранить в переменной S.

  4. ИНВАРИАНТ ЦИКЛА I:

< Сумма цифр числа n> = < Сумма цифр числа C> + < Сумма уже отрезанных цифр, т.е. S>.

  1. Структура цикла:

Нет

Да

ВЫХОД

6) ПОДГОТОВКА ЦИКЛА:

C:=n; { Начнем с исходного числа}

S:=0; { Из условия истинности инварианта}

  1. УСЛОВИЕ ЦИКЛА: C<>0.

  2. ТЕЛО ЦИКЛА:

S:=S+C mod 10; { В соответствии со стратегией задачи }

  1. МОДИФИКАТОР ЦИКЛА:

C:=C div 10; { Из условия сохранения инварианта цикла }

  1. ТЕКСТ ПРОГРАММЫ:

<< Подготовить n (например, ввести) >>

C:=n; S:=0;

while C<>0 do begin

S:=S+C mod 10;

C:=C div 10;

end;

11) ЧАСТИЧНАЯ КОРРЕКТНОСТЬ ЦИКЛА: Из условия выхода из цикла (C=0) следует, что в переменной S просуммированы все цифры числа – ч.т.д.

12) ПОЛНАЯ КОРРЕКТНОСТЬ ЦИКЛА: В качестве функции декремента цикла можно взять значение < Количество значащих цифр в числе C>. Эта величина неотрицательна и конечная. При каждом выполнении тела цикла она убывает на 1. Когда она становится равной нулю срабатывает условие выхода из цикла (C=0) и цикл завершается.

Из доказательства частичной корректности цикла следует, что он завершается именно в состоянии Q (В S находится сумма всех цифр числа).

Задача 4. Найти старшую цифру натурального числа n.

  1. P: Подготовить натуральное число n.

  2. Q: k = <Старшая цифра числа n>.

  3. СТРАТЕГИЯ РЕШЕНИЯ ЗАДАЧИ: Будем обрезать число справа, пока не доберемся до старшей цифры числа.Текущее обрезаемое число обозначим C. Очередную отрезанную цифру будем хранить в переменной k.

  4. ИНВАРИАНТ ЦИКЛА I:

< k есть старшая цифра числа n> ИЛИ C<>0