Программная вычислимость
[20/100%]Определить, какие из следующих строк являются синтаксически правильными структурированными программами:
; if then ; else ; end;
; if then ; else ; end;
; while do ; ; end;
; if then ; else ; end;
;
; while do ; end
; if then ; ; else ; end;
Для следующей структурированной программы найти , где :
Для структурированной программы П на рис. 34 на следующей странице (слева) найти , где .
Для структурированной программы П на рис. 34 на следующей странице (справа) найти , где .
Написать структурированную программу , которая имеет входные переменные и и вычисляет функцию в переменной , не изменяя .
Пусть - это программа, которая вычисляет функцию в переменной , не изменяя и используя дополнительные переменные и . Какие из структурированных программ на рис. 35 на следующей странице вычисляют в переменной произведение
Пусть - это программа, которая вычисляет функцию в переменной , используя вспомогательные переменные , $x \leftarrow y ; x \leftarrow s(x) ; y \leftarrow u ;$ $x \leftarrow y ; x \leftarrow s(x) ; v \leftarrow u ;$ $y \leftarrow s(y) ; v \leftarrow z ; v \leftarrow s(v)$; $v \leftarrow s(v)$; $u \leftarrow (x<v) ; v \leftarrow (x<y)$; if $u$ then if $v$ then $z \leftarrow y ; z \leftarrow s(z) ;$ else $z \leftarrow x ;$ end; else $z \leftarrow s(x) ;$ end; $z \leftarrow (x<v) ;$ while $z$ do $z \leftarrow (y<x) ;$ if $z$ then $y \leftarrow s(y) ;$ else $x \leftarrow s(x) ; u \leftarrow s(u) ;$ end; $z \leftarrow (x<v) ;$ end;
Рис. 34: Программы из задач 540 и 541. $z_{1} \leftarrow y ;$
$z_{3} \leftarrow x$; $z_{2} \leftarrow 0 ; x \leftarrow 0 ;$ $z_{1} \leftarrow \left(z_{2}<z_{3}\right) ;$ while $z_{1}$ do $z_{1} \leftarrow 0 ; \Pi_{+}$ $z_{0} \leftarrow 0$; $z_{2} \leftarrow s\left(z_{2}\right) ;$ $z_{1} \leftarrow \left(z_{2}<z_{3}\right) ;$ end; if $y$ then while $z_{1}$ do $z_{0} \leftarrow 0 ;$ $z_{1} \leftarrow 0 ; \Pi_{+}$ $z_{2} \leftarrow s\left(z_{2}\right) ;$ $z_{1} \leftarrow \left(z_{2}<y\right) ;$ end; else end; end;
$u \leftarrow x ; x \leftarrow 0 ; \quad u \leftarrow x ;$ while $x$ do while $x$ do $\Pi_{z} \Pi_{\times }$ $y \leftarrow s(y)$ $x \leftarrow (x<u) ;$ end; $u \leftarrow (u<x) ; \quad$ end $;$ if $u$ then $\quad u \leftarrow (u<x)$; $x \leftarrow y_{1} ; \quad x \leftarrow y ;$ else if $u$ then $x \leftarrow y ; \quad x \leftarrow y_{1} ;$ end; end;
$u \leftarrow x ; u \leftarrow s(u) ;$ $u \leftarrow x ; u \leftarrow s(u) ;$ while $x$ do $y_{1} \leftarrow y ;$ $y \leftarrow s(y) ;$ $x \leftarrow y ;$ $\Pi_{z} \Pi_{\times }$ $x \leftarrow (x<u) ;$ end; $x \leftarrow y_{1} ;$
Рис. 36: Программы из задачи 544. — программа, обнуляющая переменные ; . Какие из структурированных программ на рис. 36 вычисляют в переменной квадратный корень из , то есть функцию
Пусть и — программы из задачи 544 на стр. 165. Какие из структурированных программ на рис. 37 на следующей странице вычисляют в переменной целую часть частного: ? При результат тоже должен быть равен нулю.
| ; | while do | |
|---|---|---|
| while do | ||
| ; | ; | |
| while do | ; | |
| ; | ||
| ; | if then | |
| end; | ||
| end; | ||
| end; | ; | ; |
| if then | ||
| end; | end; |
Рис. 37: Программы из задачи 545.
Построить программы, вычисляющие в переменной следующие функции, и доказать их корректность. Для двухместных функций значение переменной должно остаться неизменным.
;
, где и ;
, где , если , и иначе;
— факториал;
— целочисленное частное;
;
— возведение в степень;
;
— остаток от деления на ;
— количество различных делителей числа .
Построить программу с метками, которая по натуральному числу вычисляет число Фибоначчи .
Построить программы, вычисляющие в переменной следующие функции:
Для каждой из заданных ниже рекурсивными соотношениями функций и построить вычисляющую её структурированную программу:
,
,
,
,
, ,
, ,
, , , .
Написать программу, которая будет реализовывать присваивание ; , используя присваивания видов ; и . Последнее изменяет значение на 1, если значения и равны, или на 0 в противном случае.
Доказать, что для вычисления любой вычислимой функции можно написать структурированную программу без ветвлений. Указание. Сначала показать, что можно написать программу без полных ветвлений.
Пусть программа П с одной входной переменной вычисляет в переменной некоторую всюду определённую взаимно однозначную функцию , область значений которой совпадает с множеством всех натуральных чисел . Пусть . Построить программу, которая вычисляет обратную к функцию : , если .
Пусть — программа и . Из определений следует, что при различном выборе входных переменных и выходных переменных программа может вычислять различные функции.
Каково максимальное количество функций от переменных, которое может вычислять П? Сколько всего разных функций может вычислить П? Функции, имеющие различное количество аргументов, считаем разными a priori.
Построить программу , которая вычисляет максимальное количество различных функций от переменных.
Построить программу , которая для каждого вычисляет максимальное количество различных функций от переменных.
Определить, сколько всего существует попарно неэквивалентных программ с метками, имеющих не более операторов и только одну переменную, которая является одновременно входной и выходной.
Определить, какие всюду определённые функции могут вычисляться программами с метками, которые имеют только одну переменную, являющуюся одновременно входной и выходной, и используют только ветвления и присваивания видов ; и ;.
Пусть программа с метками содержит только пропозициональные переменные , ветвления и присваивания с булевыми связками: ;. Предложить способ, который позволяет определить, какую функцию вычисляет такая программа.
Доказать, что никакая из функций и не вычисляется никакой структурированной программой без циклов.