Учимся программировать вместе с Processing
Вложенные циклы
Если вложить один цикл for в другой, количество повторений перемножается.
Для начала рассмотрим небольшой пример, а затем реализуем его по частям в примере 1
Пример 1.
size(480, 120); background(0); smooth(); noStroke(); for (int y = 0; y <= height; y += 40) { //добавить комментарий println(“ y= “,y); for (int x = 0; x <= width; x += 40) {//добавить комментарий println(“ x= “,x); fill(255, 140); ellipse(x, y, 40, 40); //добавить комментарий } } |
|
|
Пример 2: Ряды и колонки
В этом примере циклы for расположены рядом, а не вложены один в другой.
Результат выполнения программы показывает, что один цикл for рисует колонку из 4 кругов, другой ряд из 13 кругов
size(480, 120); // height=120, width=480 background(0); smooth(); noStroke(); for (int y = 0; y < height+45; y += 40) { fill(255, 140); ellipse(0, y, 40, 40); println(“ y= “,y,” height +45= “,height +45); } for (int x = 0; x < width+45; x += 40) { println(“ x= “,x,” width+45= “,width+45 ); fill(255, 140); ellipse(x, 0, 40, 40); } |
|
|
|
Пример 3. Коррекция кода примера 2.
Если вложить один цикл for в другой, как в примере 1,тогда:
-
4 итерации первого цикла будут содержать 13 итераций второго,
и
-
в результате блок кода внутри циклов будет запущен 52 раза (4x13 = 52).
Задание 1. Найти ошибку в коде проекта
size(480, 120); // height=120, width=480 background(0); smooth(); noStroke(); for (int y = 0; y < height+45; y += 40) { fill(255,140); ellipse(0, y, 40, 40); println(" y= ",y); for (int x = 0; x < width+45; x += 40){ fill(255,140); ellipse(x, 0, 40, 40); println(" x= ",x); } } |
|
Требуется: Имеем: |
Пример 4 является хорошим шаблоном для создания рисунков с повторяющимися элементами. В следующих примерах мы покажем, как их можно модифицировать, но это будет всего лишь небольшая часть из того, что вы можете делать с циклом for.
Пример 5. Точки и линии
Код в примере рисует линию от каждой точки до центра экрана.
size(480, 120); background(0); smooth(); fill(255); stroke(102); for (int y = 20; y <= height-20; y += 20) // height-20 = 100 { for (int x = 20; x <= width-20; x += 10) // width-20 = 460 { println(" y= ", y, " x= ",x); ellipse(x, y, 4, 4); line(x, y, 240, 60); // Рисуем линии к центру экрана } } |
for (int y = 20; y <= height-20; y += 20) // height-20 = 100 { for (int x = 20; x <= width-20; x += 40) // width-20 = 460 { println(" y= ", y, " x= ",x); ellipse(x, y, 4, 4); line(x, y, 240, 60); // Рисуем линии к центру экрана } }
|
Задание 2. Найти изменение в коде проекта, которые позволили получить следующий результат:
|
Варианты выполнения примера.
Сокирко Виталий. 2019год void setup() smooth(); for (int y = 20; y <= height-20; y += 20) // height-20 = 100 for (int x = 20; x <= width-20; x += 10) // width-20 = 460 { ellipse(x, y, 4, 4); line(x, y, 240, 60); // Рисуем линии к центру экрана |
|
Зайченко Юля 2019 год void setup() for (int x = 20; x <= width-20; x += 50) // width-20 = 460 { ellipse(x, y, 8, 8); line(x, y, 240, 60); // Рисуем линии к центру экрана |
Пример 5. Точки и полутона
В примере 5 с каждой строкой происходит уменьшение размеров эллипсов и сдвиг их вправо с помощью сложения y- координаты и x-координаты.
int z; size(480, 120); background(0); smooth(); for (int y = 32; y <= 120; y += 8) { z= 16 - round(y/10); //println(" y = ", y, " z = ",z); for (int x = 12; x <= 480; x += 15) { ellipse(x + y, y, z, z); //println( " x = ",x); //ellipse(x + y, y, 16 – y/10, 16 – y/10); } } |
int z; size(480, 120); background(0); smooth(); for ( int y = 32; y <= 120; y += 16) { z= 16 - round(y/10); println(" y = ", y, " z = ",z); for (int x = 12; x <= 480; x += 30) { ellipse(x + y, y, z, z); println( " x = ",x); //ellipse(x + y, y, 16 – y%10, 16 – y%10); } } |
|