22

Программная вычислимость

[20/100%]
Показать
LaTeX
Задача 538

Определить, какие из следующих строк являются синтаксически правильными структурированными программами:

?
(а)

x←s(x);z←y;u←(s(x)<z)x \leftarrow s(x) ; z \leftarrow y ; \quad u \leftarrow (s(x)<z); if uu then y←zy \leftarrow z; else y←xy \leftarrow x; end;

(б)

x←s(x);z←y;z←s(z)x \leftarrow s(x) ; z \leftarrow y ; z \leftarrow s(z); if x←zx \leftarrow z then y←zy \leftarrow z; else y←xy \leftarrow x; end;

(в)

x←y;u←z;u←s(u);x←(u>z)x \leftarrow y ; \quad u \leftarrow z ; \quad u \leftarrow s(u) ; \quad x \leftarrow (u>z); while xx do y←zy \leftarrow z; u←s(u)u \leftarrow s(u); end;

(г)

x←s(z);z←y;x←(x<x)x \leftarrow s(z) ; z \leftarrow y ; x \leftarrow (x<x); if xx then y←zy \leftarrow z; else x←yx \leftarrow y; end;

(д)

x←x;x←x;y←y;y←yx \leftarrow x ; x \leftarrow x ; y \leftarrow y ; y \leftarrow y;

(е)

x←y;u←z;u←s(u);x←(z<u)x \leftarrow y ; \quad u \leftarrow z ; \quad u \leftarrow s(u) ; \quad x \leftarrow (z<u); while xx do y←zy \leftarrow z; u←s(u);u \leftarrow s(u) ; end ;x←y;; x \leftarrow y ;

(ж)

x←s(x);z←y;z←s(z);x←(x←z)x \leftarrow s(x) ; \quad z \leftarrow y ; \quad z \leftarrow s(z) ; \quad x \leftarrow (x \leftarrow z); if xx then y←zy \leftarrow z; z←s(z)z \leftarrow s(z); else y←xy \leftarrow x; end; ⊛\circledast

Задача 539

Для следующей структурированной программы Π\Pi найти Π(σ)\Pi (\sigma ), где σ={(x,3);(y,4);(z,2)}\sigma =\left\{ (x, 3) ;(y, 4) ;(z, 2)\right\}: ⊛\circledast

x←y;x←s(x);y←z;y←s(y);z←s(z);y←s(x);z←y;z←s(z);x←s(x); \begin{aligned} x \leftarrow y ; x \leftarrow s(x) ; y \leftarrow z ; y & \leftarrow s(y) ; z \leftarrow s(z) ; \\ y & \leftarrow s(x) ; z \leftarrow y ; z \leftarrow s(z) ; x \leftarrow s(x) ; \end{aligned}
?
Задача 540

Для структурированной программы П на рис. 34 (слева) найти П(σ)П(\sigma ), где σ={(x,0);(y,3);(z,5);(u,4);(v,2)}\sigma =\left\{ (x, 0) ;(y, 3) ;(z, 5) ;(u, 4); (v, 2)\right\}. ⊛\circledast

x←y;x←s(x);y←u;x \leftarrow y ; x \leftarrow s(x) ; y \leftarrow u ;
y←s(y);v←z;v←s(v);y \leftarrow s(y) ; v \leftarrow z ; v \leftarrow s(v) ;
u←(x<v);v←(x<y);u \leftarrow (x<v) ; v \leftarrow (x<y) ;
ifuu then
\quad ifvv then
z←y;z←s(z);\quad \quad z \leftarrow y ; z \leftarrow s(z) ;
\quad else
z←x;\quad \quad z \leftarrow x ;
\quad end;
else
z←s(x);\quad z \leftarrow s(x) ;
end;
: Рис. 34 (слева): Программа из задач 540 и 541.
?
Задача 541

Для структурированной программы П на рис. 34 (справа) найти Π(σ)\Pi (\sigma ), где σ={(x,2);(y,3);(z,7);(u,5);(v,0)}\sigma =\left\{ (x, 2) ;(y, 3) ;(z, 7) ;(u, 5); (v, 0)\right\}. ⊛\circledast

x←y;x←s(x);v←u;x \leftarrow y ; x \leftarrow s(x) ; v \leftarrow u ;
v←s(v);v \leftarrow s(v) ;
z←(x<v);z \leftarrow (x<v) ;
whilezz do
z←(y<x);\quad z \leftarrow (y<x) ;
\quad ifzz then
y←s(y);\quad \quad y \leftarrow s(y) ;
\quad else
x←s(x);u←s(u);\quad \quad x \leftarrow s(x) ; u \leftarrow s(u) ;
\quad end;
z←(x<v);\quad z \leftarrow (x<v) ;
end;
: Рис. 34 (справа): Программа из задач 540 и 541.
?
Задача 542

Написать структурированную программу Π+\Pi_{+}, которая имеет входные переменные xx и yy и вычисляет функцию x+yx+y в переменной xx, не изменяя yy. ⊛\circledast

?
Задача 543

Пусть Π+\Pi_{+}- это программа, которая вычисляет функцию x+yx+y в переменной xx, не изменяя yy и используя дополнительные переменные z0z_{0} и z1z_{1}. Какие из структурированных программ на рис. 35 вычисляют в переменной xx произведение xyxy? ⊛\circledast

z3←xz_{3} \leftarrow x;z3←y;y←x;z_{3} \leftarrow y ; y \leftarrow x ;
z2←0;x←0;z_{2} \leftarrow 0 ; x \leftarrow 0 ;x←0;x \leftarrow 0 ;
z1←(z2<z3);z_{1} \leftarrow \left(z_{2}<z_{3}\right) ;z0←(z2<z3);z_{0} \leftarrow \left(z_{2}<z_{3}\right) ;
whilez1z_{1} dowhilez0z_{0} do
z1←0;Π+\quad z_{1} \leftarrow 0 ; \Pi _{+}z0←0;z1←0;\quad z_{0} \leftarrow 0 ; z_{1} \leftarrow 0 ;
z0←0\quad z_{0} \leftarrow 0;Π+z2←s(z2);\quad \Pi _{+} z_{2} \leftarrow s\left(z_{2}\right) ;
z2←s(z2);\quad z_{2} \leftarrow s\left(z_{2}\right) ;z0←(z2<z3);\quad z_{0} \leftarrow \left(z_{2}<z_{3}\right) ;
z1←(z2<z3);\quad z_{1} \leftarrow \left(z_{2}<z_{3}\right) ;end;
end;
: Рис. 35: Программы из задачи 543.
?
Задача 544

Пусть Π×\Pi_{\times }- это программа, которая вычисляет функцию xyx y в переменной xx, используя вспомогательные переменные zi,i=0,1,…,mz_{i}, i=0,1, \ldots , m, построенная в задаче 543. Πz\Pi_{z} — программа, обнуляющая переменные zi:z0←0;…zm←0z_{i}: z_{0} \leftarrow 0 ; \ldots z_{m} \leftarrow 0; . Какие из структурированных программ на рис. 36 вычисляют в переменной xx квадратный корень из xx, то есть функцию sqrt⁡(x)=⌊x⌋\operatorname {sqrt}(x)=\lfloor \sqrt{x}\rfloor? ⊛\circledast

u←x;x←0;u \leftarrow x ; x \leftarrow 0 ;u←x;u \leftarrow x ;u←x;u←s(u);u \leftarrow x ; u \leftarrow s(u) ;
whilexx dowhilexx dowhilexx do
ΠzΠ×\quad \Pi _{z} \Pi _{\times }y1←y;\quad y_{1} \leftarrow y ;y1←y;\quad y_{1} \leftarrow y ;
y1←y;\quad y_{1} \leftarrow y ;y←s(y);\quad y \leftarrow s(y) ;y←s(y);\quad y \leftarrow s(y) ;
y←s(y);\quad y \leftarrow s(y) ;x←y;\quad x \leftarrow y ;x←y;\quad x \leftarrow y ;
x←(x<u);\quad x \leftarrow (x<u) ;ΠzΠ×\quad \Pi _{z} \Pi _{\times }ΠzΠ×\quad \Pi _{z} \Pi _{\times }
end;x←(x<u);\quad x \leftarrow (x<u) ;x←(x<u);\quad x \leftarrow (x<u) ;
u←(u<x);u \leftarrow (u<x) ;end;end;
ifuu thenu←(u<x);u \leftarrow (u<x) ;x←y1;x \leftarrow y_{1} ;
x←y1;\quad x \leftarrow y_{1} ;x←y;x \leftarrow y ;
elseifuu then
x←y;\quad x \leftarrow y ;x←y1;\quad x \leftarrow y_{1} ;
end;end;
: Рис. 36: Программы из задачи 544.
?
Задача 545

Пусть Π×\Pi_{\times }и Πz\Pi_{z} — программы из задачи 544. Какие из структурированных программ на рис. 37 вычисляют в переменной xx целую часть частного: ⌊x/y⌋\lfloor x / y\rfloor? При y=0y=0 результат тоже должен быть равен нулю. ⊛\circledast

u←s(x);x←0;u \leftarrow s(x) ; x \leftarrow 0 ;u←s(x);x←0;i←yu \leftarrow s(x) ; x \leftarrow 0 ; i \leftarrow y;u←x;i←y;u \leftarrow x ; i \leftarrow y ;
i←(x<u);i \leftarrow (x<u) ;whileii dowhileii do
whileii dox←j;\quad x \leftarrow j ;j1←j;\quad j_{1} \leftarrow j ;
j1←j;\quad j_{1} \leftarrow j ;ΠzΠ×\quad \Pi _{z} \Pi _{\times }j←s(j);\quad j \leftarrow s(j) ;
j←s(j);\quad j \leftarrow s(j) ;i←(x<u);\quad i \leftarrow (x<u) ;x←j;\quad x \leftarrow j ;
ΠzΠ×\quad \Pi _{z} \Pi _{\times }ifii thenΠzΠ×\quad \Pi _{z} \Pi _{\times }
i←(x<u);\quad i \leftarrow (x<u) ;j1←j;\quad j_{1} \leftarrow j ;i←(x<u);\quad i \leftarrow (x<u) ;
end;end;end;
x←j1;x \leftarrow j_{1} ;j←s(j);j \leftarrow s(j) ;i←(u<x);i \leftarrow (u<x) ;
i←(j<u);i \leftarrow (j<u) ;x←j;x \leftarrow j ;
end;ifii then
x←j1;\quad x \leftarrow j_{1} ;
end;
: Рис. 37: Программы из задачи 545.
?
Задача 546

Построить программы, вычисляющие в переменной xx следующие функции, и доказать их корректность. Для двухместных функций значение переменной yy должно остаться неизменным.

?
(а)

mult⁡(x,y)=xy\operatorname {mult}(x, y)=x y;

(б)

dec⁡(x)=x÷1\operatorname {dec}(x)=x \div 1, где 0÷1=00 \div 1=0 и (x+1)÷1=x(x+1) \div 1=x;

(в)

sub⁡(x,y)=x÷y\operatorname {sub}(x, y)=x \div y, где x÷y=x−yx \div y=x-y, если x⩾yx \geqslant y, и x÷y=0x \div y=0 иначе;

(г)

fact⁡(x)=x!\operatorname {fact}(x)=x! — факториал;

(д)

div⁡(x,y)=⌊x/y⌋\operatorname {div}(x, y)=\lfloor x / y\rfloor — целочисленное частное;

(е)

sqrt⁡(x)=⌊x⌋\operatorname {sqrt}(x)=\lfloor \sqrt{x}\rfloor;

(ж)

pow⁡(x,y)=xy\operatorname {pow}(x, y)=x^{y} — возведение в степень;

(з)

log⁡(y,x)=⌊log⁡yx⌋\log (y, x)=\left\lfloor \log_{y} x\right\rfloor;

(и)

 mod (x,y)\bmod (x, y) — остаток от деления xx на yy;

(к)

τ(x)\tau (x) — количество различных делителей числа x,τ(0)=0x, \tau (0)=0. ⊛\circledast

Задача 547

Построить программу с метками, которая по натуральному числу ii вычисляет число Фибоначчи FiF_{i}. ⊛\circledast

?
Задача 548

Построить программы, вычисляющие в переменной zz следующие функции:

?
(а)

f1(x,y)={⌊(x+y)/2⌋ при x<y,x2y3 в противном случае; f_{1}(x, y)= \begin{cases} \lfloor (x+y) / 2\rfloor & \text{ при } x<y, \\ x^{2} y^{3} & \text{ в противном случае; }\end{cases}

(б)

f2(x,y)={3y при log⁡2(x+1)⩾y,∣x−y∣ в противном случае; f_{2}(x, y)= \begin{cases} 3^{y} & \text{ при } \log_{2}(x+1) \geqslant y, \\ \left|x-y\right| & \text{ в противном случае; }\end{cases}

(в)

f3(x,y)={⌊xy/2⌋ при log⁡2x⩽y+2,⌊x⌊y/2⌋⌋ в противном случае; f_{3}(x, y)= \begin{cases} \lfloor x y / 2\rfloor & \text{ при } \log_{2} x \leqslant y+2, \\ \left\lfloor x^{\lfloor y / 2\rfloor }\right\rfloor & \text{ в противном случае; }\end{cases}

(г)

f4(x,y)={⌊log⁡3(x+y+1)⌋ при 2x⩽y3+y,⌊x+y⌋ в противном случае; f_{4}(x, y)= \begin{cases} \left\lfloor \log_{3}(x+y+1)\right\rfloor & \text{ при } 2 x \leqslant y^{3}+y, \\ \lfloor \sqrt{x+y}\rfloor & \text{ в противном случае; }\end{cases}

(д)

f5(x,y)={1, если x — простое число, 0 в противном случае. f_{5}(x, y)= \begin{cases} 1, & \text{ если } x \text{ — простое число, } \\ 0 & \text{ в противном случае. }\end{cases} ⊛\circledast

Задача 549

Для каждой из заданных ниже рекурсивными соотношениями функций A(x,y),B(x,y),C(x,y),D(x,y),E(x,y),G(x,y)A(x, y), B(x, y), C(x, y), D(x, y), E(x, y), G(x, y) и H(x,y)H(x, y) построить вычисляющую её структурированную программу:

?
(а)

A(0,y)=y+1A(0, y)=y+1,

A(x+1,0)=2A(x,1)A(x+1,y+1)=A(x,y)+xy \begin{aligned} & A(x+1,0)=2 A(x, 1) \\ & A(x+1, y+1)=A(x, y)+x y \end{aligned}
(б)

B(0,y)=2yB(0, y)=2 y,

B(x+1,0)=B(x,1)+1B(x+1,y+1)=x+B(x+1,y) \begin{aligned} & B(x+1,0)=B(x, 1)+1 \\ & B(x+1, y+1)=x+B(x+1, y) \end{aligned}
(в)

C(0,y)=y+2C(0, y)=y+2,

C(x+1,0)=C(x,1)+1C(x+1,y+1)=C(x+1,y)−x \begin{aligned} & C(x+1,0)=C(x, 1)+1 \\ & C(x+1, y+1)=C(x+1, y)-x \end{aligned}
(г)

D(x,0)=x,D(0,y)=yD(x, 0)=x, D(0, y)=y,

D(x+1,y+1)=D(x,y+1)+xy; D(x+1, y+1)=D(x, y+1)+x^{y} ;
(д)

E(0,y)=y+1E(0, y)=y+1, E(x+1,0)=E(x,1)E(x+1,0)=E(x, 1), E(x+1,y+1)=xE(x+1,y);E(x+1, y+1)=x E(x+1, y) ;

(е)

G(0,y)=3G(0, y)=3, G(x+1,0)=G(x,0)+⌊log⁡2(x+1)⌋G(x+1,0)=G(x, 0)+\left\lfloor \log_{2}(x+1)\right\rfloor, G(x+1,y+1)=G(x+1,y)+x2y;G(x+1, y+1)=G(x+1, y)+x^{2} y ;

(ж)

H(0,y)=yH(0, y)=y, H(x+1,0)=H(x,1)+2H(x+1,0)=H(x, 1)+2, H(x+1,1)=H(x,0)+1H(x+1,1)=H(x, 0)+1, H(x+1,y+2)=y+H(x+1,y)H(x+1, y+2)=y+H(x+1, y). ⊛\circledast

Задача 550

Написать программу, которая будет реализовывать присваивание a←(b<c)a \leftarrow (b<c); , используя присваивания видов x←0;x←yx \leftarrow 0 ; x \leftarrow y; x←s(y);x \leftarrow s(y) ; и x←eq⁡(y,z);x \leftarrow \operatorname {eq}(y, z) ;. Последнее изменяет значение xx на 1, если значения yy и zz равны, или на 0 в противном случае. ⊛\circledast

?
Задача 551

Доказать, что для вычисления любой вычислимой функции можно написать структурированную программу без ветвлений. Указание. Сначала показать, что можно написать программу без полных ветвлений. ⊛\circledast

?
Задача 552

Пусть программа П с одной входной переменной xx вычисляет в переменной yy некоторую всюду определённую взаимно однозначную функцию ff, область значений которой совпадает с множеством всех натуральных чисел ω\omega. Пусть Var⁡[Π]={x,y,z1,…,zm}\operatorname {Var}\left[\Pi \right]=\left\{ x, y, z_{1}, \ldots , z_{m}\right\}. Построить программу, которая вычисляет обратную к ff функцию f−1f^{-1} : f−1(y)=xf^{-1}(y)=x, если f(x)=yf(x)=y. ⊛\circledast

?
Задача 553

Пусть ПП — программа и ∣Var⁡[Π]∣=m\left|\operatorname {Var}\left[\Pi \right]\right|=m. Из определений следует, что при различном выборе входных переменных и выходных переменных программа может вычислять различные функции.

?
(а)

Каково максимальное количество функций от n⩽mn \leqslant m переменных, которое может вычислять П? Сколько всего разных функций может вычислить П? Функции, имеющие различное количество аргументов, считаем разными a priori.

(б)

Построить программу Πm,n\Pi_{m, n}, которая вычисляет максимальное количество различных функций от n⩽mn \leqslant m переменных.

(в)

Построить программу Πm,∣Var⁡[Πm]∣=m\Pi_{m},\left|\operatorname {Var}\left[\Pi_{m}\right]\right|=m, которая для каждого n⩽mn \leqslant m вычисляет максимальное количество различных функций от nn переменных. ⊛\circledast

Задача 554

Определить, сколько всего существует попарно неэквивалентных программ с метками, имеющих не более nn операторов и только одну переменную, которая является одновременно входной и выходной. ⊛\circledast

?
Задача 555

Определить, какие всюду определённые функции могут вычисляться программами с метками, которые имеют только одну переменную, являющуюся одновременно входной и выходной, и используют только ветвления и присваивания видов x←s(x)x \leftarrow s(x); и x←dec⁡(x)x \leftarrow \operatorname {dec}(x);. ⊛\circledast

?
Задача 556

Пусть программа с метками содержит только пропозициональные переменные x1,…,xnx_{1}, \ldots , x_{n}, ветвления и присваивания с булевыми связками: xi←xj∧xk;xi←xj∨xk;xi←xj→xk;xi←¬xjx_{i} \leftarrow x_{j} \wedge x_{k} ; x_{i} \leftarrow x_{j} \vee x_{k} ; x_{i} \leftarrow x_{j} \rightarrow x_{k} ; x_{i} \leftarrow \neg x_{j};. Предложить способ, который позволяет определить, какую функцию вычисляет такая программа. ⊛\circledast

?
Задача 557

Доказать, что никакая из функций x+y,x÷y,xyx+y, x \div y, x y и ⌊x/y⌋\lfloor x / y\rfloor не вычисляется никакой структурированной программой без циклов. ⊛\circledast

?