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

11. While

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

var a,b,z:integer;
begin
a:=0; 
b:=0; // переключатель
z:=5;
while (z >= 0) do
  begin
    writeln('write integer num ');
    readln(a);
    if (a = 77) then
        b:= 77;
    if (a = 55) then
        b:= 55;
    if (b = 77) then
      begin
        z:= z - 1;
        writeln('counter: ', z)
      end;
    if ((b = 55) OR (b = 0)) then
      begin
        z:= z + 1;
        writeln('counter: ', z)
      end;
  end;
readln();
end.   
//write integer num
//1
//counter: 6
//write integer num
//55
//counter: 7
//write integer num
//2
//counter: 8
//write integer num
//77
//counter: 7
//write integer num
//3
//counter: 6
//write integer num
//5
//counter: 5
//write integer num   
vedro-compota's picture

1)

 writeln('counter: ', z)

-- дублирование кода
2) Переделать проверку

if (b = 77)

на использование булевской переменной (т.к. тут бинарное состояние)

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

var a,z:integer;
    x: boolean;
begin
z:=5;
x:=true; // переключатель
while (z >= 0) do
  begin
    writeln('write integer num ');
    readln(a);
    if (a = 77) then
        x:= true;
    if (a = 55) then
        x:= false;
    if (x) then
        z:= z + 1
    else
        z:= z - 1;
   writeln('counter: ', z);
  end;
readln();
end.