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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
#1

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

23.05.2014, 20:21. Просмотров 622. Ответов 6
Метки нет (Все метки)

Добрый вечер,
с графикой в С++ ни разу не работал, поэтому прошу писать как можно понятнее
Создал класс 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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 20:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс Rectangle графика (C++):

Класс Rectangle совпадает с функцией Rectangle - C++
Пишу свой класс Rectangle, который при отрисовки использует функцию Rectangle из GDI. Возникает ошибка из-за того, что имена одинаковые. Но...

Класс Rectangle (прямоугольник) - C++
друзья , у меня экзамен . а я не бум бум в c++ . помогите кто сможет Создать класс Rectangle (прямоугольник). Класс имеет атрибуты...

Создать класс Rectangle - C++
Создать класс Rectangle, разработав следующие элементы класса: а. Поля: int a, b; б. Конструктор, позволяющий создать...

Класс Point и Rectangle - C++
*.h : class Point { public: Point(int m_x1, int m_y1); ~Point(); void InputPoint(int m_x1, int m_y1); private: ...

Реализовать класс Rectangle - C++
Реализовать класс Rectangle. Класс должен хранить координаты, а так же длину и ширину прямоугольника. Предусмотреть инициализацию данного...

Составить класс Rectangle - C++
Здравствуйте. Я хочу попросить чтобы вы составили класс с прототипами функций (код функций хочу написать сам), и оставили комментарии к...

6
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
23.05.2014, 20:49 #2
2 и 3 параметры должны задаваться выражениями, результатом которых является значение, которое соответствуем одному из стандартных типов или типов, определенных пользователем. 2 параметр возвращается оператором, если выражение истинно, третий, если ложно.
правильно будет так
C++
1
return(0.0 <= xy && xy <= 20) ?  true :false;
а лучше вот так
C++
1
 return(0.0 <= xy && xy <= 20);
1
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
23.05.2014, 20:52  [ТС] #3
А как насчёт графики?
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
23.05.2014, 21:18 #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-символ заполнения внутренностей прямоугольника
как-то так
1
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
24.05.2014, 01:15  [ТС] #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'

СБОЙ построения.
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
24.05.2014, 03:02 #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). Также при объявлении метода внутри класса не нужно ставить ; после закрывающих фигурных скобок. Также приходится очищать первоначальный диалог, чтобы вывести квадрат
0
newbie666
Заблокирован
24.05.2014, 03:27 #7
Цитата Сообщение от Denis123456789 Посмотреть сообщение
Просто в файле windows.h есть функция с именем Rectangle
0
24.05.2014, 03:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 03:27
Привет! Вот еще темы с ответами:

Создать класс Rectangle, разработав следующие элементы класса - C++
Создать класс Rectangle, разработав следующие элементы класса: a) Поля: int a, b; b) Конструктор, позволяющий создать экземпляр класса...

Нужно удалить класс Rectangle1 дружественный к классу Rectangle - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; struct Coords{ float x; float y; }; class...

Создать класс Rectangle и написать функцию масштабирования прямоугольника - C++
Создать класс Rectangle. Класс имеет атрибуты length и width, каждый из которых по умолчанию равен 1. У него имеются...

Класс Rectangle: возвратить значения координат, длины, ширины и площади - C++
Реализовать класс Rectangle. Класс должен хранить координаты, а так же длину и ширину прямоугольника. Предусмотреть инициализацию данного...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru