Консультация № 187547
23.09.2013, 19:00
150.49 руб.
24.09.2013, 12:03
0 4 1
Здравствуйте! У меня возникли сложности с таким вопросом:
Нужно создать в динамической памяти связанный список графических объектов. Каждый элемент списка представляет отдельную графическую фигуру. Показать список-объект на экране, затем последовательно удалить объекты с экрана и очистить динамическую память.

Обсуждение

Неизвестный
24.09.2013, 01:29
общий
http://clip2net.com/s/5Ob8dh картинка плохо отобразилась исправил
давно
Старший Модератор
31795
6196
24.09.2013, 12:01
общий
24.09.2013, 12:02

Кнопка "Мои файлы" - меню слева, позволяет загружать различные данные на файлообменный сервер портала. Ещё автоматически генерируются ВВС-код для скачивания и отображения на портале.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
26.09.2013, 15:07
общий
это ответ
Здравствуйте, Dima Fedorov!

Смотрите приложение.
При создании списка данных о различных фигурах использовалось объединение ( union ) которое позволяет хранить разные по типу даные на одном участке памяти. Память выделяется под максимальнвй по размеру тип данных. В данном случае будет выделено 8*2(4- зависит от компилятора) байт.

Вывод/стирание фигур: как такового стирания нет, есть только повторый вывод на экран, но пиксель имеет цвет фона, т.е. визуально получается, что фигура стирается.
ps:если будут вопросы, то задавайте их в мини-форуме
Удачи!


Приложение:
#include "graphics.h"
#include "conio.h"
#include "stdio.h"
//определяем данные нужные для рисования окружности
struct TCirc{
int x;//горизонтальная координата
int y;//вертикальная координата
int z;//радиус
};
//определяем данные нужные для рисования четырехугольника
struct TQuad{
int x1,x2,x3,x4;//горизонтальные координаты
int y1,y2,y3,y4;//вертикальные координаты
};
//оперделяем структуру списка
struct TList{
TList *next;//указатель на следующий элемент
int mode;//тип фигуры
union {//данные об окружности и четырехугольнике будут хранится в одной области памяти
TCirc a;//данные окружности
TQuad b;//данные четырехугольника
};
};
//функция рисования фигур в списке
void Draw(TList *_l,int _color){
setcolor(_color);//устанавливаем цвет
//
while(_l->next){//пока не кончился список
if(_color==0){//правильнее было бы сравнивать со цветом фона
getch();//ждем и любуемся работой
};
_l=_l->next;//переходим к следующему элементу
if(_l->mode==1){//проверяем выводимую фигуру
moveto(_l->b.x4,_l->b.y4);//переходим в точку
lineto(_l->b.x1,_l->b.y1);//рисуем линию к следующим точкам
lineto(_l->b.x2,_l->b.y2);//по часовой стрелке
lineto(_l->b.x3,_l->b.y3);
lineto(_l->b.x4,_l->b.y4);
}else circle(_l->a.x,_l->a.y,_l->a.z);//рисуем окружность
};
};

//функция установки параметров фигур
TList *SetQuad(TList *l,int x1,int y1,int x2,int y2,int x3,int y3, int x4,int y4){
l->next=new TList;//новый элемент в списке
l=l->next;//переходим к нему
l->mode=1;//это четырехугольник
l->b.y1=y1;//устанавливаем координаты углов фигуры
l->b.x1=x1;//по часовой стрелке
l->b.y2=y2;
l->b.x2=x2;
l->b.y3=y3;
l->b.x3=x3;
l->b.y4=y4;
l->b.x4=x4;
return l;
};
int main(){
TList *list,*head;//указатели для работы со списком
int i=DETECT;//режим автоопределения доступного видеорежима
int j;
initgraph(&i,&j,"../bgi");//переходим в графический режим

//начальные установки фигур
//труба
list=SetQuad(head, 65, 10, 70, 10, 70, 40, 65, 40);
//надстройка
list=SetQuad(list, 45, 40,110, 40,110, 60, 45, 60);
//корпус
list=SetQuad(list, 15, 60,140, 60,110, 80, 30, 80);
//иллюминаторы
for(i=0;i<4;i++){
list->next=new TList;//новый элемент в списке
list=list->next;//переходим к нему
list->mode=0;//это окружность
list->a.y=50;//устанавливаем координаты и радиус фигуры
list->a.x=55+15*i;
list->a.z=5;
list->next=NULL;//закрываем список
};

//Выводим на экран
list=head;//
Draw(list,15);//

//стираем
list-head;
Draw(list,0);//

//освобождаем память
while(head->next){
list=head;
head=head->next;
delete(list);
};
closegraph();//закрываем графический режим
restorecrtmode();//востанавливаем настройки по умолчанию
return 0;
}
5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
26.09.2013, 16:02
общий
Спасибо. а вы можете мне скинуть exe файл?
Форма ответа