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

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

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

var a, z, b ,minus ,plus , i, znachenie: integer;

begin
  b:=0;
  z:=5;
  plus:=1;
  minus:=-1;

  while z>=0 do
  begin
    znachenie:=minus;
    b:=0;
    for i:= 1 to 4 do
    begin
      writeln('znachenie: ',znachenie,'  b:  ',b  );
      writeln('vvedite chislo: ');
      readln(a);
      if (a<15)and(znachenie=minus) then
        b:=b+znachenie
      else if a>=15 then
        if b<0 then
        begin
          b:=0;
          znachenie:=plus;
          b:=b+znachenie;
        end
        else
        b:=b+znachenie;
    end;
    z:=z+b;
    writeln('z = ',z);
  end;
  writeln(); writeln();
  writeln('<<konec>>');
  readln();
end.
vedro-compota's picture

  • Вложенные циклы не нужны
  • z выводим с очередным значением после каждого введенного пользователем числа

Если вообще не идет - см. разбор

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

var a, z, b ,minus ,plus , i, znachenie: integer;

begin
  z:=5;
  i:=0;
  while z>=0 do
  begin
    writeln('vvedite chislo: ');
    readln(a);
    if (a>=15) then
      i:=4
    else
       i:=i-1;
    if (i>0) then
      z:=z+1
    else
      z:=z-1;
    writeln('z = ',z);
  end;
  writeln(); writeln();
  writeln('<<konec>>');
  readln();
end.