Результаты поиска
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 15:44 | Сообщение # 181 | Тема: Пару логических задач для новичков) |
постоянный участник
Сейчас нет на сайте
| Code void gauss(double *a, double *b, double *x, int n) { double *i; double *j; double *k; double z; double s; for (i=a; i<=a+(n-2)*n; i+=n) { for (j=i+n; j<=a+(n-1)*n; j+=n) { z=*j/*i; *j=0.0; for (k=j+1; k<j+n; ++k) { *j-=(*i)*z; } b[(j-a)/n]-=b[(i-a)/n]*z; } } for (i=a+(n-1)*n; i>=a; i-=n) { s=0.0; for (k=i+1; k<i+n; ++k) { s+=(*k)*(x[(k-a)/n]); } x[(i-a)/n]=(b[(i-a)/n]-s)/(*i); } } Это решение системы уравнений методом Гаусса, но коэффициенты системы передаются в линейном массиве. Но так делать не надо, потому что не споткнуться на таком тексте способны только автор и компилятор, но не тот человек, который будет читать это в чужой проге и разобраться то разберётся, но время потратит. И после собственного текста только со скаляром и тремя линейными массивами я буду утверждать, что метод Гаусса требует матрицу коэффициентов, а применить его к линейному массиву коэффициентов не возможно. В данном же примере аргумент a - неявная матрица.
Добавлено (27.04.2012, 15:44) --------------------------------------------- Quote (Archido) вот кстати, что есть в С++ стандарте по поводу параметров по умолчанию и виртуальных функций: Под твоим спойлером как раз иллюстрация того, то сигнатура берётся по номинальному классу.
Не всё так плохо, как оно есть на самом деле.
Сообщение отредактировал Тритон - Суббота, 28 Апреля 2012, 06:27 |
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 15:26 | Сообщение # 182 | Тема: Пару логических задач для новичков) |
постоянный участник
Сейчас нет на сайте
| Quote (Archido) О чем ты вообще пишешь? О том, что нельзя писать: "Возьми синюю краску в банке с красной этикеткой, преврати её в белую и крась по верх бесцветного лака", да ещё и разбрасывать все эти цвета по десяти томам текста. Читать будет тяжко. Само же "приведение" означает: "Впихни не впихуемое". При этом будет снесена нафиг граница ячейки, что уже чревато. Так делать нельзя, а первая же попытка выполнить внутри "в лоб" любое присваивание затрёт часть данных. Code void f(char &x); ... char s[]="123456789"; f(s[3]); ... void f(int &x) { x=(int)'R'; } даст строку "123R\0\0\089". Зачем извращаться и писать Code x=((int)'R')|(x&0x00FFFFFF); ? Сначала грузим легковушку на платформу для перевозки 42-х тонного зеркала телескопа БТА, потом провозим её на этой платформе через ворота, рассчитанные на проезд легковушки, сносим их нафиг и заново строим, вместо того, чтоб нормально проехать своим ходом. Зачем? Провезти же легковушку таким способом через расситанные на неё ворота без их сноса не возможно.
Добавлено (27.04.2012, 15:26) --------------------------------------------- Нохчи, Archido, я сам способен написать ещё и не такое пособие, как делать не надо. Причём, оно будет работать правильно.
Не всё так плохо, как оно есть на самом деле.
Сообщение отредактировал Тритон - Пятница, 27 Апреля 2012, 15:42 |
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 15:00 | Сообщение # 183 | Тема: Одновременное выполнение 2 функций. |
постоянный участник
Сейчас нет на сайте
| Quote (Morfay) Здравствуйте. Столкнулся с такой проблемой, что необходимо выполнить 2 функции одновременно, но не знаю как это реализовать лучше. Подробнее: Есть класс, работающий с анимациями. В нем все есть, анимации проигрываются. Но, к примеру, прописали мы в коде действий, что при нажатии на кнопку "D" персонаж будет идти вправо. Проигрывается соответствующая анимация, прибавляем координаты по Х к объекту. На деле же, получается, что эти два действия выполняются последовательно: или проигрывается анимация, а потом объект передвигается, или передвигается, а потом проигрывается. Как можно их объединить? А помимо анимации ты вообще где нибудь видишь, что объект перемещается? У одноядерных машин есть одна особенность: они в принципе не способны выполнять два дела одновременно. Но почему то это ни одной машине не помешало обрабатывать клавиатурный ввод и движение крысиного курсора одновременно. А фокус в разделении времени: в каждый момент времени машина делает что то одно, но в каждый период времени чередует свои действия и делает сразу всё, но делает это так, чтоб пользователь не успевал заметить неодновременности. А пока пользователь не способен заметить неодновременность, можно отождествлять режим разделения времени с логически параллельным исполнением.
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 09:01 | Сообщение # 184 | Тема: Пару логических задач для новичков) |
постоянный участник
Сейчас нет на сайте
| Quote (Archido) Все можно: Code
void swap(int &a, int &b) { char &x = *((char*)&a + 1); x = '7'; } При этом ты затрёшь нолями ещё 3 байта. Если они и были по нолям, то всё в порядке. А если нет?
Добавлено (27.04.2012, 09:01) --------------------------------------------- Quote (Archido) Ты до сих пор не понимаешь как работает это конструкция: "a ^= (b ^= (a ^= b & 0xFF) & 0xFF) Ещё смешней. Когла читаешь Code void swap(int &a, int &b); , то за ним представляешь Code void swap(int &a, int &b) { int t; t=a; a=b; b=t; } , действительная реализация должна быть эквивалентно. Если же на самом деле будет Code void swap(int &a, int &b) { int t; t=a; a=(b&0x000000FF)|(a&0xFFFFFF00); b=(t&0x000000FF)|(b&0xFFFFFF00); } , то счастливой отладки функции Code void sort(int *data, int n) { int *i; int *j; int *e; e=data+n-1; for (i=data; i<e; ++i) { for (j=i+1; j<=e; ++j) { if (*i<*j) { swap(*i,*j); } } } } . Порча дважды противоположными образами - не лучшее решение. Своп байтов должен выглядеть, как своп байтов. Зачем приводить байты к адресам двойных слов, чтоб сразу же не явно приводить их к адресам снова байтов?
Не всё так плохо, как оно есть на самом деле.
Сообщение отредактировал Тритон - Пятница, 27 Апреля 2012, 09:06 |
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 08:02 | Сообщение # 185 | Тема: Античит для игры |
постоянный участник
Сейчас нет на сайте
| Ну другие то люди всё равно есть, никуда они не денутся. Я, наоборот, ни когда не ломал онлайн. Когда с людьми играешь, интересно действительно посмотреть, кто круче. А вот когда один и никто не видит, вот сдесь начинается хвастовство рейтингами, оружием, бронёй, грузом, баком, игровой валютой. Кобра расчината на 35 тонн и то с дополнительным трюмом, а у меня было больше 4-х тысяч тонн груза. А чтоб всё таки самому можно было посмотреть, чего я в этой игре стою на самом деле, отдельно ещё одна честная отгрузка. В онлайне то игра одна и хвастанув фальшивкой я уже честный результат не получу. А зачем тогда играть? А сингл можно играть как бы параллельно, чередуя отгрузки. С бредофайлов, кстати, я не играл, я их генерил только на показ. А играл по-честному.
Добавлено (17.04.2012, 12:19) --------------------------------------------- Quote (Gavolot) Тритон, Но ты ради интереса кстати попробуй, скачай не слабую программу в шахматы, сыграй с кем-то онлайн в партию 20-30 минут и увидешь как легко так можно выигрывать. Причем можно даже не знать как фигуры ходят, ходит против тебя программа (ты ходишь против программы как твой соперник) а потом ходишь как программа там. Это еще более нечестно))) Я так не делал, потому-что тут и представлять нечего как это сделать. Ну это играешь не ты, а комп. Мне автаром при нём работать не интересно.Добавлено (27.04.2012, 07:56) --------------------------------------------- Для того, чтоб бот не имел смысла, он должен играть плохо. Взять, например, шахматы по аське. Если сами игроки - гростмейтеры, суперкомпьютеров у них нет и писать хорошие шахматных программы, то любой написанный ими бот гарантированно проиграет. Ну так вот, добейся, чтоб все боты стабильно проигрывали живым людям. Добавлено (27.04.2012, 08:02) --------------------------------------------- И не только интеллектуальной сложностью. Многие задачи для живого мозга много проще, чем их же цифровое решение. Например, попробуйте запрограммировать перехват мяча роботом. А живой воратарь без предварительных тренировок вообще и безо всякой теории будет в первую же игру ловить хоть иногда. Особенно, если противник - такой же футболист-новичок. Можно покопать и в эту сторону.
Не всё так плохо, как оно есть на самом деле.
Сообщение отредактировал Тритон - Вторник, 17 Апреля 2012, 12:20 |
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 07:51 | Сообщение # 186 | Тема: Недетерминированные |
постоянный участник
Сейчас нет на сайте
| Гордон. Прокомментируйте, пожалуйста.
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 07:44 | Сообщение # 187 | Тема: Начинающим игроделам посвящается... |
постоянный участник
Сейчас нет на сайте
| Блин. Перед изучением немецкого надо учить древнегерманский? Даже если нужны оба, то проще учить в обратном порядке.
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 07:41 | Сообщение # 188 | Тема: Юмор игроделов! |
постоянный участник
Сейчас нет на сайте
| Боян, но прикольный.
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 07:26 | Сообщение # 189 | Тема: Проект "Роза Ветров" |
постоянный участник
Сейчас нет на сайте
| Quote (manKurt) Тритон, я так понимаю, вы большой сторонник реализма в играх? Нет, конечно. Но здесь его на столько мало, что игрок может вообще не понять, что происходит. Перенеси игру в космос и назови "Звёздная регата". Пусть паруса будут огромными и блестят, чтоб игроки могли опознать их, как солнечные.
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 07:22 | Сообщение # 190 | Тема: Дизайн игры. Как вам? |
постоянный участник
Сейчас нет на сайте
| ЯQuote (aili) Можно искать не национальности, а возрасты Я в 27 выглядел на 15.
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 07:20 | Сообщение # 191 | Тема: Компиляция и линковка с командной строки |
постоянный участник
Сейчас нет на сайте
| Возможно ли это под windows 7 x64? Какие бесплатные, совместимые друг с другом компилятор и линкер посоветуете? Желательно, но не обязательно чтоб поддерживали компиляцию и линковку 64-х битных приложений под АМД64 (не под итаниум). Желательно, но не обязательно, чтоб и встроенный ассемблер был 64-х битный под АМД64 (не под итаниум). Обязательна поддержка OpenGL. Где к к этому компилятору качать стандартные головы и библиотеки? Где к нему качать OpenGL головы и библиотеки?
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 07:11 | Сообщение # 192 | Тема: Как узнать, на какой строке ошибка? |
постоянный участник
Сейчас нет на сайте
| А можно под виндой к какому нибудь компилятору обратиться с командной строки?
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Пятница, 27 Апреля 2012, 07:05 | Сообщение # 193 | Тема: Пару логических задач для новичков) |
постоянный участник
Сейчас нет на сайте
| Хорошо, допустим строка у тебя длинная и за границу ты не выйдешь. Но функция то значение отдельного байта всё равно уже не способна ни прочитать, ни записать, так как он теперь зависим от соседних, а аргументы у тебя - байты. Уж если свопишь подстроки, то выглядеть это должно иначе. И тогда, понимая, что обрабатываешь данные другого размера, приводи внутри функции к блоку нужного размера, но подразумеваться то уже будет приведение 4-х символьной подстроки к двойному слову. Размер при этом уже совпадает. Речь то не о том, что нельзя хитрить с регистрами, а о том, что отдельный символ не приводится к ссылке на 4 символа. Если же "приводить", то получишь не ожиданные результаты и лишние сложности при чтении. Каждая строчка должна сама отражать решаемую задачу, а чтоб из mycool_swap((int&)str[0], (int&)str[4]); вытянуть задачу, придётся выполнить функцию и посмотреть результат. Хорошо, я способен выполнить её сам, но это относительно простой случай, а в более сложных остаётся пожелать удачного отладочного года, если не избавишься от подобного стиля. Так делать нельзя, это должно быть Code void swapby4(char &x, char &y) { uint32_t t; t=*(uint32_t *)(&x); *(uint32_t *)(&x)=*(uint32_t *)(&y); *(uint32_t *)(&x)=t; } , либо функция с этим же заголовком и телом из вставки на асме, если охота её оптимизировать. А ни как не то, что ты написал.
Не всё так плохо, как оно есть на самом деле.
Сообщение отредактировал Тритон - Пятница, 27 Апреля 2012, 07:09 |
|
| |
Тритон | Дата: Четверг, 26 Апреля 2012, 16:52 | Сообщение # 194 | Тема: Как узнать, на какой строке ошибка? |
постоянный участник
Сейчас нет на сайте
| Во-первых у меня нет сотни лишних килобаксов за лицензию, а этот проект должен быть полностью на легальном софте. А во-вторых студия меня уже в конец задолбала.
Не всё так плохо, как оно есть на самом деле.
Сообщение отредактировал Тритон - Четверг, 26 Апреля 2012, 16:54 |
|
| |
Тритон | Дата: Четверг, 26 Апреля 2012, 16:49 | Сообщение # 195 | Тема: Пару логических задач для новичков) |
постоянный участник
Сейчас нет на сайте
| Quote (Archido) "приводящие конструкторы" ну если Code myclass { public: myclass (myclass &x); }; - копирующий, то как обозвать Code myclass { public: myclass (int &x); }; ? Подсказка: выполняется функцию не существующего оператора приведения Code class int { public: operator myclass (); }; .Добавлено (26.04.2012, 16:49) ---------------------------------------------
Quote (Archido) И еще раз повторюсь: в теле функции swap никаких приведений типов нет. Ты их воткнул в вызов. В явном виде. Но не привёл, а испортил. Символы переставятся сразу четвёрками, если за массивом есть другое данное, то полбеды, ты просто его запоганишь, а если там валяется функция, или память за массивом вообще не доступна приладе, то получишь крах с егогомессагой из системы. Привести же на другой размер нельзя. Значение можно, так как при этом создаётся новое значение уже другого данного, но в случае ссылки это должно быть то же самое данное.
Не всё так плохо, как оно есть на самом деле.
Сообщение отредактировал Тритон - Четверг, 26 Апреля 2012, 16:45 |
|
| |
Тритон | Дата: Четверг, 26 Апреля 2012, 16:24 | Сообщение # 196 | Тема: Пару логических задач для новичков) |
постоянный участник
Сейчас нет на сайте
| Quote (Archido) Какая еще вторая функция? Так не пробовал сделать? Code
void mycool_swap(int &a, int &b) { a ^= (b ^= (a ^= b & 0xFF) & 0xFF) & 0xFF; }
...
char str[] = "Hello"; mycool_swap((int&)str[0], (int&)str[4]);
В функцию передается два 4-байтных Int'a, а не char'a и при чем именно по сылке - раз символы в массиве все таки меняются . В теле функции swap никаких приведений типов нет, так, что думай почему оно так str={'H','e','l','l','o','\0'}, sizeof (str)=6. Code str: {'H','e','l','l','o','\0'} 1-й аргумент: X X X X 2-й аргумент: X X XX Выход за границу массива. Кстати, Code union { char x; hyper y; }; void f(hyper &y); x='q'; f(y);// Здесь нет выхода за границу, но даже это не приведение чара к ссылке на 8 байт (sizeof(hyper)=8), а порча данных. Привести к ссылке на другой размер не возможно вообще, на другой размер можно привести только к значению. Каким образом - это уже зависит от конкретной реализации оператора приведения, или приводящего конструктора. Бывает и дополнение полями, и дополнение единицами, и можно наворотить ещё много чего.
Не всё так плохо, как оно есть на самом деле.
Сообщение отредактировал Тритон - Четверг, 26 Апреля 2012, 16:41 |
|
| |
Тритон | Дата: Четверг, 26 Апреля 2012, 16:09 | Сообщение # 197 | Тема: Посмеемся. |
постоянный участник
Сейчас нет на сайте
| Quote (IHTI) Можно до бесконечности складывать лист бумаги с помощью тяжёлого пресса и влажной примазке, только разложить всё это дело не получиться и лист потеряет первозданный вид... Хоть катком катай. Бумага, набравшая 64-х кратную толщину предпочтёт порваться, но не сложиться.
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Четверг, 26 Апреля 2012, 16:03 | Сообщение # 198 | Тема: Школы станут платными? |
постоянный участник
Сейчас нет на сайте
| Quote (Spihex) Это не так. Это не так ни в Хабаровске, ни в каком-либо другом городе. Нужно быть идиотом, что б принять подобный закон. Понятно, что идиотов хватает, но этот случай - перебор даже для самого-самого идиота. Думаешь Фурсенко это остановит? Он уже мстит системе образования за то, что сам его не получил. А как это можно сделать эффективней, чем приказав брать за обучение плату, превышающую возможности большинства населения?
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Четверг, 26 Апреля 2012, 15:55 | Сообщение # 199 | Тема: Бесит уже - пожертвования (закрыто) |
постоянный участник
Сейчас нет на сайте
| Quote (Knight1032) Тут условие стоит жестко: нет денег, не будет вам игры!!! Но мы же в реальной жизни не платим за строительство завода, мы платим за продукт. Акционеры платят именно за строительство, зато когда завод начинает выпускать продукт, то уже платит им девиденды. Акции в ответ просить не пробовали? Согласятся то вряд ли согласятся. Но может ныть перестанут?
Не всё так плохо, как оно есть на самом деле.
|
|
| |
Тритон | Дата: Четверг, 26 Апреля 2012, 15:34 | Сообщение # 200 | Тема: DevС++, функция GetStockObject |
постоянный участник
Сейчас нет на сайте
| Уже на www.cyberforum нашёл. Там один деятель поднял такую же тему, ему ответили.
Не всё так плохо, как оно есть на самом деле.
|
|
| |
|