Ычан: [d | au / b / bro / hr / l / m / mi / mu / o / ph / r / s / sci / tran / tu / tv / vg / x | a / aa / c / fi / jp / rm / tan / to / vn / vo]
[Назад] [Вся нить] [Последние 50 сообщений]
Ответ в нить [Последние 50 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 25965)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, WEBP, XCF, ZIP размером до 5000 кБ.
  • Ныне 3716 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
junior_developer_nene.png - (648.30KB, 720×720)
25965
No. 25965  
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие API, ковыряете игру, или пытаетесь сделать сайт на Wordpress - если аноним что-то об этом знает, он обязательно поможет.

Пополняемая база знаний: http://pastebin.com/AGhLZppH

Не знаете, какой язык и библиотеки взять для вашей задачи? Вам сюда.
Не знаете, где клиент, а где сервер? Вам сюда.
Не понимаете, что такое ООП? Вам сюда.
Написали код, и не понимаете, почему не работает? Вам сюда.
Обнаружили кусок кода, и не понимаете, как оно вообще могло работать? Вам тоже сюда.
Не знаете, как подступиться к проблеме? Вам обязательно сюда.

Другие тематические нити (иногда обновляется): https://pastebin.com/psy43ibG

Примеры кода лучше выкладывать в виде ссылок на http://pastebin.com или http://ideone.com
Фронтендные вещи лучше выкладывать на http://jsfiddle.net

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

Чтобы не сбивать новичков с толку, а также не разбавлять полезную информацию мусором, беспредметные споры типа "какой язык / парадигма / библиотека / етц лучше" здесь запрещены. Для подобных вещей теперь есть отдельная диспутов нить >>/dev/21353

Если здесь поселится достаточное количество программистов на одном языке / одной сферы, можно будет их выделить в отдельную нить, а в этой оставить на неё ссылку.
По мере поступления вопросов можно составлять FAQ и базу знаний.

Архив нитей:
http://410chan.org/dev/arch/res/14160.html
http://410chan.org/dev/arch/res/15681.html
http://410chan.org/dev/arch/res/17424.html
http://410chan.org/dev/arch/res/19666.html
http://410chan.org/dev/arch/res/21641.html
http://410chan.org/dev/arch/res/23830.html

Прошлая нить пока тонет тут: >>/dev/23830
49 сообщений пропущено. Показаны 50 последних сообщений
No. 26116  
>>26115
No. 26121  
Привет, Стив. Решаю простенькие задачки и встретился с некоторыми, которые не могу решить.
Вот такая, например.
Непонятно, что желает эта функция. Нужно найти, какие в ней дефекты и как ее можно улучшить.
https://onlinegdb.com/EWoRTQ9rI - онлайн-компилатор с этой функцией

int myfunc(int* a)
{
    int x = 0;
    for (size_t i = 0; i < MASS_SIZE; i++)
    {
        for (size_t j = i; j < MASS_SIZE; j++)
        {
            if (a[j] != a[i])
            {
                if (j - i > x)
                {
                    x = j - i;
                }
                i = j - 1;
                break;
            }
        }
    }
    return x;
}

No. 26123  
>>26121
Еще вот такая задача. Надо написать функцию, которая принимает массив строк, и возвращает массив, в котором из исходного массива удалены все строки, которые встречаются четное число раз. При этом, функция должна быть оптимизирована по скорости работы.
У меня получилось такое - https://www.onlinegdb.com/TWTCxMZCi . Непонятно, оптимально ли это? Если нет, как оптимизировать?
std::vector<std::string> remove_even_strings(std::vector<std::string> & ref)

{
    std::vector<std::string> result;
    std::map<std::string, size_t> srch;
    
    for (auto & r : ref)
    {
        auto t = srch.insert(std::make_pair(r, 1));
        if (t.second == false)
        {
            srch.at(r) = srch.at(r) + 1;
        }
    }
    
    for (auto & r : ref)
    {
        if (srch.at(r) % 2 == 1)
        {
            result.push_back(r);
        }
    }
    
    return result;
}

No. 26124  
>>26121
Было бы хорошо в pastebin всё это. и ссылку дать.
No. 26125  
>>26124
А зачем Пастребин, если есть ссылки на онлайн-компилятор?
No. 26126  
>>26123
Строки с 49 по 53 можно заменить простым ++srch[r]; Это ускорит тебя в два раза.
No. 26128  
>>26125
Да лишь бы не прямо сюда.
No. 26129  
>>26126
Не понял. Как это должно работать? Как можно сделать инкремент по индексу, если элемент с этим индексом еще не создан?
No. 26130  
Есть у кого на примете курсы или тренинги по сетям и по многопоточке? Желательно на плюсах. По многопоточке я нашел вот это https://stepik.org/course/149/syllabus Но это очень сложный курс, хотелось бы чего попроще.
No. 26131  
>>26129
Существуют два метода для получения значения по ключу: .at() и оператор [].

Метод .at() константный и в случае отсутствия нужного элемента кидает исключение.

Оператор [] неконстантный, при отсутствии необходимого элемента он создает сам с дефолтным значением - в нашем случае с нулем.
No. 26133  
>>26131
> Метод .at() константный
Может использоваться как константный - при вызове у константной мапы он возвращает константную ссылку на значение, при вызове у неконстантной - неконстантную.

В противоположность ему оператор [] может вызываться только у неконстантной мапы, а при работе с константной создает ошибку на этапе компиляции.
No. 26134  
>>26131
> Оператор [] неконстантный, при отсутствии необходимого элемента он создает сам с дефолтным значением - в нашем случае с нулем.
Интересная особенность, не знал о ней. Спасибо, буду теперь этим пользоваться.
No. 26135  
>>26103
Можно ссылки на источники, в которых можно об этом всем почитать? Про бесполезность соления известным алгоритмом из соседней колонки и про использование отдельного сервера особенно интересно.
No. 26138  
>>26130
>Есть у кого на примете курсы или тренинги по сетям и по многопоточке? Желательно на плюсах.
Вот тут одновременно и сети, и многопоточка, и на плюсах, на примере сервера и клиента для MMO, с доступными рабочими примерами по ссылкам из описания.

>Часть 1
https://www.youtube.com/watch?v=2hNdkYInj4g
>Часть 2
https://www.youtube.com/watch?v=UbjxGvrDrbw
>Часть 3
https://www.youtube.com/watch?v=hHowZ3bWsio
>Часть 4
https://www.youtube.com/watch?v=f_1lt9pfaEo

Скажи, насколько это сложнее / проще чем бы тебе хотелось.
No. 26139  
1495071594281.png - (652.42KB, 660×888)
26139
Привет, Чио–чан!

Как сделать так, чтобы в программке на C++ время было не в секундах от сотворения Unix, а в более человекочитаемом формате? Чтобы пользователь его мог вводить, а потом оно так же выводилось. А если сделать тупо строкой, то сортировка не будет работать же.

Вот мой код: https://files.catbox.moe/ysw18s.cpp
No. 26141  
>>26139
Весь ввод на самом деле является набором символов, просто для числовых переменных у оператора >> реализовано преобразование в нужный тип под капотом.
Соответственно, для даты/времени нужно преобразовать ввод в нужный формат вручную (опционально реализовав перегрузку operator<< для используемого типа).
При выводе пользователю естественно придется преобразовывать все обратно.

Судя по всему функция, которая парсит поток в структуру даты-времени, есть в стандартной библиотеке: https://en.cppreference.com/w/cpp/io/manip/get_time
No. 26144  
>>26141
Спасибо за ответ!

> опционально реализовав перегрузку operator<<
Видимо, мне тут не хватает знаний.

Допустим, пользователь вводит время в формате hh/mm или hh:mm, а далее требуется провести сортировку по времени. Отсюда следует, что логичнее всего время перевести в формат от сотворения Unix, а потом снова в строку. И вот само преобразование типов я немного не понимаю — в том же VBA при сравнении времени можно вообще не париться, ЕМНИП.
No. 26145  
Хотя, наверное, в случае времени можно попробовать сначала посимвольно считывать строку и, исходя из этого, прибавлять что-то к переменной времени, где один час будет равен 3600 секундам. Аналогичным образом потом из времени сделать строку. Наверное, это будет несколько циклов и куча условий.

Только данные, наверное, лучше вводить не в строку, а в массив символов? Вроде так проще будет.
No. 26146  
>>26144
Если честно, не очень понял, в чем проблема. Хранишь у себя время в виде числа, преобразуешь в строку/из строки при выводе/вводе. Пользуешься готовой библиотекой как указал >>26141 по ссылке. Там даже с примерами.
No. 26148  
>>26146
> Там даже с примерами.
Тяжелочитаемо, из-за всяких std::

И почему, кстати, в примерах не используется using namespace std?
No. 26151  
>>25965
Одна дѣвочка ставить ; после закрытия фигурных скобок в C++. Правильно или гладить кота?
No. 26152  
>>26151
Есть случаи, когда точка с запятой после фигурной скобки необходима - например, при определении класса или структуры. Без нее код не скомпилируется. В других случаях гладь кота.
No. 26153  
>>26148
Есть мнение, что using namespace нельзя использовать в заголовочных файлах из-за возможных конфликтов. В .cpp файлах такая проблема стоит не так остро, но я все равно не видел таких примеров в работе.

Зато часто используют что-то такое:

using DocumentId = std::int32_t;
No. 26154  
Привет, Стив.
Есть такая задача, не знаю, как к ней подступиться.
На вход подается очень большой текстовый файл, в котором на каждой строке по слову. Надо найти в этом файле 10 наиболее часто встречающихся слов. Загвоздка в том, что надо при этом использовать не более 1 Кб памяти, то есть, не получится хранить массив всех слов со счетчиком сколько раз одни встретились. Есть у этой задачи какое-то решение, кроме как использовать еще один файл как буфер или внешнее хранилище данных? Писать надо на Си, без плюсов, но это не особо важно, мне именно алгоритмически непонятно как решать.
No. 26155  
>>26154 Если честно, странное начальное условие
использовать не более 1 Кб памяти
, это 8-битный embedded? Сейчас более-менее стандартный bootstrap будет больше 1кб.

Если здесь все таки ошибка, и памяти немного побольше, то уже наверно проще будет предложить варианты.
No. 26156  
>>26155
Да, почти так и есть. Ошибки никакой нет, 1 КБ памяти. Если собирать голым gcc без сторонних библиотек, то должно вместиться.
При чем тут bootstrap? Это не под веб разработка.
No. 26157  
>>26156
P.S. Возможно, стоит начать с вариантов, которые в принципе не потребляют много памяти, а потом попытаться их оптимизировать.
И, да, нельзя использовать сторонние библиотеки. Только стандартная, только хардкор.
No. 26158  
>>26152
Понял, спасибо. Наверное, лучше тогда ставить их везде при закрытии фигурных скобочек — компилятор пропускает же. На читаемость кода это вроде особо не влияет.

>>26153
Понял, спасибо.

P.S.

Могу читать ранобэ в анлейте, но если зайти на какой–нибудь англоязычный программерский форум, то становится тяжело. Хотя та же справка по Python'у читается легко. Почему так?
No. 26159  
space_saving_frq_algorithm.png - (14.90KB, 284×273)
26159
>>26154
>Есть у этой задачи какое-то решение, кроме как использовать еще один файл как буфер или внешнее хранилище данных? Писать надо на Си, без плюсов, но это не особо важно, мне именно алгоритмически непонятно как решать.

Да, есть. Это на самом деле очень популярная задача, и для неё периодически предлагают новые алгоритмы. Вот в этой статье рассматривают все основные алгоритмы, которые можно для этого использовать:
http://dimacs.rutgers.edu/~graham/pubs/papers/freqcacm.pdf

Для алгоритмов указаны формулы сложности как по времени, так и по памяти, так что по идее ты сможешь выбрать тот который подойдет под ограничение в 1 кб. Также указана максимальная погрешность алгоритмов в подсчетах.

>Не знаю, как к ней подступиться.
Лично я бы представлял эту задачу как подсчет слов в бесконечном потоке, где заведомо не хватит ни памяти, ни диска, и воспользовался бы алгоритмом 3, Space Saving пикрелейтед. Если в двух словах, там тебе надо иметь буфер на k слов, и когда он заполнится - начать вытеснять из него самые редкие слова.

Скажи, получится ли разобраться и правильно ли я понял проблему.
No. 26160  
>>26159
Да, это именно то, что нужно. Обязательно почитаю статью в ближайшем времени, когда освобожусь немного.
>погрешность
Там вероятностные алгоритмы что ли?
No. 26161  
>>26160
Среди прочего есть и вероятностные, если я тем местом читал. Но вообще там погрешность по идее есть у всех алгоритмов, которые не сохраняют все данные.
No. 26162  
Яхалло, стотт читать "искусство программирования" Кнута?
No. 26163  
Чии, насколько хорошо можно жить в какой–нибудь стране и работать в сфере IT, не зная местного языка, только английский? Тем более, что айтишники просто обязаны знать английский — это как немецкий для шахтёров XIX-го века.
No. 26164  
>>26163
Я в Израиле так 4 года жил.
No. 26165  
>>26164
Но в Израиль вроде сложно переехать, если не еврей.
No. 26167  
А поясните, как работает сишный fgets. В спецификации сказано, что он считывает строку или num-1 символов. Но нигде не написано, что он он делает, если num-1 меньше длины строки. Допустим, в файле строки по 60 символов. Мы говорим считать 50 символов. Следующий вызов будет работать уже с новой строки или с 51 символа?
No. 26169  
>>26167
Следующий вызов будет с 51 символа, в твоём примере.
Раз ничего не написано про оставшиеся символы в строке, то он ничего с ними и не делает.

Можешь написать простенькую программку да проверить самостоятельно, так-то (или даже исходники почитать)

А вообще сишные волшебники вроде бы рекоменуют не пользоваться всеми этими fgets'ами, а оперировать fread/fwrite и выковыривать потом строки из буфера самостоятельно.
No. 26170  
Привет, Стив.
Я хочу стать разработчиком компиляторов. Не просто потому, что за это много платят, а потому, что мне хочется быть достаочно редким и востребованным узким специалистом.
Тем не менее я открыл вакансии связанные с разработкой компиляторов и в большинстве случаев там обязательно указан бэкенд компиляторов LLVM.
С сайта llvm.org можно узнать[1], что llvm написан на С++ с STL.
Откуда вопрос: надо ли знать C++ для того, чтобы заниматься разработкой компиляторов (как любительски, так и профессионально) ?
Второй вопрос: нужно ли специальное образование для того, чтобы этим заниматься ?
Спрашиваю скорее про магистратуру, потому что бакалавриат на специальности инженер по радиоэлектронике мне ещё предстоит окончить.

[1]: https://llvm.org/docs/FAQ.html#in-what-language-is-llvm-written

>>26167
У меня работает со следующего символа, а не с новой строки. Код[2], файл[3], вывод:
12222222222
OpenBSD 7.0 , clang 11.1.0
[2]: https://termbin.com/8o0w
[3]: https://termbin.com/xv3v
No. 26171  
>>26154
Если нужно точное решение в крайних случая (все кроме одного слова разные) и соответственно варианты из >>26159 не подходят, можно делать много проходов по файлу, считая за каждый проход количество только для одного/нескольких слов и обновляя после каждого прохода список самых частых.
No. 26173  
>>26170
за это много платят?
No. 26174  
>>26170
парой параграфов ниже в llvm FAQ'е пишут:
>https://llvm.org/docs/FAQ.html#i-d-like-to-write-a-self-hosting-llvm-compiler-how-should-i-interface-with-the-llvm-middle-end-optimizers-and-back-end
-code-generators
>1. Call into the LLVM libraries code using your language’s FFI (foreign function interface).
>2. Emit LLVM assembly from your compiler’s native language.
>3. Emit LLVM bitcode from your compiler’s native language.

Т.е. для пользования LLVM знать C++ не обязательно. Менее известный компилерный бэкенд QBE работает примерно так же. А можно вообще весь тулчейн самому написать с нуля на коленке (golang вроде бы так делают).

Но раз уж ты собрался писать компиляторы, то наверное надо бы знать не только C++, но и вообще как можно больше всего представленного в мире языков программирования, хотя бы поверхностно.
No. 26175  
>>26173
Ну, судя по тем вакансиям, которые я видел, да. Но я же уже упомянул, что причина моего интереса не в этом.
No. 26177  
>>26174
Справедливо, спасибо за ответ.
Про QBE слышал. У его автора — mpu, был ещё список литературы для компиляторщиков любителей.
https://c9x.me/compile/bib/
No. 26178  
>>26170
Нужно знать yacc, виртуальные машины и очень, очень много байтоебли.
>нужно ли специальное образование для того, чтобы этим заниматься?
Если ты задаёшь этот вопрос, то тебе да.
No. 26179  
Чии, как я понимаю, указатели в C++ лучше использовать везде, где только можно? Ведь они же память экономят.
No. 26180  
>>26179
Они могут инвалидироваться в самый неожиданный для тебя момент. Указателями и ссылками нужно пользоваться очень внимательно, следить за временем жизни объектов, перестройкой контейнеров и так далее.
No. 26181  
>>26180
Но ведь они всё равно прилично экономят ресурсы компьютера.
No. 26182  
>>26181
Еще посмотри на std::string_view, эта штука позволяет экономить при работе со строками, но подвержена тем же проблемам, что и указатели.
No. 26183  
>>26159
> получится ли разобраться
Нашел для этого алгоритма презентацию с объяснениями для самых маленьких. https://imoumoulidou.github.io/SpaceSaving_Presentation.pdf
Но и с ее помощью я не смог разобраться с одной мелочью, без которой ничего не работает.
В алгоритме есть overestimations, которые как-то используются для того, чтобы счетчики правильно увеличивались. Как это реализовать, я не очень понимаю.
Мои наработки (некорректно работающие) - https://github.com/sltrs1/space_saving_alg_data_stream
No. 26184  
>>26182
Спасибо.
Удалить сообщение []
Пароль  
[Mod]