Решение задачи №5 из главы 10

Задача №5 из главы 10

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

Решение №1 (решаем двумя циклами)

var i:integer; //объявляем переменную счетчика
begin
  writeln('Vyvodim na ekran vse chetnye chisla ot 35 do 117');
  for i:=35 to 117 do // цикл по [35..117]
    if ((i mod 2) = 0) then // выводим все четные числа
     write(i, ' ');//выводим в одну строку через пробел
  writeln();
  writeln('Vyvodim na ekran vse nechetnye chisla ot 45 do 99');
  for i:=45 to 99 do // цикл по [45..99]
    if ((i mod 2) = 1) then // выводим все четные числа
     write(i, ' ');//выводим в одну строку через пробел
  readln(); // удерживаем консоль
end. 
Решение №2 (решаем одним циклом)
var i:integer;
begin


  for i:=35 to 117 do // цикл по диапазону [35..178]
   begin
      if ((i >= 45) AND (i <= 99) // если принадлежит отрезку [45..99]
          AND ((i mod 2) = 1)) then // и если не четные
           write(i, ' ')
      else       //четные числа
        if ((i >= 35) // если принадлежит отрезку [35..117]
          AND ((i mod 2) = 0)) then // и если четное
            write(i, ' ')
   end;
   readln();
end. 
vedro-compota's picture

первое решение принято.

Во второму решению:
условие (в блоке else if)

((i >= 35)

лишнее. Объясните почему и приведите в комментарии более оптимальное решение.

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

gani84's picture

Да мы тут используем уже целый диапазон получается
((i >= 35) потому что он задан в начале
for i:=35 to 117 do // цикл по диапазону [35..178]

var i:integer;
begin
  for i:=35 to 117 do // цикл по диапазону [35..178]
   begin
      if ((i >= 45) AND (i <= 99) // если принадлежит отрезку [45..99]
       AND ((i mod 2) = 1)) then // и если не четные
        write(i, ' ')
      else       //четные числа
       if (i mod 2) = 0 then // если принадлежит отрезку [35..117] и если четное
        write(i, ' ');
   end;
readln();
end.    
vedro-compota's picture

теперь верно, решение засчитано.

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