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

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

Пользователь вводит целые числа в цикле (разные: четные, нечетные, положительные, отрицательные в любом порядке и количестве). Сохраните в переменные первые три отрицательных нечетных числа, сложите их, выведите сумму на экран и завершите цикл.

var a, b, c, x: integer;
begin
  while (1=1) do // делаем бесконечный цикл
  begin
    write ('Введите число: ');
    readln(x); // считываем введенное число
      if (x mod 2 = -1) then // если при делении на 2 в остатке -1, значит число было отрицательным и нечетным
      begin
        c := b; // пред-предыдущее число
        b := a; // предыдущее число
        a := x; // текущее число
        if (c<>0) then //проверяем, заполнялась ли последняя переменная
           begin
             write (a, ' + (', b, ') + (', c, ') = ', a+b+c); // выводим на экран
             break; // прерываем цикл
           end;
      end;
  end;
  readln();
end. 

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

Введите число: 5
Введите число: 0
Введите число: 11
Введите число: -1
Введите число: -22
Введите число: 3
Введите число: -5
Введите число: -7
-7 + (-5) + (-1) = -13

vedro-compota's picture

решить без обмена

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

var a, i, s : integer; // а - введенное число, i - счетчик отрицательных введенных чисел, s - сумма
begin
  while (i < 3) do          // цикл работает, пока счетчик не дойдет до 3
  begin
    write('Пользователь: ');
    readln(a);              // считываем введенное число
    if (a < 0) then         // проверяем введенное число на отрицательность
    begin
      s:=s+a;               // если отрицательно - добавляем к сумме
      i:=i+1;               // и увеличиваем счетчик
    end;
  end;
    writeln ('Ответ: ', s); // когда счетчик не сработет (дойдет до 3), последнее значение s выведется на экран
  readln();
end.  

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

Пользователь: 54
Пользователь: 0
Пользователь: -11
Пользователь: 3
Пользователь: 0
Пользователь: -2
Пользователь: 7
Пользователь: -2
Ответ: -15

vedro-compota's picture

обмена быть не должно, но значения трех переменных должны храниться отдельно

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

var a, b, c, i: integer;         // три переменные и счетчик цикла
begin
  while (i<=2) do                // цикл действует, пока счетчик не превысит 2
  begin
    write ('Введите число: ');
    if (i=0)then                 // вложенные условия, проверяем значения счетчика
      readln(a)
    else if (i=1)then
        readln(b)
      else if (i=2)then
          readln(c);
                 {вложенные условия, проверяем значения счетчика,
                  введенное число считываем в ту или иную переменную,
                  в зависимости от значения счетчика}
    if (i=0) and (a mod 2 = -1) or (i=1) and (b mod 2 = -1) or (i=2) and (c mod 2 = -1) then
      i:= i+1;
                 {т.е. текущая переменная перезаписывается,
                  пока пользователь не введет отриц-е неч-е число,
                  тогда счетчик увеличивается и переходим на следующую переменную}
  end;
  write (a, ' + (', b, ') + (', c, ') = ', a+b+c); // выводим на экран
  readln();
end.      

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

Введите число: 6
Введите число: -1
Введите число: 0
Введите число: -2
Введите число: -3
Введите число: 5
Введите число: -3
-1 + (-3) + (-3) = -7

vedro-compota's picture

if (i=0) and (a mod 2 = -1) or (i=1) and (b mod 2 = -1) or (i=2) and (c mod 2 = -1) then
      i:= i+1;
                 {т.е. текущая переменная перезаписывается,
                  пока пользователь не введет отриц-е неч-е число,
                  тогда счетчик увеличивается и переходим на следующую переменную}
  • Значение значение надо сначала проверить, а потом уже выбирать в какую переменную записать

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

var a, b, c, i: integer;       // три переменные и счетчик цикла
begin
  while (i<=2) do              // цикл действует, пока счетчик не превысит 2
  begin
    write ('Введите число: ');
    readln(c);                 // считываем пока всё в третью переменную
    if (c mod 2 = -1) then     // проверяем на отрицательность и нечетность
    begin
      i:= i+1;                 // увеличиваем счетчик, если условие верно
      if (i=1) then            // выбираем переменную в зависимости от счетчика
        a:=c
      else if (i=2)then
          b:=c;
    end;                       //при i=3 переменная с уже будет записана
  end;
  write (a, ' + (', b, ') + (', c, ') = ', a+b+c); // выводим на экран
  readln();
end.  

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

Введите число: -1
Введите число: 4
Введите число: -8
Введите число: -3
Введите число: -3
-1 + (-3) + (-3) = -7

vedro-compota's picture

засчитано

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