Файл: Практикум по информатике рекомендовано в качестве учебного пособия.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.03.2024

Просмотров: 336

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ИЗУЧЕНИЕ СРЕДЫ РАЗРАБОТКИ VISUAL STUDIO

Настройка формы

Размещение надписей

Запуск и работа с программой

Индивидуальные задания

Структура приложения

Работа с проектом

Ввод/вывод данных в программу

Пример написания программы

Выполнение индивидуального задания

Логические переменные и операции над ними

Индивидуальные задания

Операторы организации циклов

Цикл с параметром

Порядок выполнения задания

Индивидуальные задания

Классы и объекты

Область видимости

Сведения, передаваемые в событие

Индивидуальные задания

Строковый тип данных

Порядок выполнения индивидуального задания

Индивидуальные задания

Работа с массивами

Случайные числа

Индивидуальные задания

Двухмерные массивы

Индивидуальные задания

Как строится график с помощью элемента управления Chart

Выполнение индивидуального задания

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

Движение по траектории

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

Отображение графических файлов

Простой графический редактор

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

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

Параметры по умолчанию

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

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

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

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

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

Быстрая сортировка

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

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ ПОВЫШЕННОЙ СЛОЖНОСТИ

ПРИЛОЖЕНИЕ 1. СВОЙСТВА ЭЛЕМЕНТОВ УПРАВЛЕНИЯ

ПРИЛОЖЕНИЕ 2. СОБЫТИЯ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ

ПРИЛОЖЕНИЕ 3. МЕТОДЫ ДЛЯ РАБОТЫ СО СТРОКАМИ

ПРИЛОЖЕНИЕ 4. МЕТОДЫ ДЛЯ РАБОТЫ С МАССИВАМИ

СПИСОК ЛИТЕРАТУРЫ

соотношение между вычисляемыми в методе значениями.

Рассмотрим пример кода для создания набора самоподобныхструктур. В нашем случае это будет набор увеличивающихся квадра- тов (рис. 14.2).




Рис.14.2.Наборквадратов

При проектировании данной программы были созданы два метода:

private void MyDraw(Graphics g, int N, int x, int y)

{

if (N == 0)

return;

else

{

}

// Отрисовка прямоугольника

g.DrawRectangle(new Pen(Brushes.Blue, 2),

0, 0, x, y);

// Увеличение x и y на 50 x += 50;

y += 50;

N‐‐;

// Рекурсивный вызов с новыми параметрами

MyDraw(g, N, x, y);

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

// Первый вызов метода и вход в рекурсию

MyDraw(g, 7, 50, 50);

}

Координаты левого верхнего угла всех прямоугольников неизмен- ны и находятся в точке (0, 0). Поэтому в параметрах метода MyDraw дос- таточно передавать x и y для правого нижнего угла. Также в параметрах передается N, значение которой определяет текущую вложенность ре- курсии (сколько вызовов рекурсии еще будет).
    1. 1   ...   33   34   35   36   37   38   39   40   ...   45

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


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

    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;

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

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

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

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


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

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



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




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




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




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

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




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

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



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



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



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



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

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