Разработка шаблона контейнера для хранения объектов классов, реализующих геометрические фигуры (Прямоугольник) (Лабораторная работа № 5)

Страницы работы

Фрагмент текста работы

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

Новосибирский государственный технический университет.

Кафедра ПМт.

Лабораторная работа по ООП №5

(Прямоугольник)

Факультет : ПМИ

Группа :  ПМ-72

Преподаватель : Еланцева И. Л.

Студент : Щеголев В. С.

2008г.

  1. Постановка задачи :

1. Ознакомиться с понятиями шаблона, инстанцирования.

2. Путем модификации программ, разработанных в лабораторных работах № 3,4, разработать шаблон контейнера для хранения объектов классов, реализующих геометрические фигуры.

2.1. Преобразовать класс-контейнер, разработанный в лабораторной работе №3, в шаблон, так чтобы элементами контейнеров могли быть различные классы, разработанные в лабораторной работе №4 (при различном инстанцировании шаблона).

2.2. Разработать функцию, демонстрирующую поведение разработанного шаблона: провести инстанцирование шаблона для каждого из классов-фигур, продемонстрировать их функционирование.

3. Подготовить текстовые файлы с разработанной программой, используя текстовый редактор, оттранслировать их, собрать и выполнить программу с учетом требований операционных систем и программных оболочек, в которых эта программа выполняется. При необходимости исправить ошибки и вновь повторить технологический процесс решения задачи.

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

5. Защитить лабораторную работу, ответив на вопросы преподавателя.

Шаблон двунаправленного списка:

template<class obj> class list

 {

private:

  struct member

  {

   obj rect;// ячейка содержащая оьъект

   int number;//ячейка содержащая номер объекта

   member *next;//указтель на следующий элемент списка

   member *prev;//указатель на предыдущиий элемент списка

  };

  member *fined;//глобальный указатель на элемент списка

  member *last_memb;//указатель на последний элемент списка

  member *first_memb;//указатель на первый элемент списка

  int poiskOB(int n);//поиск элемента содержащий номер объекта

   public:

list();//конструктор    

~list();//диструктор

void show_pr();//показ номеров объектов

int poisk(int n, obj *fined);//поиск объекта

void add(int n, obj rect1);//добавление объекта в список           

void delete_el(int n);//удаление элемента с заданным номером

};

6.   Текст разработанной программы :

Основной  модуль:

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <graphics.h>

#include "FIGURE.cpp"

#include "KONTUR.cpp"

#include "FILL.cpp"

#include "FULL.cpp"

#include "COMBO.cpp"

#include "member.cpp"

int a[4],b[4];

int zt, zc, lt, lw, lc;

void main()

{

FILE *gf,*gf1;

gf=fopen("geometry.txt","r");

FILE *pf;

pf=fopen("painting.txt","r");

 list<kontur> k;

 list<fillfigure> f;

 list<combo> c;

 kontur k1;

 fillfigure f1;

 combo c1;

int n;

while(fscanf(gf,"%d",&n)!=EOF)//заполнение списков с объектами konturи fillfigure

                         {

                          fscanf(gf,"%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);

                          fscanf(pf,"%d %d %d %d %d",&zt, &zc, &lt, &lw, &lc);

                           if(lc==zc || lc==0 )

                            {

                             do

                                     {

                                      if(lc==zc)

                                        {

                                         printf("\ncvet linii & cvet zalivki dolzhny byt' razlihny\n");

                                         printf("\ncvet linii-");

                                         scanf("%d",&lc);

                                        }

                                      if(lc==0)

                                        {

                                         printf("\ncvet linii & cvet fona dolzhny byt' razlihny\n");

                                         printf("\ncvet linii-");

                                         scanf("%d",&lc);

                                        }

                                     }

                             while(lc==0 || lc==zc);

                            }

                           k1.setgeom(a);

                           k1.setgraph(lt, lw, lc);

                           f1.fill::setgraph(zt, zc);

                           k.add(n,k1);

                           f.add(n,f1);

                          }

fclose(gf);

fclose(pf);

gf1=fopen("geom.txt","r");

while(fscanf(gf1,"%d",&n)!=EOF)// заполнение списка с объектами combo

                         {

                          fscanf(gf1,"%d %d %d %d",&b[0],&b[1],&b[2],&b[3]);

                           if(lc==zc || lc==0 )

                            {

                             do

                                     {

                                      if(lc==zc)

                                        {

                                         printf("\ncvet linii & cvet zalivki dolzhny byt' razlihny\n");

                                         printf("\ncvet linii-");

                                         scanf("%d",&lc);

                                        }

                                      if(lc==0)

                                        {

Похожие материалы

Информация о работе