Найти в Дзене
Плохой Программист

Ряд ромбиков в Кумире

Задача такая - нарисовать ряд ромбиков. Тут очевидно, что нужно нарисовать ромб, отступить клетку и повторить так несколько раз. Для этого исользуется цикл. Тут все просто "использовать Чертежник" - необходимо, чтобы программа начала узнавать команды Чертежника. "алг" - служебное слово, которое подсказывает, что тут сейчас будет некоторый алгоритм. смысловой нагрузки для самой программы тут нет, это просто правило оформления "нач ... кон" - парные служебные слова, которые тоже являются обязательным оформлением, показывают где начало и где конец алгоритма А дальше уже идет конретно решение поставленной задачи Суть чертежника в том, что нам дают координатную плоскость и позволяют на ней чертить несколькими командами. В частности - мы можем перенестись в конкретную точку и может нарисовать вектор. "сместиться в точку" - команда, которая позволяет нам встать в любую точку на координатной плоскости. И задавать в нее мы будем конкретные координаты по оси х и по оси у. Т.е. вот что бы нам

Задача такая - нарисовать ряд ромбиков.

Тут очевидно, что нужно нарисовать ромб, отступить клетку и повторить так несколько раз.

Для этого исользуется цикл.

-2

Тут все просто

"использовать Чертежник" - необходимо, чтобы программа начала узнавать команды Чертежника.

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

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

А дальше уже идет конретно решение поставленной задачи

-3

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

"сместиться в точку" - команда, которая позволяет нам встать в любую точку на координатной плоскости. И задавать в нее мы будем конкретные координаты по оси х и по оси у.

Т.е. вот что бы нам встать в начальную точку из которой мы начнем дальнейшее повествование, нужно написать.

сместиться в точку (1,2)

При поднятом пере наш чертежник просто переместится в точку с координами х=1 и у=2, при опущенном начертит линию от своего предыдущего положения к этой заданной точке.

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

Тут тоже ничего сложного

"нц N раз" начало цикла, где N - количество нужных повторов

"кц" конец цикла

В теле цикла мы первым делом опускаем перо, потому что хотим оставлять след, а не просто поводить ручкой над листком и оставить его чистым.

Далее идет серия коварных команд

"сместиться на вектор"

В чем коварство? А в том, что точка у нас устанавливалась в конкретные координаты, а тут все не так. Тут мы будем показывать на сколько сместить новую точку относительно предыдущей.

-4

Вот у нас уже есть точка номер 1, которую мы установили командой "сместиться в точку" в координаты х=1 и у=2.

Теперь мы хотим в точку 2. И мы уже не задаем ее координаты, мы просто показываем как нам нужно сместиться относительно точки 1. Мы смещаемся правее и выше, поэтому и х и у у нас увеличиваются.

"сместиться на вектор (1, 2)" - помним, что сейчас мы в точке с координатами х=1 и у=2, а после смещения мы очутимся в точке х=1+1 и у=2+2, т.е. х=2 и у=4

Далее нужно попасть в точку 3. Правее, но ниже, поэтому х увеличивается, а у уменьшается.

"сместиться на вектор (1, -2)" - координаты точки 2 х=2 и у=4, поэтому после смещения мы окажемся в точке 3 с координатами х=2+1 и у=4-2. Получаем х=3 и у=2.

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

"сместиться на вектор (-1, -2)" - координаты точки 3 х=3 и у=2, поэтому после смещения мы оказываемся в точке 4 с координатами х=3-1 и у=2-2. Получаем х=2 и у=0.

А теперь необходимо вернуться в точку 1, чтобы замкнуть фигуру. Помним, что её координаты х=1 и у=2, мы сейчас в х=2 и у=0. Поэтому нужно сместиться по х на -1, а по у на +2.

"сместиться на вектор (-1, 2)"

Теперь поднимаем перо, потому что рисовать больше не нужно, а нужно установить начальную точку для следующего ромбика.

-5

Нужно переместиться из точки 1 в точку 2, для этого по у мы не сдвигаемся, а по х продвигаемся вперед на 3 пункта.

"сместиться на вектор (3, 0)"

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

И казалось бы все - задача решена. Но. Я знаю какими будут следующие задания ) поэтому сразу предложу еще один вариант решения с помощью процедуры.

-6

Здесь все то же самое, только в теле цикла мы вызываем не те 100500 команд, которые вызывали раньше, а конкретную и понятную процедуру "ромб", в которой те 100500 команд, которые раньше были в цикле.

Но я сейчас смотрю на код и понимаю, что не права.

Нужно сделать немного иначе.

-7

Почему так лучше?

Потому что когда мы рисуем ромб, нам интересен только ромб, нам вообще не важно сколько нужно отступать до следующего.

Теперь наш код понятен, в него проще вносить правки, потому что сразу видно какой кусок кода за что отвечает.

А можно сделать лучше? Да!

-8

Задать алгоритму "ромб" переменные х и у. "цел" - означает целочисленные.

Т.е. теперь если нам когда-нибудь нужно будет написать программу с ромбами других размеров, нам не нужно писать новую программу, мы заходим вот в эту и просто немного подкручиваем.

-9

Если вы дочитали до конца - это здорово. Если не совсем поняли смысл - не страшно.

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

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