Программирование


Ответить в тред Ответить в тред

<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
513 51 145

C Programming Language #37 /clang/ Аноним # OP 28/12/18 Птн 18:18:17 13179131
C Programming L[...].png (78Кб, 792x1023)
792x1023
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь https://ideone.com/ или http://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [​i​] или ∗.

Что читать:

- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs

Чем конпелировать:

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

Что еще почитать:

http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.

Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.

Ben Klemens "21st Century C: C Tips from the New School" (2012)

Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)

Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard

Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C

Онлайн-утилиты:

- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.

Прошлые треды:

- №34: https://arhivach.tk/thread/398890/
- №35: https://arhivach.tk/thread/398891/
- №36: https://arhivach.tk/thread/407257/
Аноним 28/12/18 Птн 19:44:14 13179592
изображение.png (18Кб, 626x635)
626x635
Пацаны, я тут сделал сортировщик массива любого размера с ненулевым элементами. Злой дядя Хусаинов Н.Ш. из ИКТиБ ЮФУ в этой задачке прям расщедрился и разрешил использовать всё, но только в пределах stdio.h. Моё эго жаждет чужого мнения по поводу моего кода. Как он тебе? Говнокод или нет? Что можно изменить в рамках stdio.h, чтобы сделать его неговнокодом? Чем мой алгоритм хуже стандартных, если он вообще хуже?
Аноним 28/12/18 Птн 19:52:34 13179603
1546015949956.jpg (35Кб, 512x512)
512x512
Аноним 28/12/18 Птн 19:54:51 13179614
Аноним 28/12/18 Птн 20:02:02 13179635
>>1317959
ктбо-?
на самом деле лютый говнокод с хуевым стилем оформления, посмотри лекции по алгоритмам сортировки и ознакомся с конвенциями написания кода
Аноним 28/12/18 Птн 21:00:28 13179776
>>1317961
Положено писать на US English, если ты норм чел, который увОжает гайды. А не макака из Говногермашки или Китая, которые ебашут переменные на своих нахрюках.
Аноним 28/12/18 Птн 21:33:20 13180177
>>1317961
>И чё?
То, что переменные в идеале должны быть self-documenting, т.е. чтобы из названия можно было понять, что это за херь. Иначе как ты фрилансить-то собираешься? Чё за параша твой massiv?! Какой-нибудь myArray - это будущему заказчику понятно, а massiv - это что за поебень такая?
Аноним 28/12/18 Птн 21:47:40 13180238
>>1317913 (OP)
Эй, ананасы, кто там в прошлом треде за 8-битную разработку на Си и за компиляторы спрашивал? Помимо классического HiSoft C гляньте современный z88dk (z88dk.org) Алсо, рекомендую 8bitworkshop.com Там жаль, что не оффлайновая IDE-шечка и толковые книжки которые автор предлагает купить, но всё давно уже спижжено и в сети валяется.
Аноним 29/12/18 Суб 08:23:16 13182239
КР580.jpg (2073Кб, 3072x2304)
3072x2304
Аноним 29/12/18 Суб 12:03:15 131827210
>>1317959
Это полный пиздец, а не говнокод, такое только школьник или тупой студент в состоянии написать.
Аноним 29/12/18 Суб 15:21:49 131836311
Что можно почитать на тему параллельного программирования? Оно меня сожрет?
Аноним 29/12/18 Суб 21:02:05 131846312
>>1317913 (OP)
Как по-человечески установить mingw-64 и SDL на виндовс?
Вроде бы всё по гайду делаю, а зависимости не хочет подключать.
Аноним 29/12/18 Суб 21:39:56 131847013
Аноним 29/12/18 Суб 22:20:45 131847814
>>1318363
Начни с Effective Concurrency (цикл статей)
Аноним 29/12/18 Суб 22:29:59 131847915
Аноним 29/12/18 Суб 22:48:30 131848416
>>1317963
>>1318272
Что с его кодом не так? С виду все нормально.

мимо только на днях дошел до функций.
Аноним 29/12/18 Суб 23:15:30 131849117
>>1317959
for у вас там тоже запретили?
Аноним 29/12/18 Суб 23:40:46 131849818
>>1318223
А, да, кстати! Спасибо, что напомнил!
Аноним 29/12/18 Суб 23:50:52 131850519
>>1318484
Не инициализируется большая часть переменных, неочевидные имена, скобки с переносом строки (можешь погуглить пособие от гугла что ли, где они писали про правила хорошего тона в коде), нет разбиения на функции.
ну и сам код мне было впадлу читать. учил в этом семаке в вузике на не очень прогерском факе, мог спокойно проебать что-то важное
Аноним 30/12/18 Вск 00:00:34 131850720
VlBKtqLZfQ.jpg (21Кб, 468x520)
468x520
>>1318505
>скобки с переносом строки
Аноним 30/12/18 Вск 00:05:32 131850921
Аноним 30/12/18 Вск 00:06:04 131851022
>>1318509
>>1318507
Мб не в разделе, который я скинул, но там тоже скобки всегда без переноса.
Аноним 30/12/18 Вск 00:07:15 131851123
>>1318510
>>1318509
Вкусовщина так-то уровня: "табы vs пробелы".
Аноним 30/12/18 Вск 00:08:05 131851224
>>1318511
На мой взгляд тоже, но мне оба варианта глаза не режут, поэтому перешел на скобки без переноса.
Аноним 30/12/18 Вск 00:08:33 131851325
>>1318484
Через пару месяцев пересмотри его код, если ничего не изменится в твоём мнении, то бросай обучение.
Аноним 30/12/18 Вск 00:14:09 131851426
>>1318484
>Что с его кодом не так? С виду все нормально.

Все просто ужасно, абсолютно все. На ошибки я тебе указывать не буду.

Смотри свод правил в конце "C: Elements of style". Попробуй найти хоть одно, которое ты соблюдаешь.

>мимо только на днях дошел до функций.
Ну так иди и учи дальше. Пока что ты ничего не умеешь.

Другой анон
Аноним 30/12/18 Вск 00:15:06 131851527
Аноним 30/12/18 Вск 00:18:42 131851628
Аноним 30/12/18 Вск 00:23:11 131851729
>>1318507
Ну в некоторых языках чаще встречаются скобки без переноса, но в си, да, вообще-то с переносом предпочтительнее
Аноним 30/12/18 Вск 00:26:46 131851930
>>1317959
Так написать постараться надо, даже мне, ламеру, это видно. Ты троллишь?
Аноним 30/12/18 Вск 09:57:48 131860531
>>1318505
А разве фигурные скобки не надо переносить? Так они визуально показывают блок кода.

>>1318513
>>1318514
Я не учусь на программиста и не работаю им. Мне просто бывает скучно и я читаю Кернигана. Иногда делаю сам для себя задачи, которые мне интересно на телефоне. Вот, например, из недавнего сделал программу которая вычисляет шанс что из 1-5 кубиков выпадет хотя бы на одном 5 или 1 (для игры в тысячу считал):

https://pastebin.com/M9bE5BUG

Насколько говнокод, если я к тому моменту даже до функций не дошел? Думаю учиться делать нормально лучше с начала обучения. На телефоне форматировать текст неудобно, но я старался.

Аноним 30/12/18 Вск 10:42:46 131861832
Важно ли, где в объявлении указателя звёздочка?
В пpимеpах вижу int p, но мне кажется, что int p как-то лучше выглядит, ничего не смущает.
Аноним 30/12/18 Вск 10:53:50 131862333
>>1318618
Дело вкуса, в Винде обычно ставят звезду у типа, на Линукс у названия переменной, на макоси вообще между, то есть тип пробел звезда пробел название переменной.
я сейчас про ядро говорю
Вообще единственный аргумент есть в пользу линукса такой, что:
int #p, k, если ты пишешь вот так, то у тебя p это указатель, а k int, поэтому так типо более читаемо и согласуется с тем как компилятор разбирает код на морфемы.
Например:
int# p, k
Тут неподготовленный читательчитай новичок может подумать, что и p и k указатели, что конечно же не так.
Для компилятора без разницы как ты ставишь звёздочки, это нужно для человека, которые йбудет читать твой код.
# это звездочка
Аноним 30/12/18 Вск 12:06:08 131863934
628734208760234.png (37Кб, 1280x1024)
1280x1024
>>1317959
В том, в чём ты, блядь, пишешь - это полный отстой.
Быстро переходи на emacs, и люби самого себя.
emacs-goddess
Аноним 30/12/18 Вск 12:16:16 131864435
>>1318639
Ну сейчас бы пианино вместо ИДЕ советовать.
Аноним 30/12/18 Вск 12:28:58 131865036
>>1318644
Какой же ты тупой, когда ты сдохнешь пидар
Аноним 30/12/18 Вск 12:55:16 131866037
>>1318639
В vs code пробелы и табы лучше отображаются, у тебя они так в глаза бросаются, шо пиздец.
Аноним 30/12/18 Вск 12:59:21 131866538
>>1318660
Очевидно же, что мной так было сделано для себя любимого.
emacs-goddess
Аноним 30/12/18 Вск 13:01:08 131866639
Аноним 30/12/18 Вск 13:03:49 131866940
>>1318666
Если ты пределаешь мне хуй, то да.
emacs-goddess
Аноним 30/12/18 Вск 13:17:33 131867641
>>1318665
А ты пишешь что-то более менее серьёзное или только лаба.цпп?
Аноним 30/12/18 Вск 14:27:25 131869342
>>1318639
Аж глаза заболели от твоего скрина
Аноним 30/12/18 Вск 14:44:57 131869643
>>1318676
Конечно пишу что-то серьезнее лаба.ц, иначе какой в этом смысл.
emacs-goddess
Аноним 30/12/18 Вск 14:56:43 131870044
>>1318696
Например?
Профиль на гитхабе скинешь?
или корпоративный софт онли, который на внутренних гитлабах всяких крутится?
Аноним 30/12/18 Вск 15:59:26 131872245
>>1318639
> signed
> int
> main
МАЯКОВСКИЙ В ТРЕДЕ!

Аноним 30/12/18 Вск 16:21:03 131873046
Ктонить пробовал прикручивать мокрописечную си либу в ведроиде?
Аноним 30/12/18 Вск 17:41:39 131874447
Аноним 30/12/18 Вск 18:40:09 131875548
>>1318744
>Насколько говнокод
На 5 балов.
(c==1) || (c==5) || (d==1) || (d==5) || (e==1) || (e==5)
i=e=sumx2=sumx3=sumx4=sumx5=total=0;


это пиздец
Аноним 30/12/18 Вск 19:00:06 131876049
>>1318755
> это пиздец
А каким бы ты способом решил эту задачу используя только if, for и while?
Аноним 30/12/18 Вск 19:24:35 131876550
>>1318760
>А каким бы ты способом решил
не знаю, я про твой стили ващет
Аноним 30/12/18 Вск 19:34:22 131876851
>>1318765
А что с ним? Я выше прочитал что перед +-= и так далее надо пробелы ставить. А больше не вижу косяков. Ну а про короткие имена переменных я в курсе, они такие потому что я на мобиле пишу, заебусь длинные имена писать раньше чем что-то рабочее сделаю.
Аноним 30/12/18 Вск 19:39:30 131877052
>>1318768
Ну скобки нинужны, смотри приоритет операции, паровозное обнулении тоже дико смотрится и чет дохуя у тебя переменных
Аноним 30/12/18 Вск 19:44:36 131877253
>>1318605
> 1-5 кубиков выпадет хотя бы на одном 5 или 1
А расскажи, что делает этот страшный код? Почему это не pow(2.0 / 6, 5)?
Аноним 30/12/18 Вск 19:50:05 131877554
>>1318770
У меня как-то давно без скобок низуя не хотело работать и я с тех пор каждое выражение с && или || ебеню в скобки. Учту, что можно и без них.

А как без обнуления то? Иначе у переменных будут же рандомные значения, нет?

Так переменных дохуя потому что дохуя значений хранить надо:
- 5 разных кубиков
- количество нужных комбинаций и общее количество комбинаций для 2, 3, 4 и 5 кубиков.

Аноним 30/12/18 Вск 20:01:50 131877755
>>1318775
>Так переменных дохуя потому что дохуя значений хранить надо:
И кокое значение хранит i? Крч, гугли теорвер у тебя проеб с алгоритмом, но для говнокода сойдет, можно отправлять на govnokod.ru
Аноним 30/12/18 Вск 20:21:40 131878756
>>1318772
>А расскажи, что делает этот страшный код?
Я захотел узнать какой шанс что у тебя из 5(/4/3/2) кубиков хотя бы на одном выпадет 1 или 5. Ебаться с теорией вероятности я не хотел и поэтому написал программу.

>Почему это не pow(2.0 / 6, 5)?
потому что я еще не знаю что это такое.


>>1318777
>И кокое значение хранит i?
Это счетчик, очевидно же.
>гугли теорвер у тебя проеб с алгоритмом
Схуяли? У меня правильно посчитаны все вероятности, но ты можешь попробовать доказать что это не так.
Аноним 30/12/18 Вск 20:27:02 131879057
>>1318787
>Это счетчик
а ты смешной
>можешь попробовать доказать
лол
Аноним 30/12/18 Вск 20:29:16 131879158
>>1318700
>или корпоративный софт онли
emacs-goddess
Аноним 30/12/18 Вск 20:30:56 131879259
>>1318790
>а ты смешной
А что не так я сказал?
>лол
Что не так, покажи косяк? Все верно у меня посчитано.
Аноним 30/12/18 Вск 23:13:21 131889260
>>1318605

>Я не учусь на программиста и не работаю им. Мне просто бывает скучно и я читаю Кернигана. Иногда делаю сам для себя задачи, которые мне интересно на телефоне.

Тогда тебе не стоит писать на Си. Он достаточно сложный и заточен под низкоуровневую работу, а кодить нормально ты еще не умеешь. Сейчас лучше попробуй писать на питоне. Иначе читай SICP, начинай Кернигана с самого начала и прорешивай все подаваемые задачи.

>Вот, например, из недавнего сделал программу которая вычисляет шанс что из 1-5 кубиков выпадет хотя бы на одном 5 или 1 (для игры в тысячу считал):
>https://pastebin.com/M9bE5BUG

Ну это хрень полная, ответ и без теорвера очевиден: 1 - (2/3)^5.

>Насколько говнокод, если я к тому моменту даже до функций не дошел?

До говнокода еще далеко (честно).
Аноним 31/12/18 Пнд 01:28:00 131897161
15434802846470.jpg (479Кб, 960x960)
960x960
INT SYSTEM (CHAR *PARAMETER);

В этом итт господарьске треде попрошу рассказать C-бояр как работает функция system() и можно ли ее организовать своими силами в языке C. И если можно, то как? Хотя бы на приблизительном уровнe

Отдельно попрошу об отсылании к сорцам компиляторов не отсылать, ибо там хуй разберёшься
Аноним 31/12/18 Пнд 05:10:19 131902262
>>1318971
Glibc source:
https://code.woboq.org/userspace/glibc/sysdeps/posix/system.c.html

Секция с sigaction n1
1) sigprocmask SIGCHLD -> SIG_BLOCK
2) fork, restore signals, execve SHELL_PATH с новым argv
Секция с siagction n2

lock'и расставлены так, чтобы "подпроцессы" лишний раз не использовали sigaction на SIGIGN и SIGQUIT.

В этом всем нужно разбираться если хочешь написать полноценный аналог библиотечного system.
Если нет времени/лень то просто посмотри вызовы fork, execve в linux man. Там же отрывок про argv в execve.
Аноним 31/12/18 Пнд 05:19:49 131902363
>>1319022
Продолжение
Можешь взять strace и подглядеть строчку с execve (подглядывать нужно за ребенком-шеллом).
Аноним 31/12/18 Пнд 11:10:51 131906564
image.png (22Кб, 1042x249)
1042x249
Объясните, почему во втоpой стpоке вывода: "strcat is helloworldworld, strlen of result: 10"
почему пpибавился ещё один world?
Аноним 31/12/18 Пнд 11:21:59 131906865
>>1319065
Удивительно, что она вообше что-то вменяемое выдает. Вроде бы у тебя тут выход за пределы массива
Аноним 31/12/18 Пнд 11:38:51 131907266
Screenshot20181[...].png (101Кб, 720x1280)
720x1280
Screenshot20181[...].png (17Кб, 720x1280)
720x1280
>>1319065
>>1319068
А хотя нет, strcat() удлинняет массив при каждом вызове
Аноним 31/12/18 Пнд 11:58:26 131907567
>>1319072
навеpное пpосто пpибавляет str1 пpи каждом вызове. понятно, я просто дурачок.
Аноним 31/12/18 Пнд 12:39:54 131908768
>>1319072
Но если поменять местами world и hello, то массив наложится на другой. Короче, не делайте так, ребята
Аноним 31/12/18 Пнд 12:52:02 131909169
>>1319087
Да я тупой, все просто:
strcat() стирает '\0', а strlen() читает до первого '\0' в следущем массиве
Аноним 31/12/18 Пнд 13:33:22 131909970
>>1319065
Порядок вычисления аргументов функции в Си неопределен. В printf аргументы часто передаются задом наперед, как в функции с неопределенным числом параметров. Сначала вычисляется первый strcat, потом strlen (10), потом еще один strcat.

Можно пустые квадратные скобки оставить, размер под строчку сам подберется.

strcat к тому же месту в памяти приклеивает еще одну строку (strlen + strcpy), а массивы столько не вмещают, делай их больше или используй динамическую память. Переполнениями массивов ты гарантированно испортил что-то, что лежит на стеке рядом с твоими строками. Попробуй использовать свой strcat раз 5-6 и из твоего main уже не получится сделать return :).

Аноним 31/12/18 Пнд 13:35:52 131910071
>>1319099
Под первым strcat я имел в виду strcat внутри strlen.
Аноним 31/12/18 Пнд 21:41:31 131924272
>>1317959
скомпилировать и в gdb disassemble посмотреть - понятнее будет код
Аноним 31/12/18 Пнд 21:44:53 131924473
>>1318639
с высоты пользователя vim воспринимаю подобные споры как петушиные бои
Аноним 31/12/18 Пнд 21:50:18 131924674
>>1318892
> Тогда тебе не стоит писать на Си
А, быть может, как раз таки стоит. Зачем ориентироваться на современные технологии, если не стоит цель заработка? Почему бы не позволить себе окунуться в ламповое технарьское хобби по труъ-шному? Для общего развития даже полезнее. Если никуда не рваться, то сишечка и асм очень даже по кайфу, ведь ты реально в чем-то прошариваешься.
Аноним 31/12/18 Пнд 21:56:36 131924775
>>1318892
>>1319246
Тут кодеры старой школы тоскуют по счастливой юности и сишечке, вынуждены перекатываться. У человека же нет никакой нужды в этом плане, а вы так вот отговариваете.
Аноним 31/12/18 Пнд 23:15:26 131927476
>>1319246
Да, всё правильно. Вот только у тебя сейчас не очень кодить получается, даже без привязки к какому-то языку. Я советую тебе сначала почитать какую-то теорию наподобие SICP или что-нибудь подобное.
Аноним 31/12/18 Пнд 23:19:33 131927577
>>1319274
Это писал не я собственно, но я с тем аноном согласен.
>Вот только у тебя сейчас не очень кодить получается
Это почему? Потому что какому-то стилю оформления не придерживаюсь?
Аноним 31/12/18 Пнд 23:22:12 131927678
>>1319247

>У человека же нет никакой нужды в этом плане, а вы так вот отговариваете.

Я не отговаривал, а предложил сначала просто в программировании немного освоиться.

>Тут кодеры старой школы тоскуют по счастливой юности и сишечке, вынуждены перекатываться.

Я юн перекатываться не вынужден.
Аноним 31/12/18 Пнд 23:26:13 131927779
>>1319275
Нет, просто алгоритмы плохие.
Аноним 31/12/18 Пнд 23:27:17 131927880
>>1319277
Чем плох конкретно этот алгоритм?
Аноним 31/12/18 Пнд 23:37:32 131928081
>>1319278
Я наверно неправильно выразился, у тебя здесь просто o(n^2) сортировка, может быть она и рабочая, но сам код перепутанный и ужасный. Книжки типа SICP учат элегантному программированию, а не таким макаронам.
Аноним 31/12/18 Пнд 23:41:16 131928282
>>1319280
Макароны как я понимаю это когда код скажет туда-сюда всякими goto и подобным. У меня же такого нет, все по порядку идет. А вообще сперва надо хотя бы Кернигана прочитать целиком, а уже потом всякие SICP читать, не? А то я пробовал читать правила оформления и про половину вещей просто не ебу что это такое в принципе.
Аноним 31/12/18 Пнд 23:46:39 131928383
>>1319282
В SICP пишут на lisp scheme.
Аноним 31/12/18 Пнд 23:47:08 131928584
>>1319282
>просто не ебу что это такое в принципе.
покажи лучше писечку
Аноним 31/12/18 Пнд 23:51:43 131928885
Аноним 01/01/19 Втр 00:10:46 131929386
изображение.png (10Кб, 367x434)
367x434
>>1317959
Я, конечно, ни разу не претендую на хороший стиль и прочее, но вот тебе сортировка по убыванию, все в пределах stdio.h. Вроде читабельно.
Аноним 01/01/19 Втр 00:14:41 131929487
>>1319276
> сначала просто в программировании немного освоиться
Не могу знать, стоит или не стоит начинать с Си, педагогом не являюсь, а на собственном опыте подобные успехи не пришлись, сам сокровище K&R для себя открыл уже не девстенником в программизме. Тем не менее, ИМХО, советовать Python таки подстава. Тогда уж лучше "Accelerated C++" от Koenig и Moo, или Страструпа "Programming Principles and Practices using C++", вроде как годнота для вкатывальщиков. Но, в принципе, если анон мозговит, и K&R с кое-каким скрипом заходит, то можно и обойтись.
Аноним 01/01/19 Втр 00:25:51 131929688
>>1319294
>Тогда уж лучше "Accelerated C++" от Koenig и Moo, или Страструпа "Programming Principles and Practices using C++", вроде как годнота для вкатывальщиков.

Еще лекции по Си от Праты.

>Но, в принципе, если анон мозговит, и K&R с кое-каким скрипом заходит, то можно и обойтись.

Про вероятности и кубики был код, анону явно нужно что-то до K&R.
Аноним 01/01/19 Втр 00:26:49 131929789
>>1319296
>анону явно нужно что-то до K&R.
Это почему?
Аноним 01/01/19 Втр 00:29:13 131929890
Аноним 01/01/19 Втр 00:30:18 131929991
>>1319298
Ты мой пост и процитировал. Почему мне стоит читать что-то до K&R?
Аноним 01/01/19 Втр 00:55:43 131930392
За всю жизнь не прочитал до конца ни одной книжки ни по одному языку программирования (это для меня слишком долго и скучно). Задачки из книжек, естественно, тоже не решал. Сколько себя помню, всегда просто садился и ебошил код сразу, стараясь сделать то, что нужно, и пользуясь только гуглом, документацией по всяким разным API и стандартом или официальным описанием языка. Иногда еще читал найденные в гугле отдельные статейки или посты, посвященные тому или иному вопросу. В общем, это я к тому, что вообще без разницы, что вы там и в каком порядке читаете. Можете вообще книг не читать, вместо этого просто иногда заглядывая в нужные их разделы. Главное же это просто программировать побольше, и всегда стремиться к написанию как можно более красивого и эффективного кода. На чем вы пишете и с чего начинаете обучаться тоже не имеет большого значения. Я вот с ассемблеров вообще начинал, и мне норм, а вы тут от такой высокоуровневой и комфортной сишки людей отговариваете. Зачем?
Аноним 01/01/19 Втр 21:32:13 131946493
Аноним 02/01/19 Срд 19:53:09 131975294
7a6e7d2518b732c[...].jpg (110Кб, 551x600)
551x600
Сап, котаны.
Может не совсем тематика, но вы уж не пинайте.
Есть железяка ESP8266, кодится в Eclipse через MinGW + Espressif-ESP8266-DevKit-v2.0.9-x86.
Хочу подцепить к ней SD карту памяти по SPI, СИ-шная библиотека была бы очень полезна, но она не гуглится.
Хотя гугол пестрит библиотеками для ардуинки.
Куда копать?
Аноним 02/01/19 Срд 21:25:17 131982395
При реализации стека на односвязном списке адреса указателей на каждый узел будут отличаться на фиксированную длину, или память может быть фрагментирована и между адресами будут разные промежутки?
Почему-то между первым и вторым узлом довольно большой промежуток в 428 байт, а между 2-3 3-4 14 байт. Каждый узел это структура с 3 int переменными и указателем типа структуры на следующую.
Я не очень представляю эту виртуальную адресацию.
Аноним 02/01/19 Срд 21:29:58 131983196
>>1319823
тут вопрос сводится уже не к твоей конкретной структуре данных, а откуда маллок память берет, выделяешь память ты в разное время, поэтому врядли 2 узла обязаны рядом находиться в памяти
Аноним 02/01/19 Срд 21:38:13 131983897
>>1319831
Разве malloc не из кучи выделяет память? И выделение памяти идет подряд для четырех узлов одно за другим.
Аноним 02/01/19 Срд 21:40:05 131984198
>>1319838
ты можешь выделить 2 узла подряд, тогда да, должны быть подряд, потом например для другой дресни выделить, а потом опять со стеком хуярить, в итоге у тебя потеряется шаг тот.
Аноним 02/01/19 Срд 21:46:31 131985399
>>1319841
Подряд все идет. Что интересно, до выделения памяти я поместил принтф хеллоуворлд и теперь абсолютно все адреса отличаются ровно на 20 байт.
У препода в примере просто между всеми узлами равное число, вот и я ищу объяснение моему результату. Когда я компилирую его код, то промежуток неравный тоже появляется и адреса ровно те же, что у меня.
Это зависит от системы/процессора/среды разработки?
Аноним 02/01/19 Срд 21:51:19 1319859100
>>1319853
не зависит, скинул бы код где шаг не одинаковый
Аноним 02/01/19 Срд 21:55:24 1319865101
>>1319859
#define WORD struct word_type
#include<stdio.h>
#include<stdlib.h>
WORD
{
int TAG;

int SUIT;
int RANK;
WORD NEXT;
};
void main()
{
int N;
WORD
TOP, / указатель на верхний элемент стека /
NEWCARD, / указатель на новый элемент стека /
X; / указатель на текущий элемент стека /
TOP=NULL;

NEWCARD=(WORD )malloc(sizeof(WORD));
printf("NEWCARD=%p\n",NEWCARD);
/
A1/ NEWCARD->NEXT=TOP;
/
A2/ TOP=NEWCARD;
/
A3/ TOP->TAG=1; TOP->SUIT=1; TOP->RANK=10;

NEWCARD=(WORD
)malloc(sizeof(WORD));
printf("NEWCARD=%p\n",NEWCARD);
/A1/ NEWCARD->NEXT=TOP;
/A2/ TOP=NEWCARD;
/A3/ TOP->TAG=0; TOP->SUIT=4; TOP->RANK=3;

NEWCARD=(WORD )malloc(sizeof(WORD));
printf("NEWCARD=%p\n",NEWCARD);
/
A1/ NEWCARD->NEXT=TOP;
/
A2/ TOP=NEWCARD;
/
A3*/ TOP->TAG=0; TOP->SUIT=2; TOP->RANK=2;

printf("TAG(TOP)=%d\n",TOP->TAG);
printf("SUIT(TOP)=%d\n",TOP->SUIT);
printf("RANK(NEXT(TOP))=%d\n",TOP->NEXT->RANK);

B1: N=0; X=TOP;
B2: if(X==NULL) goto end;
B3: N++; X=X->NEXT; goto B2;
end: printf("N=%d\n",N);
getchar();
}
Скомпилируй, если не трудно, и запость результат вывода. У меня после первого узла большой промежуток.
Аноним 02/01/19 Срд 21:58:57 1319869102
Блин, указатели NEXT, TOP, X, NEWCARD в курсив превратились. Ну и перед malloc'ами.
Аноним 02/01/19 Срд 22:07:55 1319883103
image.png (5Кб, 167x132)
167x132
Аноним 02/01/19 Срд 22:14:22 1319886104
>>1319883
Ну хрен знает в чем дело, код-то идентичный.
Аноним 02/01/19 Срд 22:22:55 1319895105
>>1319886
со средой чо-то, через gcc все норм
Аноним 02/01/19 Срд 22:39:41 1319904106
>>1319895
Я скомпилил в двух средах, разница одинаковая 1AC(428 байт) после первого узла, остальные по 20.
Аноним 02/01/19 Срд 22:59:16 1319912107
>>1319904
Нашел на вики
>соседние элементы списка могут быть распределены в памяти нелокально, что снизит эффективность кэширования данных в процессоре
https://ru.wikipedia.org/wiki/Связный_список
По-моему, это как раз мой случай.
Аноним 03/01/19 Чтв 11:31:13 1320165108
Помню, как какой-то анон говорил сравнить качество кода стандартных утилит linux и openbsd. Говорил, что разработчики openbsd пишут более грамотный код. Книжка ещё какую-то соаетовал по безопасному программированию на C. Реквестирую, если кто знает.
Аноним 03/01/19 Чтв 11:59:57 1320178109
>>1319244
>с высоты пользователя vim
То есть это как с низины пользователя emacs
Аноним 04/01/19 Птн 04:14:12 1320522110
Аноним 05/01/19 Суб 03:13:38 1320903111
Как создать не заполненный символьный массив, который можно заполнить текстом через консоль? С числовыми массивами работать научился, а с символьными ни в какую не получается. Там надо сначала всем ячейкам присвоить \0?
Аноним 05/01/19 Суб 09:55:58 1320954112
>>1320903
Как и обычный массив. Функции терминатор ставят сами.
Аноним 05/01/19 Суб 13:01:28 1321018113
>>1320954
Можешь пример программы ввода и вывода символьного массива показать?
Аноним 05/01/19 Суб 13:22:03 1321029114
изображение.png (14Кб, 972x345)
972x345
>>1321018
А в чем собственно проблема? gets конечно лучше не использовать, но для примера сойдет.
Аноним 05/01/19 Суб 13:37:36 1321038115
>>1321029
Использую VS, gets у меня нету в stdio.
Аноним 05/01/19 Суб 13:38:57 1321039116
Аноним 05/01/19 Суб 13:44:25 1321043117
изображение.png (18Кб, 1114x345)
1114x345
изображение.png (20Кб, 1098x362)
1098x362
изображение.png (21Кб, 1127x389)
1127x389
изображение.png (18Кб, 1116x378)
1116x378
Аноним 05/01/19 Суб 13:47:36 1321047118
>>1321043
А, ну хоть gets_s есть. Он принимает указатель на начало строки и максимальный размер этой самой строки чтобы не случился гроб гроб SIGSEGV. Так что аргументом припиши к нему 255.
Аноним 05/01/19 Суб 14:05:38 1321052119
изображение.png (41Кб, 991x556)
991x556
>>1321047
>Так что аргументом припиши к нему 255
Я не совсем понял что это значит. 255 вместо 0 или вместо 256?
Вот я попытался со scanf_s, открывается консоль, пишу что угодно и консоль закрывается без всякого ответа и вылезают ошибки.
Аноним 05/01/19 Суб 14:06:39 1321053120
>>1321052
scanf_s перед return чтобы консоль не закрывалась, если что.
Аноним 05/01/19 Суб 14:10:47 1321058121
изображение.png (42Кб, 999x591)
999x591
>>1321052
Забыл размер массива в выводе указать, но все равно не работает.
Аноним 05/01/19 Суб 14:21:38 1321063122
изображение.png (13Кб, 989x323)
989x323
>>1321052
Вот так сделай. (Самой студии у меня нет, только компилятор).
Аноним 05/01/19 Суб 14:30:04 1321072123
>>1321063
Работает. Как такое же со scanf_s сделать?
Аноним 05/01/19 Суб 14:44:17 1321084124
Аноним 05/01/19 Суб 14:51:47 1321087125
>>1321084
Тот же результат, что и тут >>1321058
Наверное, дело всё же в выебонах мелкомягких в VS.
Аноним 05/01/19 Суб 14:59:12 1321093126
>>1321087
Перевод строки добавь в printf, типа printf("%s\n", str);
Аноним 05/01/19 Суб 15:00:30 1321094127
>>1321084
Не сожрет оно так, на первом пробеле прервется.
Аноним 05/01/19 Суб 15:06:53 1321099128
>>1321094
Ты прав. Тогда так
scanf_s("%[^\n]s", str, 256);
Аноним 05/01/19 Суб 15:08:45 1321100129
изображение.png (43Кб, 997x551)
997x551
Аноним 05/01/19 Суб 15:30:57 1321114130
>>1321100
Добавь fflush(stdin); перед вторым scanf.
Аноним 05/01/19 Суб 15:38:57 1321122131
изображение.png (16Кб, 1004x381)
1004x381
Сделал без кастылей и заработало нормально. Спасибо все за помощь, кто помогал.
Аноним 05/01/19 Суб 16:06:17 1321129132
>>1321122
А теперь строку с пробелами попробуй.
Аноним 05/01/19 Суб 16:09:01 1321131133
изображение.png (16Кб, 1004x381)
1004x381
>>1321129
Работает до первого пробела. Как исправить?
Аноним 05/01/19 Суб 16:09:33 1321132134
изображение.png (6Кб, 396x252)
396x252
Аноним 05/01/19 Суб 22:00:21 1321362135
>>1321131
Вместо scanf используй fgets.
Аноним 06/01/19 Вск 12:13:55 1321557136
>>1321362
Где бы я не читал, везде противопоказывается использовать gets. Как сделать то же самое со scanf?
Аноним 06/01/19 Вск 12:44:48 1321565137
>>1321557
fgets != gets. С fgets'ом всё абсолютно нормально.
Аноним 06/01/19 Вск 12:49:33 1321566138
изображение.png (18Кб, 953x381)
953x381
>>1321565
Меняю gets_s (gets в VS в stdio.h нету) на fgets и функция не принимает 2 аргумента.
Аноним 06/01/19 Вск 13:11:09 1321576139
>>1321566
Так тебе пишут же
"см. объявление"
Зайди куда-нибудь и посмотри
Аноним 06/01/19 Вск 13:20:05 1321586140
>>1321576
Нашёл char fgets(char str, int n, FILE* stream); но так и не понял синтаксиса. У меня работает с gets_s, какие могут быть подводные?
Аноним 06/01/19 Вск 13:27:42 1321591141
>>1321586
Погодите, так fgets это же gets для файлового ввода. Вы меня тут троллите, что ли?
Аноним 06/01/19 Вск 14:28:20 1321644142
Аноним 06/01/19 Вск 16:27:19 1321706143
>>1321644
Почему fgets без потока stdin не работает? Как определить для себя, в каких случаях для работы команды просто нужно дописать поток в аргументы?
Аноним 06/01/19 Вск 19:39:51 1321837144
>>1321706
fgets работает с любым потоком. stdin вполне является таковым.
Аноним 06/01/19 Вск 20:01:13 1321859145
>>1321837
Но почему в моём случае без потока fgets не работает? Есть ли случаи, когда fgets поток не нужен?
Аноним 06/01/19 Вск 20:35:36 1321880146
>>1321859
Нет, поскольку он работает именно с потоками. Все, что ты вводишь в консольном окне попадает в поток stdin.
Аноним 06/01/19 Вск 20:39:29 1321881147
>>1321859
fgets - функция.
У этой функции 3 параметра.
Тебе всегда нужно передавать ей 3 параметра.

>Но почему в моём случае без потока fgets не работает? Есть ли случаи, когда fgets поток не нужен?
Странный вопрос.
fgets — get a string from a stream
Тебе нужно явно указать поток, с которого эта функция прочитает твою строчку. Ввод с терминала - stdin.
Аноним 06/01/19 Вск 21:05:30 1321888148
>>1321881
> Ввод с терминала - stdin
stdin - это стрим, под которым лежит дескриптор STDIN_FILENO, то есть 0, и терминал там совершенно не обязательно. Ввод из терминала - это fdopen (open ("/dev/tty", O_RDONLY), "r");
Аноним 06/01/19 Вск 21:25:08 1321896149
>>1321859
забракованная gets лаконично берет один аргумент - указатель на буфер, и читает в него из stdin до первого \n, без проверки переполнения. Если лень писать
fgets (buf, sizeof (buf), stdin)
можно написать макрос
#define gets_(buf) fgets (buf, sizeof (buf), stdin)
но если buf - не имя локального или static массива, а просто указатель, то препроцессор подставит константу 4 или 8, в зависимости от архитектуры
Аноним 06/01/19 Вск 23:35:56 1321955150
Безымянный.png (36Кб, 866x785)
866x785
Первый раз стиль пикрил увидел, что скажете?
Аноним 06/01/19 Вск 23:51:42 1321957151
>>1321888
Да, как угодно определяй дескрипторы и exec'ай бинарник? Я это прекрасно знаю. Ты иди объяснять это анону, который про обязательность 3его параметра fgets спрашивает.
Аноним 07/01/19 Пнд 00:00:47 1321959152
>>1321955
Красивая змейка ужасно
Аноним 07/01/19 Пнд 00:13:38 1321965153
>>1321959
Тоже вначале подумал что это Питухон
Аноним 07/01/19 Пнд 13:08:29 1322095154
>>1321957
Ну, если забыть #include <stdio.h>, то компилятор с warning-ом проглотит вызов fgets с двумя параметрами, и что лежало в регистре RDX, то и станет индексом дескриптора)
Аноним 07/01/19 Пнд 13:12:38 1322097155
>>1321957
>>1322095
ой, хуйню сказал. Это ж указатель на FILE...
Аноним 07/01/19 Пнд 16:18:57 1322263156
14655207958700.jpg (43Кб, 258x260)
258x260
>>1318623
>int# p, k
Бля, реально засада,
Аноним 07/01/19 Пнд 16:22:12 1322266157
GMT.jpg (17Кб, 271x186)
271x186
Почему, собственно, советуют начать изучение программирования с С.
Цитата из K&R:
Вы обнаружите, что многие существующие программы являются просто расширенными версиями обсуждаемых здесь прототипов.

Точнее и не скажешь, лол.
Аноним 07/01/19 Пнд 17:02:57 1322287158
010719.JPG (26Кб, 825x254)
825x254
ЧОМУ???
Аноним 07/01/19 Пнд 17:49:07 1322320159
>>1322287
Попробуй выделить память.
Аноним 07/01/19 Пнд 19:58:29 1322420160
>>1322287
>>1322320
...и не писать в строку, заданную литералом.
Аноним 07/01/19 Пнд 19:58:37 1322421161
>>1322320
Дай пример пожалуйста, я запутался.
Аноним 07/01/19 Пнд 22:35:33 1322575162
>>1322320
>>1322420
Вы долбоёб, уважаемый.
Очевидно, что имеется ввиду
while (#fin++ = #init++);
вместо
while (#init++ = #fin++);

Поменять init и finместами и все работает.
Литералы блядь, память...
Известнейший пример для копирования строк.
Эксперты ебать.
Аноним 07/01/19 Пнд 22:46:38 1322585163
>>1322575
На какое место в памяти указывает fin в момент первой итерации? Куда будут записаны копии символов? Почему поинтеру на чар присваивают значение поинтера на конст чар?
Аноним 07/01/19 Пнд 22:56:53 1322598164
Почему Си не популярный?
Аноним 07/01/19 Пнд 22:59:19 1322600165
Аноним 08/01/19 Втр 00:14:37 1322658166
>>1322575
А то, что указателю присваивается хуй пойми какое значение - это норма?
Аноним 08/01/19 Втр 00:15:45 1322662167
>>1322600
Вот будете смеяться, а я осилил только Си, и очень маленько ассемблеры x86 и avr. Даже Питон не могу освоить.
Аноним 08/01/19 Втр 00:26:37 1322671168
>>1322662
> я осилил только Си
Тащи свой петпроект, посмотрим что ты там "osilil"
Аноним 08/01/19 Втр 03:17:13 1322754169
Аноним 08/01/19 Втр 05:25:47 1322783170
изображение.png (79Кб, 1920x1080)
1920x1080
Анон, помоги! Программа должна выводить 1, введённый символ включается в строку, и 0, если не включается. На вложенный цикл особо не бухти, это задел для проверки на включение строки в другую строку.
Аноним 08/01/19 Втр 05:33:01 1322785171
>>1322783
Забыл добавить, что в этом случае я ожидал получить 0.
Аноним 08/01/19 Втр 11:19:51 1322907172
>>1322287
Ты в массив констант(через неконстантный указатель)(это UB),
копируешь байты из невыделенной тебе памяти(UB). Вроде так.
Аноним 08/01/19 Втр 11:30:59 1322913173
>>1322783
>>1322785
Вероятно '\0' == '\0'
Тебе нужно бежать не по всему размеру массива, а по длине строки, вероятнее всего.
Аноним 08/01/19 Втр 11:52:31 1322931174
>>1322783
Во первых после совпадения надо выйти из двух циклов.
Во вторых циклы у тебя выходят за концы введённых строк
и случайно в мусоре попадаются одинаковы чары. Должно быть
как-то так:
#define MaxLen 256
char sa[MaxLen], sb[MaxLen];
int a;
gets(sa);
gets(sb);
for(int i=0; i<strlen(sa); i++)
for(int j=0; j<strlen(sb); j++)
if(sa==sb[j]) { a=1; goto BREAK; }
else a=0;
BREAK:
printf("\n%d",a);
Аноним 08/01/19 Втр 11:54:06 1322937175
>>1322931
И ещё бы хорошо сразу int a= нулём проинициализировать.
Аноним 08/01/19 Втр 11:57:16 1322943176
изображение.png (17Кб, 509x547)
509x547
изображение.png (17Кб, 501x526)
501x526
Почему???
Число показывает, что все символы второй строки включаются во вторую беспрерывно. Иначе 0. Почему здесь вот так?
Аноним 08/01/19 Втр 12:02:12 1322952177
изображение.png (14Кб, 517x487)
517x487
>>1322943
А, всё, я понял. Но теперь всплыла другая проблема. Почему i-- в else так влияет на результат при том, что else здесь явно не должен вообще включаться? Как тогда уменьшать счётчик i при ложном ответе if?
Аноним 08/01/19 Втр 12:16:48 1322965178
>>1322952
У тебя ж там в третьем цикле можно в бесконечность угодить .
Аноним 08/01/19 Втр 12:20:53 1322968179
>>1322965
Идет сравнение первых букв строк, они неравны, i--, потом в
for i++, и бесконечный цикл.
Аноним 08/01/19 Втр 12:26:30 1322971180
изображение.png (18Кб, 519x499)
519x499
изображение.png (18Кб, 518x490)
518x490
>>1322965
>>1322968
Я это уже исправил, но появилась другая проблема. Почему вот так получается?
Аноним 08/01/19 Втр 13:07:30 1322991181
>>1322971
>>1322971
А что ты там хочешь? Равенство строк проверить что ли? На развлекайся:

char s1 = "abc";
char
s2 = "cde";
int l1= strlen(s1);
int l2= strlen(s2);
int equal= 0;
while(s1 && s2 && s1++ == s2++) equal++;
s1-=l1;
s2-=l2;
printf( "\nequal= %d, %s", equal, ((equal==l1) && (equal==l2))? "PABHbI" : "HEPABHbI" );
Аноним 08/01/19 Втр 13:11:10 1322993182
>>1322991
Э-э, звёзы пропали.
char(ЗВЕЗД) s1="abc";
char(ЗВЕЗД) s2="abc";
while((ЗВЕЗД)s1 && (ЗВЕЗД)s2 && (ЗВЕЗД)s1++ == (ЗВЕЗД)s2++) equal++;
Аноним 08/01/19 Втр 13:17:56 1323001183
>>1322991
О не ошибка, должно быть s1-=equal ; s2-=equal; (но это не точно :)))

Аноним 08/01/19 Втр 13:24:27 1323006184
>>1323001
Очередной фикс while(s1 && s2 && s1 == s2) equal++, s1++, s2++;
Аноним 08/01/19 Втр 13:51:23 1323027185
изображение.png (18Кб, 486x511)
486x511
изображение.png (18Кб, 507x514)
507x514
Можно ли было сделать лучше?
Аноним 08/01/19 Втр 13:52:43 1323028186
>>1322971
>>1322971
А, ты проверяешь вхождение второй строки в первую, тогда попробуй так:
char s1 = "b abcd abcd e";
char
s2 = "abc";
int l1= strlen(s1);
int l2= strlen(s2);
int equal= 0;
int posicion= 0;

for(int i=0; i<l2; i++)
for(int j=0; j<l1; j++)
if(s2==s1[j])
{
equal++;
i++;
if(equal==l2)
goto BREAK;
}
else equal=0;
BREAK:
printf( "\n%s", equal==l2? "BXODNT" : "HEBXODNT" );
Аноним 08/01/19 Втр 13:54:05 1323030187
Аноним 08/01/19 Втр 14:01:41 1323037188
изображение.png (335Кб, 485x320)
485x320
Аноним 08/01/19 Втр 14:06:43 1323043189
>>1323037
Владимир Владимирович, а вы как выходите из вложенных циклов?
Аноним 08/01/19 Втр 15:05:28 1323101190
856421.jpg (119Кб, 675x899)
675x899
Аноним 08/01/19 Втр 15:40:54 1323131191
>>1323101
const bool Putin= TRUE;
while(Putin)
happiness++;
Аноним 08/01/19 Втр 17:18:02 1323236192
А чем плоха гоутю? Вполне себе лоулеуел фича в духе сей
Аноним 08/01/19 Втр 20:11:30 1323366193
У меня в объявлении структуры, ссылка на другую ещё не объявленную структуру.Как объявить прототип второй структуры? Ну, у функции это так -- func(int); .
Аноним 08/01/19 Втр 21:23:04 1323404194
>>1322991
по идее, в условие задачи входит не использование строчных функций из стандартной библиотеки (#include <string.h>), в т.ч. strlen...
Аноним 08/01/19 Втр 21:29:28 1323410195
>>1323236
Яростно плюсую. Паттернодрочерам в великих и могучих Сях не место. При желании, несамодокумментированный гавнокод можно и написать и с соблюдением всех rule-of-thumb и прочих недоконвенций.
Аноним 08/01/19 Втр 21:30:29 1323411196
>>1323404
тогда
for(int len=0; s1!='\0'; len++); //извлекаешь len после цикла в другую переменную, чтобы вторую строку прогнать
Аноним 08/01/19 Втр 22:57:11 1323460197
>>1323411
int strequal (char #s1, char #s2) {
while (#s1 && #s2 && #s1++ == #s2++);
return #s1 == #s2;
}
зачем вообще len?
Аноним 08/01/19 Втр 23:08:09 1323464198
>>1323366
> ссылка на другую ещё не объявленную структуру
struct foo { struct bar ∗barptr; }
// и когда-то потом:
struct bar { ... };

Или с тайпдефами:
typedef struct bar bar;
typedef struct {
bar ∗barptr;
} foo;
// и когда-то потом:
struct bar { ... };

Incomplete-структуры это норм, бояться их не нужно, используются очень часто.

>>1323460
А еще можно выкинуть еще ∗s2 из условия, его неплохо == поймает. А потом осознать, что коротко - это не всегда красиво.
Аноним 08/01/19 Втр 23:18:09 1323470199
>>1323464
> его неплохо == поймает
Таки да. Ну, а краткость вполне оправдана, если функция используется чаще, чем переписывается, особенно когда это в разы ускоряет работу алгоритма. Однако, это меня не больше всего волнует... ТЫ КАК ЗВЕЗДОЧКУ ПОСТАВИЛ, ДЕМОН?
Аноним 08/01/19 Втр 23:30:02 1323474200
>>1323470
> ТЫ КАК ЗВЕЗДОЧКУ ПОСТАВИЛ, ДЕМОН?
Звездочка из шапки, она нестандартная, компилятор поперхнется. Иногда тут еще ★ вот такую используют.
Аноним 09/01/19 Срд 02:28:13 1323519201
Так, аноны. Я уже 2 час голову ломаю над задачей, так что прошу помощи.
В общем, нужно сформировать двумерный массив самым простым способом.
12345
51234
45123
34512
23451
Аноним 09/01/19 Срд 02:53:42 1323524202
>>1323519
for (x=0;x<25;x++)array[x]=((x+5-i/5)%5)+1
или длиннее:
for(x=0;x<5;x++)for(y=0;y<5;y++)array[y][x]=((x+5-y)%5)+1;
Аноним 09/01/19 Срд 03:38:34 1323530203
>>1323524
Ахуеть, спасибо. Я бы сам до этого точно не додумался.
Аноним 09/01/19 Срд 06:10:46 1323549204
Аноним 09/01/19 Срд 10:47:20 1323599205
изображение.png (24Кб, 985x505)
985x505
Откуда берётся -51?
Аноним 09/01/19 Срд 11:07:03 1323602206
>>1323599
char со знаком, коды русских букв >128
Аноним 09/01/19 Срд 11:09:08 1323603207
Аноним 09/01/19 Срд 12:11:46 1323628208
>>1323603
ну так иди читать как разные буковки, как представляются в кудахтере, почитай там про тип char, про ASCII, про юникод, хоть что-нибудь.
Аноним 09/01/19 Срд 14:45:14 1323726209
>>1323599
Ты strq не обнулил, там мусор (точнее, у тебя отладочный билд, и студия для упрощения отладки вот такой хуйни забила стек байтами CC, это -52, да еще ты 1 прибавил). Алсо, не сравнивай символы с NULL. NULL - это нулевой указатель, и только указатель, а не нулевой символ в конце строки. Пиши либо просто for (int i = 0; stra[​i​]; i++) ... либо сравнивай с нулем: stra[​i​] == 0, либо с нулевым символом, если хочешь сделать на этом акцент: stra[​i​] == '\0'.
Аноним 09/01/19 Срд 14:46:05 1323727210
>>1323726
В спойлере должно было != быть, ну ты понял.
Аноним 09/01/19 Срд 16:57:28 1323819211
изображение.png (18Кб, 505x525)
505x525
изображение.png (20Кб, 1079x394)
1079x394
Эй, мамкины эстеты! Помогите мне определиться со стилем.
Как лучше, так первая картинка или так вторая картинка?
Аноним 09/01/19 Срд 17:53:55 1323855212
>>1323819
Чем они отличаются?
Аноним 09/01/19 Срд 19:21:15 1323915213
Аноним 09/01/19 Срд 19:27:44 1323923214
Аноним 09/01/19 Срд 19:28:02 1323924215
>>1323819
Это настолько ужасно, что выбирать тут не из чего. Когда продвинешься чуть дальше, уже будешь думуть про стиль. Но в целом, несколько выражений на одной строке (вот эти твои if ... for ... printf, да ещё и с фигрными скобками) - это 100% говнокод. Разве что иногда можно задуматься о if (expr) do_smth(); (просто выражение, нет фигурных скобок!), но даже это лучше писать на двух строках.
Аноним 10/01/19 Чтв 17:04:33 1324422216
Аноны,
А что после праты и вкатывания в указатели?
Подрочить алгоритмы?
Аноним 10/01/19 Чтв 17:17:33 1324429217
>>1324422
Подрочи, и поймёшь какой си кхм говновый язык
Аноним 10/01/19 Чтв 23:32:59 1324660218
1.jpg (114Кб, 844x431)
844x431
2.jpg (107Кб, 872x413)
872x413
Я хз, как это гуглить, хелп.
Проблема в том, что char* string, которую я передаю функции words_in_string, не пустая, но происходит такое колдунство. Кстати, адрес не меняется. Что я не понимаю?
Аноним 11/01/19 Птн 01:16:08 1324714219
>>1324660
Выкладывай полный исходник или бинарь. Или довольствуйся пояснением, что либо ты портишь стек еще до вызова функции, либо у отладчика сносит крышу по причине билда с оптимизациями или еще чего-то подобного. Пробовал до 171 строке на втором скрине доходить? Ничего не меняется?
Аноним 11/01/19 Птн 03:18:56 1324735220
>>1323924
Всё, что относится только к ответу "истина" от if лучше писать в одной строке, и относящееся к ответу "ложь" на последующей от if строке в одной строке. Также одна операция — одна строка, например: в 11 и 12 строках у меня ищутся размер введённых пользователем строк в двух массивах, найти размер 1-ой строки — первое действие, найти размер 2-ой строки — второе действие, по своей строке на каждое действие.
Аноним 11/01/19 Птн 08:25:38 1324763221
>>1324735
Ага, начнёшь писать что-то серьёзное или может даже на работу устроишься, тогда научишься хорошему код-стайлуили нет.
Аноним 11/01/19 Птн 08:54:29 1324772222
Как сделать так, чтобы после отработки цикла с printf внутри другого цикла printf делал вывод ниже предыдущего вывода, а не в одну строку?
Аноним 11/01/19 Птн 09:15:06 1324782223
изображение.png (21Кб, 493x508)
493x508
>>1324772
Всё, уже придумал. Но как теперь сделать вывод ровной матрицы?
Аноним 11/01/19 Птн 09:16:08 1324783224
Аноним 11/01/19 Птн 09:17:35 1324784225
Аноним 11/01/19 Птн 09:20:53 1324786226
>>1324783
Надо же, сработало. Как называются такие хреновины? По каким ключевым словам искать? Как называются и для чего нужны хрени, которые можно ставить, а можно и не ставить между % и типом переменной в scanf и printf?
Аноним 11/01/19 Птн 09:25:30 1324789227
И как заставить rand() каждый раз выводить разные числа?
Аноним 11/01/19 Птн 09:30:46 1324791228
>>1324786
>Как называются такие хреновины
escape symbols
>Как называются и для чего нужны хрени, которые можно ставить, а можно и не ставить между % и типом переменной в scanf и printf?
format strings
> И как заставить rand() каждый раз выводить разные числа?
srand(time(NULL))
Аноним 11/01/19 Птн 09:32:43 1324792229
>>1324791
>srand(time(NULL))
time идентификатор не найден
Аноним 11/01/19 Птн 09:35:54 1324795230
>>1324791
>escape symbols
Это управляющие символы (Control character).
Аноним 11/01/19 Птн 09:42:23 1324799231
>>1324795
Нет. Управляющие символы не видны, в \t вполне виден, это escape symbol, который превратится в соответствующий control где-то во время компиляции.
Аноним 11/01/19 Птн 10:34:05 1324823232
Аноним 11/01/19 Птн 10:42:37 1324825233
Screenshot2019-[...].png (102Кб, 683x838)
683x838
>>1324823
Они используют escape sequence вместо escape symbol, что правильно, так как escape symbol это сам бэкслеш. Похуй.
Я делал акцент на том, что \t и символ с ASCII-кодом 09 - разные вещи. Это не \t заставляет терминал печатать табуляцию, а символ с кодом 09, который сам по себе не виден.
Аноним 11/01/19 Птн 15:09:08 1324990234
>>1317913 (OP)
Есть у Си спека или что то такое, где можно узнать все возможности?
Аноним 11/01/19 Птн 15:12:46 1324993235
>>1324990
Вторая часть K&R.
Не самый последний стандарт.
Аноним 11/01/19 Птн 15:30:04 1325007236
>>1324993
Там есть про системные вызовы? У Си вообще есть документация?
Аноним 11/01/19 Птн 15:40:29 1325013237
>>1325007
>У Си вообще есть документация?
Описание стандарта C11, например.

>Там есть про системные вызовы?
Системные вызовы привязаны к самой ОС. Для linux есть manpages и утилита man, там подробно задокументированы вызовы (man 2 write, например) и сам язык.
Аноним 11/01/19 Птн 15:47:33 1325021238
>>1325013
Спасибо тебе большое.
Аноним 11/01/19 Птн 16:29:25 1325056239
Аноним 12/01/19 Суб 17:46:59 1325578240
>>1325013
>Описание стандарта C11, например.
C18 же.
Аноним 12/01/19 Суб 19:37:20 1325656241
За что я могу взяться?
Недавно вызубрил синтаксис си, пару стд биболиотек.
Может тут кому-то нужна помошь с проэктом?
Готов гитануть ваш проэкт и покапаться в нем
Аноним 12/01/19 Суб 20:21:35 1325673242
>>1325578
>C18 же.
И что нового в нем?
Аноним 12/01/19 Суб 20:37:40 1325679243
>>1325673
Новых фич нет, только уточнения формулировок стандарта.
Аноним 12/01/19 Суб 20:42:13 1325682244
>>1325673
>>1325679
ATOMIC_VAR_INIT отменили, и теперь можно инициализировать переменные atomic-типов нормальным способом. Вполне можно считать за новшество.
Аноним 12/01/19 Суб 20:52:49 1325688245
Аноним 12/01/19 Суб 20:53:49 1325689246
>>1325688
Потому что мы ждем C20/21, а это просто багфикс-релиз.
Аноним 12/01/19 Суб 21:11:42 1325702247
>>1325689
Есть почитать про будущие измениния в C20/21? Интересуюсь.
Аноним 12/01/19 Суб 21:23:39 1325713248
Аноним 13/01/19 Вск 01:20:30 1325803249
Подскажите библиотеку для работы с бинарными деревьями, желательно с примерами. Нужно делать поиск по большому количеству хешей, предварительно построив из них дерево
Аноним 13/01/19 Вск 04:41:51 1325831250
Аноним 13/01/19 Вск 08:46:45 1325861251
Не могу нагуглить как у Си с асинхронностью и легковесными потоками.
Аноним 13/01/19 Вск 09:55:35 1325873252
>>1325803
а зачем тебе деревьями эту задачу решать? требуется усредненное время как на вставку так и на поиск что ли?
Аноним 13/01/19 Вск 09:58:06 1325875253
>>1325861
уточни что тебе конкретней надо
Аноним 13/01/19 Вск 11:23:20 1325894254
>>1325875
Что есть в Си чтобы писать конкурентный код? Не используя потоки ОС.
Аноним 13/01/19 Вск 11:30:31 1325896255
Аноним 13/01/19 Вск 11:35:25 1325900256
Аноним 13/01/19 Вск 12:13:35 1325912257
>>1325900
>setjmp/longjmp
Похоже это не то.
Аноним 13/01/19 Вск 16:08:40 1326002258
>>1325656
>Недавно вызубрил синтаксис си, пару стд биболиотек.
>За что я могу взяться?
Пока только за SICP, очевидно же.
Аноним 13/01/19 Вск 16:28:01 1326007259
Аноним 13/01/19 Вск 18:07:43 1326055260
Аноним 13/01/19 Вск 19:35:05 1326097261
>>1326007
Есть понятие concurrency, - конкурентный код. Я понимаю, что Си может юзать процессы и потоки ОС. Но кроме того на нем можно писать конкуретный код?
Аноним 13/01/19 Вск 20:07:55 1326132262
>>1326055
SICP не про lisp, а про то, как правильно писать программы.
Аноним 13/01/19 Вск 20:49:30 1326181263
>>1326132
Как можно научиться правильному синтаксису на примере другого языкА?
Аноним 13/01/19 Вск 21:01:39 1326198264
>>1325656
Что угодно, пиши плеер/фм/игру/небо/аллаха. Да хоть построй велосипед и изобрести заново какие нибудь функции из стандартной библиотеки.
Аноним 13/01/19 Вск 21:03:15 1326200265
>>1326181
SICP не про синтаксис
>>1326132
>, а про то, как правильно писать программы.
Еще бы любую книжку по алгоритмам и лекции Праты.
Аноним 13/01/19 Вск 21:33:46 1326224266
Аноним 14/01/19 Пнд 02:15:32 1326389267
Уважаемые, что посоветуете почитать после C Primer Plus?
Только начал вкатываться.
Аноним 14/01/19 Пнд 02:19:01 1326393268
>>1326181
>Как можно научиться правильному синтаксису на примере другого языкА?
Как можно узнав синтаксис стать программистом? Как можно выучив как ходят шахматы стать шахматистом? Как можно выучив цифры стать математиком?

Систаксис задает только правила написания букв. Суть программирования в смысле этих букв, а не правилах их написания. Программирование не про языки, а про вычисления, алгоритмы, логику, архитектуру. Язык только инструмент.
Аноним 14/01/19 Пнд 02:20:20 1326394269
>>1326224
Благодарю. А как насчет эвент библиотек, чтобы асинхронно было?
Аноним 14/01/19 Пнд 02:44:50 1326398270
>>1326394
GTK, например. Есть там сигналы и коллбэки.
Аноним 14/01/19 Пнд 04:25:04 1326409271
>>1325873
Есть большое количество хешей, выгрузка из кеша (несколько гигабайт), выгрузка обновляется не чаще чем раз в сутки. Нужно в реалтайме сравнивать хеши из кеша на совпадение с вновь генерируемыми хешами, которые потоком в очереди приходят, делать это нужно максимально быстро
Аноним 14/01/19 Пнд 04:26:13 1326410272
>>1325873
>а зачем тебе деревьями эту задачу решать?
самый быстрый алгоритм, который пришел ко мне в голову, для решения моей задачи
Аноним 14/01/19 Пнд 06:57:30 1326433273
>>1326398
Я имел ввиду libuv, libevent, etc. Они для чего используются? Их вообще юзают для написания программ, или только для рантаймов?
Аноним 14/01/19 Пнд 08:16:15 1326456274
>>1326409
не проще ли взять субд под эту задачу? заведешь табличку, будешь туда складывать что тебе надо и доставать
вариантов масса, от классики до неряционки
Аноним 14/01/19 Пнд 08:31:39 1326461275
>>1326433
это всего лишь библиотеки дающие более удобную работу с асинхронкой, что предоставляется целевыми ос
дополнительный плюс, что благодаря им обеспечивается кроссплатформенность
асинхронка же в 90% случаев, наверное, используется для одной задачи - написания серверов что пережевывают сетевые пакеты какого-нибудь протокола
Аноним 14/01/19 Пнд 09:22:53 1326469276
>>1326456
>не проще ли взять субд под эту задачу?

проще, но мне надо не проще, а максимально быстро.
У субд в любом случае еще будет накладные расходы, хотябы на парсинг запроса
Аноним 14/01/19 Пнд 09:29:44 1326471277
>>1326456
еслиб мне надо было проще, яб вообще бы, не на Си все это писал, а например на томже PHP+redis|mongo за пару часов накаталбы уже давно
Аноним 14/01/19 Пнд 09:53:45 1326473278
>>1317913 (OP)
Сисюны, джва вопроса.
1. Всегда ли в inline __attribute__((always_inline)) нудно определять тело или можно разнести на прототип в хедер и реализацию в другой файл?
2. Такое выдает варнинги, не нравится тип:
static const unsigned char charmap[] = {
'0x00', '0x01', '0x02', '0x03', ....

а такое нет:

static const unsigned char charmap[] = {
'\000', '\001', '\002', '\003', ....

чому, что за сорт октала и чем он лучше хекса?
Аноним 14/01/19 Пнд 10:37:29 1326484279
154735745311555[...].jpg (82Кб, 700x841)
700x841
>>1326473
>'0x00', '0x01', '0x02', '0x03'
Ой бля, скобки нужно убрать
Аноним 14/01/19 Пнд 10:39:21 1326486280
Аноним 14/01/19 Пнд 15:21:23 1326591281
изображение.png (10Кб, 530x370)
530x370
Почему появляется хуита снизу от того места, где должен был сработать fputs и на это должно было быть всё?
Аноним 14/01/19 Пнд 16:03:29 1326606282
в этом itt треде си-нищуки работают на студентов

Аноним 14/01/19 Пнд 16:05:29 1326608283
>>1326469
че, правда думаешь что твой велописед будет быстрее индексов в бд, которые как раз работают на деревьях, которые пилят чуваки с 30ти летним опытом?
давай
Аноним 14/01/19 Пнд 16:17:12 1326614284
>>1326608
> че, правда думаешь что твой велописед будет быстрее индексов в бд
да, потомучто я пилю только тот код который нужен для моей задачи, небудет ничего лишнего, никакого парсинга запросов, только чистое обращение по адресам в памяти, да и опыта у меня (в программировании вообще, но не в Си конкретно) не сильно меньше, уже за 20 лет будет.
Щас пилю чисто на AVL деревьях, никаких субд, юзаю libavl+gmplib
Аноним 14/01/19 Пнд 18:33:48 1326679285
>>1326456
Внутри СУБД будет какое-нибудь B+ tree. Зачем городить слои и лагать на взаимодействии с БД, если можно реализовать то же самое напрямую?

>>1326473
Если у тебя реализация инлайна в другом файле, то при сборке модуля компилятор реализацию не увидит, а значит и инлайнить ему будет нечего. Поэтому да, реализация инлайна должна быть либо в начале .c (если используешь только в одном модуле), либо в хедере. Правда, есть такая штука, как link-time optimization, когда кодогенерация откладывается до этапа линковки, но в этом случае всякая мелочь из других модулей будет инлайниться автоматически (если линкер сочтет нужным), без этих твоих атрибутов.

>>1326591
Потому что ты заебал. Прочитай что-нибудь про сишные строки наконец уже. strlen() выдает длину строки, не считая '\0' на конце, и в результате ты не копируешь '\0' в strx, оставляя строку нетерминированной.
Аноним 14/01/19 Пнд 18:36:32 1326681286
>>1326614
Не заметил сообщения. Если ты проверяешь раз в сутки, подумай о том, чтобы во время проверки срать в дерево как придется, а балансировать, когда проверка закончится. Можешь на этом выиграть время при проверке (а может и нет).
Аноним 14/01/19 Пнд 19:03:21 1326691287
>>1325803
Тоже хочешь макбук в хайлоад-капе выиграть? А вот хуй тебе
Аноним 14/01/19 Пнд 19:07:03 1326692288
>>1326393
этот Господин прав как никогда
Аноним 14/01/19 Пнд 19:32:05 1326706289
>>1326691
>Тоже хочешь макбук в хайлоад-капе выиграть
понятия не имел, но спасибо за инфу
Аноним 14/01/19 Пнд 19:57:41 1326718290
Нашел вакансию для себя нюфага,звучит так:

Обязанности:
разработка встроенного ПО для Linux (C, C++) и Windows (Visual C++, MFC) на платформе Intel x86, Freescale, сетевое взаимодействие по Ethernet;
сопровождение на объектах заказчика;
оформление документации;
возможны командировки.
---
Сопровождения на обьектах заказчика , как это понять? Яж вроде программист, нах мне ехать туда? Инет подключать?
Аноним 14/01/19 Пнд 22:09:42 1326796291
>>1326718
> сопровождения на обьектах заказчика , как это понять
Приезжать с программатором и ноутбуком, чтобы накатывать апдейты прошивок, отвечать на вопросы, почему ваш продукт такое кривое говно и отлаживать на местах то, что не получается отловить на стенде.
Аноним 14/01/19 Пнд 22:18:05 1326811292
>>1326692
Благодарю за поддержку. Надеюсь до кого-нибудь дойдет сея мысль.
Аноним 14/01/19 Пнд 22:41:42 1326833293
Аноним 14/01/19 Пнд 23:16:43 1326851294
>>1326796
Разве кодер должен такой хуйней заниматся? Первый раз слышу
Аноним 14/01/19 Пнд 23:50:03 1326866295
baskak.jpg (182Кб, 1280x915)
1280x915
>>1326409
>несколько гигабайт
Делол подобное на бинарном дереве, но быстро закончилась память. Посчитай примерно сколько оперативы нужно иначе или хэдуп или бд.
Аноним 15/01/19 Втр 02:28:01 1326929296
>>1326851
Иногда да, мы так ходили по администрации президента и ещё на н-ном количестве мест, которых даже на карте нет.
Аноним 15/01/19 Втр 03:14:12 1326937297
>>1326409
>выгрузка обновляется не чаще чем раз в сутки
Ну так отсортируй и ищи бинарным поиском, нахуя тут дерево городить.
Аноним 15/01/19 Втр 03:23:28 1326938298
Аноним 15/01/19 Втр 05:01:19 1326949299
Возможно ли на Си вернуть из функции весь массив, а не только одну его ячейку, через только один вызов функции?
Аноним 15/01/19 Втр 05:19:11 1326954300
>>1326949
Указатель на массив тебе чем не понравился?
Аноним 15/01/19 Втр 05:50:43 1326964301
>>1326954
А как сделать указатель сразу на весь массив, а не только на одну его ячейку?
Аноним 15/01/19 Втр 06:00:36 1326965302
>>1326866
> Посчитай примерно сколько оперативы нужно
В идеале памяти же нужно даже меньше чем сам размер выгрузки хешей, чтоб всё дерево в памяти постоянно держать, поэтому думаю что проблемы не будет, но в любом случае под это дело есть сервак с 64Гб оперативы который добивается при необходимости до 128Гб

> хэдуп
ох незнаю, помоему уж слишком тежеловесное решения для моей задачи, если юзать чтото готовое, то я бы выбрал redis

>>1326937
> нахуя тут дерево городить.
по дереву можно просто рекурсией ходить, а значит уменьшается количество операций для поиска конкретного значения, т.е. быстрее будет работать, особенно если дерево балансированное
Аноним 15/01/19 Втр 06:05:31 1326966303
>>1326949
по этому "вопросу", я думаю, становится понятен уровень треда
Аноним 15/01/19 Втр 06:06:16 1326967304
>>1326938
спасибо за ссылкую, надо подумать над этим алгоритмом
Аноним 15/01/19 Втр 06:06:36 1326968305
>>1326965
>64Гб оперативы который добивается при необходимости до 128Гб
чувак, возьми in-memory субд и перестань уже себе ебать мозг
мы понимаем что тебе очень хочется сделать свой велосипед, но повзрослей уже
Аноним 15/01/19 Втр 06:08:52 1326969306
>>1325803
Для работы с хэшами лучше всего подходит хэш-таблица.

А вообще попробуй sqlite перед тем как писать велосипед
Аноним 15/01/19 Втр 06:14:24 1326972307
>>1326969
>sqlite
пфф
чувак, на дворе 21 век
ты че
Аноним 15/01/19 Втр 06:15:01 1326973308
>>1326969
>хэшами лучше всего подходит хэш-таблица
а ха ха
в данном случае хэши - это данные, епт
Аноним 15/01/19 Втр 06:28:28 1326978309
>>1326964
>А как сделать указатель сразу на весь массив, а не только на одну его ячейку?

#include <stdio.h>
#include <stdint.h>

int main(int argc, char const argv[])
{
uint8_t a[256] = {};
uint8_t
ptr;
size_t n = 128;

ptr = a;
a[n] = 16;

for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {
if ( i == n )
printf("a[%lu] = %u", n, *ptr);
ptr++;
}

return 0;
}
Аноним 15/01/19 Втр 06:29:30 1326979310
Аноним 15/01/19 Втр 06:36:09 1326981311
>>1326968
> чувак, возьми in-memory субд и перестань уже себе ебать мозг
Мне хочется ебать себе мозг, можно я еще чутку поебу? Если мне вдруг надоест я в курсе готовых in-memory решений, но я хочу свой велосипед, т.к. уверен что это будет быстрее.

> но повзрослей уже
тяночку завести?

>>1326969
>Для работы с хэшами лучше всего подходит хэш-таблица.
ну выше над тобой уже посмеялись, ты толи задачу не понял, толи просто у тебя базворд сработал, услышал хеш, в голове щелкнуло hash table
Аноним 15/01/19 Втр 06:46:54 1326982312
>>1326966
ладно тебе, почти все такимы были, особенно те кто с PHP на Си переходил
Аноним 15/01/19 Втр 07:47:26 1326989313
>>1326965
>чем сам размер выгрузки хешей
Ссылка на хэш и джва узла = 64 * 3 = 24 байта на одну запись как минимум
Аноним 15/01/19 Втр 10:18:06 1327012314
>>1326964
чтоб прям охватывал?)
ну, можешь написать
#define UKAZATEL_SRAZU_NA_VES_MASSIV(ptr) ptr
и потом возвращать
return UKAZATEL_SRAZU_NA_VES_MASSIV(arr)
если тебе так будет спокойнее...
Аноним 15/01/19 Втр 11:28:51 1327032315
>>1327012
Очень смешно, лучше бы объяснил ему, что такое указатель и массив в принципе.
Аноним 15/01/19 Втр 12:18:49 1327065316
Короче, ребят, дайте свой код с примером вывода массива из функции.
Аноним 15/01/19 Втр 12:31:39 1327071317
Аноним 15/01/19 Втр 12:34:21 1327072318
>>1327065
Но тебе насамом деле нужно сначало понять, что такое указатели и как с ними работать, а потом понять что возвращать массив (или указатель на массив), в нормальной ситуации нет необходимости, и лучше все делать через структуры
Аноним 15/01/19 Втр 13:00:09 1327083319
>>1327071
Ты хоть проверял работает твой код или нет?
Аноним 15/01/19 Втр 13:01:22 1327085320
>>1327083
накатал за 3 минуты, скомпилил, работает, что не так?
Аноним 15/01/19 Втр 13:03:58 1327087321
>>1327085
> %s/3 минуты/полминуты/
fix
Аноним 15/01/19 Втр 13:04:41 1327088322
>>1327085
У меня на строку uint8_t a = malloc(size); жалуется
невозможно преобразовать "void
" в "uint8_t *"
Аноним 15/01/19 Втр 13:06:14 1327091323
Аноним 15/01/19 Втр 13:07:50 1327093324
Аноним 15/01/19 Втр 13:08:54 1327094325
>>1327088
цэпэпэшным компилером компилиш чтоли?
Аноним 15/01/19 Втр 13:10:14 1327095326
>>1327093
А если у меня в функции над массивами происходят некоторые манипуляции, будет ли целесообразно прокручивать функцию в цикле дохуялион раз только чтобы вывести из функции в маин массив?
Аноним 15/01/19 Втр 13:17:04 1327102327
15475474002494.jpg (43Кб, 786x438)
786x438
>>1327095
> будет ли целесообразно прокручивать функцию в цикле дохуялион раз только чтобы вывести из функции в маин массив?

Аноним 15/01/19 Втр 13:23:30 1327104328
>>1327095
расскажи лучше о себе, сколько тебе лет, в каком классе, каким компилером компилиш, какой осью пользуешся, в каком редакторе пишеш? Нам так будет проще понять твои проблемы и навести тебя на правильный путь
Аноним 15/01/19 Втр 13:32:18 1327109329
>>1327104
Я не буду учить питон, нахуй это говно не нужно.
Аноним 15/01/19 Втр 13:35:45 1327112330
>>1327109
>не буду учить питон
я и не настаивал, но думаю тебе лучше начать с чегото другого, например с Go, там хотябы компиляторы не перепутаеш
Аноним 15/01/19 Втр 14:53:31 1327176331
>>1327088
Юзай сишный компилятор, а не крестовый.
студийный ребенок очередной
Аноним 15/01/19 Втр 14:57:11 1327180332
>>1327176
Но как он на нём дошёл до указателей и массивов, или это версия K&R для особенных?
Аноним 15/01/19 Втр 14:58:39 1327182333
>>1327180
А что такого? В плюсах нет указателей и массивов?
Вероятно он смотрит в книгу по системе, а компилит в студии плюсовый код, можно и так, конечно, но вот некоторые фичи все таки есть.
Аноним 15/01/19 Втр 15:09:49 1327192334
>>1327180
K&R описывает С89, который полностью совместим с С++, за исключением вот этого случая. Поэтому лучше кастить, чтобы таких недоразумений не возникало.
Аноним 15/01/19 Втр 15:35:01 1327217335
Проблема указателей и типов, но типы 2 глава, а указатели 5. Тот же enum в С89 и C99 и крестах. Подразумевал проблемы должны были начаться немного ранее. Ну, ладно. Я вас услышал.
Аноним 15/01/19 Втр 17:07:19 1327268336
>>1327192
В системе кастить не нужно, покрайней в мере если ты при объявлении переменной сразу ее инициализируешь.
Если ты инициализируешь ее дальше по коду, то кастить нужно только для увеличения читаемости.
Чтобы человек сразу понимал по касту какой тип у переменной.
Аноним 15/01/19 Втр 19:31:15 1327355337
Уважаемые,
А есть ли в С аналог partial?
Типа функцию можно раскидать по файлам? Например часть генерируется автоматически, а часть руками дописывается, и хочется в разных файлах это хранить. Но чтобы компилилось как будто писанное в одном файле.
Аноним 15/01/19 Втр 19:51:31 1327373338
>>1317913 (OP)
>Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.

>Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C:
>Understanding and Using C Pointers by Richard M. Reese: Horribly written, conflates language specification and implementation, and describes concepts confusingly and/or wrongly in many cases.

ВТФ анон? Почему советуешь говно?
Аноним 15/01/19 Втр 20:02:56 1327384339
>>1327355
На препроцессоре можного такого напердолить, охуеешь
Аноним 15/01/19 Втр 20:15:33 1327395340
>>1327373
(1) a function on page 87 uses pointers to memory that has already been deallocated, which is undefined behavior. The same function has redundant variables "length" and "currentPosition" -- one of the two would have been sufficient to accomplish the task.
(2) Elsewhere, Reese defines a linked list header structure with pointers to the head node, the tail node, and the current node. This structure is used at several later points in the book, but the reason for including a pointer to the current node is never made clear; none of the code in the book ever uses it, and indeed, it's difficult to see why it would be useful.
(3) While Reese explains the difference between the value 0 and the NUL character, in several places his code elides the difference, using the former where the latter would be more strictly appropriate (e.g., page 131 has `while (string != 0)` when `while (string != '\0')` or preferably `while (*string)` would be better style.
(4) Throughout, the book provides examples of infinite loops with break statements instead of using good structured style and having the break condition be the loop conditional.
(5) Surprisingly for a book that mentions the C99 and C11 standards often, there are a lot of references to using Microsoft Visual C++ as a compiler. Microsoft does not, and by all accounts never will, support C standards past C89. It is a C++ compiler, not a current C compiler. It mandates practices that are not C like in their philosophy, and Reese's code succumbs. For instance, he explicitly casts the return values from malloc and realloc to pointers of the appropriate type, which is not considered good C style. Good C code should be written in compliance to the C standard, not in conformance with the requirements imposed by a compiler geared to a different language.
Аноним 15/01/19 Втр 20:39:40 1327406341
image.png (8Кб, 1105x57)
1105x57
Как это работает
Оператор k = k | 040000000; добавляет 1, которая не хранится в числе для экономии разрядов
Аноним 15/01/19 Втр 20:41:21 1327407342
>>1327406
Ебать, пикча откуда то взялась
Аноним 15/01/19 Втр 20:45:58 1327410343
>>1327373
Книжки в шапку предлагали все кому не лень. Анону понравилась эта. В шапке еще и хардвей есть, на который говна гораздо больше лилось.

>>1327395
> difference between the value 0 and the NUL character
Придирки, там в обзоре каждой книги десятки подобных мелких придирок, которые ни на что не влияют.

> infinite loops with break statements
Не читал, как там конкретно, но часто такое имеет смысл и бывает более читаемо.

> Microsoft does not, and by all accounts never will, support C standards past C89
Хуйня, в студии давно можно писать на C11 (по большей части).

>>1327406
Нихуя непонятно, что тут имеется в виду. Больше контекста есть?
Аноним 15/01/19 Втр 20:52:44 1327415344
>>1327384
А как сделать это? >>1327355

Просто интересно, напиши если не лень.
Аноним 15/01/19 Втр 21:05:09 1327421345
>>1327406
040000000 - восьмиричное число (обрати внимание на ноль в начале), работает как любые манимуляции с битами
Аноним 15/01/19 Втр 21:18:11 1327426346
>>1327415
Не очень понятно, что ты подразумеваешь под partial.

>Например часть генерируется автоматически, а часть руками дописывается

void yoba(int i, int j) {
if (i == j) {
#include "generiruetsa_avtomaticheski.inc"
}
}

Это простейшим момент. Дальше в мейкфайле прописываешь вызов скрипта, который генерирует "generiruetsa_avtomaticheski.inc". При этом снаружи от инклуда ты можешь дефайнить что-то, например, типы данных:

//main.cpp
#define DATATYPE float
#include "yoba_file.h"
#undef DATATYPE

//yoba_file.h
typedef struct {

} yoba_ ## DATATYPE;

сгенерирует тебе yoba_float
Аноним 15/01/19 Втр 21:21:33 1327429347
Аноним 15/01/19 Втр 21:22:15 1327430348
>>1327355
Но ведь partial - это всего лишь аргументы по умолчанию.
#define open_binary_read(filename) fopen(filename, "rb")
Аноним 15/01/19 Втр 23:23:05 1327499349
Аноним 15/01/19 Втр 23:40:34 1327511350
>>1317913 (OP)
Двощик, не могу сконверить wchar_t в UTF-8. Конверчу через iconv, возвращает всегда 0 (типа, 0 байт сконвертировано).
Кот: https://ideone.com/nxH64Z
Где я долбоёб?
Аноним 16/01/19 Срд 00:03:55 1327537351
>>1327511
Почитай, что именно возвращает iconv.
> Где я долбоёб?
iconv модифицирует указатель output таким образом, чтобы он указывал на оставшуюся часть буфера (после сконвертированного текста) таким образом, чтобы было удобно дописывать в него последующими iconv. Решение спорное, но у тебя ничего не работает именно потому, что ты возрващаешь указатель не на начало буфера.
Аноним 16/01/19 Срд 00:08:17 1327538352
>>1327373
Решительно не понимаю и, при всем желании, не могу быть толерантен к тем, для кого существует понятие "вкат в указатели". Во что там вкатываться? Это каким надо быть ...?? Можно любую книжку по ассемблеру взять и теоретическое введение сказочкой на ночь почитать, потом в процессе K&R указатели сами собой мысленно изобретутся еще до главы про них.
Аноним 16/01/19 Срд 00:12:47 1327542353
>>1327538
>при всем желании, не могу быть толерантен
Держи нас в курсе.
Как же заебали эти токсичные пидоры с даннингом-крюгером.
Аноним 16/01/19 Срд 00:20:26 1327550354
>>1327542
Я, конечно, всегда сдержанно объясню, когда кто спросит, но внутри подгорает каждый раз. Это ж какой-то мазохизм непоследовательного изучения. Быть может, романтику находят в волшебном мире программирования из частных случаев и тупых вопросов, но это ни разу не проще, чем недельку-другую правильную теорию покурить.
Аноним 16/01/19 Срд 08:00:50 1327633355
!thank.jpg (110Кб, 750x354)
750x354
>>1327537
Ух бля
Писать кот, не читая манов? Никогда такого не было, и вот опять
Аноним 16/01/19 Срд 08:21:16 1327640356
>>1327550
>всегда сдержанно объясню
зря
Аноним 16/01/19 Срд 13:48:05 1327779357
>>1326969
>Для работы с хэшами лучше всего подходит хэш-таблица.
Деревья вроде быстрее.
Аноним 16/01/19 Срд 14:09:54 1327796358
>>1327779
Нет, в дереве O(log N), где N - количество объектов в дереве, в хэштаблице при правильно подобранной хэш-функции почти всегда если коллизий нет O(1).
Аноним 16/01/19 Срд 14:37:32 1327824359
>>1327796
>O(1)
>O(log N)
Мохнатое О для пидоров, ты же знаешь
>если коллизий нет
>если кэш не прогрет
>если Луна в зените
Аноним 16/01/19 Срд 16:15:36 1327932360
Аноним 16/01/19 Срд 16:27:52 1327943361
>>1327932
>Толсто
Поясняй за О
Аноним 16/01/19 Срд 16:45:56 1327962362
>>1327824
Это математическое понятие же, что ты доебался до него.
Аноним 16/01/19 Срд 17:06:47 1327981363
Аноним 16/01/19 Срд 17:11:20 1327986364
>>1327962
>математическое
Так и говори, мол пузомерка, к реальности не имеющая нихуя общего
Аноним 16/01/19 Срд 17:12:08 1327988365
>>1327981
>Порядок роста
Глупости
Аноним 16/01/19 Срд 17:20:16 1327994366
>>1326965
>по дереву можно просто рекурсией ходить, а значит уменьшается количество операций для поиска конкретного значени
По сравнению с бинарным поиском? Ты бредишь, число операций будет одинаковым.
Аноним 16/01/19 Срд 17:20:24 1327996367
>>1327986
Почему не имеет?
Например с теми же сортировками ты можешь сравнить какой-нибудь пузырёк с пирамидальной на одном и том же наборе данных и объяснить почему пирамидальная будет быстрее.
Вполне себе вариант, как по-твоему алгоритмы вообще оцениваются, и по каким требованиям ты выбираешь один из них, если не смотришь на оценки?
Заранее знаешь какой из них подойдёт лучше в твоём случаеопять же исходя из математики лол?
Аноним 16/01/19 Срд 17:22:04 1328000368
>>1327994
Для бинарного поиска нужен отсортированный массив, вставка в дерево стоит намного меньше по времени, чем вставка в массивне в конец, даже если ты будет использовать подобие deque дерево все равно будет быстрее на вставке.и соответственно удалении
Аноним 16/01/19 Срд 17:29:54 1328007369
>>1328000
Нахуя тебе вставлять в массив? Берешь 2 структуры данных, массив и хэш, массив размером в гигабайты, в хэш вставляешь текущую инфу. Ищешь и там и там. Раз в сутки их сливаешь, скидывая из оперативки на жесткий диск, и читая обратно.

А бинарное дерево размером в несколько гигабайт из которых две трети это указатели на ноды дерева, это так себе хуитка для этой задачи.
Аноним 16/01/19 Срд 17:48:05 1328027370
>>1327996
>и по каким требованиям ты выбираешь один из них, если не смотришь на оценки
Пишу оба и замеряю скорость, реализации невозможно оценить.
Аноним 16/01/19 Срд 17:49:00 1328028371
>>1328007
>Берешь 2 структуры данных, массив и хэш
В каком классе учишься?
Аноним 16/01/19 Срд 17:53:14 1328033372
>>1328028
Мне 30 лет, а вот ты скорее всего учишься со своим "маам ну че он так говорит".
Аноним 16/01/19 Срд 18:01:14 1328040373
images.jpg (6Кб, 225x225)
225x225
Аноним 16/01/19 Срд 18:44:49 1328081374
>>1327996
> Почему не имеет?
Потому что, сравнивая пузырек или selection sort со сложной сортировкой на практике, ты обнаружишь, что на в массивах с небольшим количеством элементов (меньше 10) пузырек заметно быстрее (посмотри реализацию qsort в glibc, они там до insertion sort деградируют в конце концов как раз по этой причине). Потому что кроме количества операций, есть еще разная цена операций, spatial locality, вот это все. И все это никак не отражается в O-большом, которое оценивает сферический алгоритм в вакууме, а не поведение реального кода на реальной машине. Поэтому да, как написали выше, это всего лишь оценка роста сложности, не более.
Аноним 16/01/19 Срд 20:50:19 1328147375
Аноним 16/01/19 Срд 20:51:26 1328148376
>>1328081
О большое оценивает алгоритмы при росте нагрузки, твой Кеп, да и на 10 элементах по факту вообще без разницы какой алгоритм юзать, meh
Аноним 16/01/19 Срд 20:54:49 1328151377
Аноним 16/01/19 Срд 21:54:59 1328196378
>>1327796
Я не вникал глубоко в вопрос. Мне кажется ты ошибаешься. Маршрутизацию сетевых запросов реализуют исключительно на деревьях.
Аноним 16/01/19 Срд 22:23:27 1328221379
Аноним 16/01/19 Срд 22:27:04 1328223380
изображение.png (57Кб, 236x314)
236x314
Привет аноны. Подскажите, ищу опенсорсные драйвера для цветного принтера (пилю свой принтер). Гуглил, но как-то с ходу не нашёл.
Есть что-то а примете?
Аноним 17/01/19 Чтв 00:53:07 1328302381
>>1328223
Попробуй открыть ядро линукса, лол.
или ты виниловый попенсорс ищешь?
Аноним 17/01/19 Чтв 02:12:03 1328318382
1501421565-4903.png (686Кб, 674x888)
674x888
Мудрецы, давайте советуйте, джва потока срут на экран перебивая друг друга, как организовать последовательный вывод? Притормозить их или мутекс, хз короч, но кроссплатформено и по феншую.
Аноним 17/01/19 Чтв 02:29:57 1328327383
>>1328318
По феншую мютекс. В C11 есть потоки, они кроссплатформенные, и мютексы там есть.
Аноним 17/01/19 Чтв 03:19:11 1328333384
>>1328327
в сферическом C11 в вакууме потоки есть, но glibc как-то не парится, ибо кому они нужны, когда есть POSIX...
Аноним 17/01/19 Чтв 04:24:33 1328337385
>>1328333
А зачем glibc париться, если в линуксе код с C11-потоками уже давно отлично собирается с -lpthread?
Аноним 17/01/19 Чтв 07:10:17 1328348386
>>1328337
То есть, таки приствуют соответствующие стандарту C11 обертки вызовов pthread_create и т.д., как это сделано в std::thread для C++? Что-то у меня получалось инклудить <thread.h>...
Аноним 17/01/19 Чтв 07:54:47 1328358387
>>1328221
Какая разница аппаратно или программно? Если поиск в хэш-таблице настолько быстрый, то зачем деревья? Роутинг в веб-фреймворках тоже реализуют с помощью деревьев. Почему так?
Аноним 17/01/19 Чтв 08:58:45 1328370388
>>1328358
>поиск в хэш-таблице настолько быстрый
по сравнению с чем?
Аноним 17/01/19 Чтв 09:34:54 1328384389
>>1328370
С поиском в префиксном дереве.
Аноним 17/01/19 Чтв 10:47:00 1328410390
154528800417995[...].png (819Кб, 700x875)
700x875
>>1328384
Ээээ, а с чего ты взял, что хэш быстрей? Хэш вычисляет и находит боженька за тебя?
Аноним 17/01/19 Чтв 11:46:01 1328430391
>>1328337
>-lpthread

нужно юзать просто -pthread (без -l), так gcc принудительно собирает все зависимости с подержкой мультитредовости с тред-сайфовым подходом
Аноним 17/01/19 Чтв 11:57:43 1328436392
>>1328410
Поиск в хэш-таблице в среднем проходит за O(1), в худшем случае конечно за O(n), а в дереве за O(log n).
Аноним 17/01/19 Чтв 12:18:01 1328446393
>>1328436
Подсчет хэша - алгоритм, который тоже имеет длительность работы, вот о чем тебе говорят.
Аноним 17/01/19 Чтв 13:58:24 1328503394
Анон, подскажи плес, как в пинусе эмулировать нажатия клавиш клавиатуры и мышки. С меня как обычно.
Аноним 17/01/19 Чтв 17:57:59 1328742395
Уже решил сотню простых задач, но когда дело доходит до сложных, где потребуется написать как минимум пару функций, вступаю в ступор. Вопрос к шарящим, как научится писать сложные программы?
Аноним 17/01/19 Чтв 18:59:47 1328779396
Нахуя нужный структуры? В каком случае применение структур необходимо? В каком случае без структур обойтись невозможно? Какой в них вообще смысл?
Аноним 17/01/19 Чтв 19:05:17 1328784397
>>1328779
Для упаковки данных. Например заголовки различных протоколов упаковывают в структуры. Это только первое, что в голову пришло. Ну, или чтобы образовать осмысленные связи между данными. ООП начался со структур. От классов отличаются тем, что поля структур видны отовсюду и могут быть изменены в рантайме без методов-акцессоров, а у классов по инкапсуляции недоступны и нужны методы-акцессоры для их изменения.
Аноним 17/01/19 Чтв 19:07:38 1328785398
>>1328784
подожди-подожди
какой то дебил, который даже не удосужился загуглить, задает тупейший вопрос и ты сразу же бросился отвечать?

если я тя в офисе попрошу за сигами сбегать, тоже метнешся?
Аноним 17/01/19 Чтв 19:08:55 1328787399
>>1328785
Эххх, ну придётся. Тебе какие? Себе ведь тоже тогда возьму.
Не душни, анон. Мне просто не с кем пообщаться.
Аноним 17/01/19 Чтв 19:11:59 1328790400
>>1328787
Мне тоже пожалуйста. LD красные, не ебет если в ближайшем не будет
Аноним 17/01/19 Чтв 19:29:20 1328798401
>>1328785
Не агрись. Тред для тех кто учится, а не для гуру.
Аноним 17/01/19 Чтв 19:31:10 1328799402
Аноним 17/01/19 Чтв 19:32:02 1328802403
Аноним 17/01/19 Чтв 20:16:44 1328820404
>>1328784
>поля структур видны отовсюду и могут быть изменены в рантайме
Это весьма хуево. Как с этим бороться?
Аноним 17/01/19 Чтв 20:20:59 1328825405
Аноним 17/01/19 Чтв 20:22:53 1328827406
>>1328820
пиздовать к крестоблядям.
А если серьёзно, то не менять их и всё. Тыж программист или кто? Вот и не трогай то, что трогать не нужно. Ну, или можешь приделать выбрасывание ошибок, как только поля структур будут меняться без твоего ведома(неявно), либо сделать эти поля константными, чтобы совсем их не менять. Это в теории всё. Я не знаю зачем вообще с этим бороться. Это как бороться со сладкими конфетами и выбрасывать их в мусорку вместо того, чтобы их есть.
Аноним 17/01/19 Чтв 20:27:20 1328832407
>>1328827
Но подожди, это получается любой хацкер сделав дамп оперативы, получает полный доступ к архитектуре?
Аноним 17/01/19 Чтв 20:27:55 1328833408
>>1328827
>сделать эти поля константными
HASKIL?
Аноним 17/01/19 Чтв 20:31:48 1328835409
>>1328820
никак, в чужой монастырь настоящих программистов со своим ООП-уставом не ходят
Аноним 17/01/19 Чтв 20:34:24 1328836410
Аноним 17/01/19 Чтв 20:39:36 1328843411
>>1328835
>>1328836
Клянусь не собирался толстить но что-то мне подсказывает, что наступил на мозоль, лол, сам учусть по прате.
А вот реально, как этого избежать? В MISRA не нашел с первого раза, она больше про стабильность.
Аноним 17/01/19 Чтв 20:43:46 1328847412
>>1328503
Попробуй libatspi чёт такое.
Аноним 17/01/19 Чтв 20:44:57 1328849413
>>1328742
Продолжать писать простые, напиши несколько простых, объедини их в более сложную.вообще это странно, возможно ты не умеешь разделять задачу на более мелкие?
Аноним 17/01/19 Чтв 20:47:21 1328851414
>>1328832
Память это набор нулей и единиц, не знаю, что он там делать будет.
все сломает, особенно лаба1.с
Аноним 17/01/19 Чтв 21:07:04 1328871415
>>1328820
> поля структур видны отовсюду
> Это весьма хуево. Как с этим бороться?
Есть идиоматичный код (который, кстати, невозможно повторить на крестах с этими ихними классами):
foo.h:
typedef struct foo foo;
foo ∗foo_create(void);
void foo_destroy(foo ∗);
void foo_do_smth_useful(foo ∗);
и другие методы...
foo.c:
#include "foo.h"
struct foo { int private_data; };
foo ∗foo_create(void) { foo ∗obj = malloc(sizeof(∗obj)); obj->private_data = 0; return obj; }
void foo_do_smth_useful(foo ∗obj) { obj->private_data = 42; }
и другие методы...

Алсо, есть такая штука, называется документация, там можно описать, что в структуре разрешено менять напрямую и как именно. Можно написать, что ничего нельзя, это хороший подход.
Аноним 17/01/19 Чтв 21:07:44 1328872416
BRT.jpg (6Кб, 272x185)
272x185
YEAH.jpg (14Кб, 294x292)
294x292
Аноним 17/01/19 Чтв 21:07:57 1328873417
>>1328843
не думал, что один и тот же человек. А толстота про хакера. Каким образом инкапсуляция (политика компилятора с private модификаторами доступа) остановит хакера, способного "словить дамп оперативы"? Вот и подумал, что рофл. Уж больно умный термин присутствует в перемешку с откровенной ерундой, вроде этого >>1314292 . Впрочем, "толстота" - не вполне уместная оценка, такое даже забавно читать)
Аноним 17/01/19 Чтв 21:11:24 1328875418
>>1328851
большие слова обычно выравнены под 8-байтовую сетку, можно за что-то похожее на указатели зацепиться
Аноним 17/01/19 Чтв 21:15:53 1328877419
>>1328875
Ну это да, но это слишком нужно дрочиться.
да и все равно ось тебя не пустит по чужой памяти ползать, даже если ты на уровне ядра что-то поменяешь можно просто панику словить
Аноним 17/01/19 Чтв 21:22:06 1328883420
>>1328877
> да и все равно ось тебя не пустит по чужой памяти ползать
Иногда есть /dev/mem из юзермода. Из ядра есть все, что угодно. А еще ниже есть дамп через DMA.
Аноним 17/01/19 Чтв 21:22:59 1328884421
>>1328446
Так что вы мне голову морочите. Я же изначально говорил, что деревья используют для таких задач. Но какой-то анон сказал, что хэш-таблицы быстрее.
Аноним 17/01/19 Чтв 21:24:03 1328885422
>>1328742
> Уже решил сотню простых задач
Какого типа задачи?

>>1328742
>но когда дело доходит до сложных, где потребуется написать как минимум пару функций, вступаю в ступор
Разве ты в сотне задач не писал функций?
Аноним 17/01/19 Чтв 21:25:04 1328886423
>>1328877
а junior hacker вакансии и не предлагаются)
Аноним 17/01/19 Чтв 21:28:34 1328889424
>>1328851
а свет - это волны (частицы). Что шпион будет делать с биноклем? Средства интерпретации сигналов (аналоговых/дискретных) существуют. Естественно, несанкционированное пользование на порядок сложнее. Это не новость, тупых хакеров не бывает.
Аноним 17/01/19 Чтв 21:52:12 1328907425
>>1328779
У человека в кратковременной памяти помещается примерно 7 объектов, без структур ты быстро утонешь в сложности и ничего писать не сможешь
Аноним 17/01/19 Чтв 21:57:17 1328913426
>>1328907
Для человеков с кратковременной памятью придумали IDE, в которые такой хуйней не страдают.
Аноним 17/01/19 Чтв 21:59:23 1328914427
Котаны, эклипс марс кодирует строки, которые я объявляю в программе в unicode?
printf("%c = %d\n", "A", "A"); //{ = 1073646356
printf("%c = %d\n", "a", "a"); //$ = 1073646372
Как пофиксить чтобы char кодировался в ASCII?

Аноним 17/01/19 Чтв 22:01:55 1328916428
>>1328914
Ты хотел одинарные кавычки вокруг символов. Сейчас ты выводишь адреса (или части адресов) строк, а не численные значения символов.
Аноним 17/01/19 Чтв 22:02:35 1328917429
Аноним 17/01/19 Чтв 22:04:38 1328919430
>>1328916
Обожаю тебя, анон.
Сегодня ты мой герой, рили.
Спасибо.
Аноним 17/01/19 Чтв 22:17:21 1328929431
>>1328851
Лол. Он получит маш. код, переведет в Асм (не в ручную конечно) и сделает все необходимое.
Аноним 17/01/19 Чтв 22:21:20 1328930432
Я могу в теории, ввести в printf() индекс хуйни в стеке и получить значение?
Аноним 17/01/19 Чтв 22:40:44 1328935433
>>1328930
В теории нет (undefined behavior), на практике можешь. Чего конкретно ты хочешь добиться?
Аноним 17/01/19 Чтв 22:44:32 1328937434
>>1328935
Посмотреть, каким образом запушивается все в стек
Ну короче программирую Си с асм вставками, довольно интересно
Аноним 17/01/19 Чтв 22:53:06 1328942435
>>1328937
> Посмотреть, каким образом запушивается все в стек
Ну есть же отладчики. Но если очень хочется, то примерно так (тут повсюду UB, поэтому в продакшене использовать не стоит, собирать как-либо кроме -O0 не стоит тем более). Чуть правильнее было бы переписать на va_list/va_arg, но оно не перестанет быть UB.

void foo(int arg, ...)
{
uintptr_t ∗stackptr = (uintptr_t ∗) &arg;
for (size_t n = 0; n < 10; n++, stackptr++) printf("%p: %lx\n", stackptr, ∗stackptr);
}

int main(void)
{
foo(0); // Аргумент нужен как точка отсчета, сам по себе не используется.
}
Аноним 17/01/19 Чтв 23:05:16 1328948436
>>1328884
Ну это был не я, собственно, я и не написал, что нужно использовать хэш для его задачи.
Аноним 17/01/19 Чтв 23:06:18 1328950437
>>1328930
А то. Это называется format string attack
Аноним 18/01/19 Птн 03:01:29 1329076438
>>1328948
>Ну это был не я
чем докажешь?
Аноним 18/01/19 Птн 03:15:31 1329078439
>>1329076
Доказал твоей мамке за щеку, проверяй
Аноним 18/01/19 Птн 03:25:28 1329079440
>>1328937
не все в стек пушится. Например, на Linux под x86_64 сначала выбираются RDI, RSI, RDX, RCX... для float свои регистры есть тоже
Аноним 18/01/19 Птн 07:43:09 1329114441
>>1329078
С вертухи тебе бы въебал, чмоха малолетняя
Аноним 18/01/19 Птн 08:11:19 1329117442
>>1328942

> stackptr++
> stack
> ++

проорал со спалившегося абстрактушка.
Аноним 18/01/19 Птн 08:49:10 1329125443
>>1329117
Аргументы пушатся в обратном порядке же.
Аноним 18/01/19 Птн 08:50:12 1329126444
>>1328436
> O(1)

можно не для математиков объяснить, это сколько?
Аноним 18/01/19 Птн 08:54:32 1329128445
>>1329126
Значит за одинаковое время.
Аноним 18/01/19 Птн 09:03:25 1329130446
>>1329128
а O(n) тогда сколько?
Аноним 18/01/19 Птн 09:44:11 1329146447
>>1329130
В n раз больше, очевидно же.
Аноним 18/01/19 Птн 09:48:04 1329147448
>>1329146
>очевидно же

что такое "O" так и не понял, ну да ладно, видимо это какието секреты математиков
Аноним 18/01/19 Птн 09:50:54 1329150449
>>1329125
Он про то, что стек растет от больших адресов к меньшим.
Аноним 18/01/19 Птн 09:52:37 1329152450
>>1329147
>Обозначение «„O“ большое» введено немецким математиком Паулем Бахманом во втором томе его книги «Analytische Zahlentheorie» (Аналитическая теория чисел), вышедшем в 1894 году. Обозначение «„о“ малое» впервые использовано другим немецким математиком, Эдмундом Ландау в 1909 году; с работами последнего связана и популяризация обоих обозначений, в связи с чем их также называют символами Ландау. Обозначение пошло от немецкого слова «Ordnung» (порядок).
Аноним 18/01/19 Птн 09:55:18 1329154451
>>1329152
> читай книжки, я сам хуй знаю что это

так и думал



Аноним 18/01/19 Птн 09:59:13 1329155452
>>1329150
Я понял. Но если первый аргумент, с адреса которого начинается цикл, был добавлен в стек последним и находится на вершине стека, то его адрес как раз и будет наименьшим из всех аргументов. Поэтому в >>1328942 в цикле ++. Разве не так?
Аноним 18/01/19 Птн 10:43:53 1329165453
kateesnameyarik1.png (16Кб, 517x529)
517x529
Всем привет. Пэхапэ-макака репортинг ин. Смотрел недавно трансляцию на тытрубе, где какие-то типичные битарды сычи красноглазики в количестве 2х штук писали код на си, угорали там над чем-то, тут у них утечка, ой, а тут код сишный в сиплюсплюс не конпилится, а тут двоичные числа не записать, ой, а тут из 16-ти битного в 32-х битный режим переходим, ой.

И меня этот процесс настолько затянул и воодушевил, что я захотел повысить собственное ЧСВ и научиться писать велосипеды для операционок, чтобы их можно было установить на любом компе, ну и конпилировать, конпилировать и еще раз конпилировать. А еще я думаю, что это будет плюсом, когда я пойду перекатываться в офис и черкану строчку об опыте на чем-то, кроме пхп.

Так вот, что мне для этого выбрать: каконичный С или же С++? Вроде как С++ мое чсв раздует до предела, но вдруг я его не осилю, а мне еще работать нужно будет.
Аноним 18/01/19 Птн 11:49:12 1329216454
>>1329155
ну да, стек растет сверху вниз, виртуальные адреса 0x7fffffffffff-0x7fffff000000, а пушится все в обратном порядке, чтоб потом выбиралось в прямом, иначе бы не понять было, с какого адреса начинается argv, например, а так посмотрел argc, что лежит по адресу RSP, и дальше за ним уже собираешь все до NULL...
Аноним 18/01/19 Птн 11:57:02 1329226455
>>1329165
судя по всему, тебе хочется именно того, что даст чистый Си. Начав с крестов и уснешь скоро (там инфы как воду из ведра пить), и пробелы в low-level знаниях останутся. Вообще, прелесть C++ доступна сишникам, девственные же джависты и прочие макаки, как ты себя обозвал, вряд ли извлекут пользу из кажущейся бессмысленной запутанности.
Аноним 18/01/19 Птн 12:03:39 1329235456
>>1329154
O(1) означает, что процессору нужно сделать одно и то же количество операций для поиска по коллекции из 100, 1000 и 1000000 элементов. O(n) значит, что количество операций растет пропорционально размеру коллекции.
Аноним 18/01/19 Птн 12:09:01 1329241457
>>1329235
маняматика и жидовские выдумки ненужны
Аноним 18/01/19 Птн 12:21:29 1329247458
>>1329235
Я думаю O(1) одна операция. Постоянное время имеется ввиду сколько времени нужно конкретному процессору для выполнения 1 операции.
O(n) умножаем это постоянно время, допустим 0,001 секунды на n. Где n это обычно количество лупов в цикле, обычно соответствующая количеству элементов в массиве.
Но возможно манятеория.
Аноним 18/01/19 Птн 12:27:03 1329250459
>>1329226
Понял, спасибо, осяду тут у вас тогда.
Аноним 18/01/19 Птн 12:32:23 1329252460
>>1329247
>лупов в цикле
Количество ITT в этом треде.
Аноним 18/01/19 Птн 14:03:07 1329301461
>>1329235
>что процессору нужно
нинужно, это на сферической геймашине Тюринга только работает
Аноним 18/01/19 Птн 14:26:25 1329333462
Господа сишники, вот вам вопрос из собеседования.

Программа на си компилируется в байт-код. Как можно скомпилировать байт код обратно в программу на си?
Аноним 18/01/19 Птн 15:55:36 1329394463
>>1329333
Использовать декомпилятор или же продизассемблировать и восстановить исходный код.
Аноним 18/01/19 Птн 16:28:03 1329411464
БЛЯДЬ, ГДЕ МОЖНО СКАЧАТЬ НОРМАЛЬНЫЙ 32-Х БИТНЫЙ КОМПИЛЯТОР ДЛЯ СИШКИ??? ВЕЗДЕ ОДНА х64-ХУЕТА, СУКА!!!
Аноним 18/01/19 Птн 17:38:49 1329449465
>>1329333
си в байт код ??? не, не слышал. Жава была замечена, а си нет.
Аноним 18/01/19 Птн 17:47:26 1329456466
>>1329333
>Программа на си компилируется в байт-код.
Интерпретатор для С? Впервые слышу.
Аноним 18/01/19 Птн 19:40:06 1329523467
Объясните мне, он дурачок или это я чего-то не понимаю? Как он для char присваивает целые слова, а не только один символ?
https://youtu.be/guinn2k1PGE?t=340
Аноним 18/01/19 Птн 19:45:28 1329526468
>>1329523
Нужно быть ебанутым, чтобы снимать видео по программированию и совсем ебнутой макакой, чтобы их смотреть. Пошёл нахуй отсюда, пидор грязный.
Аноним 18/01/19 Птн 20:08:58 1329548469
>>1329523
Не char, а char*.

>>1329526
Насколько надо быть ебанутым, чтобы в 2018 году вместо ответа на вопрос объяснять спрашивающему, какой он мудак? Пидор грязный-то ты.
Аноним 18/01/19 Птн 20:15:39 1329558470
>>1329548
Пробовал со звёздочкой, невозможно преобразовать "const char [8]" в "char *"
Аноним 18/01/19 Птн 20:25:09 1329564471
>>1329558
Я не телепат, чтобы видеть то, что у тебя там. Ты не можешь присвоить одну сишную строку другой с помощью =, нужно использоваться strcpy.
Прочитай Кернигана и Ричи про строки и после этого вторую главу вот здесь faqs.org.ru/progr/c_cpp/cfaqrus.htm , может начнешь понимать, что ты делаешь.
Аноним 18/01/19 Птн 20:28:45 1329567472
>>1329548
>в 2018
2019.
>Пидор грязный-то ты
Нет ты. Видео-дауны самые поехавшие дауны, с таким же успехом можешь Сю по шебм объяснятьб прямо сразу в фап-треде.
Аноним 18/01/19 Птн 20:33:56 1329572473
>>1329567
>Пидор грязный-то ты
Нет ты
Аноним 18/01/19 Птн 20:35:50 1329574474
480full-red-hea[...].jpg (18Кб, 480x270)
480x270
>>1329165
Вот реально поддвачну этого >>1329226

А от себя добавлю:
Я начал с C#, у них в шапке очень хорошая книга. Дошел до 2/3 книги. В какой-то момент появляется ощущение, что вроде все ясно, но чего-то не догоняешь, как-будто обладаешь разнозненными фактами а не знанием.
Я реально жалею о потраченном времени, надо было начинать с сишечки.
Аноним 18/01/19 Птн 20:36:02 1329575475
Аноним 18/01/19 Птн 20:36:13 1329576476
>>1329567
>Нет ты. Видео-дауны самые поехавшие дауны, с таким же успехом можешь Сю по шебм объяснятьб прямо сразу в фап-треде.
Самые поехавшие дауны - это вот эта ебанутая публика, которая заходит в тред чисто чтобы похамить и самоутвердиться. Гуглишь что-нибудь, и знаешь, что если гугл дал тебе лор или какую-то еще рашкопомойку, то можно не кликать, потому что ответ на вопрос будет в лучшем случае на второй странице - до этого такие уникальные мамкины специалисты будут нести хуйню, о том, какой задавший вопрос мудак. Хотя ты и есть тот самый гнойный пидор, которому лучше бы заткнуться и убить себя.
Что касается видео, ничего плохого в них нет, если само видео пилит профессионал. Это, конечно, не случай того, что он принес, но ты-то не об этом сказал.
Аноним 18/01/19 Птн 20:38:29 1329578477
>>1329165
>каконичный С или же С++? Вроде как С++ мое чсв раздует до предела, но вдруг я его не осилю, а мне еще работать нужно будет.
Си, потом вдумчиво читать Дизайн и эволюцию, потом книги Мейерса и Саттера.
Тогда С++ вообще не будет казаться сложным. Потому что он и не сложный особо, здесь даже не нужно знать, что такое ковариантность.
Аноним 18/01/19 Птн 20:40:36 1329583478
>>1329576
>КУДАХ БАБАХ КУКАРЕКУ
Ясно.
Аноним 18/01/19 Птн 20:44:35 1329586479
>>1329578
>читать Дизайн и эволюцию,
Щё це таке?
>>1329583
Уходи отсюда, тебе здесь не рады, скудоум.
Аноним 18/01/19 Птн 20:55:52 1329599480
Поддерживаю. Заебали скудоумы. В програмаче последнее время они просто заполонили кучу тредов. Бля скудоумы, высирайте из своих тупых голов что нибудь кроме односложный предложений позязя
Аноним 18/01/19 Птн 20:56:25 1329600481
>>1329576
Я захожу в тред так как мне Ся нужна для низкоуровневой логики и апать скиллы. Читаю сам и учусь, вопросов не возникает, читаю вопросы тех кто изучает и решаю их для себя, это достаточно полезно. Ни разу за свою жизнь не видел хоть одного человека научившемуся чему-либо по видео. Впрочем, мне похуй, если тебе нравится плодить этот рак здесь. Но всё-таки я не пидор, и даже на трапов ни разу не дрочил.
Аноним 18/01/19 Птн 20:56:47 1329601482
>>1329586
Самая важная книжка Страуструпа
Аноним 18/01/19 Птн 21:02:42 1329606483
>>1329411
mingw через msys2, tcc, pelles c 8
Аноним 18/01/19 Птн 21:05:40 1329609484
>>1329600
>Впрочем, мне похуй, если тебе нравится плодить этот рак здесь
Мне тоже не нравится плодить рак, но рак - это ты. Из вопросов ньюфагов рождаются обсуждения так или иначе. Из "ололо ты мудак" не рождается нихуя, кроме вот этой уебанской атмосферы рашкофорумной дедовщины. У меня от нее бомбит, да.
А видео - это старый добрый известный со средневековья формат лекций, а так же мастерклассов и прочей хуйни, но переведенный в цифру. Если чел никогда не видел как программируют, почему не посмотреть это на видео?
Аноним 18/01/19 Птн 21:06:53 1329611485
>>1329523
Литерал массива символов и присваивание его указателю такого же типа (char).
Аноним 18/01/19 Птн 22:17:13 1329662486
>>1329126
За константное время, всегда одинаковое, не зависимо от величины таблицы.
Аноним 18/01/19 Птн 22:19:39 1329663487
>>1329130
Предположим, что поиск из 10 элементов занимает 1 секунду. Значит, если n = 10, значит поиск будет занимать 1 секунду, если n = 1 000, поиск будет 100 секунд.
Аноним 18/01/19 Птн 22:21:28 1329664488
>>1329147
Это обозначение временной сложности алгоритмов. Бывает сложность: O(1), O(n), O(log n), O в степени n.
Аноним 18/01/19 Птн 22:25:50 1329666489
>>1329333
Не в байт-код, а в ассемблерный может, и может в машинный. Байт-код это машинно-независимый код, который исполняют не процессоры, а виртуальные машины, например: JVM, CLR, BEAM, Dalvik, etc.
Аноним 18/01/19 Птн 22:27:59 1329667490
>>1329574
>В какой-то момент появляется ощущение, что вроде все ясно, но чего-то не догоняешь, как-будто обладаешь разнозненными фактами а не знанием
Видимо ты просто читал, но не практиковал. Обычно это происходит из-за этого. Тут дело не в языке.
Аноним 18/01/19 Птн 22:29:03 1329671491
>>1329578
>потом вдумчиво читать Дизайн и эволюцию
Это та что Страуструп написал? Она же старая вроде.
Аноним 18/01/19 Птн 22:29:19 1329672492
>>1329666
Ещё LLVM, который с собой clang таскает, тоже популярная штука, JIT вроде ещё есть, если я ничего не путаю.
сам пользуюсь онли gcc
Аноним 18/01/19 Птн 22:36:09 1329675493
>>1329663
Еще раз. O-большое ничего не говорит о конкретном числе операций или секундах. Оно говорит о том, по какой функции будет увеличиваться количество операций при росте n. Это позволяет приблизительно сравнивать разные алгоритмы.

>>1329666
> Байт-код это машинно-независимый код
И это как-то мешает тебе компилировать Си в байткод любой из перечисленных вм? С точки зрения компилятора разницы между байткодом и машинным кодом нет. К тому же, если вспомнить, что внутри x86 фактически RISC-based интерпретатор, то возникает вопрос, чем вообще "машинный" код x86 отличается от байткода.
Аноним 18/01/19 Птн 22:41:25 1329679494
>>1329662
>За константное время, всегда одинаковое
Дополню:
константное или одинаковое != околонулевое
Аноним 18/01/19 Птн 22:46:47 1329687495
>>1329675
>Еще раз. O-большое ничего не говорит о конкретном числе операций или секундах.
Еще как говорит. O большое говорит о времени выполнения алгоритма. Не о секундах, не о конкретном времени, а об отношении времени к длине коллекции. O(1) означает, что операция поиска в коллекции будет всегда проходить за одинаковое количество времени, то есть за константное время, независимо от длины коллекции.

>>1329675
>Оно говорит о том, по какой функции будет увеличиваться количество операций при росте n.
Какой еще функции?

>>1329675
>чем вообще "машинный" код x86 отличается от байткода.
Тем, что машинный исполняет конкретный процессор, а байт-код виртуальная машина.

>>1329675
>И это как-то мешает тебе компилировать Си в байткод любой из перечисленных вм?
Не мешает, но обычно такое не делают. То кто задавал вопрос просто ошибся, назвав машинный код байт-кодом.
Аноним 18/01/19 Птн 23:01:57 1329700496
>>1329687
> Тем, что машинный исполняет конкретный процессор, а байт-код виртуальная машина.
Исполняет виртуальная машина в процессоре.

> Не мешает, но обычно такое не делают
Правда? А я вот помню, как в свое время массово компилировали Си в AVM (Flash) и еще в JS с помощью Emscripten (тут немного не то, потому что вм у браузеров разные, и опкоды напрямую не доступны).

> Какой еще функции?
Той, которую ты пишешь в скобочках у O.

> об отношении времени к длине коллекции
Только когда n достаточно большое, причем где именно находится это "достаточно" не оговаривается. Например, обрабатывая массив данных на HDD, ты можешь написать алгоритм c O(n), который обгонит O(log n). Но с ростом количества жестких дисков, все детали реализации перестанут иметь значение, и рано или поздно O(n) обязательно станет медленнее O(log n).
Аноним 18/01/19 Птн 23:19:43 1329723497
>>1329700
>Той, которую ты пишешь в скобочках у O.
Такая терминология не используется. Это ты от себя придумал.
Аноним 18/01/19 Птн 23:24:20 1329732498
>>1329700
>Например, обрабатывая массив данных на HDD, ты можешь написать алгоритм c O(n), который обгонит O(log n). Но с ростом количества жестких дисков, все детали реализации перестанут иметь значение, и рано или поздно O(n) обязательно станет медленнее O(log n).
Ну ка расскажи как? Ты не понимаешь алгоритмическую сложность. Она не зависит от железа. O(n) всегда дольше чем O(log n), на малых величинах оно еще будет рядом, но не быстрее как ты говоришь, а на больших разница будет в тысячи раз. Увеличение коллекции в 100 раз, увеличивает время поиска по O(log n) всего в 2 раза. А в случае O(n) время увеличиться в 100 раз.
Аноним 18/01/19 Птн 23:35:33 1329743499
>>1329732
> Ну ка расскажи как?
Ну например, если у тебя почти полностью заполненный SSD, ты упираешься в стирание блоков, и алгоритм, который экономит записи, может очень много выиграть у алгоритма, который о них не беспокоится. В случае HDD алгоритм, читающий последовательно, выиграет у random seek.

> а на больших разница будет в тысячи раз
Да. Никто и не спорит.
Аноним 18/01/19 Птн 23:41:25 1329749500
>>1329743
Причем здесь диски? Алгоритм не зависит от железа. O(n) означает, что поиск будет проходить по всем элементам, там нет никакой экономии, экономия как раз при O(log n).
Аноним 18/01/19 Птн 23:47:35 1329751501
>>1329749
Ты дохуя теоретик, попробуй начать писать код.
Аноним 18/01/19 Птн 23:53:25 1329758502
Аноним 19/01/19 Суб 00:13:47 1329769503
>>1329743
Программа находится в оперативной памяти. Какие еще диски?
Аноним 19/01/19 Суб 00:29:47 1329781504
>>1329769
> Программа находится в оперативной памяти
А еще она может быть в кэше, а еще она может выполняться из ROM или какого-то вида EPROM напрямую. Но это не так важно, потому что данные тоже могут лежать где угодно, и время выполнения алгоритма будет зависеть от его реализации и характеристик устройства, хранящего данные. С ростом n шанс, что реализация алгоритма с O(n) обгонит реализацию c O(log n) быстро уменьшается до нуля, но и говорить, что O(n) всегда медленнее O(log n) неправильно.
Аноним 19/01/19 Суб 01:05:19 1329795505
>>1329667
Ты понимаешь, что ты сейчас разговариваешь с образованным, взрослым человеком, который зарабатывает на жизнь своим трудом? Ты мне советы даешь, как учиться?
Что значит не практиковал, уёбище?
Примеры и задачи решал, какая ещё практика в учебнике, придурок?
Тебе башку прострелить?
Аноним 19/01/19 Суб 01:27:19 1329809506
>>1329781
Открой книгу "Построение и анализ вычислительных алгоритмов" авторов Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман. И прочти главу про сложность алгоритмов. В ней ясно дано понять, что увеличение производительности железа, почти не дает увеличения производительности программ. Потому что это мизерные цифры, по сравнению с потенциалом ускорения от использования оптимальных алгоритмов.

Правильный алгоритм может давать ускорение в тысячи раз. Увеличение мощности железа в тысячи раз, может уже не произойти никогда. Так как закон Мура уже не работает.

Программа не может выполняться из ROM, она должна быть загружена в RAM.

Твои посты состоят из набора не связанных ключевых слов.
Аноним 19/01/19 Суб 01:49:41 1329814507
>>1329809
> Открой книгу "Построение и анализ вычислительных алгоритмов"
Я же говорю, что теоретик.

> Программа не может выполняться из ROM, она должна быть загружена в RAM.
А тебе никогда не рассказывали, что для того, чтобы воспользоваться DRAM после подачи питания, ее нужно инициализировать, причем относительно длинным кодом: зависит от контроллера памяти, но обычно это несколько килобайт? Памяти нет, но код нужно выполнить. Или даже хуй с ним, у нас SRAM. Но кто же скопирует код из ROM в SRAM? Как быть? Правильно! Нужно оторваться от книжек про алгоритмы и начать писать код почитать что-нибудь про архитектуру компьютера.
Аноним 19/01/19 Суб 02:04:18 1329820508
>>1329814
>А тебе никогда не рассказывали, что для того, чтобы воспользоваться DRAM после подачи питания, ее нужно инициализировать, причем относительно длинным кодом: зависит от контроллера памяти, но обычно это несколько килобайт? Памяти нет, но код нужно выполнить. Или даже хуй с ним, у нас SRAM. Но кто же скопирует код из ROM в SRAM? Как быть? Правильно! Нужно оторваться от книжек про алгоритмы и начать писать код почитать что-нибудь про архитектуру компьютера.
Это ты теоретик. Пишешь непонятно о чем вообще. Во-первых, это не имеет ничего общего с языками высокого уровня. Во-вторых, мы обсуждали задачу поиска в огромной коллекции. При чем тут инициализация памяти вообще? Вот сядь и попиши код. Реши наконец хоть одну задачу. Ты только и делаешь, что кидаешься ключевыми словами, которые вообще не имеют ничего общего с обсуждением.

Аноним 19/01/19 Суб 03:27:06 1329845509
>>1329820
>поиска в огромной коллекции
Как раздолбленное очко математека-теоретика?
ПЕРЕКАТ Аноним # OP 19/01/19 Суб 04:27:06 1329855510
Аноним 19/01/19 Суб 19:11:12 1330278511
>>1329814
Слушай, почему вот это >>1329809 понятно даже мне, хотя я инженер а не программист?
Да, процесс оптимизированнный под железо прекрасен, но в общем случае - процесс гораздо важнее.
Это везде так, даже на производстве мебели.
Зачем выебываешься?
Аноним 19/01/19 Суб 20:04:43 1330311512
Как-то я написал одному человеку юзать хэш таблицу вместо линейного поиска в таблице
Он заморочился, поэкспериментировал, оказалось что если в массиве до 1000 элементов, линейный поиск быстрее.
Аноним 20/01/19 Вск 08:35:35 1330590513
>>1330311
Для хэш-таблиц важна степень заполненности таблицы, чтобы не было коллизий.
Аноним 20/01/19 Вск 23:16:16 1331272514
>>1330590
Коллизии всегда будут, если у тебя не perfect hashing. Поэтому таблицу делают размером +10-30% от требуемого.
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Топ тредов
Избранное