Форум программистов, компьютерный форум CyberForum.ru

Класс квадрат - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
01.12.2011, 03:24     Класс квадрат #1
Всем добрый вечер.
В общем у меня имеется 2 класса.
Класс точки который рисует точку в консоли по переданным в метод координатам, и класс квадрат который должен используя класс точки нарисовать в консоли 2 точки ( также по переданным координатам) ну и соединить их к примеру линиями, чтоб получился квадрат.
Вывести 2 точки труда не составило, а вот с соединением прошу помощи.
Код функции для рисования квадрата
C++
1
2
3
4
5
6
7
8
void CSquare::Draw(int x1,int y1,int x2,int y2)
{   
    CPlane dot[2]; //создаём массив объектов класса точка
    dot[0].setAll(x1,y1); //координаты первой точки
    dot[0].show(); //вывод первой точки
    dot[1].setAll(x2,y2); //координаты 2-й точки
    dot[1].show(); //вывод второй точки
}
Если кто-то не понял смысл задания, спрашивайте расскажу подробнее.
Заранее благодарен

Добавлено через 2 часа 23 минуты
Вроде бы как сделал...но не так как хотелось бы...
вот что у меня получилось
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void CSquare::Draw(int left, int top, int right, int bottom)
{   
    int j;
   char temp[80];
   int width = right - left + 1;
 
   for(j=0; j<width; j++)   
      
       temp[j] = '.';   
       temp[j] = 0;                    
 
   for(int y=top; y<=bottom; y++)  
      {
      set_cursor_pos(left, y);
      cout<<temp;
      }
    
}
А хотелось чтоб был использован родительский класс точка для рисовки...но никак не выходит...
вот методы класса точка


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class CPlane
{
protected:
    int x;
    int y;
    char dot;
    int color;
public:
    CPlane(void);
    void set_cursor_pos(int x, int y);
    void show();
    void setcolor(int col);
    void setX(int x);
    void setY(int y);
    void setAll(int x,int y);
    void setDot(char d);
    int getX();
    int getY();
    char getDot();
    ~CPlane(void);
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
01.12.2011, 08:28     Класс квадрат #2
Цитата Сообщение от revaldo666 Посмотреть сообщение
void CSquare:raw(int x1,int y1,int x2,int y2) { CPlane dot[2]; //создаём массив объектов класса точка
квадрат рисуется по 2-м точкам?
тогда лучше в функцию рисования и передать 2 точки
C++
1
Draw(const cPlane& p1, const cPlane& p2)
revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
01.12.2011, 12:33  [ТС]     Класс квадрат #3
Цитата Сообщение от PointsEqual Посмотреть сообщение
квадрат рисуется по 2-м точкам?
тогда лучше в функцию рисования и передать 2 точки
C++
1
Draw(const cPlane& p1, const cPlane& p2)
Сделал так, только почему то ничего не отображается
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void CSquare::Draw( CPlane & p1, CPlane & p2)
{   
    int j;
    
    
   char temp[80];
   int width = p1.getX() - p2.getX() +1;
 
   for(j=0; j<width; j++)   
      
       temp[j] = '.';   
       temp[j] = 0;                    
 
       for(int y=p1.getY(); y<=p2.getY(); y++)  
      {
          set_cursor_pos(p1.getX(), y);
           cout<<temp;
      }
    
}
Добавлено через 20 минут
с этим разобрался...перепутал правую и левую сторону)
А вот подскажите если не сложно, сейчас квадрат заполняется полностью...тоисть имеет вид
........
........
........
........
как сделать чтоб были заполнены только крайние грани?
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
01.12.2011, 12:42     Класс квадрат #4
Цитата Сообщение от revaldo666 Посмотреть сообщение
как сделать чтоб были заполнены только крайние грани?
примерно так:
в цикле

C++
1
2
3
4
if ( 0 == i || width == i)
temp[i] = '.';
else
temp[i] = ' ';
revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
01.12.2011, 12:47  [ТС]     Класс квадрат #5
вывелась только одна грань, в принципи как и в моём быдлокодовском варианте который я пробовал сам сделать.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
01.12.2011, 12:53     Класс квадрат #6
вечером посмотрю(если актуально будет еще)
revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
01.12.2011, 20:08  [ТС]     Класс квадрат #7
Актуально конечно будет, но в 7 по МСК желательно было бы уже сдать...

Добавлено через 1 час 3 минуты
Народ остался последний штрих)
Уже мозги кипят,
Каркас получился, но вывод его на экран происходит только в углу консоли а не по заданным координатам.
вот собственно код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void CSquare::Draw(int color,bool fill)
{   
    
    int j;
   char temp[80];
   if (left>=right)
      left=right/2;
   if(top>=bottom)
       top=bottom/2;
   int width = right - left +1;
   if(fill==true) //заполненный внутри квадрат
   {
   for(j=0; j<width; j++)   
   {
       temp[j] = '\xDB';
   }
       temp[j]=0;
       for(int y=top; y<=bottom; y++)  
      {
          set_cursor_pos(left, y);
          CPlane::ChangeColor(temp,color);
      }
   }
       if(fill==false) //незаполненный квадрат (каркас) тут и находится трабла с выводом
       {
          for (int i = 0; i < width; ++i)
                   {
                      for (int j = 0; j < width; ++j)
            if(i == 0 || i == width - 1 || j == 0 || j == width - 1)
                        cout<<'*';
             cout<<' ';
                puts("");
                
                     }
       }
}
Добавлено через 1 час 34 минуты
ну так что подскажет ктото?

Добавлено через 4 часа 32 минуты
всё ещё актуально
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
01.12.2011, 20:51     Класс квадрат #8
revaldo666, так ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>
#include <windows.h>
 
using namespace std;
 
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //дескриптор консоли
 
///////////////////////////////
 
char type_line = '*';
 
///////////////////////////////
 
void GotoXY(int x, int y){
    COORD position = {x, y};
    SetConsoleCursorPosition(hConsole, position);
}
 
///////////////////////////////
 
class cPoint
{
public:
    cPoint(int x, int y)
        : m_x(x),
          m_y(y) {}
 
    int GetX() const
    {
        return m_x;
    }
 
    int GetY() const
    {
        return m_y;
    }
 
private:
    cPoint();
 
private:
    int m_x;
    int m_y;
};
 
///////////////////////////////
 
class cSquare
{
public:
    cSquare(const cPoint& p1, const cPoint p2)
        : m_p1(p1),
          m_p2(p2) {}
 
    void Draw()
    {
        for(int i = m_p1.GetX(); i <= m_p2.GetX(); ++i)
        {
            GotoXY(i, m_p1.GetY());
            cout << type_line;
            GotoXY(i, m_p2.GetY());
            cout << type_line;
        }
 
        for(int j = m_p1.GetY(); j <= m_p2.GetY(); ++j)
        {
            GotoXY(m_p1.GetX(), j);
            cout << type_line;
            GotoXY(m_p2.GetX(), j);
            cout << type_line;
        }
    }
 
    //void Move();
 
private:
    cPoint m_p1;
    cPoint m_p2;
};
 
///////////////////////////////
 
 
 
 
 
int main()
{
    cPoint p1(10,10);
    cPoint p2(20,20);
 
    cSquare sq(p1, p2);
    sq.Draw();
 
    cout << endl;
 
    return 0;
}
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
01.12.2011, 20:57     Класс квадрат #9
скринШОТ
Миниатюры
Класс квадрат  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2011, 21:14     Класс квадрат
Еще ссылки по теме:

C++ Описать класс квадрат и пятиугольник
Класс «Квадрат»: можно ли вписать в объект-квадрат со стороной A окружность радиуса R C++
C++ Класс SQUARE (квадрат)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
01.12.2011, 21:14  [ТС]     Класс квадрат #10
Огромнейшее спасибо...даже незнаю как благодарить)
Yandex
Объявления
01.12.2011, 21:14     Класс квадрат
Ответ Создать тему
Опции темы

Текущее время: 05:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru