Задача 20 урок 13.1

Задача 20 урок 13.1

Модифицируйте предыдущий вывод "ёлочкой" так, чтобы в каждой нечетной строке выводились только четные числа, а в каждой четной только нечетные, например для N=17:

3
4 6
7 9 
12 14
15 17

Способ №1 (1 цикл)

program task_20_lesson_13_1;
var i, n, l, c, str : integer;
begin
     readln(n);
     c := 0;   // счетчик к-ва чисел в строке
     l := 1;   // максимальное кол-во чисел в строке
     i := 1;   // число из последовательности ограниченное N
     str := 1; // первая строка
     while i <= n do
           begin
             if ((str mod 2) = 1)and((i mod 2) = 0) then
                write(i,' ');
             if ((str mod 2) = 0)and((i mod 2) = 1) then
                write(i,' ');
             i += 1;          // увеличиваем следующее число
             c += 1;

             if (c = l) then    // проверка на кол-во чисел в строке
                begin
                  writeln();
                  str := str + 1;  //считаю строки (начал с 1, когда объявил переменную)
                  l += 1;
                  c := 0;
                end;
           end;
     readln();
end.  

Способ №2 (Вложенный цикл)

program task_19_lesson_13_1;
var i, j, n, c, str : integer;
begin
     readln(n);
     c := 0;                     // кол-во элементов в строке
     i := 1;
     j := 1;                     // максимальное кол-во элементов в строке
     str := 1;
     while (i <= n) do
           begin
           repeat
                 if ((str mod 2) = 1)and((i mod 2) = 0) then
                    write(i,' ');
                 if ((str mod 2) = 0)and((i mod 2) = 1) then
                    write(i,' ');
                 i := i + 1;
                 c := c + 1;         // кол-во элементов в строке растет
           until (c >= j) or (i > n);  // проверка перехода на след строку
           writeln();
           str += 1;
           j := j + 1;               // прирост в следующей строке
           c := 0;                   // обнуляем счетчик чисел в строке
           end;
     readln();
end. 
vedro-compota's picture

if ((str mod 2) = 1)and((i mod 2) = 0) then
                write(i,' ');
             if ((str mod 2) = 0)and((i mod 2) = 1) then
                write(i,' ');

-- проверить не нужен ли между проверками else

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

да "else" нужен , так ка избавляет от дополнительной проверки первого условия

program task_19_lesson_13_1;
var i, j, n, c, str : integer;
begin
     readln(n);
     c := 0;                     // кол-во элементов в строке
     i := 1;
     j := 1;                     // максимальное кол-во элементов в строке
     str := 1;
     while (i <= n) do
           begin
           repeat
                 if ((str mod 2) = 1)and((i mod 2) = 0) then
                    write(i,' ')
                 else if ((str mod 2) = 0)and((i mod 2) = 1) then
                    write(i,' ');
                 i := i + 1;
                 c := c + 1;         // кол-во элементов в строке растет
           until (c >= j) or (i > n);  // проверка перехода на след строку
           writeln();
           str += 1;
           j := j + 1;               // прирост в следующей строке
           c := 0;                   // обнуляем счетчик чисел в строке
           end;
     readln();
end.
vedro-compota's picture

также посмотреть решение задачи 9 урока 9 http://fkn.ktu10.com/?q=node/8539

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

Есть программа, где стоит проверка на ввод пользователем числа 1 или числа 5:

var s:integer;
begin
  writeln('Vvedite chislo 1 ili 5');
  readln(s);
  if (s = 1) then
    writeln('soobchenie 1');
  if (s = 5) then
    writeln('soobchenie 2');
  readln();
end;
-- но сейчас код написан неоптимально и при каждом запуске выполняется 2 сравнения, при этом код можно переписать так, что при вводе одного из двух значений, которые приводят к выводу сообщения, сравнение будет выполняться только один раз.
program task9_lesson9;
var s:integer;
begin
    writeln('Vvedite chislo 1 ili 5');
    readln(s);
    if (s = 1) then
       writeln('soobchenie 1');
    else
        if (s = 5) then
           writeln('soobchenie 2');
    readln();
end.