Формирование задержки с помощью таймера



 

Графические конструкции иногда требуется рассматривать дина-мически в процессе их построения. Поэтому зачастую используется та-кая схема вывода графики:

1. Вывод графического элемента.

2. Задержка на n миллисекунд.

 

3. Повторение 1 и 2 этапа до вывода всех графических элементов.

 

Реализация задержки с помощью таймера возможна следующим способом:

 

// Глобальное поле flag

 

private bool flag = false;

 

...

 

// Далее следует часть программы,

// где необходимо организовать задержку

 

// Включаем таймер

 

timer1.Enabled = true;

// Устанавливаем flag в значение true flag = true;

 

// Организуем бесконечный цикл

while (flag);

// Выключаем таймер после выхода из цикла timer1.Enabled = false;

 

// Обработчик тика таймера

 

private void timer1_Tick_1(object sender, EventArgs e)

 

{

// Сбрасываем flag в значение false flag = false;

 

}


 

98


 

Идея данного подхода заключается в организации бесконечного цик-ла, который будет проверять значение некого флага. Однако значение фла-га может измениться при наступлении события Tick таймера, то есть через заданный в таймере промежуток времени. Однако бесконечный цикл, опи-санный выше, останется бесконечным, и программа просто зависнет. В чем же дело? Дело в том, что при такой организации цикла программа не мо-жет опросить очередь сообщений, в которое и будет поступать, в том чис-ле, и событие Tick от таймера. Тем самым мы не попадем никогда в обра-ботчик события timer1_Tick_1. Чтобы решить данную проблему, надо

 

в теле цикла написать Application.DoEvents(), что фактически будет за-ставлять приложение опрашивать очередь сообщений и в свою очередь приведет к срабатыванию обработчика события timer1_Tick_1.

Перед выполнением индивидуального задания по лабораторной ра-боте разработайте приложение, строящее ряд увеличивающихся квадра-тов (рис. 14.2). Квадраты выводятся последовательно через одну секунду.

 

Индивидуальное задание

 

1. Напишите приложение, которое строит ряд окружностей. Центр окружностей совпадает с центром экрана. Число окружностей за-дается при первом вызове рекурсивного метода.

 

 

2. Напишите приложение, которое строит ряд квадратов. Центр квадратов совпадает с центром экрана. Число квадратов задается при первом вызове рекурсивного метода.


 

99


 

3. Напишите приложение, которое строит ряд окружностей по диагонали. Число окружностей задается при первом вызове рекур-сивного метода.

 

4. Напишите приложение, которое строит ряд увеличивающихся окружностей по диагонали. Число окружностей задается при первом вызове рекурсивного метода.

 

 

5. Напишите приложение, которое строит ряд окружностей, цен-тры которых лежат на окружности. Число окружностей задается при первом вызове рекурсивного метода.


 

 

100

 

6. Напишите приложение, которое строит ряд квадратов, центры которых лежат на окружности. Число квадратов задается при первом вызове рекурсивного метода.

 

7. Напишите приложение, которое строит ряд увеличивающихся окружностей, центры которых лежат на окружности. Число окружно-стей задается при первом вызове рекурсивного метода.

 

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

 

9. Вычислить, используя рекурсию, выражение:

 

 6 + 2 ×  7 + 3×  8 + 4 ×  9 + ...


 

101


 

10. Напишите приложение, которое строит ряд окружностей. Чис-ло окружностей удваивается на каждом шаге (в рекурсивном методе происходит два рекурсивных вызова). Центры окружностей выбираются каждый раз произвольно (случайно). Линии связывают центры окруж-ностей «предка» и «порожденных» от нее. Число рекурсий задается при первом вызове рекурсивного метода.

 

11. Напишите приложение, которое строит ряд увеличивающихся ок-ружностей. Число окружностей удваивается на каждом шаге (в рекурсивном методе происходит два рекурсивных вызова). Центры окружностей выбира-ются каждый раз произвольно (случайно). Толщина линий также увеличива-ется. Число рекурсий задается при первом вызове рекурсивного метода.

 

12. Напишите приложение, которое строит ряд уменьшающихся окружностей. Число окружностей удваивается на каждом шаге (в рекур-сивном методе происходит два рекурсивных вызова). Число рекурсий задается при первом вызове рекурсивного метода.


 

 

102


 

13. Напишите приложение, которое строит приведенное ниже изо-бражение. Число рекурсий задается при первом вызове рекурсивного метода. На каждом шаге число окружностей увеличивается в четыре раза (в рекурсивном методе происходит четыре рекурсивных вызова).

 

14. Постройте ковер Серпинского.

 

15. Разработайте программу построения треугольника Серпинского.

 

16. Реализуйте программу визуализации построения первых n ша-гов множества Кантора.


 

103


 

17. Реализуйте рекурсивный алгоритм вычисления n-го числа Фи-боначчи.

18. Реализуйте рекурсивный алгоритм вычисления n-го факториала.

 

19. Реализуйте рекурсивный подсчет суммы всех элементов масси-ва. Сумма элементов массива считается по следующему алгоритму: массив делится пополам, подсчитываются и складываются суммы эле-ментов в каждой половине. Сумма элементов в половине массива под-считывается по тому же алгоритму, то есть снова путем деления попо-лам. Деления происходят, пока в получившихся кусках массива не окажется по одному элементу и вычисление суммы, соответственно, не станет тривиальным.

20. Дана монотонная последовательность, в которой каждое нату-ральное число k встречается ровно k раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, … По данному натуральному n выведите первые n членов этой последова-тельности.


 

 

104


 

 

ЛАБОРАТОРНАЯ РАБОТА № 15.

 

СОРТИРОВКА И ПОИСК

 

Цель лабораторной работы: освоить основные алгоритмы сорти-ровки, написать программу с использованием этих алгоритмов.

 

Общие понятия

 

Сортировка –это процесс упорядочения элементов массива илисписка по возрастанию или убыванию.

 

Существует много алгоритмов сортировки, отличающихся по ряду характеристик:

· Время работы,или вычислительная сложность, –количество опе-

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

· Затрачиваемая память (помимо исходного массива) –некоторые ал-горитмы требуют выделения дополнительной памяти для временного хранения данных или формирования нового выходного массива.

 

Кроме того, алгоритмы можно разделить по типу доступа к данным:

 

· Алгоритмы внутренней сортировки применяются для сортировки данных, целиком находящихся в оперативной памяти.

 

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

 


Дата добавления: 2020-04-08; просмотров: 589; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!