При решении задачи 16 урок 13.1

При решении задачи 16 урок 13.1

Пользователь вводит целое положительное числоN, если оно не соответствует критериям (то есть не является положительным), выведете сообщение об ошибке, в противном случае выведите на экран все числа последовательности, не большие N, сформированной следующим образом:

8 10 3 12 14 3 16 18 3 20 22 3 и т.д.

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

Не получается вывести цифру 3 как показано на примере.

var   i,j,b,m,n, a:integer;
begin
   writeln('vvedite chislo n:');
       readln(n);
   if n <= 0 then // проверка что т больше или равно "0"
       write('oshibka')
   else
       i:=8;   // задем переменную i
       j:=3;   // задем переменную j
           write(i, ' ');
       while i <=  n do // задаем цикл который работает пока i меньше n
           begin   // тело цикла
               if ((i mod 3)=0)  then // проверяем деление на 3 без остатка
                   write(j, ' '); // при делении без остатка выводим j
               i:= i + 2; // шаг цикла
                   write(i, ' '); // вывод циклической переменной
               write()
           end;
    readln();
end.         

Получается только так.

vvedite chislo n:
22
8 10 12 3 14 16 18 3 20 22 24

vedro-compota's picture

Не получается вывести цифру 3 как показано на примере.

как понимаете, проблема в:

if ((i mod 3)=0)  then // проверяем деление на 3 без остатка
            write(j, ' ');

вы неправильно задаете условие, ну или думаете, что счет начинается с единицы в данном случае, а чем у нас равно значение неинициализированного целого числа?
-- это по поводу первой ошибки с тройкой.

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

Также некоторые строки отформатированы неверно, но в целом наличие мысли тут чувствуется)

Но вы решаете задачу так, будто у вас вот это:

для порядкового номера числа и для самого очередного числа используется одна и та же переменная

-- поставлено как обязательное условие решения задачи. Сначала я бы решил без такого ограничения.

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

Я понимал что условие у нас начинается с 8, моя ошибка что я думал что условием

if ((i mod 3)=0)  then

он проверяет 3 строку.
С помощью подсказки вывел закономерность чисел и вывел результат.

var   i,j,n:integer;
begin
   writeln('vvedite chislo n:');
       readln(n);
   if n <= 0 then // проверка что т больше или равно "0"
       write('oshibka')
   else
       i:=8;   // задем переменную i
       j:=3;   // задем переменную j
           write(i, ' ');
       while i <=  n do // задаем цикл который работает пока i меньше n
           begin   // тело цикла
               if ((i mod 4)=2)  then
                   write(j, ' ');
               i:= i + 2;
                   write(i, ' ');
               write()
           end;
    readln();
end.             

Не могу правильно определить место для вывода цифры 3.

var   i,j,n,m,a,b,c:integer;
begin
   writeln('vvedite chislo n:');
       readln(n);
   if n <= 0 then // проверка что т больше или равно "0"
       write('oshibka')
   else
     c:=3;
    for i := 1 to n do
      begin   // тело цикла
          if ((i mod 2)=0)then //выделяю 2-ю нечетные строки
              write(i,' ');     // вывод 2,4,6,
          if ((i mod 3)=0)then   //    выделяю 3-ю нечетные строки
          //if ((i mod 4)=2)  then
              write(c,' ');   //    вывод 3
      end;
    readln();
end.             
vedro-compota's picture

//выделяю 2-ю нечетные строки

какие такие нечетные строки?

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

я делением на 2 без остатка ,определяю нечетные строки и их вывожу.