4790

Графика в системе программирования TP-6

Лекция

Информатика, кибернетика и программирование

Графика в системе программирования TP-6. Графический экран. Виды графических адаптеров. Графический модуль GRAPH. Задача построения графика функции. Работа с текстами и ввод-вывод в графическом экране. Рекурсивные описания в графике. Работа ...

Русский

2012-11-27

86 KB

3 чел.

Графика в системе программирования TP-6.

1.Графический экран. Виды графических адаптеров. Графический модуль GRAPH.

2.Задача построения графика функции. Работа с текстами и ввод-вывод в графическом экране.

3.Рекурсивные описания в графике.

4.Работа со страницами и фрагментами.

5.Задачи и упражнения.

Задачи вычислительной геометрии.

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

Модуль (UNIT) - это совокупность (библиотека) описаний констант, типов данных, переменных, процедур и функций. Каждый модуль представляет собой по существу самостоятельную программу на Паскале: он может содержать несколько исполняемых операторов, вызываемых перед запуском программы, и осуществлять всю необходимую инициализацию. Средства, описанные в модуле, можно использовать в программе. Модуль можно компилировать отдельно.  Для того, чтобы включить модули в программу, необходимо описать их в специальном разделе описаний Uses. Синтаксическое описание этого раздела имеет вид:

Uses <список модулей>; {необязательный параметр}

Все описания внутри модуля обычно взаимосвязаны. Например, стандартный внешний модуль CRT содержит средства, поддерживающие взаимодействие программы с экраном монитора в алфавитно-цифровом режиме (текстовый экран). Модуль GRAPH предназначен для взаимодействия программы с экраном в графическом режиме (графический экран).

1.Графический экран. Виды графических адаптеров.

Элементарной единицей информации, выводимой в графическом режиме на экран, является точка, окрашенная в некоторый цвет. Эта точка называется пикселом. Положение пиксела на экране определяется в декартовой системе координат (рис 1) Отметим непривычное направление оси OY: она направлена из левого верхнего угла экрана вниз.

        X

                 0

   Y

                

Таким образом, каждый пиксел описывается тремя параметрами:

( X, Y, C ) где C - цвет пиксела.

X - целое число из интервала [ 0 ... GetMaxX];

Y - целое число из интервала [ 0 ... GetMaxY];

C - целое число из интервала [ 0 ... GetMaxColors]

где GetMaxX,  GetMaxY,  GetMaxColors - констант, описанные в модуле GRAPH.

Диапазоны допустимых значений X, Y, C определяются техническими характеристиками аппаратуры компьютера, операционной системой и настройкой программы на один из возможных режимов использования модуля GRAPH - инициализацией графики. Подробные сведения об инициализации графики содержатся в документации системы программирования.

Система программирования Turbo-Pascal в MS-DOS поддерживает, в частности, следующие графические режимы:

Видеоадаптер

GetMaxX

GetMaxY

GetMaxColor

Драйвер

CGA

320

200

4 из 16

CGA.BGI

MCGA

320

200

16 из 256

CGA.BGI

EGA

640

200

16 из 256

EGAVGA.BGI

EGA

640

350

16 из 256

EGAVGA.BGI

VGA

640

480

16 из 256

EGAVGA.BGI

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

InitGraph( < гр.адаптер >, < режим гр.др >, < путь > );

Переход в текстовый режим осуществляется оператором CloseGraph.

Таким образом, программа, использующая графику, имеет вид:

Program MyGraph;

    Uses Graph;

     Var grDriver, grMode, errCode: Integer;

    ............

   Begin

     grDriver := Detect;

     InitGraph(grDriver, grMode, ‘<путь к драйверу >’); { пример пути: D:\PasSys6\BGI }

   .............

   End.

Константа Detect определена в модуле GRAPH. Ее значение равно 0. Detect указывает системе на необходимость подключения драйвера графики, соответствующего типу адаптера дисплея.

Графический модуль GRAPH содержит несколько десятков (более 50) процедур и функций, каждая из которых описана в документации системы и доступна программисту по команде HELP.

Поэтому мы приведем только некоторые сведения о GRAPH.

Константы:

процедуры Bar3D;

процедуры PutImage;

отсечения, цветов, стиля линий и ширины;

стиля текста;

графические драйверы и графические режимы драйверов;

шаблонов заполнения;

......................................................

Типы:

ArcCoordsType

FillPatternType

FillSettingsType

LineSettingsType

PaletteType

PointType

TextSettingsTtype

......................................................

Процедуры и функции:

Графические примитивы:

PutPixel, GetPixel, GetX, GetY,

Line, LineTo, Move, Bar, DrawPoly, Rectangle, ...

Arc, Circle, Ellipse, ...

Обработка цветов:

GetColor; GetPixel, GetBkColor, ...

SetColor, SetBkColor, SetPalette,...

Установка стиля рисования:  SetLineStyle, SetFillStile, ...

Обработка текста:  OutText, OutTextXY, TextWidth, SetTextStyle, ...

Обработка графического экрана:  SetActivePage, PutImage, GetImage, SetViewPort,...

Процедура PutPixel(X, Y, C), например, окрашивает точку (X,Y) экрана в цвет C. Одновременно графический курсор помещается в эту точку.

Процедура Line(X1,Y1, X2,Y2, C) рисует отрезок AB цветом C.  A = (X1, Y1), B = (X2, Y2). В модуле описаны несколько процедур рисования отрезка. Они применяются в специальных случаях.

2.Задача построения графика функции.

В качестве примера применения графических средств рассмотрим задачу построения графика функции y = f(x). Построение графика функции предполагает как минимум:

Построение окна с оформленной системой координат;

Построение кривой y = f(x) в окне;

Оформление необходимых надписей.

а) Оформление системы координат.

Окно системы координат определяется параметрами:

(Un, Vn) - координаты левого верхнего угла окна;

(Uk, Vk) - координаты правого нижнего угла окна;

(Uо, Vo) - координаты начала координат;

Mx, My - масштабы системы координат по x и y.  

Все значения параметров должны быть определены в компьютерной системе координат (в координатах пикселов). При этом (Un, Vn), (Uk, Vk) - константы (неподвижное окно), а (Uо, Vo), M вычисляются, исходя из данных, вводимых пользователем.  На практике пользователь чаще всего указывает границы изменения переменных x, y - (Xn, Xk), (Yn, Yk). Значения M, Uo, Vo небходимо вычислить перед построением системы координат.

Для простоты мы будем предполагать, что Xn<0<Xk, Yn<0<Yk.  Тогда начало системы координат попадет в окно графика. В противном случае нужно программировать несколько специальных вариантов размещения осей координат.

Mx = [(Uk - Un)/(Xk - Xn)],

My = [(Vk - Vn)/(Yk - Yn)],

Uo = Uk - [Mx*Xk], Vo = Vn + [My*Yk];

Используя эти формулы, напишем требуемую процедуру:

Procedure WinGraf(Xn, Xk, Yn, Yk: Real;

      Var Mx, My, Uo, Vo : Integer);

    Begin

     { вычисление параметров }

     Mx := Round((Uk - Un)/(Xk - Xn));    My := Round((Vk - Vn)/(Yk - Yn));

     Uo := Uk - Round(Mx*Xk);                Vo := Vn + Round(My*Yk);

     { рисование системы координат }

      SetColor(LightGray);

      Bar(Un, Vn, Uk, Vk); { окно графика }

      SetColor(Green); { рисуем зеленым цветом }

      SetLineStyle(0, 0, ThickWidth);    {Рисуем толстые сплошные оси}

      Line(Un, Vo, Uk, Vo); { ось OX }

      Line(Uo, Vn, Uo, Vk); { ось OY }

      SetColor(Red);

      Circle(Uo, Vo, 2); {начало координат - небольшой круг}

      SetLineStyle(0, 0, 1); {Рисуем тонкие сплошные отметок 1 }

      Line(Uo+Mx, Vo-4, Uo+Mx, Vo+4); { отметка 1 на OX }

      Line(Uo-4, Vo-My, Uo+4, Vo-My); { отметка 1 на OY }

      SetTextStyle(0, 0, 2);

      OutTextXY(Uo + Mx - 7, Vo + 16, ‘1’); { рисуем 1 }

      OutTextXY(Uo - 24, Vo - My - 7 , ‘1’); { рисуем 1 }

      OutTextXY(Uo - 24, Vo + 16, ‘0’); { рисуем 0 }

       { Дальнейшие украшения окна графика }

     End;

б) Построение кривой y = f(x) в окне;

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

На построение графика тратится большая часть времени. Поэтому целесообразно аппроксимировать дугу кривой y = f(x) хордой, выбирая узлы аппроксимации с некоторым шагом DrawStep (например, DrawStep = 10 (пикселов)).

Таким образом, процедура рисования графика имеет вид:

Procedure FuncDraw;

    Const DrawStep = 10;

       Var i: Integer;

            x, y: Real;

            u, v: Integer;

            ArgStep: Real;

            StepNum: Integer;

      Begin

        SetColor(Blue); {цвет кривой}

        SetLineStyle(0, 0, NormWidth); {толщина нормальная}

        ArgStep := DrawStep / Mx; {шаг изменения x}

        StepNum := Round((Uk - Un) / DrawStep); {количество узлов}

        { вычисления начальной точки графика }

        x := Xn ; u := Un;

        y := sqrt(Abs(x))*sin(2*x);  v := Round(Vo - My*y);

         MoveTo(u, v);

         { цикл рисования аппроксимирующей ломаной }

         For i := 1 to StepNum do begin

            x := x + ArgStep; u := u + DrawStep;

            y := sqrt(Abs(x))*sin(2*x); v := Round(Vo - My*y);

            LineTo(u,v);

         end

      End;

Рaбота с текстами и ввод-вывод в графическом экране.

Ввод/вывод информации в режиме графики существенно отличается от соответствующих процедур в алфавитно-цифровом режиме. Вывод текста на экран осуществляют процедуры OutText, OutTextXY.

OutText(TxtStr: String) выводит строку на устройство вывода (графический экран) в точку - позицию графического курсора.  OutTextXY(X, Y: Integer; TxtStr: String) выводит строку на устройство вывода (графический экран) в точку (X, Y).

Кроме этих процедур, в модуле GRAPH описаны процедуры и функции, поддерживающие различные стили вывода. Так, например:

Функции TextHeight(TxtStr:String), TextWidth(TxtStr:String) возвращают соответственно высоту и ширину строки в пикселах.  

Процедура SetTextStyle(Font, Direction:Word; CharSize:Word) устанавливает стиль вывода текста в графическом режиме, т.е. определяет шрифт, стиль текста и коэффициент увеличения символа. В качестве примера опишем процедуру WinText вывода комментирующих надписей в окно графика функции.

Procedure WinText;

    Begin

      SetColor(LightMagenta);

      SetTextStyle(0, 1, 1);

      OutTextXY(15,15, ‘Function Graphics Window’);

      SetColor(Cyan);

      SetTextStyle(0, 0, 1);

      OutTextXY(460,15, ‘Production of SL.XXI’);

      SetTextStyle(0, 0, 2);

      OutTextXY(28, 390, ‘Y = Sqrt(Sin(|x|)’);

     End;

Ввод информации в графическом режиме средствами модуля GRAPH не поддерживается. Поэтому для организации ввода необходимо воспользоваться либо стандартными процедурами, либо процедурами модуля CRT (библиотека алфавитно-цифрового режима). На практике это означает посимвольный ввод информации, формирование строки введенных символов и преобразование типа строки к типу данного, необходимого программе.

Для ввода символа используется функция ReadKey - чтение символа с клавиатуры. Для отображения введенного символа на экране (эхо) используется одна из графических процедур вывода. Суперпозиция этих действий имеет вид Symbol := ReadKey; OutTextXY(x0, y0, Symbol) Для более полной имитации процедуры Read точка ввода информации на экране обычно отмечается изображением курсора, который сдвигается на одну позицию вправо при каждом вводе символа.

Procedure ReadGrStr(x, y: Integer; var Str: String);

    Const CursW = 8; CursH = 6; {ширина и высота курсора}

      Var Symbol: Char; x1, y1: Integer;

    Begin

      x1 := x + CursW; y1 := y + CursH;

      SetColor(Green); {цвет курсора }

      Rectangle(x, y, x1, y1);

      Str := ‘’; Symbol := ReadKey; {инициализация }

      While Ord(Symbol) <> 13 do begin

      SetColor(LightGray); {Цвет окна графика}

      Bar(x, y, x1, y1); {Удалить курсор}

      OutTextXY(x, y, Symbol); {Вывести символ}

       x := x + CursW; x1 := x + CursW;

       Str:= Str + Symbol; {Формирование выходной строки}

       SetColor(Green); {Вывести курсор}

       Rectangle(x, y, x1, y1);

       Symbol := ReadKey {Считать символ}

      end

    End;

Заметим, что никаких редактирующих действий процедура ReadGrStr не поддерживает. Для реальных программ ее нужно усовершенствовать.

Числа вводятся как строки, а затем пребразуются системной процедурой Val. Переменная Code содержит номер ошибки формата.  Val(Str: String; var v {компонент Text}; var Code: Integer);

Переменная Code содержит номер ошибки формата. С ее помощью можно контролировать правильность числового формата введенной строки.

4.Рекурсивные описания в графике.

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

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

Квадрат Кантора - это фигура, которая получена путем вырезания некоторых участков из первоначально сплошного квадрата.  Для того, чтобы построить квадрат Кантора, необходимо:

  1.  Разбить сплошной (окрашенный в один цвет) квадрат на 9 равных квадратов вертикальными и горизонтальными линиями (3 на 3);
  2.  Вырезать (закрасить в другой цвет) средний из 9-ти маленьких квадратов.
  3.  Применить (рекурсивно) действия 1, 2, 3 к 8-ми оставшимся маленьким сплошным квадратам.

Program KantorSet;

    Uses Graph, Crt;

   Const Xmin = 0; Ymin = 0; { размеры квадрата }

           Xmax = 486; Ymax = 486;

           N = 6; { глубина рекурсии }

     Var grDriver, GrMode: Integer; ch: Char;

Procedure Picture(k: Integer; x0, y0, x3, y3: Integer);

       Var x, y, dx, dy: Integer; i, j: Integer;

    Begin

      If k <> N

        then begin

          dx := (x3-x0) div 3; dy := (y3-y0) div 3;

          x := x0;

         For i := 0 to 2 do begin

         y := y0;

         For j := 0 to 2 do begin

           If (i = 1) and (j = 1)

             then Bar(x, y, x+dx, y+dy) {вырезаем квадрат}

             else Picture(k+1, x, y, x+dx, y+dy);

            y := y + dy  end;

         x := x + dx  end;

        k := k + 1

      end

End;

    Begin

      grDriver := Detect;

      InitGraph(grDriver, grMode, ‘E:\lvov\pascal\bgi’);

       SetBkColor(Blue);

       Picture(1, Xmin, Ymin, Xmax, Ymax);

       ch := ReadKey

     End.

Аналогично можно строить и другие симпатичные мозаики.

Работа со страницами и фрагментами.

Графическое изображение, выводимое на экран, хранится в специальной области оперативной памяти компьютера, называемой видеопамятью. Размер памяти, отводимой под изображение одного графического экрана, зависит от графического режима. Эта часть памяти называется страницей видеопамяти (видеостраницей). Так, в режиме EGA (640 * 350, 16 цветов) страница видеопамяти занимает примерно 110 Kb. В этом режиме, если видеопамять имеет 256 Kb, определены две страницы - с номерами 0 и 1.

Модуль Graph содержит средства, поддерживающие работу с несколькими видеостраницами. Наличие нескольких страниц позволяет оперировать с заранее заготовленными рисунками и их фрагментами. С этой целью введены понятия видимой страницы и активной страницы. Видимая страница - это страница, которая выводится на экран.  На активной странице формируются изображения, выполняемые операторами графики.

Наиболее употребительные средства, поддерживающие работу со страницами и их фрагментами, кратко описаны ниже:

SetVisualPage(Page:Word)- визуализирует страницу с номером Page;

SetActivePage(Page: Word) - активизирует страницу с номером Page;

GetMem(P, Size) - резервирует память размера Size и устанавливает на нее указатель P; {Понятие указателя рассматривается в главе 12}

ImageSize(x1, y1, x2, y2: Integer):Word - возвращает размер видеопамяти прямоугольной области экрана;

GetImage(x1, y1, x2, y2:Integer; var BitMap) - сохраняет образ указанной области в буфере;

PutImage(x, y: Integer; var BitMap; BitBit: Word) - помещает (двоичный) образ из буфера на экран. Параметр BitBit определяет способ наложения образа на активную страницу;

Program ImageExample;

    Uses Graph, Crt;

     Var grDriver, GrMode: Integer;

          Ch :Char;

           P :Pointer; {указатель на образ в памяти}

           Size :Word; {размер образа}

   Begin

     grDriver := Detect;

      InitGraph(grDriver, grMode, ‘E:\lvov\pascal\bgi’);

      SetGraphMode(1); { Размер экрана = 640 * 350 }

      {Пример для SetVisualPage, SetActivePage}

      SetBkColor(Blue);

      SetActivePage(0); {Рисуем на странице 0} {На экране страница 0}

      Rectangle(40, 40, 140, 140);  OutTextXY(50, 90, ‘First Page’);

      Ch := ReadKey;  SetActivePage(1); { Рисуем на странице 1. На экране страница 0}

      SetColor(Magenta);

      Circle(90, 90, 50);

      OutTextXY(45, 90, ‘Second Page’);

      SetVisualPage(1); {Выводим на экран стр 1}

      Ch := ReadKey;    SetVisualPage(0); {Выводим на экран стр 0}

      Ch := ReadKey;    SetVisualPage(1); {Выводим на экран стр 1}

      Ch := ReadKey;

       {Пример для GetImage, ImageSize, и PutImage}

       Size := ImageSize(40, 40, 140, 140); {Установили размер рисунка}

       GetMem(P, Size); {Резервируем память, на которую установлен указатель P }

       SetActivePage(0);

       GetImage(40, 40, 140, 140, P^); {Пересылаем рисунок в область памяти - значение  P}

       Ch := ReadKey;

       SetActivePage(1); {Рисуем на странице 1}

       PutImage(400, 200, P^, NormalPut); {Выводим на стр.1 рисунок}

       Ch := ReadKey;

       ClearDevice;

       CloseGraph;

     end.

5.Задачи и упражнeния

1.Описать процедуру оформления системы координат, в которой точка начала координат (Uo,Vo) может выходить за пределы окна графика. Оси координат в этом случае должны совпадать с соответствующими границами окна графика.

2.Усовершенствовать процедуру FuncDraw вывода графика функции y = f(x) обработкой случаев, когда кривая выходит за пределы окна системы координат.

3.Изменить процедуру FuncDraw для вывода на экран графика функции, заданной параметрически: x = fi(t), y = psi(t), A <= t <= B.

4.Написать программу построения графика функции в полярной системе координат.

5.Реализовать процедуры линейных геометрических преобразований (перенос, поворот, осевая и центральная симметрии, гомотетия).

6.Используя процедуры упр.5, написать программу, демонстрирующую геометрические преобразования плоских геометрических фигур (в частности - треугольника).

7.Усовершенствовать процедуру ReadGrStr, превратив ее в редактор строки с действиями Insert, Delete, BackSpace c помощью соответствующих клавиш.

8.Изменить процедуру ReadGrStr, превратив ее в редактор вещественного числа.

9.Изменить процедуру ReadGrStr, превратив ее в редактор целого числа.

10.Написать программу изображения мозаики, которая определена правилами:

а. В центре квадрата размера A*A рисуется окружность радиуса A/2;

б.Квадрат разбивается на 4 равных (под)квадрата горизонтальной и вертикальной линиями.

в. Действия 1 - 3 применяются рекурсивно к каждому из 4-х квадратов.

Задачи вычислительной геометрии

11.Дан набор  из  n  точек плоскости,  заданных координатами  A1(X1, Y1), A2(X2, Y2) , ..., An(Xn, Yn). Найти такую точку S(X, Y) на плоскости, сумма расстояний от которой до данных точек набора наименьшая. Проиллюстрировать решение на картинке.

12.Дан  набор  из  n точек плоскости, заданных  координатами: A1(X1, Y1),  A2(X2, Y2), ...,  An(Xn, Yn). Выбрать из этого набора точки, находящиеся в вершинах выпуклого многоугольника наименьшей площади и содержащего все точки набора. Проиллюстрировать решение на картинке.

13.Дан набор  из  n точек  плоскости, заданных координатами: A1(X1, Y1),  A2(X2, Y2), ...,  An(Xn, Yn) Построить круг наименьшего диаметра, содержащий все точки набора. Проиллюстрировать решение на картинке.

14.Дан набор из  n  точек  плоскости, заданных координатами: A1(X1, Y1),  A2(X2, Y2), ...,  An(Xn, Yn). Построить прямоугольник наименьшей площади, содержащий все точки набора. Проиллюстрировать решение на картинке.

15.Выпуклый n-угольник задан набором вершин A1(X1, Y1),  A2(X2, Y2), ...,  An(Xn, Yn)

Разбиение этого многоугольника на треугольники непересекающимися диагоналями называется триангуляцией. Стоимостью триангуляции называется сумма длин диагоналей разбиения. Найти триангуляцию многоугольника наименьшей стоимости. Проиллюстрировать решение на картинке.


 

А также другие работы, которые могут Вас заинтересовать

53912. Класичний квартет 43.5 KB
  Вокальний твір без віршованого тексту. Музичносценічний твір в яких думки і почуття передаються мімікою і танцем. Питання до класу: Як ви розумієте слово квартет Відповіді: Коли чотири музиканти виконують музичний твір. Музика Василя Барвінського українського композитора твір написаний на українські народні пісні.
53913. Квест «Математика?! Да не только…» 118 KB
  Цель. Сплотить коллективы команд; поговорить о математике и в шутку, и всерьез; создать дух состязания; узнать интересные факты об истории школы. Все задания выдаются в запечатанных конвертах. Зеленый зал старт Кабинет математики.
53914. Финансовый леверидж и его оценка 27.5 KB
  Финансовый леверидж показывает зависимость между структурой источников средств и величиной чистой прибыли. Его действие проявляется в том, что любое изменение прибыли до вычета процентов и налогов порождает более существенное изменение чистой прибыли.
53915. Квіти. Урок трудового навчання 1 клас 950 KB
  Виховувати любов до рідної землі бережливе ставлення до природи навколишнього середовища формувати естетичні смаки. Дикий мак хотів підслухать Не розчув й почервонів. Як ви думаєте чому мак хотів підслухать розмову джмеля з ромашкою Мак був допитливим. Чому мак почервонів Йому стало соромно.
53916. Чарівна квітка України 76.5 KB
  Квітка Цісик. Судячи з імені вона напевно походила з Карпат чи Прикарпаття бо саме там жінкам нерідко дають такі поетичні імена Квітка Зірка Ружана. Вона – це американська співачка українського походження Квітка Цісик.
53917. Конспект розваг на основі матеріалів Конвенції про права дитини 45.5 KB
  Пашко Ведуча. Ведуча виносить велику квітку від якої будуть відривати пелюстки. Ведуча. Ведуча відриває пелюстку.
53918. Літературно-музична композиції “Душа-квітка”, присвячена життю і творчості К.Білокур 151.5 KB
  Білокур Мета: познайомити учнів із самобутнім майстром пензля його картинамизалучати до світу прекрасного засобами словамузики та мистецтва виховувати почуття гордості за своїх пращурів та прагнення наслідувати їх. Білокур Виходить молода К. На слайдах портрети видатних особистостей культури мистецтва різних епох та країн і разом з ними портрет К Білокур Ведучий. Катерина Білокур – Художник.
53919. «Квітка - Добра» Знай, люби, оберігай свій рідний край. Родинне свято 2 клас 57.5 KB
  Яке гарне у нас свято Добрий день Як гостей у нас багато Добрий день Я вітаю сонечко: Здрастуй золоте Я вітаю квіточку: Хай собі росте Я вітаю дощичок: Лий як із відра Друзів привітаю я зичу їм добра Я вітаю друзі вас Я вітаю цілий клас Сонце Небо Рідний край Грай музико грай Під мелодію пісні Дорогою добра з’являється Білосніжка Білосніжка: Добрий день діти Я Білосніжка...
53920. Ці неповторні квіти. Позакласний захід 469 KB
  Учень 1: Квіти – улюблені супутники людини з давніх часів. Хімчук Учень 2: Сонце засяє – і все ожива Все розквітає – на дворі весна Учень 3: Весна оживає природа. Звучить запис дзвіночка Учень 4: Ведуть доріжки до весняного лісу. Учень 5: Дзвонить радісно підсніжник: Я зпід снігу рвавсь щосили.