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

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

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

var i: integer;
begin
  i := 35;
  repeat    // начало тела цикла
    if ((i mod 3)=0) and ((i mod 7)=0) then // проверяем условия
      write(i, ' ');
        i := i + 1; // увеличиваем счетчик на 1
  until (i > 117); // выход из цикла только если счетчик станет больше n
  readln();
end.  
Решение №2
var i, n: integer;
begin
  i := 35;
  repeat    // начало тела цикла
    if ((i mod 3)=0) and ((i mod 7)=0) then // проверяем условия
      write(i, ' ');
        i := i + 1; // увеличиваем счетчик на 1
  until (i > 117); // выход из цикла только если счетчик станет больше n
  writeln();
  n := 45;
  repeat    // начало тела цикла
    if ((n mod 3)=0) and ((n mod 7)=0) then // проверяем условия
      write(n, ' ');
        n := n + 1; // увеличиваем счетчик на 1
  until (n > 99);
  readln();
end.
vedro-compota's picture

в первом решение должно быть два цикла, а во втором один общий с логическим условием.
Невнимательно вы условие задачи читали. Исправляйте.

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

gani84's picture

Решение №1

var i, n: integer;
begin
  i := 35;
  repeat    // начало тела цикла
    if ((i mod 3)=0) and ((i mod 7)=0) then // проверяем условия
      write(i, ' ');
        i := i + 1; // увеличиваем счетчик на 1
  until (i > 117); // выход из цикла только если счетчик станет больше n
  writeln();
  n := 45;
  repeat    // начало тела цикла
    if ((n mod 3)=0) and ((n mod 7)=0) then // проверяем условия
      write(n, ' ');
        n := n + 1; // увеличиваем счетчик на 1
  until (n > 99);
  readln();
end.
Решение №2
var i: integer;
begin
  i := 35;
  repeat    // начало тела цикла
    if ((i mod 3)=0) and ((i mod 7)=0) then // проверяем условия
      write(i, ' ');
        i := i + 1; // увеличиваем счетчик на 1
  until (i > 117); // выход из цикла только если счетчик станет больше n
  readln();
end.
vedro-compota's picture

  1. i := 35;
      repeat    // начало тела цикла
        if ((i mod 3)=0) and ((i mod 7)=0) then // проверяем условия
          write(i, ' ');
            i := i + 1; // увеличиваем счетчик на 1
      until (i > 117);
    

    И где тут условие для четных чисел? Вам нужно в первом диапазоне вывести какие числа? (прочитайте условие внимательно)

  2. Из-за первого замечание второе решение тоже неправильно, там как раз вяся суть и словность в том что диапазоны пересекаются, а условия разные. Сначала исправьте первое решение, а потом думайте над вторым.

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