Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Дневники и блоги —› ARCHANGEL's blog |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
Посл.ответ | Сообщение |
|
Создано: 13 июля 2012 18:28 · Личное сообщение · #1 Добрый день, уважаемые форумчане. Ни для кого не секрет, что решил я с недавних пор пойти учиться программированию. Поэтому стали меня интересовать практические аспекты кодинга, иногда весьма далёкие от вопросов реверсинга. Поэтому чтоб не засорять форум, решил создать этот блог. Стоит сказать, что вопросы, которые планируется тут разбирать, не такие уж и бесполезные. Они часто могут возникать при написании тех же кейгенов или тулз для реверсинга, так что, надеюсь, каждый сможет найти здесь что-нибудь интересное. Как некоторые уже догадались, вопросы Common Controls, простым числам, и сегодняшний вопрос по OpenGL как раз из серии учебных. Теперь о самом вопросе. На днях выполнял задание про отрисовку простых фигур: треугольника, квадрата и т.д. Решено было выполнять рисование средствами OpenGL. Литературы по этому делу много, поэтому я разобрался, что и как. Т.е. в литературе советовали использовать бибилиотеку glut.dll, которая сама не относится к стандартному OpenGL, но её применение, как я понял, упрощает использование OpenGL в своих проектах. Далее я решил создать базовый класс для отрисовки треугольника, а от него создать производные классы для отрисовки других геометрических фигур. Но на практике получилась вот такая сложность. Дело в том, что glut, по сути, инкапсулирует функции Windows и OpenGL, что упрощает операции с ними. Но от базовых вещей же никуда не деться. Т.е. если процедура обработки оконных сообщений (CALLBACK WindowProc) должна присутствовать, то в классе она должна быть статической. Так и здесь: Code:
Но вот проблема - мне нужно передать внутрь Draw несколько параметров. Являясь статическим методом, Draw не имеет указателя this, а значит не видит обычных полей. Статические поля он видит, но при попытке в конструкторе присвоить значения этим полям появляется ошибка линковки. Понятное дело, что по-хорошему, можно обойтись совсем без классов, но это превратит код в кашу - большое количество глобальных переменных, почти одинаковые функции со схожим функционалом принесут путаницу раньше, чем будут отрисованы несколько фигур. Кто посоветует, как быть в такой ситуации и как решить проблему со статическими функциями-членами? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 01 сентября 2012 21:49 · Личное сообщение · #2 F_a_u_s_t Та проект был один - калькулятор. По мере того, как я его делал, я добавлял туда разный код, а когда CryptoPP не заработала, просто потёр там все упоминания об этой самой CryptoPP, и пошёл дальше, так что присылать нечего. Да и щас уже неактуально, калькулятор сдал, двигаемся дальше. А к этому вопросу вернусь позже, т.к. для практики такой класс больших чисел был бы весьма полезен. Для всяких высокоточных инженерных расчётов, например. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 12 сентября 2012 16:33 · Личное сообщение · #3 Теперь стоит следующая задача. В общем, задача классическая (по кодингу). Есть шахматная доска 8х8, на ней случайно выбирается стартовая клетка, с которой начинает ходить конь, нужно найти такой путь обхода, при котором конь обойдёт всю доску, побывав в каждой клетке лишь единожды. На решение этой задачи накладываются ограничения - нужно решать с применением рекурсии (без алгоритмов на графах), без использования эвристик, помогающих в выборе клеток для следующего хода коня, т.е. всякие правила Вансдорфа и т.д. использовать нельзя. Но, блин, у меня возникает вопрос: а возможно ли это или условие задачи поставлено некорректно? Я наваял кодес, который, вроде бы, работает как задуманно, но он не может за конечное время найти решение, перебирает его миллионами - а его всё нет. Тогда сел я и подсчитал, сколько возможно комбинаций при такой реализации алгоритма. Получается, что коню нужно сделать ещё 63 шага (в одной клетке он уже стоит), чтоб побывать в каждой клетке на доске. Всего на каждом ходу существует максимум 8 вариантов для выбора следующей позиции. Конечно, некоторые ходы вели бы к выходу за пределы шахматной доски, поэтому такие ходы не делаются, другие могут не делаться, если конь уже побывал в локации, в которую ему предлагают перейти. Но это всё отсекается дополнительными проверками, изначально же на первом шаге у коня 8 вариантов, на втором 8х8=64 варианта, и так далее методом индукции получаем, что всего таких вариантов 8^63=7,8463771692333509547947367790096e+56. В связи с этим еть у меня опасения, что что-то я делаю неправильно. Проект прилагаю. 05ee_12.09.2012_EXELAB.rU.tgz - Small_Recursion.rar ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 12 сентября 2012 17:02 · Личное сообщение · #4 Условие поставлено некорректно. Без теории графов не обойтись. А с ней задача сводится к классическому поиску гамильтонова пути используя РЕКУРСИВНЫЙ поиск в глубину. ----- Следуй за белым кроликом | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 12 сентября 2012 18:50 · Личное сообщение · #5 Задача для перебора 8х8 конечно большая, но и кодеса что-то много. Вот из сети, тоже рекурсия, консолька конечно, но все в 26 строк помещается. Code:
----- 127.0.0.1, sweet 127.0.0.1 | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 12 сентября 2012 22:42 · Поправил: ARCHANGEL · Личное сообщение · #6 OKOB У меня почти тоже самое. Два основных отличия в том, что: 1. В примере из 26 строк задан статический массив смещений, как в книге Дейтела. Я же, когда писал код, до этого недокумекал, и вычислял все восемь возможных локаций - т.е. определял их координаты и хранил структуры с двумя полями в стеке. Получалось более медленно, но суть та же. 2. Там используется цикл ход для прохода по одному и тому же уровню дерева, я же цикл развернул - у меня восемь конструкций if. Плохо, конечно, но сути алгоритма, снова, не меняет. Ваш пример прекрасно отработал на доске 5х5, и трудится над доской 8х8. Что-то мне подсказывает, что результатов его труда я не дождусь. neomant Да, про такой алгоритм я слышал, но в задании специально уточнили условия - не использовать никаких алгоритмов на графах. Впрочем, вы, я полагаю, это уже поняли. И, что самое интересное, я ещё на паре высказал предположение, что результатов на доске 8х8 мы не дождёмся, на что мне ответили, что я не прав. Однако у меня в коде всё равно что-то не так, т.к. для доски 5х5 тоже не работает. Ладно, принцип я понял - сейчас перепишу по образу и подобию примера. 26 строк не обещаю, но заработать должно. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 17 сентября 2012 10:17 · Личное сообщение · #7 Если кому интересно. На паре проверяли эту задачу. Конечно, результата на доске 8х8 так и не дождались. Но 5х5 работает. Стартовая локация на доске выбирается рандомно, и, что самое интересное, если стартануть из произвольной локации, то выясняется, что гамильтонов путь есть не для всех стартовых локаций, поэтому прожка в таких случаях выдаёт "Невозможно найти путь", а в следующий раз может выдать маршрут. 1397_17.09.2012_EXELAB.rU.tgz - Recursion.exe ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 23 сентября 2012 14:16 · Личное сообщение · #8 Товарищи, решил немного поизучать DirectX, хотя б самые основы. Скачал несколько книг по версии 9 этой технологии, скачал SDK, начал почитывать и столкнулся с такой проблемой, что авторы литературы очень любят в своих примерах подключать какие-то свои самописные заголовочные файлы, без которых, естественно, их примеры не работают, а рыскать в поисках этих хидеров не очень хочется, да и привязываться к чужому коду нет желания. Хочется кодить, опираясь только на СДК. Посоветуйте литературу - статьи, книги, видеоуроки, с которых следует начинать освоение этой темы. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 28 сентября 2012 18:46 · Личное сообщение · #9 Если кому интересно, то погуглив и понакачав литературы, остановился на книге Фленова М.Е. - DirectX и С++ Искусство программирования. Далее купил ещё одну неплохую А.Попов DirectX 10 - это просто. Программируем графику на С++. Плюс понемногу изучаю сэмплы, идущие вместе с SDK. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 29 сентября 2012 23:34 · Личное сообщение · #10 |
|
Создано: 30 сентября 2012 16:21 · Личное сообщение · #11 reversecode Та не - мне не для разнообразия. Для работы возникла идея написать одну программу, которая бы в реальном времени показывала визуализацию одного технологического процесса. Не будем вдаваться в детали этого процесса, думаю, это мало кому будет интересно, но суть в том, что визуализацию в реальном времени миллионов молекул надо как-то прорисовывать. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 30 сентября 2012 17:01 · Личное сообщение · #12 |
|
Создано: 09 октября 2012 22:29 · Личное сообщение · #13 Товарищи, задача, видимо, не сложная, но я чего-то не доганяю. Есть у меня класс - двумерный массив. Всё в нём очень примитивненько, и надо мне, значит, перегрузить оператор [] так, чтоб я его мог дважды вызвать, т.е. например: Code:
Если так делать: Code:
То, как бы, дотянуться до самих элементов не выходит, т.к надо достать Pointer[i][j], а как это сделать? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 10 октября 2012 11:34 · Поправил: ARCHANGEL · Личное сообщение · #14 В книге Солтер, Клепер - С++ для профессионалов пишут на стр. 512, что мне нужно перегрузить оператор вызова функции (т.е. operator()) для работы с многомерными массивами, т.к. заставить operator[] принять несколько параметров на входе у меня не выйдет. Что ж, будем пробовать. T& __stdcall operator()(UINT i,UINT j) { return Pointer[i][j]; }; Да, так работает, класс создан шаблонным, а T - это <typename T>. Ну как-то так. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 11 октября 2012 14:57 · Поправил: reversecode · Личное сообщение · #15 можно и [][] перегружать умеючи, там свои хитрости, нужно возращать ссылку, а потом и ее перегружать [] тогда получается двойной [][] на rsdn часто обсуждали это. да и вообще в книгах помоему пишут | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 08 ноября 2012 23:52 · Личное сообщение · #16 Вот появилось время и решил снова терзать буст. Скачал свежую версию 1.52 с сорсфорджа, потом прочитал ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 09 ноября 2012 14:19 · Личное сообщение · #17 |
|
Создано: 10 ноября 2012 23:34 · Личное сообщение · #18 F_a_u_s_t Это да, что долго. Но я пока ещё не вкурил, долго из-за моей криворукости, либо из-за либы всё-таки. Дело в том, что даже примеры из буста решают схожие задачи разными способами, и, может, можно ещё лучше - короче, пока всё сводится к чтению мануалов с сайта буста... ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 10 ноября 2012 23:48 · Личное сообщение · #19 |
|
Создано: 11 ноября 2012 00:26 · Личное сообщение · #20 F_a_u_s_t Ну, не знаю, насколько мелким можно считать такой парсер, который должен распознавать порядка 20-30 токенов. А что из аналогов - yacc? Читаю класические труды на эту тему - так там больше теория, да, конечно, автомат для распознавания я уже, в принципе, мог бы составить, но не хочется терять на это время, если всё можно уже более-менее автоматизировать. Может подскажете что-то по лексическим анализаторам? Софт, книги, что-нибудь практическое. Я пока остановился на boost::spirit::lex, но готов прислушаться к годным советам. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 11 ноября 2012 00:45 · Личное сообщение · #21 |
|
Создано: 11 ноября 2012 00:46 · Личное сообщение · #22 |
|
Создано: 15 ноября 2012 14:55 · Личное сообщение · #23 |
|
Создано: 16 ноября 2012 01:25 · Личное сообщение · #24 |
|
Создано: 16 ноября 2012 02:20 · Личное сообщение · #25 ANRLR посмотри http://www.antlr.org/ пару слов на русском http://club.shelek.ru/viewart.php?id=39 а вот тут подборка литературы на Гиг и даже раздача есть http://book.libertorrent.com/viewtopic.php?t=11903 ----- 127.0.0.1, sweet 127.0.0.1 | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 16 ноября 2012 16:29 · Личное сообщение · #26 |
|
Создано: 17 ноября 2012 00:51 · Поправил: ARCHANGEL · Личное сообщение · #27 reversecode OKOB Спасибо, есть из чего выбирать, что читать. Буду осваивать. Концепцию я уже, вроде бы как, понял. Хорошо в литературе, что по первому, что по второму иснтрументу есть книги с практическими примерами. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 21 ноября 2012 21:34 · Поправил: Ratinsh · Личное сообщение · #28 |
|
Создано: 22 ноября 2012 20:26 · Личное сообщение · #29 |
|
Создано: 25 ноября 2012 04:38 · Поправил: Ratinsh · Личное сообщение · #30 |
|
Создано: 26 ноября 2012 16:26 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
eXeL@B —› Дневники и блоги —› ARCHANGEL's blog |