Лабораторная работа №6 Вариант 17
.doc
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №6
по дисциплине
«Технология программирования»
на тему:
«Построение графических примитивов»
|
Студент |
|
|
|
Понарьин С.Н. |
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
АС-09 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
Домашнев П.А. |
|
||||||||
|
|
|
|
|
|
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2010
-
1. Задание:
Написать программу, реализующую целочисленный алгоритм построения графического примитива.
Графический примитив |
|
17 – отрезок |
|
-
2. Блок-схема программы
-
3. Листинг программы
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <locale.h>
int i,j;
void Draw(int x0, int y0, int x1, int y1)
{
int X,Y,Px,Py,*E;
X=x0;//Координаты 1-ой точки
Y=y0;
Px=x1-x0;//Разность координат
Py=y1-y0;
char **g_mas=(char **)malloc(sizeof(char*)*(y1+1));
for(i=0;i<(y1+1);i++)
g_mas[i]=(char *)malloc(sizeof(char)*(x1+1));
for(i=0;i<(y1+1);i++)
for(j=0;j<(x1+1);j++)
g_mas[i][j]='.';
g_mas[y1][0]='0';
g_mas[y1-Y][X]='*';
if(Px>=Py)
{
E=(int*)(malloc(sizeof(int)*(Px+1)));//
E[0]=2*Py-Px;//
for(i=0;i<Px;i++)//
{
if(E[i]>0)//Если отклонение > 0
{
X++;
Y++;
E[i+1]=E[i]+2*(Py-Px);
}
else
{
X++;//
E[i+1]=E[i]+2*Py;//
}
g_mas[y1-Y][X]='*';
}
}
else
{
E=(int*)(malloc(sizeof(int)*(Py+1)));//
E[0]=2*Px-Py;//
for(i=0;i<Py;i++)//
{
if(E[i]>0)//Если отклонение > 0
{
X++;
Y++;
E[i+1]=E[i]+2*(Px-Py);
}
else
{
Y++;//
E[i+1]=E[i]+2*Px;//
}
g_mas[y1-Y][X]='*';
}
}
printf("\nГрафик:\n\n");
for(i=0;i<(y1+1);i++)
{
for(j=0;j<(x1+1);j++)
printf("%c",g_mas[i][j]);
printf("\n");
}
for(i=0;i<(y1+1);i++)
free(g_mas[i]);
free (g_mas);
free(E);
}
void Menu()
{
int x0, y0, x1, y1;
printf("Введите координаты начальной точки: ");
scanf("%d %d", &x0, &y0);
printf("\nВведите координаты конечной точки: ");
scanf("%d %d", &x1, &y1);
if(x1<x0||y1<y0||x0<0||y0<0||x1<0||y1<0)
{
printf("\nНельзя построить график!\n");
Menu();
}
else
Draw(x0,y0,x1,y1);
}
void main()
{
setlocale(LC_ALL, "Rus");
Menu();
printf("\n");
system("pause");
}
-
4. Контрольный пример