Ручная прокрутка программы при n=5
Пример
14.04.2015
О схемах программ
Интерпретация схемы:
pp = 1; kk = 0; // константы
h(x, y) = x * y; g(x) = x – 1;
О схемах программ
О схемах программ
О схемах программ
О схемах программ
// Схема программы:
p = pp; k = n;
while (k !=kk) {
p = h (k, p);
k = g(k);
}
Интерпретация схемы в случае списков
// Программа:
//вход – список n, м.б. пустой
p = Nil; k = n;
while (k !=Nil) { // !Null(k)
p = ConsHd (k, p);
k = Tail (k);
}
Результат: ? Reverse (n)
14.04.2015
О схемах программ
О схемах программ
// Схема программы:
// вычисление f(n)
p = pp; k = n;
// inv: q (f(k),p) = f(n)
// var: v (k) ***
while (k !=kk) {
p = h (k, p);
k = g(k);
} // p = f(n)
Интерпретация схемы: pp, kk – константы.
h(x, y) = x * y; g(x) = x – 1; q(x, y) = x * y;
Примечание: почему h(x, y) и q(x, y) разные функции
Добавим утверждения, т.е. спецификацию (предусловие, постусловие) + инвариант цикла
fct(n)=n!
О схемах программ
14.04.2015
О схемах программ
Интерпретация схемы в случае списков
// Программа: f(n)=Reverse(n)
//вход – список n, м.б. пустой
p = Nil; k = n;
// inv: q (f(k),p) = f(n)
// var: v (k)
while (k !=Nil) { // !Null(k)
p = ConsHd (k, p);
k = Tail (k);
} // p = f(n)
// Схема программы:
// вычисление f(n)
p = pp; k = n;
// inv: q (f(k),p) = f(n)
// var: v (k)
while (k !=kk) {
p = h (k, p);
k = g(k);
} // p = f(n)
14.04.2015
О схемах программ
Если ввести инфиксное обозначение
s1 ⊕ s2 = Concat (s1, s2),
то inv: Concat(Reverse(k),p) = Reverse(n) превратится в
Reverse(k) ⊕p = Reverse(n),
что легче интерпретировать как аналог
fct(k) *p = fct(n).
14.04.2015
О схемах программ
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть