Глава 18

Алгоритмы и программы

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

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

?
(а)

dec(x)=x1\operatorname {dec}(x)=\lfloor x-1\rfloor, где 01=0\lfloor 0-1\rfloor =0 и (x+1)1=x\lfloor (x+1)-1\rfloor =x;

(б)

sub(x,y)=xy\operatorname {sub}(x, y)=\lfloor x-y\rfloor, где xy=xy\lfloor x-y\rfloor =x-y, если xyx \geqslant y, и xy=0\lfloor x-y\rfloor =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)=logyx\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.

Задача 281

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

?
Задача 282

Построить программы, вычисляющие в переменной 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 при log2(x+1)y,xy в противном случае; 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 при log2xy+2,xy/2 в противном случае; f_{3}(x, y)= \begin{cases} \lfloor x y / 2\rfloor & \text{ при } \log_{2} x \leqslant y+2, \\ x^{\lfloor y / 2\rfloor } & \text{ в противном случае; }\end{cases}

(г)

f4(x,y)={log3(x+y+1) при 2xy3+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}

Задача 283

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

?
Задача 284

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

?
(а)

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

(б)

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

(в)

Построить программу Πm,VΠm=m\Pi_{m},\left|\boldsymbol {V}_{\Pi_{m}}\right|=m, которая для каждого nmn \leqslant m вычисляет максимальное количество различных функций от nn переменных.

Задача 285

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

?
Задача 286

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

?
Задача 287

Определить, какие всюду определённые функции могут вычисляться ограниченными программами с метками, которые имеют только одну переменную, являющуюся одновременно входной и выходной.

?
Задача 288

Пусть программа с метками содержит только пропозициональные переменные x1,,xnx_{1}, \ldots , x_{n} и присваивания с булевыми связками (аналогично линейным программ из параграфа 13.2). Предложить способ, который позволяет определить, какую функцию вычисляет такая программа.

?