RE: Вопросы по C/C++ (Для новичков)
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 19:27:13.650000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 19:37:56.950000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer По линку не увидел ничего по теме, английским владею на уровне перевода со словарем в стандартной библиотеке C нет функции, которая сама бы выбрала seed для инициализации генератора - есть только srand, seed для которого ты должен выбрать вручную (например, текущее время + pid). стандартная библиотека не предоставляет интерфейса получения текущего seed'а, но схоронить его для отслеживания - дело трёх строчек: unsigned int seed = 0;
void setSeed(unsigned int s)
{
srand(s);
seed = s;
}
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 19:39:52.020000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 19:41:23.663333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer Я инициализирую в начале программы. А получить надо в середине. и что? нахрен тебе этот непереносимый костыль?
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 19:44:34.326666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
unsigned int seed = 0;
void setSeed(unsigned int s)
{
srand(s);
seed = s;
}
int main(void)
{
int RandSeed;
setSeed(0x29A);
RandSeed = seed;
printf("ff = %x", RandSeed);
return 0;
}
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 19:45:47.183333
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 19:46:33.643333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer Твой способ не катит. да ну? может ещё и скажешь, почему он не катит?
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 19:54:25.443333
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 20:07:27.610000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer Потому что мне нужно получить сам счетчик а не первоначальное число которое его инициализирует. После куча rand() он меняется. И он уже не равен первоночальному. Ты походу не понял чего я хотел. seed не меняется. ни в C, ни в Delphi. вот тебе вариант реализации rand/srand: unsigned long next = 1;
int rand (void)
{
next = next * 1103515245L + 12345L;
return (unsigned int)((next >> 16) & 0x7fff);
}
void srand (unsigned int seed)
{
next = seed;
}
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 20:10:35.406666
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 20:14:12.466666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer Он так же не меняется как и в твоем примере переменная next :) до тебя не доходит, что seed и переменная next - это разные вещи? зерно, которым инициализируется генератор и текущее сотояние генератора, однозначно определяемое по seed и позиции в последовательности
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 20:18:08.910000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 20:34:58.460000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer Разве они равны после rand(); ? давай по порядку. ты инициализируешь генератор зерном seed, которое ты знаешь, и которое однозначно определяет генерируемую последовательность. внутреннее устройство генератора - implementation-defined, оно может быть практически произвольным (например, переменных next может быть две). оценить текущее сотояние ты можешь по выхлопу rand. в принципе, имея исходники libc ты можешь вытянуть значение любых внутренних переменных rand (через extern, если они не static,- или подправив код) однако главный вопрос вот в чём: что именно кроме seed и выхлопа rand тебе нужно, и зачем?
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 20:46:25.096666
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 20:52:37.446666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer Так вот по адресу 404008h находится переменная RandSeed. В Delphi можно получить к ней доступ. стандарт C не определяет реализации функции rand. понимаешь? quote:
ORIGINAL: Sunzer к счетчику нет доступа просто так. я там выше написал - реализация может быть произвольной, счётчиков может быть два (три, много); к какому из них ты хочешь получить доступ? quote:
ORIGINAL: Sunzer А есть ли более простой способ? понимаешь, я не могу запретить тебе маяться хернёй - это твоё полное право. но мне всё же хотелось бы услышать ответ на вопрос "зачем тебе это нужно?". возможно, тогда и решение найдётся
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 20:56:19.256666
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 21:05:37.280000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer Я задал понятный попрос, и кроме как тонны умных слов ничего толкового не узнал. Какая разница зачем. Нужно и все. ты задал на редкость идиотский вопрос, что-то вроде "из револьвера какой марки лучше всего отстреливать себе яйца?"; если ты не хочешь отвечать на мой вопрос - что ж, мне больше нечего добавить. удачи quote:
ORIGINAL: Sunzer Несколько счетчиков? Нука дайте мне бинарик с такой реализацией. unsigned long next1 = 1;
unsigned long next2 = 1;
int rand(void)
{
next1 = next2 * 1103515245L + 12345L;
next2 = next1 * 1056372849L + 54321L;
return (unsigned int)(((next1 & next2) >> 16) & 0x7fff);
}
void srand(unsigned int seed)
{
next1 = seed;
next2 = seed;
} скомпилируешь сам
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 21:49:57.790000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 21:52:05.963333
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
quote:
подскажите, откуда берутся nop 74 7F 90 90
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 22:07:01.390000
|
|
|
iidsp
Сообщений: 379
Оценки: 0
Присоединился: 2009-10-14 23:13:19.856666
|
quote:
74 7F 90 90 уточнил вопрос…
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 22:09:09.980000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer 2Denaturat Смотри. Есть чистый проект: main() { srand(1); } Куда это команда запишет единицу? стандарт этого не определяет. тебе известна только семантика данной операции и её интерфейс; как именно она будет реализована - оставлено на усмотрение авторов конкретной libc
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 22:14:35.080000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 22:16:28.296666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
дабы не быть голословным: смотри ISO/IEC 9899:1999, пункт 7.20.2 на функцию srand наложены следующие условия: при одном и том же seed последовательности, генерируемые rand должны совпадать; по умолчанию seed принимается равным 1; srand должен быть реализован без вызовов других библиотечных функций. никаких ограничений на реализацию не накладывается, потому и однозначного интерфейса доступа к интересующей тебя переменной быть не может
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 22:19:36.056666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer Ок. Хорошо спасибо. Получается только нестандартно оттуда вытащить значение можно. Либо реализовать свой псевдогенератор случайных чисел. да. ты можешь либо сделать непереносимый костыль (вроде того, который у тебя там выше нарисован), который будет привязан к конкретной реализации libc; либо написать собственный генератор. второй вариант предпочтительней, потому как переносимые реализации вполне возможны
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-26 22:24:54.130000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
del
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-27 01:44:46.176666
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: Sunzer Ок. Хорошо спасибо. Получается только нестандартно оттуда вытащить значение можно. Я как-то писал бота для игры, который играл в однорукого бандита. Бинарник бандита менять я не хотел, запускать его под отладкой – тоже: это было бы тупым и неинтересным читерством. Поэтому я просто перехватывал вывод программы, разбирал его, и по результатам отправлял ему на вход фейковые нажатия клавиш клавиатуры. Алгоритм однорукого бандита у меня был на руках, я знал все вызовы rand которые он выполняет на каждом цикле. И я пытался вычислить текущее значение rand, чтобы угадывать моменты, когда надо идти ва-банк. Кончилась эта бодяга ничем. Когда же я полез разбираться, – что за фигня? – я выяснил что в glibc реализация rand – это не простой линейно-конгруэнтный генератор, а нечто более жестокое. Я не вдавался в подробности, название алгоритма не помню, но там вместо 32-бит переменной next, было, по-моему, порядка тысячи бит состояния. Сколько точно, не помню, но по-любому гораздо больше того, что я мог бы надеятся выяснить перебором. Это я просто в качестве примера, подтверждающего мнение денатурата:quote:
ты можешь либо сделать непереносимый костыль (вроде того, который у тебя там выше нарисован), который будет привязан к конкретной реализации libc…
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-27 01:50:52.516666
|
|
|
Pashkela
Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
|
ми уже давно писал - Denaturat и _Saz_ в модеры компилируемых языков, достойные парни
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-27 08:13:29.876666
|
|
|
TimSkywalker
Сообщений: 7
Оценки: 0
Присоединился: 2010-03-21 06:08:04.610000
|
Тут вопрос по сокетам точнее по Winsock, у меня в программе-сервере функция bind работает нормально только когда в структуре sockaddr_in поле sin_addr.s_addr имеет значение INADDR_ANY(или 0) то есть сервер принимает подключения на все IP адреса с указанного в sin_port порта, а когда указываешь конкретный один IP и порт, то все bind не пашет(возвращает ненулевое значение) в чем может быть прблема или так и должно быть?
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-27 23:50:31.646666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Pashkela Denaturat…в модеры уж увольте, видел я такое счастье в гробу в белых тапках
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-30 23:45:11.083333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
char замени на wchar_t strlen замени на wcslen count замени на wcout И читай про юникод. Какого х ты делаешь приведение типа: (LPWSTR)str. Что за г**но-стайл делать сишное приведение типов во всех местах, где компилер показывает ошибки, вместо того, чтобы подумать, почему возникла ошибка.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-31 14:16:53.186666
|
|
|
m_Sam
Сообщений: 15
Оценки: 0
Присоединился: 2010-05-13 12:11:24.050000
|
quote:
ORIGINAL: _SaZ_ char замени на wchar_t strlen замени на wcslen count замени на wcout И читай про юникод. Какого х ты делаешь приведение типа: (LPWSTR)str. Что за г**но-стайл делать сишное приведение типов во всех местах, где компилер показывает ошибки, вместо того, чтобы подумать, почему возникла ошибка. Вчера вечером только докумекал что надо wchar_t использовать, остальное так сказать вытекающее, а вот насчёт cout думал что используется wout, а не wcout О_о и был неправ) Надо почитать. Ахах) Нормальный г**но-стайл, или есле выразиться длиннее - опасный стиль под названием "посмотрим что будет" xDD Спасибо за хороший ответ![sm=bs.gif]
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-31 14:37:00.540000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
зы, выделяешь 100 байт (чаров) - а функции говоришь, что выделил 100 * sizeof(wchar_t) = 100 * 2 = 200. Выводы сами напрашиваются )
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-31 21:00:20.440000
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); printf("hello)\n"); SetConsoleTextAttribute(console, 0x09); printf("hello\n"); getchar(); return 0; А под unix подобными системами как организовать цветной вывод printf?
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-05-31 22:25:31.556666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Sunzer А под unix подобными системами как организовать цветной вывод printf? зависит от оболочки. для bash как-то так (bash color escape sequences): http://tuxtraining.com/2009/08/30/bash-color-escape-codes http://www.daniweb.com/forums/thread33099.html
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-06-01 06:47:10.726666
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: Sunzer А под unix подобными системами как организовать цветной вывод printf? esc-последовательности. Они более-менее одинаковы на разных терминалах. Можно использовать termcap, чтобы выяснять точно какие последовательности чего делают – но я не разу не пробовал, даже не представляю насколько это может быть сложно. Наконец, есть ncurses, который берёт на себя всё общение с termcap. Но если нужен просто терминал, с одним дополнением – цветным выводом, – то пожалуй ничего лучше esc-последовательностей нету. quote:
ORIGINAL: Sunzer зависит от оболочки. для bash как-то так (bash color escape sequences): От языка программирования там ничего не зависит. Вот терминал может влиять. gnome-terminal может использовать другие esc-последовательности, по сравнению с ядерной консолью, но все стараются выдерживать совместимость с ansi терминалом, и основные последовательности у всех одинаковые. В частности последовательности установки цвета. То есть puts ("\e[00;31mhello") сработает не хуже чем echo -e '\e[00;31mhello'.
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-06-01 09:33:21.220000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: rgo От языка программирования там ничего не зависит. Вот терминал может влиять. факт, неправильно написал
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-06-06 14:49:27.926666
|
|
|
Merovingian
Сообщений: 59
Оценки: 0
Присоединился: 2008-12-29 13:55:36.936666
|
Ребят, подскажите пожалуйста, как получше реализовать посимвольный ввод строки с динамически выделяющейся памятью для неё? Длинна строки заранее неизвестна. Нужен цикл с getchar'ом, вероятно, + посимвольное выделение памяти realloc'ом. кому не сложно. кто знает..
|
|
|
RE: Вопросы по C/C++ (Для новичков) - 2010-06-06 15:05:15.096666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Читай ручками в цикле через getchar() - каждый раз перевыделяя память… Но это паранойя, оно того не стоит.
|
|
|
|
|