Задача 16 Урок 11 While

11. While

16 {У вас есть число z=5. Пользователь вводит числа в цикле,
если за последние 4 попытки ввода было хотя бы одно число больше или равно 15,
то увеличивайте число z на 1 в ответ на каждое введенное число,
а если такого числа не было, то уменьшайте на 1 в ответ на каждый ввод.
Цикл и программа должны завершиться, когда число z станет отрицательным.}

var a,b,c,d,e,z:integer;
begin
a:=0; b:=0; c:=0; d:=0; e:=0; z:=5;
while (z >= 0) do
  begin
    writeln('write integer num ');
    readln(a);
    e:=d;
    d:=c;
    c:=b;
    b:=a;
    if ((b >= 15) OR (c >= 15) OR (d >= 15) OR (e >= 15)) then
      begin
        z:= z + 1;
        writeln('counter: ', z);
        //writeln(b, ' ',c, ' ',d, ' ',e, ' ');
      end
    else
      begin
        z:= z - 1;
        writeln('counter: ', z);
        //writeln(b, ' ',c, ' ',d, ' ',e, ' ');
      end;
  end;
readln();
end. 
//write integer num
//1
//counter: 4
//write integer num
//2
//counter: 3
//write integer num
//16
//counter: 4
//write integer num
//1
//counter: 5
//write integer num
//2
//counter: 6
//write integer num
//3
//counter: 7
//write integer num
//4
//counter: 6
//write integer num
//22
//counter: 7
//write integer num  
vedro-compota's picture

замечания:

  • число переменных не должно зависеть от числа "просматриваемых" в прошлом попыток

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

var a,p,z:integer;
    x:boolean;
begin
x:=false; // флаг
z:=5;
p:=4; // кол-во попыток
while (z >= 0) do
  begin
    writeln('write integer num ');
    readln(a);
    if (a >= 15) then
      x:=true;
    if (x) then
      begin
        p:= p - 1;
        z:= z + 1;
      end
    else
      z:= z - 1;
    if (p = 0) then
      begin
        p:=4;
        x:=false;
      end;
    writeln('counter: ', z);
  end;
readln();  readln();
end.