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

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

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

var a, b, c, d, z:integer;
    x: boolean;  // переключатель
begin
  z:= 5;
  x:= true;
  while (1=1) do //делаем бесконечный цикл
  begin
    write('Пользователь: ');
    d:= c; // запоминаем 4-е число
    c:= b; // запоминаем 3-е число
    b:= a; // запоминаем 2-е число
    readln(a); // считываем текущее число
    if (a >= 15) OR  (b >= 15) OR (c >= 15) OR (d >= 15)then //проверка, является ли хотя бы одно из 4-х последних чисел большим или равным 15
      x:= true // если условие верно, переключатель в истинном положении
    else
      x:= false; // если условие неверно, переключатель в ложном положении
    if (x) then // если переключатель в истинном положении
      z:= z + 1 // прибавляем 1 к исходному числу
    else begin  // если переключатель в ложном положении
      z:= z - 1;  // вычитаем 1 от исходного числа
      if (z < 0) then // проверяем z на отрицательность
        break;  // прерываем цикл, когда z становится отрицательным
    end;
   writeln ('Ответ: ', z);
  end;
  readln();
end. 

Вывод в консоли:

Пользователь: 4
Ответ: 4
Пользователь: 34
Ответ: 5
Пользователь: 3
Ответ: 6
Пользователь: 5
Ответ: 7
Пользователь: 4
Ответ: 8
Пользователь: 2
Ответ: 7
Пользователь: 15
Ответ: 8
Пользователь: 5
Ответ: 9
Пользователь:

vedro-compota's picture

d:= c; // запоминаем 4-е число
    c:= b; // запоминаем 3-е число
    b:= a; // запоминаем 2-е число

-- тут надо опираться на счетчик, а не на N переменных, т.е. если бы было "сто попыток" - код не должен был бы увеличиться

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

var a, i, z : integer; // а - введенное число, i - счетчик введенных чисел, больших или равных 15
begin
  z:= 5;
  while ( z < 100) do
  begin
    write('Пользователь: ');
    readln(a);               // считываем введенное число
      if (a >= 15) then      // если введенное число больше либо равно 15
        i:= 4                // счетчик "поднимаем" до 4
      else if (a < 15) then  // если введенное число меньше 15
          i:= i-1;           // из счетчика вычитаем 1
      if i>0 then            // если счетчик больше 0
        z:= z + 1            // прибавляем 1 к z
      else begin             // если счетчик 0 или меньше
        z:= z - 1;           // вычитаем 1 из z
        if (z < 0) then      // после вычитания сразу проверяем z на отрицательность
          break;             // прерываем цикл, если z становится отрицательны
      end;
    writeln ('Ответ: ', z);
  end;
  readln();
end. 

Вывод в консоли:

Пользователь: 2
Ответ: 4
Пользователь: 44
Ответ: 5
Пользователь: 3
Ответ: 6
Пользователь: 5
Ответ: 7
Пользователь: -7
Ответ: 8
Пользователь: 3
Ответ: 7
Пользователь: 5
Ответ: 6
Пользователь: 44
Ответ: 7
Пользователь: 11
Ответ: 8
Пользователь:

vedro-compota's picture

засчитано

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