Решение задачи №4 из главы 11

Задача №4 из главы 11

Решите с помощью цикла while:
Выведите на экран, все четные числа от 35 до 117 и нечетные числа, лежащие в диапазоне от 45 до 99.
Указание: сначала можно решить задачу двумя циклами, но потом перепишите с использованием одного цикла, в теле которого составьте логическое выражение, описывающее подходящие числа (используйте логические операции).

Решение №1

var i:integer;
begin
  writeln('Ot 35 do 117');
  i := 35; // начальное значение счетчика(диапозона)
  while i <= 117 do //проверка выражения
  begin
    i:=i + 1;  //задаем шаг
    if (i mod 2) = 0 then   //если четное
      write(i, ' '); // выводим в одну строку с пробелом
  end;
  writeln();
  writeln('Ot 45 do 99');
    i :=45; // начальное значение счетчика(диапозона)
    while i <= 99 do  //проверка выражения
  begin
    i:=i+1;  //задаем шаг
    if (i mod 2) = 1 then  //если нечетное
    write(i, ' ');
  end;
  readln();
end.
Решение №2
var i:integer;
begin
  writeln('Ot 35 do 117');
  i := 35; // начальное значение счетчика(диапозона)
  while i <= 117 do //проверка выражения
  begin
    i:=i + 1;  //задаем шаг
    if  (i mod 2) = 0 then   //если четное
      write(i, ' ') // выводим в одну строку с пробелом
    else
      if ((i >= 45) AND (i <= 99) // если принадлежит отрезку [45..99]
       AND ((i mod 2) = 1)) then // и если нечетное
         write(i, ' ');
  end;
  readln();
end.  
vedro-compota's picture

в обеих задачах начинаете с 36, 35 не проверяете. Исправляйте.

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

gani84's picture

Там задано условие if (i mod 2) = 0 then. А 35 не делиться на цело это же не просто перебор от 35 до 117 еще а задается условие if (i mod 2) = 0 . Считаю ответ верным.

vedro-compota's picture

35 не делиться на цело

хорошо, что вы это знаете, но тем не менее, переделайте код так, чтобы 35 тоже проверялось, ведь это могла бы быть переменная (т.е. число которое вы заранее не знаете). Замечание связано с предыдущим.

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

gani84's picture

Решение №1

var i:integer;
begin
  writeln('Ot 35 do 117');
  i := 34; // начальное значение счетчика(диапозона)
  while i <= 117 do //проверка выражения
  begin
    i:=i + 1;  //задаем шаг
    if (i mod 2) = 0 then   //если четное
      write(i, ' '); // выводим в одну строку с пробелом
  end;
  writeln();
  writeln('Ot 45 do 99');
    i :=44; // начальное значение счетчика(диапозона)
    while i <= 99 do  //проверка выражения
  begin
    i:=i+1;  //задаем шаг
    if (i mod 2) = 1 then  //если нечетное
    write(i, ' ');
  end;
  readln();
end.
Решение №2
var i:integer;
begin
  writeln('Ot 35 do 117');
  i := 34; // начальное значение счетчика (диапазона)
  while i <= 117 do //проверка выражения
  begin
    i:=i + 1;  //задаем шаг
    if  (i mod 2) = 0 then   //если четное
      write(i, ' ') // выводим в одну строку с пробелом
    else
      if ((i >= 45) AND (i <= 99) // если принадлежит отрезку [45..99]
       AND ((i mod 2) = 1)) then // и если нечетное
         write(i, ' ');
  end;
  readln();
end.
vedro-compota's picture

решение засчитано.

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