Решение задачи №2 из главы 11

Задача №2 из главы 11

Пользователь вводит целые числа. Пока он не введёт число большее 15, в ответ на каждое введённое число выводите сумму этого числа и предыдущего введённого им числа, если же введённое число больше 15, то цикл необходимо завершить.
Первое введенное пользователем число можно сложить с единицей.

var i:integer;
begin
  i:=1; // начинаем цикл
  while (i < 15) do //проверяем условие цикла
  begin
    writeln('Vvedite cislo');
    readln(i);//считываем его из потока ввода
    writeln(i+1);
    writeln(i+i);

  end;
   writeln('Cikl zaverhen'); //завершаем цикл (i < 15)
   readln();
end.  
vedro-compota's picture

решение неправильно.

writeln(i+1);
writeln(i+i);

это вы выводите в каждом витке сумму только что введенного числа и только что введнённого, а не предыдущего, и сумму с единицей каждый раз почему-то, хотя надо только первый.

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

gani84's picture

Я не совсем понимаю

выводите сумму этого числа и предыдущего введённого им числа

и ни где не написано об этом. Я об этом писал http://fkn.ktu10.com/?q=node/10301

vedro-compota's picture

и вам ответили, хранить предыдущее число надо в отдельной переменной её.

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

gani84's picture

var i,a:integer;
begin
  i:=1; // начинаем цикл
  while (i < 15) do //проверяем условие цикла
  begin
    writeln('Vvedite cisla a, i');
    readln(i);//считываем его из потока ввода
    readln(a);
    writeln(i+1);
    writeln(i+a);

  end;
   writeln('Cikl zaverhen'); //завершаем цикл (i < 15)
   readln();
end.    
vedro-compota's picture

если пользователь водил числа

1 2 23 5

Вы должны были в ответ, соответственно вывести (в скобках пояснение):

2 (1 + 1)
3 (2 + 1)
25 (23 + 2)
28 (5 + 23)

Понятно ли это? Проверьте так ли работает ваша программа.

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

gani84's picture

Да условие выполняется только надо вбивать меньше 15 а то цикл завершиться потому что есть условие while (i

vedro-compota's picture

да, вы правы

readln(i);//считываем его из потока ввода
readln(a);

но вот это уже неправильно. Сразу после введния первого числа должен приходить ответ, т.е. начало, если я ввел 2 должно выглядеть так (2 +1 второе в ответ):

2
3

а у вас ожидание ввода для второй переменной.

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

gani84's picture

var i,a:integer;
begin
  i:=0; // начинаем цикл
  while (i < 15) do //проверяем условие цикла
  begin
    writeln('Vvedite cisla a, i');
    readln(a);//считываем его из потока ввода
    writeln(a+1);
    readln(i);
    writeln(i+a);
  end;
   writeln('Cikl zaverhen'); //завершаем цикл (i < 15)
   readln();
end.  
vedro-compota's picture

если ввести а > 15 -- работа продолжится, будет запрошено следующее число, а это неправильно по условию.

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

gani84's picture

Тогда не знаю. Как это решить!!!

vedro-compota's picture

Добавлено видео-пояснение к задаче с запоминанием "предыдущих введнных значений": https://youtu.be/L_MKZ8xsQVo

Задавайте вопросы, если там что-то неясно.

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

gani84's picture

Все ясно теперь понял!!!