Задача 5 Урок 11

http://fkn.ktu10.com/?q=node/7341

Модификация одной из пред. задач: Пользователь вводит целые числа. Пока он не введёт число большее 15, в ответ на каждое введённое число выводите сумму этого числа и двух предыдущих введённых им чисел (предыдущего и пред-предыдущего), если же введённое число больше 15, то цикл необходимо завершить.
В первом витке цикла все "предыдущие" числа можно считать единицами.

var s, i, k, E, Q, W: integer;
begin
  i := 0;
  s := 0;
  k := 2;
  Q := 0;
  W := 0;
  E := 0;
  while(i < 15) do
      begin
       writeln('vvedi celoe chislo:');
       readln(i);
       if((k mod 2)=0) then
         begin
          E := Q + W;
          Q := i
         end
       else
         begin
          E := Q + W;
          W := i
         end;
       k := k + 1;
       if(i < 15) then
         begin
          if((k mod 2)=0) then
            begin
             s := E + i;
             writeln('summ1 = ',s);
            end
          else
            begin
             s := E + i;
             writeln('summ2 = ',s);
            end;
         end;
      end;
  writeln('bb');
  readln();
end.
vedro-compota's picture

i := 0; // 
  s := 0;
  k := 2;
  Q := 0;
  W := 0;
  E := 0;

-- написать комментарии на назначение переменных

_____________
матфак вгу и остальная классика =)

var s, i, k, E, Q, W: integer;
begin
  i := 0; // то что вводит пользователь
  s := 0; // вывод в консоль суммы  нового числа и СУММЫ двух предыдущих в "E"
  k := 2; // чет/нечет для записи суммы предедущего и пред-предыдущего в разные переменные
  Q := 0; // пред-предыдущая переменная. := 0 тк еще неизвестно ее значение(не введено)
  W := 0; // предыдущая переменная     := 0 тк еще неизвестно ее значение(не введено)
  E := 0; // сумма пред-предудущей и предыдущей чисел  := 0 тк еще нечего складывать
  while(i < 15) do
      begin
       writeln('vvedi celoe chislo:');
       readln(i);
       if((k mod 2)=0) then  // В первой итерации и последующих(через одну) запись чисел идет в "E" и "Q"
         begin
          E := Q + W;
          Q := i
         end
       else   // Во второй итерации и последующих(через одну) запись чисел идет в "E" и "W"
         begin
          E := Q + W;
          W := i
         end;
       k := k + 1;   // меняем четность "к" чтобы перезаписывать Q W E как заложено в цикле выше
       if(i < 15) then // условие чтобы избежать лишней(последней) итерации(и вывода суммы) при окончании общего цикла.
         begin
             s := E + i;
             writeln('summ = ',s);
         end;
      end;
  writeln('bb');
  readln();
end. 
vedro-compota's picture

E := Q + W;

-- дублирование кода

_____________
матфак вгу и остальная классика =)

var s, i, E, Q, W: integer;
  k :boolean;
begin
  i := 0; // то что вводит пользователь
  s := 0; // вывод в консоль суммы  нового числа и СУММЫ двух предыдущих в "E"
  k := true; //  для записи суммы предедущего и пред-предыдущего в разные переменные
  Q := 0; // пред-предыдущая переменная. := 0 тк еще неизвестно ее значение(не введено)
  W := 0; // предыдущая переменная     := 0 тк еще неизвестно ее значение(не введено)
  E := 0; // сумма пред-предудущей и предыдущей чисел  := 0 тк еще нечего складывать
  while(i < 15) do
      begin
       writeln('vvedi celoe chislo:');
       readln(i);
       E := Q + W;
       if(k) then  // В первой итерации и последующих(через одну) запись чисел идет в "Q"
         begin
          Q := i;
          k := false;
         end
       else   // Во второй итерации и последующих(через одну) запись чисел идет в "W"
         begin
          W := i;
          k := true;
         end;
       if(i < 15) then // условие чтобы избежать лишней(последней) итерации(и вывода суммы) при окончании общего цикла.
         begin
             s := E + i;
             writeln('summ = ',s);
         end;
      end;
  writeln('bb');
  readln();
end.   
vedro-compota's picture

переделать с обменом переменных

_____________
матфак вгу и остальная классика =)

0

var W, i, Q :integer;

begin
  i := 0;
    while(i <= 15) do
      begin
        W := i;
        writeln('vvedi celoe chislo ');
        readln(i);
        if(i <= 15) then
          writeln('morelast(',Q,') + ','last(',W,') + ','new(',i,') = ',Q + W + i);
          Q := W;
      end;
  readln();
end. 
vedro-compota's picture

решение засчитано

_____________
матфак вгу и остальная классика =)