Задать вопрос
  • Почему невозможно подключиться к 110 порту?

    @bimeg
    Если не ошибаюсь, на линуксе нужны рут-права, чтобы биндиться на порт меньше 1024.
    Ответ написан
    Комментировать
  • Лишних условий не бывает?

    @xandox
    Из первого варианта проста сразу видно при каких условиях мы включаем мотор, в при каких выклюаем. Единственное, что я бы проверку клпонов в отдельную переменную вынес бы, что бы копипстой не заниматься.
    bool IsValvesOpen = Valve1.IsOpen && Valve2.IsOpen && Valve3.IsOpen;
    if (IsValvesOpen && Sensor.Value > 10.0) {
         Motor.Cmd = true;
    } 
     
    if (!IsVelvesOpen || Sensor.Value < 5.0) {
         Motor.Cmd = false;
    }


    Можно еще и по хардкорному без if-ов (но за такое могут и от материть (и если состояния сохраняются))
    Motor.Cmd = (Valve1.IsOpen && Valve2.IsOpen && Valve3.IsOpen) && (Sensor.Value > 10 || (Motor.Cmd && Sensor.Value >= 5))
    Ответ написан
    2 комментария
  • Что такие Си с классами?

    @vsuhachev
    Так называют код, который пишут Сишники на С++, не осознавшие всяких там высоких материй вроде ООП, правил Лисковой, паттернов-шматтернов и прочей ненужной ерунды :)

    То есть в общем вы правы.
    Ответ написан
    Комментировать
  • Что такие Си с классами?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да, мол STL не используют, всякие Boost и прочее.

    Обычно популярный подход у людей, которых C++ не кормит. Хотя я могу и ошибаться, но мне другой вариант кажется просто странным.
    Ответ написан
    Комментировать
  • В чем отличие промисов от монад?

    Promise - одна из монад, где bind (>>=), упрощённо, из обещания и из последующей функции делает новое обещание, которое дожидается выполнения первого обещания и передаёт результат в следующую функцию. В итоге управление в вызывающую функцию возвращается на первом же ожидании.

    Но монады есть и другие. Например Either, позволяющий выдать "ошибку", т.о. обрывая всю цепь вычислений на первой же ошибке. Или Maybe, ведущий себя аналогично Either, но не с возвратом какого-то ошибочного значения, а просто с остановкой на первом фейле. Список - тоже монада, там последующая функция будет вычислена на каждом элементе, а результате сконкатенированы.
    Ответ написан
    Комментировать
  • Как передать ссылку на переменную в функцию в Си (без плюсов)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    void square(int x, int *result) {
        *result = x * x;
    }
    
    int main() {
        int r;
        square(10, &r);
    
        return 0;
    }
    Ответ написан
  • Можно ли описать template от метода класса?

    @tugo
    В шаблон можно передать указатель на метод класса.
    #include <iostream>     // std::cout
    
    struct A 
    {
      int f1(int v) {return v * 5;}
      int f2(int v) {return v * 10;}
    };
    
    template <typename Foo>
    int F(int b, A * a, Foo foo) 
    {
        return (a->*foo)(b);
    }
    
    int main () 
    {
    
      A * a = new A;
      
      std::cout <<  F(5, a, &A::f1) << '\n';
      std::cout <<  F(10, a, &A::f2) << '\n';
    
      return 0;
    }

    cpp.sh/3l5
    Ответ написан
    Комментировать
  • Насколько хорошо подходит Haskell для конкурентных вычислений?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Вам нужно почитать тут: eax.me/tag/haskell
    и еще тут: eax.me/cloud-haskell-notes
    Ответ написан
    Комментировать
  • Как посчитать кол-во вхождений строк в файл?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Вы явно преждевременно оптимизируете. Решение на питоне, абсолютно в лоб, достаточно быстро работает на файле с 10M слов по 8 символов. К слову это всего 100 мегабайт. Даже если слов будет в 10 раз больше памяти хватит.
    import random, string
    from collections import defaultdict as ddict
    
    def randomword(length):
       return ''.join(random.choice(string.lowercase) for i in range(length))
    
    def main():
    	f = open('a.txt', 'w')
    	for i in range(10000000):
    		f.write(randomword(8) + '\n')
    
    	f.close()
    	print('gen finished')
    
    	d = ddict(int)
    	stat = ddict(int)
    	f = open('a.txt', 'r')
    	for w in f.readlines():
    		d[w] += 1
    		stat[d[w]] += 1
    		if d[w] > 1:
    			stat[d[w] - 1] -= 1
    
    	print stat
    
    
    
    
    if __name__ == '__main__':
    	main()
    Ответ написан
    Комментировать
  • Как посчитать кол-во вхождений строк в файл?

    EvgenijDv
    @EvgenijDv
    C/C++ programmer
    std::map вполне может подойти. Миллион записей для современного кол-ва оперативки не так уж и много :-)
    С SQL будет очень просто посчитать кол-во вхождений, но имхо это оверхэд для данной задачи :-)
    Ответ написан
    Комментировать
  • Зачем в современных проектах все еще используются макросы?

    bogolt
    @bogolt
    Макросы нужны там где нужно во время компиляции программы генерировать код. Функции или даже шаблоны для этого не подходят.
    Например вы хотите логгер, который бы писал в каком файле, и на какой строке произошла ошибка, вы пишите код

    cout << __FILE__ << __LINE__ << "error message";

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

    Итак теперь вы тяжело вздохнув, и закрыв портретик Страуструпа шторкой ( чтобы не видел как вы предаетесь адскому макросостроению ) пишите макрос
    #define LOG(x) std::cout << __FILE__ << __LINE__ << x << std::endl;


    Теперь где угодно можно писать
    LOG("this is error number " << errno);
    и все будет работать как и было запланировано.

    Еще из полезных свойств макросов - улучшать чужой плохой код. Если у вас есть много переменных, или переменных имена у которых почти совпадают с именами функций и вам нужно сделать этот код умнее, вы пользуетесь макросами, склеиваете строки через ## или преобразовываете переменную в строку через #
    Это довольно мощные инструменты ( пусть до лисповских максросов им далеко ) которые реально позволяют улучшить код и/или избежать кучу повторений одного и того же блока кода.
    Ответ написан
    Комментировать
  • Каков план личностного развития C++ программиста с нуля?

    Если человек мне на собеседовании скажет, что с C++ он перешел на C#/Java, и теперь все его головные боли иссякли, я никогда не найму его на должность выше обычного девелопера. Это в лучшем случае середняк, который никогда не будет писать изящных архитектурных решений, без особой тяги к знаниями и без капельки фанатизма.

    Есть такая шутка:
    есть два типа людей: те, кто уже выучил C++, и те, кто его никогда не выучат.

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

    Крайне не советую начинать изучение языка со Страуструпа — уснете. По моему опыту, новичкам крайне полезно читать книгу Стивена Прата "Язык программирования C++. Лекции и упражнения". Во-первых, это именно книга по C++, а не древний учебник по C с классами. Во-вторых, там уделено внимание стандарту C++11, фишки которого отлично приходят на замену древнему C++ (о которых еще пишут в учебниках, да).

    STL — обязательна для изучения. Без нее C++ — обычный C с классами.

    Изучению также подлежат такие библиотеки, как boost (сначала, что в ней вообще есть, а потом — как написать определенные случаи), poco, ACE. Крайне рекомендую обратить внимание на Qt — это клад в мире C++.
    Если интересна 3d-графика, можно посмотреть свободный графический движок Ogre3d.

    Потом, хорошим C++-программистам хорошо бы знать структуры данных. Пожалуй, на этот вопрос лучше всего ответит Роберт Седжвик в своих книгах, либо соответствующих курсах на Coursera. Это важно, т.к. C++ обычно используется как язык для решения ресурсоемких задач, а не построения "табличной" бизнес-логики.

    И на финал — один из самых сложных современных языков для изучения.
    Ответ написан
    4 комментария
  • Как в C++ назначить одному вектору значение другого?

    @lookid
    en.cppreference.com/w/cpp/container/vector
    v1 = v2
    неужели не работает?
    Ответ написан
    Комментировать
  • Unknown type name 'uint32_t'. Как приручить?

    Почему не собрать jansson отдельно как статическую библиотеку и просто не подключить к проекту?
    Ответ написан
    3 комментария
  • Как правильно посчитать процент верности ответов?

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

    Пусть prav - число правильных ответов, neprav - число неправильных.

    Введем обозначение: X = (prav/2 - neprav/3), Q = (X + abs(X)) * 50%

    Тогда полученное значение Q - выставляемый процент. В случае, когда число неправильных ответов превышает число правильных, выставляется нулевое количество процентов.
    Ответ написан
    2 комментария
  • Что не так с макетом?[2]

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    Ваши оба вопроса удалят, учтите.
    Сейчас сайт смотрится еще хуже. Вы вообще дизайну учились? Книги читали?
    Очень тесно, несоразмерно. Отсутствует логика выравниваний, выглядит как будто Вы в школе делаете презентацию в power point. Не завидую Вашему заказчику, честно говоря.
    Уберите стрелки по бокам, посмотрите как выглядят любые корпоративные сайты! Любые, и сделайте похоже. И это будет куда лучше Вашего всплеска вдохновения помноженного на абсолютное непонимание принципов верстки.
    Ответ написан
    Комментировать
  • Linux. Shell. Звуковое информирование о окончании выполнения длительной комманды

    long command && echo -en "\007"
    Ответ написан
    Комментировать
  • Android приложение отмечающее на карте точки доступа бесплатного Wi-Fi

    Trow_eu
    @Trow_eu
    как понять искать? только в радиусе действия, т.е. на карте они появятся после того, как вы побывали в каком-то месте?
    не знаю таких, но может стоит поискать базу существующих бесплатных вифи, куда люди добавляют найденные точки вручную и это все синхронизируется? вроде есть такие, хотя в наших(ваших) краях базы, вероятно, неполные.

    собственно, в плей маркете (андроид) по запросу free wifi scanner / free wifi spots много подобного, пробуйте
    Ответ написан
    Комментировать