Воскресенье, 24 Ноября 2024, 23:35

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
ТритонДата: Пятница, 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
char x;
f((int &)x);
означает: "Впихни не впихуемое". При этом будет снесена нафиг граница ячейки, что уже чревато. Так делать нельзя, а первая же попытка выполнить внутри "в лоб" любое присваивание затрёт часть данных.
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 нашёл. Там один деятель поднял такую же тему, ему ответили.

Не всё так плохо, как оно есть на самом деле.
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг