Глава 18

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

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

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

?
(а)

dec⁡(x)=⌊x−1⌋\operatorname {dec}(x)=\lfloor x-1\rfloor, где ⌊0−1⌋=0\lfloor 0-1\rfloor =0 и ⌊(x+1)−1⌋=x\lfloor (x+1)-1\rfloor =x;

(б)

sub⁡(x,y)=⌊x−y⌋\operatorname {sub}(x, y)=\lfloor x-y\rfloor, где ⌊x−y⌋=x−y\lfloor x-y\rfloor =x-y, если x⩾yx \geqslant y, и ⌊x−y⌋=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)=⌊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.

Задача 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 при 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}

Задача 283

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

?
Задача 284

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

?
(а)

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

(б)

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

(в)

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

Задача 285

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

?
Задача 286

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

?
Задача 287

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

?
Задача 288

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

?