Задать вопрос
  • Как лучше (проще и красивее) реализовать произведение комплексных и действительных чисел?

    Нужно понимать, что не существует операций между комплексными и действительными числами в математике. Действительные числа неявно приводятся к комплексным, и операции уже выполняются над комплексными числами.
    C++ позволяет вам так делать, достаточно определить конструктор с 1 параметром.

    Complex(double _r): Complex(_r, 0){}

    Теперь любые числовые литералы и типы, которые могут быть неявно приведены к double, так же могут быть неявно приведены к Complex. Теперь можно писать следующее:
    Complex(1,2) + 1;

    Остаётся другая проблема. Операторы объявлены как функции-члены, что позволяет их использовать лишь тогда, когда левый операнд - комплексное число. Такое выражение не скомпилируется:
    1 + Complex(1,2)

    Что бы обойти эту проблему, нужно заменить функцию-член на дружественную функцию:

    #include <iostream>
    using namespace std;
    
    class Complex {
    	public:
    		Complex(double _r, double _i): r(_r), i(_i){}
    		Complex(double _r): Complex(_r, 0){}
    		
    		friend Complex operator + (const Complex &left, const Complex &right);
    
    	private:
    		double r,i;
    };
    
    Complex operator + (const Complex &left, const Complex &right) { //Friend function
    	return Complex(left.r + right.r, left.i + right.i);
    }
    
    int main() {
    	Complex a = 4;
    	Complex b(1,2);
    	int c = 5;
    	a+b;       // OK
    	3+b;       // OK
    	a+123.0f;  // OK
    	c+a;       // OK
    	return 0;
    }
    Ответ написан
    5 комментариев
  • Как на ubuntu 16 отключать и включать питание на usb порт?

    @strelmax
    ядро должно быть собрано с опцией CONFIG_USB_SUSPEND
    echo suspend > /sys/bus/usb /devices/номер устройства/power/level
    echo on > /sys/bus/usb /devices/номер устройства/power/level
    Ответ написан
    Комментировать
  • Git не работает команда?

    @aol-nnov
    > Но почему то в файлике config не появляется строк:
    если --global делаешь, то это не в <repo>/.git/config, а в ~/.gitconfig
    (если под вендой, то сам ищи, где оно там оседает)
    Ответ написан
    6 комментариев
  • Как перевести предложение из учебника?

    @MiiNiPaa
    Подскажите пожалуйста, правильно я перевел фразу в кавычках?
    Вы перевели смутно и потеряли смысл: что значит «соответственно»?

    Matches здесь verb или noun?
    Существительное

    Как дословно перевести?
    «Разделить эту строку по совпадениям данного регулярного выражения»

    Всё, что является совпадением данного регулярного выражения будет разделителем
    String("123|45.6,789").split("[|,.]"); вернёт строки 123, 45, 6 и 789
    Ответ написан
    Комментировать
  • Новый ноутбук DELL - почему не ставится Ubuntu?

    Я бы попробовал стереть таблицу разделов (через dd), разбить диск заново и установить систему.
    Ответ написан
    2 комментария
  • Наследование C++?

    @Mercury13
    Программист на «си с крестами» и не только
    Private и protected — это когда объект скрывает, что унаследован от студента. Снаружи не виден ни факт наследования, ни отцовские поля.
    class Father {};
    class Son : private Father {};
    
    int main()
    {
        Son son;
        Father& q = son;
    }

    error: 'Father' is an inaccessible base of 'Son'

    Private и protected — скорее «хаки» и пользоваться ими не рекомендуется. Хотя, разумеется, пользуются, чтобы упростить себе жизнь. Я вижу два назначения: 1) хорошая основа для совершенно постороннего класса; 2) реализация интерфейса, которая нужна только внутри.

    Вот пример второго. Объект FileWriter реализует интерфейс Callback для своих внутренних нужд.
    #include <iostream>
    
    class Callback {
    public:
        virtual void act(int x) = 0;
    };
    
    void generateFibonacci(int n, Callback& callback) {
        int x1 = 0, x2 = 1;
        for (int i = 0; i < n; ++i) {
            callback.act(x2);
            int x3 = x1 + x2;
            x1 = x2;
            x2 = x3;
        }
    }
    
    class FileWriter : private Callback {
    public:
        FileWriter(std::ostream& aOs, int aN) : os(aOs), n(aN) {}
        void run() { generateFibonacci(n, *this); }
    private:
        std::ostream& os;
        const int n;
        void act(int x) override { os << x << std::endl; }
    };
    using namespace std;
    
    int main()
    {
        FileWriter wri(std::cerr, 10);
        wri.run();
    }

    А если реальная жизнь — то объект может быть одновременно QDialog (диалоговое окно) и QAbstractItemModel (модель данных для какой-нибудь таблицы, лежащей на этом окошке). Хотя, повторяю, это скорее хак.

    P.S. В Delphi и Java всё наследование публичное, и если нужно скрытно реализовать какой-то интерфейс или задействовать удобный класс — то только скрытым полем. Так, как в комментариях.

    P.P.S. Пример первого. Какой-нибудь Array2d скрыто наследуется от Array1d, потому что у него совершенно другой интерфейс. У Array1d — alloc(n) и operator()(i), у Array2d — alloc(m, n) и operator()(i, j). А Array1d — неплохая штука, чтобы управляться блоком памяти длиной m×n элементов.
    Ответ написан
  • Какую формулу можно подобрать?

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

    Генерируем равномерное число от 0 до 1, берем от него квадратный корень:
    - выпало 0.90, считаем, что сгенерировали 0.94896
    - выпало 0.50, считаем, что сгенерировали 0.70711.

    В общем случае, мне кажется, что Вам подойдет любая непрерывная функция с отрицательной второй производной
    Ответ написан
    1 комментарий
  • Как восстановить загрузчик Linux/Windows?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Ответ написан
    Комментировать
  • Как восстановить загрузчик Linux/Windows?

    GavriKos
    @GavriKos
    Поставить умный загрузщик. GRUB например
    Ответ написан
    Комментировать
  • Как создать списки с динамически изменяющимися именами?

    @3dr1aN
    Может лучше в словарь записывать?
    Если все же нужно, используйте exec() например.
    Ответ написан
    Комментировать
  • Как считать данные из файла и записать их в список?

    @abcd0x00
    [guest@localhost py]$ cat file.txt 
    1.5
    2.6
    3.123
    4.56
    [guest@localhost py]$


    >>> with open('file.txt') as fin:
    ...   lst = list(map(float, fin))
    ... 
    >>> lst
    [1.5, 2.6, 3.123, 4.56]
    >>>
    Ответ написан
    Комментировать
  • Как прочесть фрагмент стандарта языка Си?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Это какая-то разновидность нотации Бэкуса-Наура, по-моему. Запись вида
    X:
        A
        B
        C

    Следует читать как "X - это А или B или C". Когда два определения идут подряд - это значит, что они следуют друг за другом. Те определения, которые определяются через другие - это нетерминалы, те, которые понятны сами по себе - терминалы. Всё это работает рекурсивно. Короче, примерно вам даст понять вот это https://ru.m.wikipedia.org/wiki/Форма_Бэкуса_—_Наура

    Ну и читать это так: идентификатор(identifier) - это последовательность символов, которая может быть не цифрой(identifier-nondigit) или начинаться с идентификатора(рекурсия) и продолжаться не цифрой, или начинаться с идентификатора и продолжаться цифрой(digit)
    Дальше идёт углубление - что такое identifier-nondigit, что такое digit и тд.
    Ответ написан
    Комментировать
  • Как в С приравнять две переменные в цикле точно так же как и в JS?

    обявите j до for
    "Переменную можно также объявить в инициализирующей части оператора for. В этом случае область видимости переменной (или переменных) простирается до конца оператора." - то есть j видима только в цикле for, в котором была инициализирована
    Ответ написан
    Комментировать
  • Как реализовать шанс?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    Группа событий полная или события независимые?
    Для независимых событий:
    if (rand(0,100) < 20) 
    { 
      /*Выполняем событие 1*/
    }
    if (rand(0,100) < 40) 
    { 
      /*Выполняем событие 2*/
    }
    ...
    Ответ написан
    Комментировать
  • Почему не работает оператор &&?

    0neS
    @0neS
    Подумайте хорошенько что Вы вот тут написали:
    p <=0 && p >= 23
    Ответ написан
    3 комментария
  • Как создать USB HID из Arduino?

    @vanyamba-electronics
    Самому пытаться программировать USB можно, конечно, но приготовьтесь, что на решение только одной этой задачи у Вас уйдут следующие несколько лет. Проще воспользоваться готовой библиотекой.
    В случае, если в микроконтроллере нет встроенного USB-порта, то можно попробовать использовать библиотеку V-USB (виртуальный USB), но как и все чисто софтовые решения, это скорее эмулятор, чем полноценный порт. Требует много процессорного времени, и к тому же качество её работы оставляет желать лучшего. Например, если погрузить компьютер в спящий режим, то V-USB вряд ли это распознает, и придётся каждый раз переподключать микроконтроллер, или нажимать на кнопку сброса.
    Так что попробовать стоит, но лично я рекомендую использовать микроконтроллер ATmega32U4, на котором построена плата Arduino Leonardo. Для него поддержка USB HID реализована в самом программном обеспечении Arduino IDE, так что для того, чтобы превратить микроконтроллер в "мышь" и "клавиатуру" (одновременно), достаточно просто загрузить скетч примера.
    И наконец, третий вариант. В современных Arduino вместо чипа USB-RS232 используется микроконтроллер ATmega16U2. Это практически тот же Arduino Leonardo, только памяти у него в 2 раза меньше. Можно перепрограммировать в USB HID его, разве что потребуется программатор, потому что он программируется через интерфейс ICSP.
    Ответ написан
    Комментировать
  • Как создать USB HID из Arduino?

    @Inkvizitor66
    Брать ардуино на Atmega32u4 (leonardo большая, pro micro компактная) она умеет в железный HID и требует всего пары строк инициализации.
    А если строить на атмера32, atmega328 (большинство ардуин) то как в ответе от Александр v-usb в помощь.

    Upd. Сперва ответил на вопрос шапки, потом прочитал уточнение. Но все равно пускай будет
    Ответ написан
    Комментировать
  • Как правильно в Ubuntu подключить ssh ключ для GitLab?

    @exenza
    Вам нужно изменить параметр url в .git/config проекта, на тот url, который в гитлабе для ssh, вида git@gitlab.com:username/projectname.git;
    или склонировать проект целиком из репозитория еще раз используя ssh: git clone git@gitlab.com..
    Ответ написан
    Комментировать
  • Как слить списки разной длины?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    from itertools import cycle
    a = range(1, 32)
    b = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
    c = list(zip(a, cycle(b)))
    Ответ написан
    2 комментария
  • Как установить arch на флешку для запуска на любом железе?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Например, должен ли я установить драйвера на все карточки или они будут конфликтовать друг с другом и я должен ограничиться стандартной mesa?

    почему бы и нет, установить все свободные дрова на видео:
    pacman -S xf86-video-vesa xf86-video-nouveau xf86-video-intel xf86-video-ati

    или лучше сразу ставить группу xorg-drivers:
    pacman -S xorg-drivers
    в общем смотри Xorg#Driver installation

    Можете ещё глянуть тему на арчфоруме Переносной Arch, правда писалась уже давно и в некоторых местах малость устарела, но если спросите на форуме думаю направят в нужном направлении.

    Цель: флешка с arch-ем, запускающаяся на любом железе, для выполнения повседневных задач.

    Может вам просто модифицировать archiso под свои нужды. Раз настроите, соберёте и работать будет быстрее так как грузится в оперативку.
    Ответ написан
    2 комментария