Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №6 Вариант 16

.doc
Скачиваний:
7
Добавлен:
20.06.2014
Размер:
142.34 Кб
Скачать

2

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

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

по дисциплине

«Технология программирования»

Построение графических примитивов

Студент

Ельшаева Н.А.

подпись, дата

фамилия, инициалы

Группа

АС-09

Принял

Домашнев П.А.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2010

1. Задание

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

Вариант

16 – заполнение области

2

нет

да

int i=0

да

нет

Scr[j][i]=' ';

i++

нет

printf("Введите координаты %d :",i+1)

i++

int j=0

i=0

да

j++

printf("Введите кол-во точек: ")

. Блок-схема

да

нет

drawing(x[i],y[i],x[i+1],y[i+1])

i++

i=0

drawing(x[0],y[0],x[p-1],y[p-1])

3. Листинг программы

#include <stdio.h>

#include <stdlib.h>

#include <locale.h>

#include <windows.h>

#include <iostream>

#include <math.h>

char Scr[25][80];

int p,*x,*y,i;

void zakraska(int,int);

void print();

void drawing(int Ax, int Ay, int Bx, int By)

{

if(Ax==Bx)

if(By>Ay)

for(int i=Ay;i<By;i++)

Scr[24-i][Ax]='#';

else

for(int i=By;i<Ay;i++)

Scr[24-i][Ax]='#';

if(Bx<Ax)

{

int a=Bx;

Bx=Ax;

Ax=a;

a=Ay;

Ay=By;

By=a;

}

int subX=Bx-Ax;

int subY=By-Ay;

int *arrX=(int *)malloc(sizeof(int)*(subX+1));

int *arrY=(int *)malloc(sizeof(int)*(subX+1));

double *arrYch=(double *)malloc(sizeof(double)*(subX+1));

for(int i=0;i<(subX+1);i++)

arrX[i]=Ax+i;

for(int i=0;i<(subX+1);i++)

arrYch[i]=((double)(arrX[i]-Ax))/((double)subX)*((double)subY)+Ay;

arrY[0]=Ay;

for(int i=1;i<(subX+1);i++)

{

if((arrYch[i]-arrYch[i-1])<0.5)

arrY[i]=floor(arrYch[i]);

else

arrY[i]=ceil(arrYch[i]);

}

for(int i=0;i<(subX+1);i++)

{

Scr[24-arrY[i]][arrX[i]]='#';

if(i<subX)

{

int count=(arrY[i+1]-arrY[i])/2;

if(count<1)

;

else if(count==1)

Scr[24-arrY[i]][arrX[i+1]]='#';

else

{

for(int j=1;j<count;j++)

Scr[24-arrY[i]-j][arrX[i]]='#';

for(int j=count;j<(arrY[i+1]-arrY[i]);j++)

Scr[24-arrY[i]-j][arrX[i+1]]='#';

}

}

}

}

void main(void)

{

int FirstPixel[2];

setlocale(LC_ALL,"rus");

for(int j=0;j<25;j++)

for(int i=0;i<80;i++)

Scr[j][i]=' ';

printf("Введите кол-во точек: ");

scanf("%d",&p);

x=(int*)malloc(p*sizeof(int));

y=(int*)malloc(p*sizeof(int));

for(i=0;i<p;i++)

{

printf("Введите координаты %d :",i+1);

scanf("%d %d",&x[i],&y[i]);

}

i=0;

for(i=0;i<p-1;i++)

drawing(x[i],y[i],x[i+1],y[i+1]);

drawing(x[0],y[0],x[p-1],y[p-1]);

printf("Введите начальный пиксел:");

scanf("%d %d",&FirstPixel[0],&FirstPixel[1]);

zakraska(FirstPixel[0],FirstPixel[1]);

print();

system("pause");

}

void zakraska(int x,int y)

{

if(Scr[24-y][x]==' ')

{

Scr[24-y][x]='.';

zakraska ( x+1, y);

zakraska ( x, y+1);

zakraska ( x-1,y);

zakraska ( x, y-1);

}

}

void print(void)

{

system("cls");

for(int j=0;j<25;j++)

for(int i=0;i<80;i++)

printf("%c",Scr[j][i]);

}

4. Контрольный пример