Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Операторы цикла do и while

Читайте также:
  1. After while, the phone ring.
  2. Agashort interval, aimsirtime-period, amtime,bealach track,fadlength, idir an dб linnin the meanwhile,idir 1 страница
  3. Agashort interval, aimsirtime-period, amtime,bealach track,fadlength, idir an dб linnin the meanwhile,idir 2 страница
  4. Agashort interval, aimsirtime-period, amtime,bealach track,fadlength, idir an dб linnin the meanwhile,idir 3 страница
  5. Agashort interval, aimsirtime-period, amtime,bealach track,fadlength, idir an dб linnin the meanwhile,idir 4 страница
  6. Break; - прерывание цикла.
  7. E) Pick out the theatrical terms you came across while reading the passage. Translate them into Ukrainian. Do it in writing.

Это, пожалуй, наиболее простые операторы в MAXScript. В общем виде они записываются так.

do группа операторов while логическое выражение

while логическое выражение do группа операторов

Рассмотрим пример

x = 0

s = 0

while x < 100 do

(x = x + 1

s = s + x

)

Таким образом можно подсчитать сумму целых чисел от 1 до 99. В приведенном скрипте оператор цикла работает так. Сначала подсчитывается значение логического выражения, стоящего после while. Если это значение равно true, то выполняется группа операторов после do, затем снова вычисляется логическое выражение while и т.д. При этом на совести программиста остается обязанность следить за тем, чтобы условие, стоящее после while хотя бы когда-нибудь получило значение false. В противном случае 3ds max зависнет и его придется выгружать насильно. Вторая форма этого оператора, когда сначала стоит do, а затем while, отличается от первой порядком выполнения.

x = 0

s = 0

do

(x = x + 1

s = s + x

) while x < 100

Сначала выполняется группа операторов, затем проверяется условие после while. Для приведенного примера это не дает никаких изменений, но бывают случаи, когда это важно. Представим себе такой случай

x = 100

s = 0

while x < 100 do

(x = x + 1

s = s + x

)

Условие проверяется, и, поскольку оно сразу false, группа операторов не выполнится ни разу. Изменим форму цикла

x = 100

s = 0

do

(x = x + 1

s = s + x

) while x < 100

Группа операторов выполнится один раз, затем проверяется условие. Убедившись, что оно равно false, программа завершает цикл. Разница налицо – в первом случае группа операторов не выполнилась ни разу, во втором один раз.

 

Цикл for

В MAXScript цикл for имеет большую гибкость, нежели в других языках программирования. Это достигается благодаря разным формам его записи. Вот первая из них

for имя переменной = начальное значение to конечное значение do выражение

Имя переменной – это действительно имя переменной, выражение – простое или блоковое выражение, начальное значение – любое выражение, а вот конечное значение может быть организовано довольно хитро. Самый простой случай, например такой

s = 0

for i = 1 to 100 do s = s + i

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

s = 0

for i = 1 to 100 by 2 do s = s + i

Подсчитает нам сумму всех нечетных чисел от 1 до 99. И, наконец, можно указать дополнительное условие в виде логического выражения после ключевого слова where. В этом случае группа операторов будет выполняться, только если это выражение будет иметь значение true.

s = 0

for i = 1 to 100 by 2 where i!= 13 do s = s + i

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

Вторая форма записи цикла for применяется, главным образом, для того, чтобы перебрать все элементы какого-нибудь набора и выглядит примерно так

for имя переменной in набор do выражение

В качестве набора может выступать массив, группа объектов сцены 3ds max или выражение, возвращающее группу объектов. О разного рода наборах объектов речь еще будет вестись подробно, а пока разберем пример

a = #(1, “txt”, 3, $box01, 7, 11)

for i in a do print i

Цикл выводит на экран все элементы массива a, который содержит разнотипные элементы, при этом не выясняя размерность массива. Справедливости ради следует отметить, что это можно было сделать и при помощи первой формы цикла for.

for i = 1 to a.count do print a[i]

Но вторая форма компактнее. А вот если надо, например, подсчитать общую высоту всех объектов, содержащихся в сцене, то вторая форма записи являет свое преимущество в полном блеске

h = 0

for b in $* do h + = b.height

Во второй форме так же можно применять дополнительное условие с ключевым словом where. Усложнив задачу, предположим, что надо подсчитать общую высоту всех стандартных примитивов Box.

h = 0

for b in $* where classof b = = Box do h + = b.height

В обеих формах записи вместо ключевого слова do, может применяться слово collect. В этом случае в качестве результата выполнения оператор for вернет массив значений. Его размерность будет равна количеству выполнения выражения, следующего за collect, а значения элементов будут равны тем значениям, которые это выражение возвращает. Предположим, нам надо собрать в один массив радиусы всех примитивов Sphere, чтобы вычислить их средний радиус, а затем установить этот радиус для всех сфер в сцене. Эту задачу можно решить так

ArrayR = for b in $* where classof b = = Sphere collect b.radius

R = 0

for rr in ArrayR do R+ = rr

R / = ArrayR.count

for b in $* where classof b = = Sphere do b.radius = R

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

 


Дата добавления: 2015-10-31; просмотров: 101 | Нарушение авторских прав


Читайте в этой же книге: С чего начать | Области видимости | Выделение памяти и уборка мусора | Литералы имен объектов | Литералы массивов | Выражения сравнения | Блоковые выражения | Контекстные выражения | Символьные строки | Логические (Булевы) значения |
<== предыдущая страница | следующая страница ==>
Каскадирование префиксов| Создание функций, локальных внутри структуры

mybiblioteka.su - 2015-2024 год. (0.007 сек.)