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

Простая графическая система - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ исправьте ошибку (изменить регистр букв в файле) http://www.cyberforum.ru/cpp-beginners/thread819942.html
Здравствуйте! Задача - заменить все строчные буквы следующие после точки или точка+пробел на заглавные. Попыталась сделать с помощью toupper, но ничего не выходит. Может можно каким-нибудь другим способом? В программировании недолго,не судите строго,если ошибки глупые. Прилагаю код программы (в ней еще заменяются двойные пробелы на одиночные, эта часть работает исправно). Код замены регистра...
C++ Как можно получить все подмножества множества? Например из множества, представлнного массивом должны получиться подмножества: http://www.cyberforum.ru/cpp-beginners/thread819929.html
C++ Метод Зейделя для СЛАУ
Написала код по Методу Зейделя, но НИКАК НЕ ПОЛУЧАЕТСЯ сделать так, чтобы выводило все итерации на экран!:(:(:( Прошу помочь! Код: #include<iostream> #include<cmath> using namespace std; #define N 100 void main() { int i,j,n,k=0;
C++ увеличить все элементы массива в n раз
увеличить все элементы массива в n раз
C++ Не найден оператор, принимающий правый операнд http://www.cyberforum.ru/cpp-beginners/thread819913.html
#include <iostream> #include <string> using namespace std; int main() { int x=5; int y=7; std::cout << endl ; std::cout << x+y << "" << x*y;
C++ stdafx.h и StdAfx.h Добавил в свое решение проект (win32, lib). Добавил класс. У меня создался cpp-файл каркас с #include "StdAfx.h". Почему здесь использованы ПРОПИСНЫЕ буквы? А в главном пректе -- #include "stdafx.h". подробнее

Показать сообщение отдельно
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
28.03.2013, 13:14  [ТС]     Простая графическая система
Цитата Сообщение от Jupiter Посмотреть сообщение
наследование тут не нужно, передавай окно параметром в метод draw каждой фигуры т.е. примерно так
C++
1
2
3
4
void Window::draw(const Shape& shape)
{
    shape.draw(*this);
}
в окно добавь метод drawDot который рисует одну точку и далее
C++
1
2
3
4
void Dot::draw(Window& wnd)
{
    wnd.drawDot(mX, mY);
}
Да вринципе я смотрю тут одного варианта не существует уже три варианта вижу, так как я с наследованием тоже можно было по идее сделать и работало б.
Спс буду дальше разбирать до готовой версии.

Добавлено через 19 часов 36 минут
Здарова!
От код кое как сделал, фиг его знает, что попало, пока токо для одного класса Line рабочий:

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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <iostream>
using std::cout;
using std::endl;
 
struct Point
{
    int x;
    int y;
    //konctryktor po ymolchaniyu
    Point():x(0),y(0){}
    //konctryktor preobrazovani9
    Point(int x, int y):x(x),y(y){}
    //konctryktor kopii
    Point(const Point& a):x(a.x),y(a.y){}
    //zadanie koordinat
    void set(int x, int y){x=x;y=y;}
};
 
class Window;
 
class Shape
{
    Point e;//east(vocxod)
    Point w;//west(zaxod)
    Point n;//north(cever)
    Point s;//south(yug)
    
    Point ne;
    Point nw;
    Point se;
    Point sw;
    Point c;//center
public:
    virtual void draw(Window*){};
    //konctryktor   
};
 
class Window
{
public:
    int mass[200][200];//massiv picselov
    int m;
    int n;
    Point* p;//nach koordinatu
 
    //konctryktor po ymolchaniyu
    Window()
    :m(0),n(0)
    {
        p=new Point;//cozdaem ykazatel6 na ob6ekt
    }
    
    //konctryktor preobrazovani9
    Window(int m, int n)
    :m(m),n(n)
    {
        p=new Point;//cozdaem ykazatel6 na ob6ekt
    }
    
    //vuzuvaetc9 dl9 zadani9 koordinat
    Point current(Point a)
    {
        p->x=a.x;
        p->y=a.y;
        return *p;
    }
    
    //vuzuvaetc9 dl9 pechati koordinat
    Point current()
    {
        //cout <<p->x<<' '<<p->y<<endl;
        return *p;
    }
    
    //vuvod oblacti
    void print()
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cout <<mass[i][j];
            }
            cout <<endl;
        }
    }
    
    void draw(Shape& a)
    {
        a.draw(&*this);//peredaem ykazatel6
    }
};
 
class Line : public Shape
{
    Point* a;
    Point* b;
public:
    //konctryktor
    Line(Point c, Point d)
    {
        a=new Point;
        a=&c;
        b=new Point;
        b=&d;
    }
    
    void draw(Window* w)
    {
        cout <<"drow Line"<<endl;
        
        //cout <<a->mass[2][3]<<endl;
        int x=a->x;
        int y=a->y;
        int x1=b->x;
        int y1=b->y;
    
        int x2;
        int y2;
    
        if(x<x1&&y<y1) //0,0 10,10
        {
            x2=x1-1;
            y2=x1-1;
            w->mass[x][y]=1;
            w->mass[x1][y1]=1;
            //naxodim tochki pr9moi
    
            while(x2>x&&y2>y)
            {
                w->mass[x2][y2]=1;
                x2=x2-1;
                y2=y2-1;
                //cout <<x2<<' '<<y2<<endl;
            }
        }
        if(x<x1&&y>y1)
        {
            x2=x+1;
            y2=y-1;
            w->mass[x][y]=1;
            w->mass[x1][y1]=1;
            //naxodim tochki pr9moi
        //  cout <<x2<<' '<<y2<<endl;
            while(x2<x1&&y2>y1)
            {
                w->mass[x2][y2]=1;
                x2=x2+1;
                y2=y2-1;
                //cout <<x2<<' '<<y2<<endl;
            }
        }
    }
};
 
int main()
{
    Window w(40,30);
    w.print();//vuvod pyctogo macciva
    
    Point p2(10,10);
    Line L(w.current(),p2);
    w.draw(L);//ricyet pervyyu liniyu (0,0 10,10)
    
    w.current(Point(0,20));
    Line L1(w.current(),p2);
    w.draw( L1 );//ricyet vtoryyu liniyu (0,20 10,10)
    
    w.print();//vuvod na ekran
    
    return 0;
}
Но явно что то я не так делаю, например в классе Shape я никак не использую 9 переменных? хз как их применить?
Я так могу для каждого класса передать например w.current() и вторую точку и тупо нарисовать фигуру. А как же эти переменные использовать?
Да и вообще шото не то походу.

Добавлено через 53 секунды
Да и линии токо по диагонали рисуются.

Добавлено через 3 минуты
там наверно они должны быть статические раз после вызова Shape:draw w current() устанавливается в значение переменной se то есть в правый нижний угол. ?????

Добавлено через 1 минуту
Господа помогайте я уже замучился с ней, а еще под эту задачку дальше штук 5 упражнений ее дорабатывать.

Добавлено через 1 минуту
Да на линии, то пофигу, что по диаганали главное, что рисуются, мне бы правильную структуру программы составить, так как положено, от что главное, а там уже как нарисуешь так нарисуешь, то уже на втором месте.

Добавлено через 16 минут
Можно конечно придумать, что при инициализации например Line(Point1, Point2) можно считать это как бы верх низ и из них можно определить все остальные 9 точек. хз. как бы предположить, что мы квадрат передаем, только для Rectangle уже прямоугольник. А для круга линии и точки квадрат. Хз. Да мб не заморачиватся бахнуть как попало да и все оно мб мне и нафиг не пригодиться. Скорее всего.

Добавлено через 1 минуту
Satanаx 8 помогай! Чо смотриш?

Добавлено через 5 минут
Меня утета строчка в условии задачи непонятна "Line(x.c(),y.nw()) создает линию из центра x в левый верхний угол y" Это как понимать то? Шо это за х и шо это за у? Ну видимо объекты типа Point. Ну токо еще он какие, то функции им добавил. Да запутано все.
 
Текущее время: 05:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru