Главная страница
Навигация по странице:

  • Уфа 2022 Лабораторная работа №1 «Примитивная графика. Рекурсивные функции»1 Постановка задачи

  • 2 Анализ задачи

  • 4 Таблица переменных

  • 5 Текст программы на СИ

  • 6 Результаты

  • лаба1. Светлана, лаба1. Отчет по лабораторной работе 1 примитивная графика. Рекурсивные функции вариант 19 Выполнил ст гр. Номер фамилия и. О


    Скачать 273 Kb.
    НазваниеОтчет по лабораторной работе 1 примитивная графика. Рекурсивные функции вариант 19 Выполнил ст гр. Номер фамилия и. О
    Анкорлаба1
    Дата04.04.2023
    Размер273 Kb.
    Формат файлаdoc
    Имя файлаСветлана, лаба1.doc
    ТипОтчет
    #1037567


    Министерство науки и высшего образования РФ

    Федеральное государственное бюджетное образовательное учреждение

    высшего образования

    «Уфимский государственный нефтяной технический университет»

    Кафедра «Вычислительная техника и инженерная кибернетика»

    ОТЧЕТ

    по лабораторной работе № 1

    ПРИМИТИВНАЯ ГРАФИКА. РЕКУРСИВНЫЕ ФУНКЦИИ
    Вариант 19

    Выполнил ст. гр. НОМЕР ФАМИЛИЯ И.О.
    _____________

    подпись, дата
    Проверил: преподаватель Салихова М.А.
    ______________

    оценка, дата, подпись


    Уфа 2022


    Лабораторная работа №1




    «Примитивная графика. Рекурсивные функции»
    1 Постановка задачи
    1.Выбрать объект, в соответствие с вариантом: 2) Первый корпус УГНТУ

    2. Изобразить объект произвольного размера и цвета.

    3. Общие требования к изображению:

    1) Использование более пяти различных цветов.

    2) Использовать более трех функций изображения графических элементов в Си.

    4. Организовать движение рисунка (или части рисунка) в произвольном направлении, используя работу с буфером обмена.

    5. Вывести текст на экране (по заданной теме).

    6. Реализовать возможность рекурсивного повторения рисунка n-раз (n вводится с клавиатуры).
    2 Анализ задачи
    Задача решается с помощью использования графических функций.
    3 Алгоритмы решения задачи


    Рисунок 1 – Алгоритмы процедуры window

    Рисунок 2 – Алгоритм процедуры redrectangle


    Рисунок 3 – Алгоритм процедуры whiterectangle

    Рисунок 4 – Алгоритм процедуры door




    Рисунок 5 – Алгоритм функции ugntu


    Рисунок 6 – Алгоритм процедуры action

    Рисунок 7 – Алгоритм функции rekurs


    Рисунок 8 – Алгоритм главной функции

    4 Таблица переменных

    Таблица 1 – Таблица переменных для алгоритма и программы

    Смысл переменных

    Обозначение

    Тип переменной

    Примечания

    в алгор.

    в прогр.

    ИСХОДНЫЕ

    j, m, n

    j, m, n


    int


    n вводится с клавиатуры

    ПРОМЕЖУТОЧНЫЕ

    *bitmap, size, i

    *bitmap, size, i

    void, unsigned, int




    РЕЗУЛЬТАТЫ














    5 Текст программы на СИ
    #include "graphics.h"

    #include

    using namespace std;
    void window(int x, int y)

    {

    moveto(x, y);

    setlinestyle(0, 0, 3);

    setcolor(BLACK);

    lineto(x+80, y);

    lineto(x+80, y+110);

    lineto(x, y+110);

    lineto(x, y);

    setfillstyle(1, CYAN);

    floodfill(x+10, y+25, BLACK);

    moveto(x, y+30);

    lineto(x+80, y+30);

    moveto(x+20, y);

    lineto(x+20, y+110);

    moveto(x+40, y);

    lineto(x+40, y+110);

    moveto(x+60, y);

    lineto(x+60, y+110);

    }

    void redrectangle(int x, int y)

    {

    moveto(150, 120);//красные прямоугольники

    moveto(x, y);

    lineto(x, y+380);

    moveto(x+90, y);

    lineto(x+90, y+380);

    setfillstyle(1, RED);

    floodfill(x+10, y+280, WHITE);

    setcolor(WHITE);

    moveto(x, y+140);

    setlinestyle(0, 0, 3);

    lineto(x+90, y+140);

    }

    void whiterectangle(int x, int y)

    {

    moveto(x, y);

    lineto(x, y-140);

    lineto(x+40, y-140);

    lineto(x+40, y);

    lineto(x+40, y);

    setfillstyle(1, LIGHTGRAY);

    floodfill(x+15, y-125, LIGHTGRAY);

    }

    void door(int x, int y)

    {

    moveto(x, y);

    lineto(x, y-100);

    lineto(x+50, y-100);

    lineto(x+50, y);

    setfillstyle(1, BLACK);

    floodfill(x+20, y-50, LIGHTGRAY);

    }


    void ugntu()

    {

    setcolor(YELLOW);

    setfillstyle(1, YELLOW);

    bar(100, 100, 800, 500);

    setcolor(WHITE);

    setlinestyle(0, 0, 3);

    moveto(100, 100);

    lineto(100, 500);

    lineto(800, 500);

    lineto(800, 100);

    lineto(90, 100);

    lineto(810, 100);

    moveto(100, 100);

    lineto(100, 70);

    lineto(450, 30);

    lineto(800, 70);

    lineto(800, 100);

    floodfill(450, 35, WHITE);

    moveto(100, 120);

    lineto(800, 120);

    setcolor(WHITE);

    setlinestyle(0, 0, 1);

    redrectangle(160, 120);

    redrectangle(280, 120);

    redrectangle(400, 120);

    redrectangle(520, 120);

    redrectangle(640, 120);

    window(165, 140);

    window(165, 280);

    window(285, 140);

    window(285, 280);

    window(405, 140);

    window(405, 280);

    window(525, 140);

    window(525, 280);

    window(645, 140);

    window(645, 280);

    setcolor(LIGHTGRAY);

    setlinestyle(0, 0, 3);

    moveto(230, 500);

    lineto(670, 500);

    moveto(230, 500);

    lineto(230, 330);

    lineto(350, 330);

    lineto(350, 300);

    lineto(550, 300);

    lineto(550, 330);

    moveto(670, 500);

    lineto(670, 330);

    lineto(550, 330);

    setfillstyle(1, YELLOW);

    floodfill(300, 400, LIGHTGRAY);

    moveto(230, 360);

    setlinestyle(0, 0, 3);

    lineto(670, 360);

    whiterectangle(230, 500);

    whiterectangle(360, 500);

    whiterectangle(500, 500);

    whiterectangle(630, 500);

    setfillstyle(1, RED);

    floodfill(300, 400, LIGHTGRAY);

    floodfill(430, 400, LIGHTGRAY);

    floodfill(570, 400, LIGHTGRAY);

    door(290, 500);

    door(425, 500);

    door(560, 500);

    }
    void action() {

    int vibor;

    ugntu();

    void* bitmap;

    unsigned size;

    size = imagesize(90, 30, 810, 500);

    if (size != 0xffff) {

    bitmap = malloc(size);

    if (bitmap) {

    getimage(90, 30, 810, 500, bitmap);

    cleardevice();

    for (int i = 90; i < 800; i++) {

    putimage(i, 30, bitmap, COPY_PUT);

    delay(5);

    if (i != 799) cleardevice();

    }

    setcolor(LIGHTMAGENTA);

    outtextxy(810, 570, "УГНТУ");

    }

    }

    delay(3000);

    cleardevice();

    ugntu();

    outtextxy(100, 550, "Введите количество повторений рисунка для рекурсии в консоли");

    }
    int rekurs(int j, int m, int n)

    {

    void* bitmap;

    unsigned size;

    size = imagesize(90, 30, 810, 500);

    if (size != 0xffff) {

    bitmap = malloc(size);

    if (bitmap) getimage(90, 30, 810, 500, bitmap);

    }

    delay(1000);

    if (m >= n - 1) return 1;

    if (m < n - 1)

    {

    putimage(j+750, 30, bitmap, COPY_PUT);

    m++;

    }

    rekurs(j+750, m, n);

    }
    int main()

    {

    setlocale(LC_ALL, "RUS");

    int j = 90, m = 0, n;

    initwindow(2000, 1500);

    ugntu();

    delay(3000);

    action();

    cout << "Введите N (Для рекурсии): ";

    cin >> n;

    rekurs(j, m, n);

    delay(3000);

    closegraph();

    return 0;

    }
    6 Результаты



    Рисунок 9 – начальное положение рисунка.



    Рисунок 10 – конечное положение рисунка.


    Рисунок 11 – повторение рисунка n( = 3) раз.
    7 Вывод

    В данной лабораторной работе изучена и закреплена тема примитивной графики и рекурсивных функций, написана программа, которая рисует первый корпус УГНТУ, реализует анимацию (движение вправо), рекурсивно повторяет рисунок n раз.


    написать администратору сайта