Решение задачи №5 из главы 11. Запоминание двух предыдущих чисел

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

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

var a, b, d, c: integer;
begin
    a:=1; //инициализация переменной
    c:=1; //инициализация переменной
    while (a < 15)and(c < 15) do
    begin
      b:=a;//запоминаем первое введеное число
      d:=c;//запоминаем второе введеное число
      writeln('Vvedite cheloe cislo A i C:');
      readln(a); //вводим первое число
      readln(c); //вводим второе число
      writeln('summa: (b+a)+(d+c): ', (b+a)+(d+c)); //Выводим сумму предыдущего и пред-предыдущего
    end;
    Writeln ('poka!'); // завершаем цикл если условие
    readln(); //Удерживаем консоль
end.     
vedro-compota's picture

(b+a)+(d+c)); //Выводим сумму предыдущего и пред-предыдущего

а почему складываете 4-ре числа-то? в комментарии же сами написали, что два:

предыдущего и пред-предыдущег

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

gani84's picture

var a, b, d, c: integer;
begin
    a:=1; //инициализация переменной

    while (a < 15) do
    begin
      b:=a;//запоминаем первое введеное число
      d:=c;//запоминаем второе введеное число
      writeln('Vvedite cheloe cislo:');
      readln(a); //вводим первое число
      readln(c); //вводим второе число
      writeln('summa: (a+b+d): ', (a+b+d)); //Выводим сумму введеных и ранее введенных чисел
    end;
    Writeln ('poka!'); // завершаем цикл если условие
    readln(); //Удерживаем консоль
end.         
vedro-compota's picture

считывания значения из консоли без комментария writeln-ом быть не должно. Исправляйте.

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

gani84's picture

var a, b, c: integer;
begin
    a:=1; //инициализация переменной
    b:=1;  //инициализация переменной
    while (a < 15) do
    begin
      b:=a;//запоминаем предыдущее введеное число
      c:=b;//запоминаем пред-предыдущее введеное число
      writeln('Vvedite cheloe cislo:');
      readln(a); //вводим первое число
      writeln('summa: (a+b+c): ', (a+b+c)); {Выводим суммы 
      предыдущее введеное число 
      и пред-предыдущее введеное число}
    end;
    Writeln ('poka!'); // завершаем цикл если условие a <15
    readln(); //Удерживаем консоль
end.              
vedro-compota's picture

var a, b, c: integer;
begin
    a:=1; //инициализация переменной
    b:=1;  //инициализация переменной
    while (a < 15) do
    begin
      b:=a;//запоминаем предыдущее введеное число
      c:=b;//запоминаем пред-предыдущее введеное число
      writeln('Vvedite cheloe cislo:');
      readln(a); //вводим первое число
      writeln('summa: (a+b+c): ', (a+b+c)); {Выводим суммы 
      предыдущее введеное число 
      и пред-предыдущее введеное число}
    end;
    Writeln ('poka!'); // завершаем цикл если условие a <15
    readln(); //Удерживаем консоль
end.

ввожу в таком порядке

1
2 // второй виток
3 // третий

в начале третьего витка получу:

b:=a; // теперь =2 (было 1)
с :=b; // тоже =2, т.к. а должно быть 1

-- а это неправильно. "предпредыдущее" значение у вас оказывается таким же как и предыдыдущее

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

gani84's picture

var a, b, c: integer;
begin
    a:=1; //инициализация переменной
    c:=1;  //инициализация переменной

    while (a < 15) do
    begin
      b:=a;//запоминаем предыдущее введеное число
      writeln('Vvedite cheloe cislo:');
      readln(a); //вводим первое число
      writeln('summa:(a+b+c) ' , a, '+', b, '+', c ,'=', a+b+c); {Выводим суммы
      предыдущее введеное число
      и пред-предыдущее введеное число}
      c:=b;//запоминаем пред-предыдущее введеное число
    end;
    Writeln ('poka!'); // завершаем цикл если условие a <15
    readln(); //Удерживаем консоль
end.                   
vedro-compota's picture

в теле цикла у вас было:

b:=a;//запоминаем предыдущее введеное число
c:=b;//запоминаем пред-предыдущее введеное число
writeln('Vvedite cheloe cislo:');
readln(a); //вводим первое число
writeln('summa: (a+b+c): ', (a+b+c));

стало:

b:=a;//запоминаем предыдущее введеное число
writeln('Vvedite cheloe cislo:');
readln(a); //вводим первое число
writeln('summa:(a+b+c) ' , a, '+', b, '+', c ,'=', a+b+c); 
c:=b;//запоминаем пред-предыдущее введеное число

Разве есть какая-то разница? Вы запускали код? Это вообще ничего не меняет.
Проблема указанная ранее сохраняется.

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

gani84's picture

Проверил все работает и условия выполняются

Vvedite cheloe cislo:
0
summa:(a+b+c) 0+1+1=2
Vvedite cheloe cislo:
1
summa:(a+b+c) 1+0+1=2
Vvedite cheloe cislo:
2
summa:(a+b+c) 2+1+0=3
Vvedite cheloe cislo:
3
summa:(a+b+c) 3+2+1=6
Vvedite cheloe cislo:
4
summa:(a+b+c) 4+3+2=9
Vvedite cheloe cislo:
5
summa:(a+b+c) 5+4+3=12
Vvedite cheloe cislo:
6
summa:(a+b+c) 6+5+4=15
vedro-compota's picture

Проверил все работает и условия выполняются

согласен, решение засчитано.

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