- Последовательности, naquad, 10:20 , 09-Янв-09 (1)
что-то мы с форумом друг друга не поняли: вместо ++buf; надо ++buf[i];
- Последовательности, naquad, 10:31 , 09-Янв-09 (2)
>что-то мы с форумом друг друга не поняли: вместо ++buf; надо ++buf[i]; >во, доредактировал
- Последовательности, vic, 12:13 , 09-Янв-09 (3)
> write(1,buf,k+1); > write(1,"\n",1); все тут. сначала сделайте преобразования, и только после этого пишите в дескриптор, и пишите через стандартную библиотеку там хоть буферизация есть. зы while(buf[x]==MAX&&x>-1) ошибка в условии цикла. если x == -1, первая часть условия будет вычислена первой, как следтсвие будет произведе доступ к buf[-1], что есть UB.
- Последовательности, naquad, 13:52 , 09-Янв-09 (5)
>[оверквотинг удален] >все тут. > >сначала сделайте преобразования, и только после этого пишите в дескриптор, и пишите >через стандартную библиотеку там хоть буферизация есть. > >зы >while(buf[x]==MAX&&x>-1) >ошибка в условии цикла. если x == -1, первая часть условия будет >вычислена первой, как следтсвие будет произведе доступ к buf[-1], что есть >UB. спасибо, не заметил.
- нескончаемой чередой потянулись студенты, Andrey Mitrofanov, 12:50 , 09-Янв-09 (4)
>Есть ли предложения по его оптимизации (особенно второго while'a)Оптимизация по скорости? По объёму памяти? Обе -- бессмысленны: код не зависит от входных данных (argv/argc или чтения чего-либо, рэндом-генераторов и пр.), то есть выводит (опуская возможность "использования" неициализированных данных) _одно_и_то_же_. Размер выводимых данных, вроде, не очень велик. ..."чуть больше" 26^2*3+26^3*4 - ~72k, если я "угадал". _Существенную_ прибавку в скорости могла бы дать буферизация выходного "потока", если она _уже_ не реализована в write()... А, это у нас ~write(STDOUT,~ типа? Ага. Ну, заменить на fwrite (или как их там...) с включением буфера "побольше-побольше" перед циклами. Очень желательна "оптимизация" _читабельности_ кода. Использование for(;;) вместо while() -- с собранными, по возможности, в одном месте "операторами", относящимися к циклу, например. Замена "k=0 ... k+1 ... ++k== ..." на "len=1 ... len ... len++ >=" (код с x тоже надо переписать; и перереименовать, возможно), "INITIAL 'A' ... MAX '[' ... ==MAX" на "CHAR_FIRST 'A' ... CHAR_LAST 'Z' ... >CHAR_LAST". Кстати, "1" --> "STDOUT" (или как оно там(тм)) очень облегчил бы чтение. Комментарии тоже не лишни - как отдельных строк/блоков кода, так и описания всей "сверхзадачи" сего генератороа последовательностей. За _читабельность_ препод может и накинуть, я думаю... > или примеры перебора на С? Не на Си, но четвёртый том Кнута -- это Оно. Ж-)))
- нескончаемой чередой потянулись студенты, naquad, 13:59 , 09-Янв-09 (6)
>[оверквотинг удален] >Ага. Ну, заменить на fwrite (или как их там...) с включением >буфера "побольше-побольше" перед циклами. > >Очень желательна "оптимизация" _читабельности_ кода. Использование for(;;) вместо while() -- с собранными, по возможности, в одном месте "операторами", относящимися к циклу, например. Замена "k=0 ... k+1 ... ++k== ..." на "len=1 ... len ... len++ >=" (код с x тоже надо переписать; и перереименовать, возможно), "INITIAL 'A' ... MAX '[' ... ==MAX" на "CHAR_FIRST 'A' ... CHAR_LAST 'Z' ... >CHAR_LAST". Кстати, "1" --> "STDOUT" (или как оно там(тм)) очень облегчил бы чтение. Комментарии тоже не лишни - как отдельных строк/блоков кода, так и описания всей "сверхзадачи" сего генератороа последовательностей. > >За _читабельность_ препод может и накинуть, я думаю... > >> или примеры перебора на С? > >Не на Си, но четвёртый том Кнута -- это Оно. Ж-))) Вобще-то по-скорости. Препод нипричём :) пишется для себя. Вобщем-то сие движок будующего тула для генерации последовательностей (uchar там пока что для удобства чтоб можно было видеть как отрабатывает, а будут int'ы). Спасибо за подсказку про Кнута, обязательно почитаю. По поводу читабельности: я привык так писать и этот код наврядли кто-то, кроме меня будет трогать. Буфферизацию добавлю. Больше всего интересует сам алгоритм инкремента. P.S. stdout, stdin, stderr - FILE*
- философские асекты написания вложенных цЫклАФ, Andrey Mitrofanov, 15:24 , 09-Янв-09 (9)
>>Не на Си, но четвёртый том Кнута -- это Оно. Ж-))) >Вобще-то по-скорости. Препод нипричём :) пишется для себя. Вобщем-то сие движок будующего тула для генерации последовательностей (uchar там пока что для удобства чтоб можно >было видеть как отрабатывает,Вот до этого места ещё можно было бы смотреть на john the ripper (да. гугль. нараз.) - его генерацию паролей для перебора... > а будут int'ы). Впрочем, int-ы (чего не unsigned-ы?--) не отменяют на john-а посмотреть. Но добавляют, может быть, всякие библиотеки манипулирования с числами "неограниченной точности" (на вскидку - не назову... bcd чего-нибудь? Исходники GNU bc?...). >почитаю. По поводу читабельности: я привык так писать и этот код наврядли кто-то, кроме меня будет трогать. Так, если и когда ты _сам_ этот/такой код потрогаешь после перерыва в неделю-месяц-два... Обязательно запомни свои _ощущения_ (Вставь одну строчку с комментарием-"напоминалкой" в код -- прямо сейчас, "шоб не забыть"!) от "вспоминиания" и разбирания по-новой. Подумай, как _собственные_ ощущения изменятся (-ились бы) от пущей читабельности. Как/сколько времени _себе_ сэкономишь/потратишь. _Процесс_ -- он, конечно, важен, но потратив на него лишнюю Ж) минуту, ты пропустил (или даже _потерял_ навегда!) минуту более интеерсных занятий. :))))) ... Прототипы на коленке легче клепать на скриптовых языках. Оптимизацию _нужно_ откладывать на потом. Рекомендую: taoup (да, находится нараз в гугле. да, _есть_ перевод на русский в книжных.) ESR-а. Там -- глава про оптимизацию, отдельная. >Буфферизацию добавлю. Больше всего интересует сам алгоритм инкремента. Я тебя умоляю -- только не самописной реализацией в том же спагетти коде и плавным использованием _всех_ названий переменных из одной латинской буквы. :)) >P.S. stdout, stdin, stderr - FILE* Наверное, поэтому тебе и говорили про _fwrite_?
- философские асекты написания вложенных цЫклАФ, naquad, 20:33 , 09-Янв-09 (10)
>[оверквотинг удален] > >>Буфферизацию добавлю. Больше всего интересует сам алгоритм инкремента. > >Я тебя умоляю -- только не самописной реализацией в том же спагетти >коде и плавным использованием _всех_ названий переменных из одной латинской буквы. >:)) > >>P.S. stdout, stdin, stderr - FILE* > >Наверное, поэтому тебе и говорили про _fwrite_? ну вобщем-то коммент по теме и полезен :) про латинскую букву: там их не 23. Да и это прототип на коленке сваянный. про fwrite мне говорили, а вот как write'ом голым писать в stdout/in/err - нет :) разве что write(fileno(stdout),...) :)
- философские асекты написания вложенных цЫклАФ, vic, 21:59 , 09-Янв-09 (11)
>про fwrite мне говорили, а вот как write'ом голым писать в stdout/in/err >- нет :) разве что write(fileno(stdout),...) :) ну в in писать это что-то новое в области кодостроения :) fwrite() вообще-то как бы по итогу сам вызывает write(), ну а выше было "write(STDOUT..", а не "write(stdout..", есть разница ;)))
- философские асекты написания вложенных цЫклАФ, naquad, 13:12 , 10-Янв-09 (12)
>>про fwrite мне говорили, а вот как write'ом голым писать в stdout/in/err >>- нет :) разве что write(fileno(stdout),...) :) > >ну в in писать это что-то новое в области кодостроения :) >fwrite() вообще-то как бы по итогу сам вызывает write(), ну а выше >было "write(STDOUT..", а не "write(stdout..", есть разница ;))) угу :) STDOUT нету :) есть STDOUT_FILENO
- нескончаемой чередой потянулись студенты, naquad, 14:08 , 09-Янв-09 (7)
у нас по магазинам что-то не наблюдается 4-й (или его выпуски). может кто-то подскажет где взять? (англ/рус - не важно)
|