Решение задачи №2 из главы 12.1 (Проверка делимости чисел в цикле.)

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

Пользователь вводит целое число, если оно больше единицы, то выведите на экран все целые числа от этого числа до единицы (в обратном порядке), которые делятся на 23 без остатка. Иначе (если введённое пользователем число не больше единицы) сообщите об ошибке.

var i, n: integer;
begin
  writeln('vvedite celoe chislo >1 :');
  readln(n);
  if (n > 1)then
   for i := n downto 1 do
    if ((n mod 23) = 0) then
      write(n, ' ')
  else
    writeln('Ochibka');
  readln();
end.

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

в задачах данного урока, в качестве конструкции для организации цикла (если требуется) используйте repeat-until

У вас же for. Исправляйте.

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

gani84's picture

Решил но не до конца. Не понятно как задать обратный порядок? Просьба подсказать

var i, n: integer;
begin
  writeln('vvedite celoe chislo >1 :');
  readln(n);
  i := 1;
  repeat    // начало тела цикла
    if ((i mod 23) = 0) then
    write(i, ' ');
    i := i + 1; // увеличиваем счетчик на 1
    i:=n;
  until (i > n); // выход из цикла только если счетчик станет больше n
  readln();
end.       
vedro-compota's picture

вы вообще это запускали? где сообщение об ошибке. Решение неверно.

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

gani84's picture

Как задать обратный порядок если не использовать for n downto k

vedro-compota's picture

Как задать обратный порядок если не использовать for n downto k

вы можете использовать downto, это не запрещено ведь, если надо to то to, в обратной ситуации downto. В одной программе может быть много разных циклов в зависимости от того что нужно, а что нужно определяется через if.

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

gani84's picture

Так я решил обратным порядком for down to
Ты говоришь сделай обратный порядок repeat until
Я не знаю как сделать по другому в интернете ничего толкового не нашел
Круг замкнулся

gani84's picture

Решил но не до конца. Не понятно как задать обратный порядок? Просьба подсказать

vedro-compota's picture

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

gani84's picture

var i: integer;
begin
  writeln('vvedite celoe chislo >1 :');
  readln(i);
  repeat    // начало тела цикла
    if ((i mod 23) = 0) then
       write(i, ' ');
       i := i - 1; // уменьшаем счетчик на 1 ---> задаем обратный отсчет
  until (i < 1); // выход из цикла
  readln();
end.                 
vedro-compota's picture

ещё раз прочитайте условие задачи перед тем как присылать ответ. вы не все выполнили.

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

gani84's picture

var i: integer;
begin
  writeln('vvedite celoe chislo >1 :');
  readln(i);
  repeat    // начало тела цикла
     if (i < 1) then //если введеное число меньше 1
       writeln('ochibka')
    else
     if ((i mod 23) = 0) then
       write(i, ' ');
       i := i - 1; // уменьшаем счетчик на 1 ---> задаем обратный отсчет
  until (i < 1); // выход из цикла
  readln();
end. 
vedro-compota's picture

  1. не совсем правильное форматирование.
  2. запутанная логика -- такая программа работает, но проверка понятнее будет смотреться снаружи цикла, а не внутри. Переделайте.

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

gani84's picture

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

Как задать внешнее условие оно же вне тела цикла работать не будет??

vedro-compota's picture

Как задать внешнее условие оно же вне тела цикла работать не будет??

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

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

gani84's picture

var i: integer;
begin
  writeln('vvedite celoe chislo >1 :');
  readln(i);
  if (i < 1) then //если введеное число меньше 1
     writeln('ochibka')
  else
  repeat    // начало тела цикла
     if ((i mod 23) = 0) then
        write(i, ' ');
        i := i - 1; // уменьшаем счетчик на 1 ---> задаем обратный отсчет
  until (i < 1); // выход из цикла
  readln();
end.
vedro-compota's picture

уточните форматирование ветки else, чтобы было понятно как именно вложен цикл.

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

gani84's picture

var i: integer;
begin
  writeln('vvedite celoe chislo >1 :');
  readln(i);
  if (i < 1) then //если введеное число меньше 1
      writeln('ochibka')
  else
      repeat    // начало тела цикла
          if ((i mod 23) = 0) then
             write(i, ' ');
             i := i - 1; // уменьшаем счетчик на 1 ---> задаем обратный отсчет
      until (i < 1); // выход из цикла
  readln();
end.
vedro-compota's picture

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

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