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

11. While

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

var a,b,c,d: integer;
begin
  a:=1; b:=1; c:=1;
  d:=1; // переключатель для while
  while (d <> 0) do
    begin
      writeln('write integer num');
      read(a);
      if (Odd(a) AND (a < 0))  then
        begin
          if c < 0 then
            begin
              writeln('a , b , c is ', a,' ', b,' ', c);
              readln(); readln();
              d:=0;
            end;
          if b < 0 then
            begin
              c := b;
              b := a;
            end;
        b := a; // предыдущее
        end
    end;
end.
//write integer num
//-1
//write integer num
//-3
//write integer num
//5
//write integer num
//2
//write integer num
//-5
//a , b , c is -5 -3 -1     
vedro-compota's picture

замечания:

  1.  while (d <> 0) do
    

    -- отдельная переменная не нужна, условие выхода из цикла можно описать явно, базируясь на непосредственной проверке переменных-хранилищ

  2.  if b < 0 then
                begin
                  c := b;
                  b := a;
    

    -- обмен значений в этой задаче не требуется

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

var a,b,c,p: integer;
begin
  p:=3;  // собираем отрицательные числа
  while (p<>0) do
    begin
      writeln('write integer num');
      read(a);
      if (Odd(a) AND (a < 0))  then
        begin
          if (p=3) then
              c:=a;
          if (p=2) then
              b:=a;
          if (p=1) then
            begin
              writeln('a,b,c is ', a,' ', b,' ', c);
              readln(); readln();
            end;
          p:= p-1;
        end;
    end
end.