вторник, 17 апреля 2012 г.

Часть В (В7)

Ниже приведены тексты одной и той же программы, записанные на четырех языках программирования. Что будет напечатано в результате выполнения этой программы? (Рассмотрим на Паскале)


Program Task;
Uses crt;
const L = 4;
type
    atype = array [1..L] of integer;
Var R : atype;
N, p : integer;
     Procedure Pr1(L : integer; var R : atype );
     var i,n,t : integer;
      begin
      for i:=1 to L do
      begin
        t:=(R[i] div 2)*4;
       R[i]:=t mod 5;
       end;
     end;

   Function F1 (L : integer; R: atype) : integer;
  Var N, i, T : integer;
  begin
  N:=1;
  T:=1;
  for i:=1 to L do
  begin
  N:=N*R[i]+T;
  T:=T+2;
  end;
  F1:=N;
  end;

BEGIN
R[1]:=5; R[2]:=9; R[3]:=6; R[4]:=2;
Pr1(L, R);
N:=F1(L,R);
write(N);
writeln;
END.
Решение:
Мы с вами имеем дело с одномерным массивом R размерностью 4, т.е. всего элементов в массиве 4.
Программа включает в себя вспомогательные алгоритмы (процедура Pr1 и функция F1).
Рассмотрим, что делает каждый их них.
(1) Процедура Pr1: изменяет элементы массива следующим образом: берет элемент массива, находит целую часть от деления на 2, результат умножает на 4 ( t:=(R[i] div 2)*4). Все это хранится в переменной t. Далее этому элементу массива дается новое значение - остаток от деления переменной t на 5 (R[i]:=t mod 5). Так пост/упают с каждым элементом массива.
(2) Функция F1: подсчитывает значение переменной F1(имя самой функции). В конечном итоге переменная F1=N. Выясним как вычисляется значение переменной N. Изначально N=1, T=1. Рассматривается массив целых чисел R поэлементно. Каждый раз при просмотре следующего элемента массива изменяются переменные N и T (N:=N*R[i]+T;  T:=T+2): то, что было в переменной N умножают на элемент массива и прибавляют значение переменной T; увеличивают значение T на 2. Цикл выполняется 4 раза для четырех элементов массива R. На выходе мы получаем переменную N и успешно её значение присваиваем переменной F1.
  Основная программа:
BEGIN
R[1]:=5; R[2]:=9; R[3]:=6; R[4]:=2;
Pr1(L, R);
N:=F1(L,R);
write(N);
writeln;
END.
Формируется массив R.
i            1       2      3      4
R[i]       5       9      6      2
Вызывается процедура Pr1 для массива R. Изменяются элементы массива  (1). Рассмотрю только для 1-го элемента.
i=1, R[1]=5
t=(R[1] div 2)*4=(5 div 2)*4=2*4=8
R[1]=t mod 5=8 mod 5=3         
Массив R: i            1       2      3      4
             R[i]            3       1      2      4
Вызываем функцию F1 и переменной N присваиваем значение F1 (2):
i        1                            2                           3                          4
N 1    1*3+1=4           4*1+3=7             7*2+5=19              19*4+7=83
T 1    1+2=3               3+2=5                 5+2=7                    7+2=9
F1:=N, т.е. на выходе функция F1 имеет значение 83, которое в основной программе и получает переменная N.
Выводим переменную  N.
Ответ: 83

Комментариев нет:

Отправить комментарий