Лабораторная работа №6 (Вариант 12)
.doc
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №6
по дисциплине
«Технология программирования»
на тему:
«Построение графических примитивов»
|
Студент |
|
|
|
Ключанских А.С |
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
АС-10 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
|
|
||||||||
|
|
|
|
|
Домашнев П.А. |
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2011
-
Задание кафедры
Написать программу, реализующую целочисленный алгоритм построения графического примитива.
Вариант 12: заполнение области.
-
Пошаговое описание алгоритма программы.
-
В памяти создается пустая (заполненная пробелами) область размерами 25х80.
-
Пользователь вводит координаты крайних точек изображаемого прямоугольника, а также координаты начальной точки, с которой начнется закраска.
-
На интервале от точки А до точки В по оси y и по оси x рисуются отрезки символами # (создается прямоугольник).
-
Если начальная точка не является символом границы (#), и если она еще не закрашена (*), то присвоить соответствующей точке области символ *.
-
Рекурсивный вызов функции закраски для точек, лежащих вокруг заданной.
-
Вывод на экран получившейся закрашенной области.
-
Листинг программы
#include <stdio.h>
#include <locale.h>
char Oblast[25][80];int A[2],B[2];
void zapolnenie(int,int); void print(void);
void main(void)
{
setlocale(LC_ALL,"Russian");
int Start_X, Start_Y;
for(int i=0;i<25;i++)
for(int j=0;j<80;j++)
Oblast[i][j]=' ';
printf("Введите координаты точки А: ");
scanf("%d%d",&A[0],&A[1]);
printf("Введите координаты точки В: ");
scanf("%d%d",&B[0],&B[1]);
printf("Введите координаты начального пикселя: ");
scanf("%d%d",&Start_X,&Start_Y);
for(int i=A[0]; i<=B[0]; i++) Oblast[A[1]][i]='#';
for(int i=A[0]; i<=B[0]; i++) Oblast[B[1]][i]='#';
for(int i=A[1]; i<=B[1]; i++) Oblast[i][A[0]]='#';
for(int i=A[1]; i<=B[1]; i++) Oblast[i][B[0]]='#';
zapolnenie(Start_X,Start_Y);
print();
}
void zapolnenie(int x,int y)
{
if(Oblast[y][x]!='#'&&Oblast[y][x]!='*')
{
Oblast[y][x]='*';
zapolnenie (x+1,y);
zapolnenie (x,y+1);
zapolnenie (x-1,y);
zapolnenie (x,y-1);
}
}
void print(void)
{
for(int i=0;i<25;i++)
for(int j=0;j<80;j++)
printf("%c",Oblast[i][j]);
}
-
Контрольный пример