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

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

Войти
Регистрация
Восстановить пароль
 
 
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

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

27.03.2013, 12:27. Просмотров 853. Ответов 16
Метки нет (Все метки)

Здарова!
Решаю задачку:
Реализуйте простую графическую систему, используя доступные на вашем компьютере графические средства (если их нет — используйте ASCII представление, где пиксел, это знакоместо): Window(n,m) создает на экране область размером nxm. Координаты декартовы. Окно w типа Window имеет координаты w.current(). Начальные координаты равны Point(0,0). Координаты можно задать с помощью w.current(p), где p имеет тип Point. Тип Point задается парой координат: Point(x,y). Тип Line специфицируется парой точек: Line(w.current(),p2); класс Shape является общим интерфейсом для Dot, Line, Rectangle, Circle и других фигур. Point не является Shape. Dot(p) представляет точку p на экране. Shape на экране не наблюдается до вызова draw(). Например: w.draw(Circle(w.current(),10)). Каждый Shape имеет девять контактных точек: e (east), w (west), n (north), s (south), ne, nw, se, sw и с (center). Например: Line(x.c(), y.nw()) создает линию из центра x в левый верхний угол y. После вызова draw() для Shape его текуцие координаты равны se(). Rectangle верхней левой и правой нижней вершинами: Rectangle(w.current(),Point(10,10)). В качестве простого теста изобразите простой детский рисунок «дом с крышей, два окна и дверь».

мб кто чо поможет или решение есть готовое?
А то я в ооп стиле никода не писал.

Добавлено через 4 минуты
Например от "Окно w типа Window имеет координаты w.current()." как это понимать? Оно, что должно напечатать или вернуть массив с размером окна? Головняк.

Добавлено через 2 минуты
Давайте господа подключайтесь решаем вместе. Задачка эта для начинающих из Страуструпа. Как раз я ее щас решаю подключаемся. Кто со мной тот герой.
Давайте кто первый решит , на скорость, тот и молодец
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 12:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Простая графическая система (C++):

Простая графическая библиотека - C++
Доброго времени суток! Мне нужно подключить графическую библиотеку к игре крестики нолики. Всё на простом уровне(нарисовать...

Простая файловая система - C++
Доброго времени суток! Уважаемые профессионалы, помогите пожалуйста. Необходимо написать простенькую файловую системы, способную...

Графическая библиотека С++ - C++
Как подключить граф. библ. в с++, если #include <graphics.h> не работает (в '' тоже) Помогите, очень надо)

Графическая оболочка - C++
Здравствуйте) у меня возникла проблемка, у меня есть скомпелированная игра "Змейка", но проблема в том, что еще нужно сделать графическую...

Графическая библиотека - C++
Здравствуйте ! Нужна простая графическая библиотека для построения графиков. Со встроенными осями координат(я имею ввиду чтобы не писать их...

Графическая заставка на С - C++
кто может поделиться кодом заставки на С с динамическими объектами.

16
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.03.2013, 12:28 #2
Цитата Сообщение от ninja2 Посмотреть сообщение
А то я в ооп стиле никода не писал.
от чего бы не начать?
1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.03.2013, 12:33  [ТС] #3
Цитата Сообщение от Jupiter Посмотреть сообщение
от чего бы не начать?
да придется мучить я ток хо побыстрее еще 12 задач про наследование нужно решить, главное первую вымучить, а остальные уже легко пойдут без вопросов.

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

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

Добавлено через 27 секунд
лучше если б кто то готовое решение дал, а потом готовое решение разобрать.

Добавлено через 24 секунды
обучение быстрее пойдет, а то самому разбирать я времени много затрачу.

Добавлено через 49 секунд
Это ж известная задачка небось. Неужели никто не решал?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.03.2013, 12:36 #4
Цитата Сообщение от ninja2 Посмотреть сообщение
не люблю пропускать задачи, совесть потом мучает
а чужие решения брать не мучает?
Цитата Сообщение от ninja2 Посмотреть сообщение
главное первую вымучить
зачем вообще тогда решать если это мука?
1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.03.2013, 12:41  [ТС] #5
Цитата Сообщение от Jupiter Посмотреть сообщение
а чужие решения брать не мучает?
Нет потому, что я потом заново перерешаю уже без подглядывания по чужому решению. Скорость обучения растет в разы. Самому разбирать много времени тратится.

Цитата Сообщение от Jupiter Посмотреть сообщение
зачем вообще тогда решать если это мука?
Скил набивать, потом уже будет легко не мука. . Яж говорю первую тяжело если не кода не делал, а затем уже легко идет. Как говорится второй раз не первый раз .
0
-=ЮрА=-
Заблокирован
Автор FAQ
27.03.2013, 12:46 #6
ninja2, лови Как рисовать элементарные геометрические фигуры?
1
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.03.2013, 12:47 #7
Цитата Сообщение от ninja2 Посмотреть сообщение
Нет потому, что я потом заново перерешаю уже без подглядывания по чужому решению. Скорость обучения растет в разы.
для тренировки памяти есть более эффективные способы

Цитата Сообщение от ninja2 Посмотреть сообщение
Скил набивать, потом уже будет легко не мука.
ну дык набивай - пиши код сам, а сюда приходи с нароботками и вопросами
1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.03.2013, 12:52  [ТС] #8
Не мне без ВИНАПИ я его еще не учил.

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
для тренировки памяти есть более эффективные способы


ну дык набивай - пиши код сам, а сюда приходи с нароботками и вопросами
Ок. Я значит буду задавать конкретные вопросы мелкие по теме.

Добавлено через 1 минуту
Все продолжаю делать возникнуть вопросы сюда кину.
0
-=ЮрА=-
27.03.2013, 12:55
  #9

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
Скил набивать, потом уже будет легко не мука
- ну так как ты тогда набъёшь тэлэнт если простого кода испугался? Там не АПА а обычная консолька с функциями GDI, единственная функция АПИ в проекте
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
HWND hWnd = GetForegroundWindow();
, которая получает дескрптор окна консоли, и всё.
Цитата Сообщение от ninja2 Посмотреть сообщение
Не мне без ВИНАПИ я его еще не учил.
- поищи тогда примеры с устаревшим graphics.h

1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.03.2013, 16:30  [ТС] #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:

- ну так как ты тогда набъёшь тэлэнт если простого кода испугался? Там не АПА а обычная консолька с функциями GDI, единственная функция АПИ в проекте , которая получает дескрптор окна консоли, и всё.
- поищи тогда примеры с устаревшим graphics.h

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

Добавлено через 3 часа 25 минут
Я от все немогу никак придумать как же его реализовать?
От допустим я создаю класс Window, это как бы окно класс Shape это производный абстрактный класс от Window, а от Shape уже производные все остальные классы.
Я представил класс Window как двумерный массив mass, размером двести на двести.
В начале мы просто инициализируем окно вызовом Window w(40, 40) например 40 на 40 размером. все есть.
Дальше я создал класс Line : public Shape ( Shape : public Window). Естественно в Window мы создаем public двумерный массив mass, чтобы мы могли его редактировать из остальных классов. Потом уже в конце при вызове Window:: print() вызвать картину на экран.

Так от у меня возникли вопросы по поводу конструирования классов. От допустим возьмем функцию Line::draw(). Она имеет доступ к массиву Window::mass (двумерному, это как бы окно).
Но если я в программе вначале инициализирую Window w(40,40), то функция Line::draw() не видит этот объект инициализированный, она как бы обращается к пустому классу, либо к новому классу хз.
Так от интересно как же быть?
мб создать массив mass статическим и размеры его? Чтобы они были видны с любого экземпляра класса?
Или мб я сразу не правильно создаю? хз.

От если б был бы mass статический, то мы б легко его могли заполнять вызовом разных draw() из разных классов либо через указатель на базовый класс. А затем уже вконце вывести само окно на печать.

Наверно принцип программы сводится к заполнению массива который есть как бы окно? Правильно ж я понял?

Добавлено через 6 минут
Jupiter, Помоги с алгоритмом тыж опытный!
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.03.2013, 16:31 #11
Цитата Сообщение от ninja2 Посмотреть сообщение
От допустим я создаю класс Window, это как бы окно класс Shape это производный абстрактный класс от Window, а от Shape уже производные все остальные классы.
почему Shape является окном? обоснуй это.
если следовать этой логике, то спички являются спичечным коробком
1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.03.2013, 16:42  [ТС] #12
Цитата Сообщение от Jupiter Посмотреть сообщение
почему Shape является окном? обоснуй это.
Это я описался Shape это производный класс от Window

Добавлено через 3 минуты
Window -> Shape , от Shape идут все остальные классы Dot, Line, Rectangle, public наследование, чтобы можно иметь доступ к Window::mass это как бы представление окна Window. Но мне не понятно правильно ли я делаю. И вообще от кажется сам Window::mass нужно сделать static, чтобы можно было его редактировать из классво разных фигур Dot::draw(), Line::draw(), Rectangle::draw(), потому что они обращаются как бы к новому экземпляру Window

Добавлено через 5 минут
Jupiter, Не ну ты хоть понял как я имею введу сделать? От имеется массив Window::mass[200][200].
При инициализиции мы задаем границы Window::n, Window::m.
А дальше просто Shapе наследует Window Line наследует Shape и в Line мы имеем доступ к n, m и mass, и меняем значение его, как бы в линию. Также и другую фигуру. А потом просто Window:: print() и вывилось окно в консоле, то есть массив mass.
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.03.2013, 16:45 #13
Цитата Сообщение от ninja2 Посмотреть сообщение
Это я описался Shape это производный класс от Window
вот я и спрашиваю, почему ты так сделал?

фигура не является окном:
1) включи голову и ещё раз подумай;
2) прочитай задачу ещё раз (ну нет там и слова про Window -> Shape);
3) прочитай главу про наследование ещё раз, сконцентрировав внимание не на синтаксисе, а на том когда применяется наследование и для чего.

окно должно агрегировать фигуры
1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.03.2013, 16:56  [ТС] #14
Цитата Сообщение от Jupiter Посмотреть сообщение
вот я и спрашиваю, почему ты так сделал?

фигура не является окном:
1) включи голову и ещё раз подумай;
2) прочитай задачу ещё раз (ну нет там и слова про Window -> Shape);
3) прочитай главу про наследование ещё раз, сконцентрировав внимание не на синтаксисе, а на том когда применяется наследование и для чего.

окно должно агрегировать фигуры
Мне нужно иметь доступ к окну или хз, поэтому я сделал наследование Shape : public Window.? Или нужно было сделать в Window friend class Shape; ?

А вообще принцип решения задачи у меня правильный? Типо сводится к заполнению массива, а затем вывода его на экран?

От примерно по такому коду:
C++
1
2
3
4
5
6
Window w(30,30) //создает размер окна
Point a(3,4);
Point b(5,6);
Line (a,b);//заполняет static Window::mass (рисует в нем линию)
Rectangle(тоже передаем чото) //тоже заполняет
w.print();//вывод mass на экран, как бы окна
Добавлено через 2 минуты
А ну я понял что ты имееш в виду нужно в каждом классе хранить указатель на объект Window. Правильно ж?

Добавлено через 1 минуту
Да впринципе правильно создаем объект Window w(40, 40) и при инициализации фигур передаем указатель на объект и все нам не нужно наследовать Window и делать статические элементы?

Добавлено через 57 секунд
Jupiter, Да ты прав. Впринципе так как то проще.
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.03.2013, 17:02 #15
Цитата Сообщение от ninja2 Посмотреть сообщение
Мне нужно иметь доступ к окну или хз, поэтому я сделал наследование Shape : public Window.?
наследование тут не нужно, передавай окно параметром в метод 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);
}
1
27.03.2013, 17:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2013, 17:02
Привет! Вот еще темы с ответами:

Графическая задача - C++
http://www.cyberforum.ru/attachments/457081d1416643210 Помогите решить эту задачу

Графическая оболочка на С++ - C++
Привет всем, учил С++ , но так просто для проведения досуга , теперь решил писать программы, столкнулся с вопросом, хочу писать программы,...

графическая оболочка - C++
Возник вопрос с таким заданием: 1)Нужно создать абстрактный класс "геометрические фигуры" сделать 3 дочерних класса, треугольник,...

Графическая оболочка - C++
А чтобы писать программы с графической оболочкой на С++ скоко надо учиться? и как это сложно?


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

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

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