Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 39

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 404 >> Следующая


Как и циклы while, циклы for выполняются только в том случае, если проверка условия дает true перед первым проходом цикла, т. е. код, находящийся внутри цикла, может вообще ни разу не выполняться.

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

for (int 1 - if I <=.10; *4)

<

Console.writeLine('CO)i);

>

В этом случае переменная i будет недоступна коду, находящемуся вне цикла (подробнее об этом ем. главу 6, раздел “Область действия переменных").

Давайте рассмотрим пример использования цикла for. Поскольку мы уже достаточно хорошо знакомы с циклами, постараемся сделать его более интересным: в нем будет выводиться множество Мандельброта {Mandelbrot set) (правда, с помощью обыкновенных текстовых символов, что, конечно, выглядит не так захватывающе).
Управление порядком выполнения

71

Практикум: использование цикла 1ог

1. Создайте новое консольное приложение с именем ch04Ex06 D директории C:\BegCSharp\Chapter4.

2. Добавьте следующий код в ciaEsi.es: static void MainfstringU eras)

double realCoord, imagCoordi

double lTemp, imagTemp, гее1Тешр2, argi

int iterationsj

for (imagCoord." 1.3; imagCoord >= -1.2t imagCoord -» 0,05)

(

for (realCoord » -0.6; realCoord <= 1.77; realCoord +¦ 0.03)

{ •

iterations ¦ Of геаГГещр * realCoord;

imagTemp = imagCoordf '

erg = (realCoord • realCoord) + (imagCoord * imagCoord) i

while ((arg < 4) && {iterations < 40))

(

real' mp2 = ( ю lTemp * realTemp) - (imagTemp * imagTemp) - realCoord; imagTemp « (2 * realTemp * imagTemp) - imagCoord; realTemp = realTempS;

arg “ (realTemp * realTemp) + (intagTemp ¦ imagTemp); iterations +* 1;

)

switch (iterations t 4)

(

case 0:

Coneole.Hritet*.*); break; case 1:

Console.Write{'o'); break; case 2;

Console.Write(*0*)i break; case 3:

Console.Write(*8*); break;

)

) •

Console. write('Nn');

)

)

3. Запустите программу (см. рис. справа).

Как это работает

Сейчас мы не будем подробно описывать, каким образом вычисляются множества Мандельброта, однако основные моменты необходимо объяснить для понимання роли циклов в этой программе. Если вы не интересуетесь математикой, то можете смело пропустить следующие два абзаца, поскольку в данном случае самое важное — это понять, как устроена программа.
72 Глава 4

Каждая точка на рисунке Мандельброта соответствует комплексному числу вида n = х + y*i, где х — это действительная часть, у — мнимая часть, a i — корень квадратный из -1. Координаты х и у рисунка соответствуют действительной и мнимой частям комплексного числа.

Для каждой точки рисунка рассматривается аргумент n, который представляет собой корень квадратный нз х*х + у*у. Если это значение больше илн равно 2, то данная позиция имеет значение 0. Если же аргумент числа ы меньше двух, то происходит замена N на n*n - N (что дает N = <х*х - у*у-х) + <2*х*у - y)*i) и снова выполняется проверка числа N. Если это значение оказывается большим или равным 2, позиция, соответствующая этому числу, будет иметь значение 1. Этот процесс продолжается до тех пор, пока данной точке рисунка не удастся присвоить некое число либо пока не будет превышено заранее заданное число итераций.

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

Давайте рассмотрим код н содержащиеся в нем циклы.

В первую очередь мы объявили переменные, необходимые для дальнейших вычислений:

double realCoord, imagCoord,*

double realTemp, imagTemp, realTemp2, erg*

int iterations;

Здесь realCoord и imagCoord представляют действительную н комплексную части числа n, а остальные переменные типа double предназначены для хранения промежуточной информации, получающейся в процессе вычислений. В переменной iterations хранится количество итераций, потребовавшееся для того, чтобы аргумент ы (arg) стал большим илн равным 2,

Далее мы организовали два цикла for, которые позволяют пройти по всем координатам нашего изображения (в них для изменения счетчиков циклов используется более сложный, чем у операторов ++ и —, синтаксис):

for (imagCoord - 1,2; imagCoord >= -1.2! imagCoord -=¦ 0.05)

{

for (realCoord = -0.6; realCoord <= 1.77) realCoord += 0.03)

(

Автор специально подобрал границы, которые позволяют продемонстрировать основную часть множества Мавдельброта. Если у вас возникнет желание “увеличить” это изображение, то можете поэкспериментировать с границами сами.

Внутри этих двух циклов располагается код, относящийся к единственной точке множества Мандельброта н дающий то значение ы, с которым ведется дальнейшая работа. Именно здесь вычисляется количество необходимых итераций и значение символа, выводимого в данной точке.
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.