nextupprevious
Next:3.2.4 Анализ квадратного уравнения
Up:3.2 Построение ветвящихся программ
Previous:3.2.2 Максимум из трех


3.2.3 Табличное задание функции

Задача. Для заданных значений $X,Y,Z$ из отрезка целых чисел [0,1] вычислить значение функции $f(X,Y,Z)$, определяемой следующей таблицей:

Прочерк означает здесь "неважно", т.е. допускаются и 0, и 1.

Решение. Определение функции $f$ можно переписать в следующем виде 

Это немедленно приводит нас к следующей программе:

module ТаблицаРешений1;
    var X,Y,Z : integer;
begin
    read(X,Y,Z); write(' f(', X:1,', ', Y:1, ',', Z:1,')=');
    if (X = 1) and (Z = 0) then writeln('A')
    elsif (X = 0) and (Y = 1) then writeln('B')
    elsif (Y = 0) and ((X = 0) or (Z = 1)) then writeln('C')
    else writeln('D')
    end
end ТаблицаРешений1.

В худшем случае, при $X = Z$ = 1, при выполнении данной программы будет сделано семь проверок на равенство. Для построения более эффективной программы запишем определение функции $f$ несколько другим способом:

$f(X,Y,Z) = g_X(Y,Z),$

где $g_0(Y,Z) = \left\{ \begin{array}{l}'B', \mbox{ если } Y = 1, \\'C', \mbox{ если } Y =0, \\\end{array} \right. $

$g_1(Y,Z) = h_Z(Y),$

где $h_0(Y) = ' A ',$

$h_1(Y) = \left\{ \begin{array}{l}' C ', \mbox{ если } Y = 0, \\' D ', \mbox{ если } Y = 1. \\\end{array} \right.$

Такое определение приводит нас к другой программе:

module ТаблицаРешений2;
var X,Y,Z : Integer;
begin read(X,Y,Z); write(' f(', X:1, ', ', Y:1, ',',', Z:1,')= ');
      if X = 0
      then (*$\{ X = 0 \}$*)
               if Y = 0
               then (*$\{X = Y = 0\}$*) writeln('C')
               else(*$\{X = 0, Y = 1\}$ *) writeln('B')
              end
    elseif(*$\{ X = 1 \}$*) Z = 0  then(*$\{X = 1, Z = 0\}$*) writeln('A')
    elseif (*{X = 1, Z = 1}*) Y = 0   then(*$\{X = Z = 1, Y = 0\}$*) writeln('C')
    else(*$\{X = Z = Y = 1\}$*) writeln('D')
    end
end ТаблицаРешений2.

Эта программа в худшем случае, при $X = Z = 1$, выполняет всего лишь три сравнения.
 

Next:3.2.4 Анализ квадратного уравнения
Up:3.2 Построение ветвящихся программ
Previous:3.2.2 Максимум из трех



© В.Н. Касьянов, Е.В.Касьянова, 2004