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

Класс Rectangle графика - C++

Восстановить пароль Регистрация
 
eXPonent
 Аватар для eXPonent
43 / 43 / 2
Регистрация: 21.05.2012
Сообщений: 727
23.05.2014, 20:21     Класс Rectangle графика #1
Добрый вечер,
с графикой в С++ ни разу не работал, поэтому прошу писать как можно понятнее
Создал класс Rectangle:
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
#include <iostream>
#include <stdlib.h>
using namespace std;
 
class Rectangle
{
    public:
        Rectangle() // Конструктор
        {
            do
            {
                cout << "Левый верхний угол:\n";
                cout << "Input x1: ";
                cin >> x1;
                cout << "Input y1: ";
                cin >> y1;
                cout << "Правый нижний угол:\n";
                cout << "Input x2: ";
                cin >> x2;
                cout << "Input y2: ";
                cin >> y2;
            }
            while(!coord());
            if(square())
                cout << "Прямоугольник является квадратом." << endl;
        };
        double lenght()
        {
            return max(x2-x1,y2-y1);
        };
        double width()
        {
            return min(x2-x1,y2-y1);
        };
        double perimeter()
        {
            return 2*(lenght() + width());
        };
        double area()
        {
            return lenght() * width();
        };
 
    private:
        double x1;
        double y1;
        double x2;
        double y2;
        bool square()
        {
            if(lenght() == width())
                return true;
            else
                return false;
        };
        inline bool coord()
        {
            if(diap(x1) && diap(y1) && diap(x2) && diap(y2))
            {
                cout << "Координаты введены верно!";
                return true;
            }
            else
            {
                cout << "Координаты введены не верно!\nПовторите ввод:" << endl;
                return false;
            };
        };
        inline bool diap(double xy)
        {
            if(0.0 <= xy && xy <= 20)
                return true;
            else
                return false;
        };
};
 
void main()
{
    setlocale(LC_ALL,"Russian");
 
    system("pause");
};
Модифицируйте класс Rectangle так, чтобы добавить в него функцию draw, которая изображает прямоугольник внутри окна 25 на 25, перекрывающего часть первого квадранта, в котором находится прямоугольник. Включите функцию setFillCharacter, чтобы задавать символ, которым будет заполняться прямоугольник внутри. Добавьте функцию setPerimeterCharacter, чтобы задавать символ, которым будут печататься границы прямоугольника.

Добавлено через 25 минут
Почему не работает тройственный оператор:
C++
1
(0.0 <= xy && xy <= 20) ? return true : return false;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
23.05.2014, 20:49     Класс Rectangle графика #2
2 и 3 параметры должны задаваться выражениями, результатом которых является значение, которое соответствуем одному из стандартных типов или типов, определенных пользователем. 2 параметр возвращается оператором, если выражение истинно, третий, если ложно.
правильно будет так
C++
1
return(0.0 <= xy && xy <= 20) ?  true :false;
а лучше вот так
C++
1
 return(0.0 <= xy && xy <= 20);
eXPonent
 Аватар для eXPonent
43 / 43 / 2
Регистрация: 21.05.2012
Сообщений: 727
23.05.2014, 20:52  [ТС]     Класс Rectangle графика #3
А как насчёт графики?
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
23.05.2014, 21:18     Класс Rectangle графика #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <windows.h>
HANDLE hConsole;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
...
void Rectangle::draw()
{
POINT a;
for (int i=y1;i<=y2;i++)
{
a.x=x1;a.y=i;
  SetConsoleCursorPosition(hStdOut, a);
for (int j=x1;j<=x2;j++)
{
if (i==y1 || i==y2 || j==x1 || j==x2) cout<<zap1;
else cout<<zap2;
}
}
}
// zap1- символ заполнения для границ zap2-символ заполнения внутренностей прямоугольника
как-то так
eXPonent
 Аватар для eXPonent
43 / 43 / 2
Регистрация: 21.05.2012
Сообщений: 727
24.05.2014, 01:15  [ТС]     Класс Rectangle графика #5
при внедрении функции возникли ошибки
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
99
100
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using namespace std;
 
HANDLE hConsole;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
 
class Rectangle
{
    public:
        Rectangle() // Конструктор
        {
            do
            {
                cout << "Левый верхний угол:\n";
                cout << "Input x1: ";
                cin >> x1;
                cout << "Input y1: ";
                cin >> y1;
                cout << "Правый нижний угол:\n";
                cout << "Input x2: ";
                cin >> x2;
                cout << "Input y2: ";
                cin >> y2;
            }
            while(!coord());
            if(square())
                cout << "Прямоугольник является квадратом." << endl;
        };
        double lenght()
        {
            return max(x2-x1,y2-y1);
        };
        double width()
        {
            return min(x2-x1,y2-y1);
        };
        double perimeter()
        {
            return 2*(lenght() + width());
        };
        double area()
        {
            return lenght() * width();
        };
        void draw()
        {
            POINT a;
            for (int i = y1; i <= y2; i++)
            {
                a.x = x1;
                a.y = i;
                SetConsoleCursorPosition(hStdOut, a);
                for (int j = x1; j <= x2; j++)
                    (i==y1 || i==y2 || j==x1 || j==x2) ? (cout << '1') : (cout << '3');
            };
        };
 
 
    private:
        double x1;
        double y1;
        double x2;
        double y2;
        bool square()
        {
            if(lenght() == width())
                return true;
            else
                return false;
        };
        inline bool coord()
        {
            if(diap(x1) && diap(y1) && diap(x2) && diap(y2))
            {
                cout << "Координаты введены верно!";
                return true;
            }
            else
            {
                cout << "Координаты введены не верно!\nПовторите ввод:" << endl;
                return false;
            };
        };
        inline bool diap(double xy)
        {
            return(0.0 <= xy && xy <= 20);
        };
};
 
void main()
{
    setlocale(LC_ALL,"Russian");
 
    Rectangle PNG;
    PNG.draw();
 
    system("pause");
};
Ошибки:
Кликните здесь для просмотра всего текста
ClCompile:
Lab№1.cpp
c:\documents and settings\artyr\рабочий стол\task№5\lab№1\lab№1.cpp(50): warning C4244: инициализация: преобразование "double" в "int", возможна потеря данных
c:\documents and settings\artyr\рабочий стол\task№5\lab№1\lab№1.cpp(52): warning C4244: =: преобразование "double" в "LONG", возможна потеря данных
c:\documents and settings\artyr\рабочий стол\task№5\lab№1\lab№1.cpp(54): error C2664: SetConsoleCursorPosition: невозможно преобразовать параметр 2 из "POINT" в "COORD"
Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
c:\documents and settings\artyr\рабочий стол\task№5\lab№1\lab№1.cpp(55): warning C4244: инициализация: преобразование "double" в "int", возможна потеря данных
c:\documents and settings\artyr\рабочий стол\task№5\lab№1\lab№1.cpp(96): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "PNG"
c:\documents and settings\artyr\рабочий стол\task№5\lab№1\lab№1.cpp(96): warning C4551: в вызове функции отсутствует список аргументов
c:\documents and settings\artyr\рабочий стол\task№5\lab№1\lab№1.cpp(96): error C2065: PNG: необъявленный идентификатор
c:\documents and settings\artyr\рабочий стол\task№5\lab№1\lab№1.cpp(97): error C2065: PNG: необъявленный идентификатор
c:\documents and settings\artyr\рабочий стол\task№5\lab№1\lab№1.cpp(97): error C2228: выражение слева от ".draw" должно представлять класс, структуру или объединение
тип: 'unknown-type'

СБОЙ построения.
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
24.05.2014, 03:02     Класс Rectangle графика #6
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
99
100
101
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using namespace std;
 
HANDLE hConsole;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
namespace my_namespace
{
    class Rectangle
    {
    public:
        Rectangle()
        {
            do
            {
                cout << "Левый верхний угол:\n";
                cout << "Input x1: ";
                cin >> x1;
                cout << "Input y1: ";
                cin >> y1;
                cout << "Правый нижний угол:\n";
                cout << "Input x2: ";
                cin >> x2;
                cout << "Input y2: ";
                cin >> y2;
            } while (!coord());
            if (square())
                cout << "Прямоугольник является квадратом." << endl;
        }
        double lenght()
        {
            return max(x2 - x1, y2 - y1);
        }
        double width()
        {
            return min(x2 - x1, y2 - y1);
        }
        double perimeter()
        {
            return 2 * (lenght() + width());
        }
        double area()
        {
            return lenght() * width();
        }
        void draw()
        {
            COORD a;
            for (int i = y1; i <= y2; i++)
            {
                a.X = x1;
                a.Y = i;
                SetConsoleCursorPosition(hStdOut, a);
                for (int j = x1; j <= x2; j++)
                    (i == y1 || i == y2 || j == x1 || j == x2) ? (cout << '1') : (cout << '3');
            }
        }
 
 
    private:
        double x1;
        double y1;
        double x2;
        double y2;
        bool square()
        {
            if (lenght() == width())
                return true;
            else
                return false;
        }
        bool coord()
        {
            if (diap(x1) && diap(y1) && diap(x2) && diap(y2))
            {
                cout << "Координаты введены верно!";
                return true;
            }
            else
            {
                cout << "Координаты введены не верно!\nПовторите ввод:" << endl;
                return false;
            }
        }
        bool diap(double xy)
        {
            return(0.0 <= xy && xy <= 20);
        }
    };
};
int main()
{
    setlocale(LC_ALL, "Russian");
    my_namespace::Rectangle a;
    system("cls");
    a.draw();
 
    system("pause");
    return 0;
}
попробуйте так. Просто в файле windows.h есть функция с именем Rectangle, ну и в функции main компилятор почему то интерпритирует идентификатор Rectangle, как идентификатор функции Rectangle.
Объявив наш класс в собственном пространстве имен и использую в main явное указание пространства имен, мы избавимся от неопределенности в интепритации идентификатора (либо можно просто класс назвать каким-либо другим именем, например rectangle). Также при объявлении метода внутри класса не нужно ставить ; после закрывающих фигурных скобок. Также приходится очищать первоначальный диалог, чтобы вывести квадрат
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 03:27     Класс Rectangle графика
Еще ссылки по теме:

Класс Rectangle: возвратить значения координат, длины, ширины и площади C++
C++ Создать класс Rectangle, который сохраняет Декартовы координаты четырех вершин прямоугольника
C++ Нужно удалить класс Rectangle1 дружественный к классу Rectangle

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

Или воспользуйтесь поиском по форуму:
newbie666
Заблокирован
24.05.2014, 03:27     Класс Rectangle графика #7
Цитата Сообщение от Denis123456789 Посмотреть сообщение
Просто в файле windows.h есть функция с именем Rectangle
Yandex
Объявления
24.05.2014, 03:27     Класс Rectangle графика
Ответ Создать тему
Опции темы

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