• Как рассчитать уровень относительно опыта?

    @Alexander1705
    уровень = ( 1 + sqrt ( 1 + 8 * опыт ) ) / 2
    Округляйте вниз.
    Ответ написан
    Комментировать
  • Интерполяция (X,Z,Y) зная начальные точки и новые, возможно?

    @Alexander1705
    Если делать интерполяцию, движение будет с запаздыванием, лучше сделать экстраполяцию.
    x = x1 + (x1-x0)/(t1-t0)*(t-t1)
    Где x0 и t0 - предпоследние координата и время, а x1 и t1 - последние. t - текущее время.

    То есть, зная последние и предпоследние координаты и время, мы высчитываем скорость, с которой двигался объект. Потом, зная текущее время, вычисляем текущую координату.
    Ответ написан
    6 комментариев
  • Как определить необходимое питание для ардуино?

    @Alexander1705
    Смотрите InputVoltage: www.arduino.cc/en/Products.Compare
    5.2 V скорее всего не хватает.

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

    @Alexander1705
    Эмм... Что это?
    srand(time(0));
    for (i = 0; i < n; i++)
    {
    C[i] = (double)(rand() % 50) / 10;
    if (C[i] >0)
    {
    p *= C[i];
    ++k;
    }
    }


    P.S. Используйте тэг <code lang="cpp"></code>
    Ответ написан
    Комментировать
  • Конвертация строковых литералов-идентификаторов в числа в compile time?

    @Alexander1705
    #define MSG_ADD_OBJECT 0
    #define MSG_REMOVE_OBJECT 1
    
    int64 a = MSG_ADD_OBJECT; // a = 0
    int64 b = MSG_REMOVE_OBJECT; // b = 1


    Второй вариант:
    enum MSG {ADD_OBJECT, REMOVE_OBJECT};
    
    // Можно использовать два варианта:
    int64 a = ADD_OBJECT; // a = 0
    int64 b = MSG::REMOVE_OBJECT; // b = 1
    Ответ написан
    Комментировать
  • Как составить регулярное выражение?

    @Alexander1705
    [A-Z]\w*\.[a-z]\w*
    Ответ написан
    Комментировать
  • Язык для олимпиадного программирования?

    @Alexander1705
    Python не подойдёт для школьного олимпиадного программирования, так как ваши программы должны будут улаживаться в определённое время. Например, на Всеукраинской ученической олимпиаде по программированию доступны только Pascal, C и C++.

    Учите С++. Я начинал учить именно с него, и хотя возникали некоторые сложности, сейчас ни о чём не жалею, так как теперь легко осваивать любые другие языки, в том числе и Python. На С++ писать не сложно, нужно лишь немного времени, чтоб привыкнуть к синтаксису.

    Могу порекомендовать книгу "Язык программирования С++" Стенли Липпмана.
    Ответ написан
    Комментировать
  • Как динамически вставлять элементы в двумерный вектор?

    @Alexander1705
    for (int i = 0; getline(in, line); i++) {
        matrix.push_back(vector<int>()); // добавляем новую строку
        for (int j = 0; j < line.size(); j++) {
            matrix[i].push_back(line[j]); // в данную строку добавляем элементы.
        }
    };


    Хотя по логике у вас должен быть vector<vector<char>> а не vector<vector<int>>.

    Если у вас на входе числа, делайте так:
    int num;
    for (int i = 0; getline(in, line); i++) {
        stringstream ss(line);
        matrix.push_back(vector<int>()); // добавляем новую строку
        while(ss >> num) {
            matrix[i].push_back(num); // в данную строку добавляем элементы.
        }
    };
    Ответ написан
    1 комментарий
  • Как найти индекс элемента через строку?

    @Alexander1705
    Вы и сами легко решите эту задачу, если правильно сформулируете вопрос.

    Нужно при клике на элемент с индексом получить его значение.

    Элемента или индекса?

    Например при клике на 1 индекс в 1 row должно получится в сумме 4.

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

    Row + 1 = 4.

    Подскажите, какая формула должна быть.

    А это разве не формула?

    P.S. sum = i*N + j, где i - номер строки, j - номер столбца, N - количество столбцов.
    Ответ написан
    5 комментариев
  • В чем различие полиморфизма и перегрузки?

    @Alexander1705
    При перегрузке ты можешь перегрузить функцию для разных количества и типов аргументов, но для каждого случая нужно отдельно определять функцию.
    int plus(int a, int b) {return a + b;}
    float plus(float a, float b) {return a + b;}
    double plus(double a, double b) {return a + b;}
    unsigned long long plus(unsigned long long a, unsigned long long b) {return a + b;}
    // выбьет ошибку для любого другого типа, кроме int, float, double, unsigned long long

    При использовании шаблонов ты определяешь шаблон только однажды, а компилятор сам сгенерирует определение стольких функций сколько потребуется.
    template<typename T>
    T plus(T a, T b) {return a + b;}
    // Работает для любых типов, которые определяют opeator+


    P.S. По сути, и перегрузка и шаблоны это и есть средства полиморфизма.
    Ответ написан
    1 комментарий
  • Как быстрее считать данные из стандартного потока?

    @Alexander1705
    habrahabr.ru/post/246257
    Здесь в основном для С++, но 6-ой вариант должен работать для С.
    Ответ написан
    Комментировать
  • Как постороить дерево как на картинке?

    @Alexander1705
    Каждая вершина, это структура, которая содержит данные, указатель на родителя и список указателей на дочерние элементы.

    struct item {
        int value;
        item* parent;
        vector<item*> children;
    
        item(int v, item* p = nullptr) : value(v), parent(p) {}
        
        void addChild(int value) {
            children.push_back(new item(value, this));
        }
    
        ~item() {
            for(auto child : children)
                delete *child;
        }
    }


    Естественно, value может быть любого другого типа.
    Ответ написан
    1 комментарий
  • Матрица смежности на PHP, не могу разобраться как реализовать?

    @Alexander1705
    В данном примере задаётся по три числа: индексы двух вершин и вес ребра между ними.

    int N;
    cin >> N;
    
    int** am = new int*[N];
    for(int i = 0; i != N; ++i)
        am[i] = new int[N];
    
    int i, j, l;
    while(cin) {
        cin >> i >> j >> l;
        am[i][j] = l;
    }


    upd.
    Окей, если вершины - это точки, а рёбра расстояния между ними, делаем следующим образом:
    // N - количество точек
    // points - список точек
    // points[i].x - x-координата i-той точки
    // points[i].y - y-координата i-той точки
    
    int** am = new int*[N];
    for(int i = 0; i != N; ++i)
        am[i] = new int[N];
    
    for(int i = 0; i != N; ++i) {
        for(int j = 0; j != N; ++j) {
            am[i][j] = sqrt( sqr(points[i].x - points[j].x) + sqr(points[i].y - points[j].y) );
        }
    }

    Можете также оптимизировать, высчитав не всё матрицу, а только её половину (треугольник). А вторую половину заполнить зеркально главной диагонали.
    Ответ написан
  • Как правильно закончить цикл?

    @Alexander1705
    В цикле у вас не изменяются значения ни b, ни d. Так что, если условие изначально верно, оно никогда не станет ложным.
    a = 'False'
    c = 'Try again'
    b = input('4*100-54=')
    d = '346'
    while b != d:
        print(a)
        print(c)
        b = input('4*100-54=')


    P.S. Пользуйтесь тегом <code lang="python"></code>
    Ответ написан
    1 комментарий
  • Как избежать статических списков в классах python?

    @Alexander1705
    Когда вы объявляете переменные-члены, так как вы это сделали, они связаны с классом, а не с объектом. По аналогии с С++, вы создали переменные-члены elements и N статическими.

    Вам нужно создавать переменные-члены в конструкторе, а не в определении класса:
    class Vector:
    
      def __init__(self, N):
        self.elenent = []
        self.N = N
        for i in range(N):
          self.element.append(0)
    
      def __str__(self):
        out_str = ""
        for i in range(self.N):
          out_str = out_str +  str(self.element[i]) + " "
        return out_str
    
      def generate(self):
        random.seed()
        for i in range(self.N):
          self.element[i] = float(random.randint(1, 100))


    Или использовать специальную переменную __slots__:
    class Vector:
    
      __slots__ = ['element', 'N']
    
      def __init__(self, N):
        self.elenent = []
        self.N = N
        for i in range(N):
          self.element.append(0)
    
      def __str__(self):
        out_str = ""
        for i in range(self.N):
          out_str = out_str +  str(self.element[i]) + " "
        return out_str
    
      def generate(self):
        random.seed()
        for i in range(self.N):
          self.element[i] = float(random.randint(1, 100))


    Отличие в том, что во втором случае вы уже не сможете добавить другие переменные-члены, и объекты будут занимать меньше памяти.
    Ответ написан
    Комментировать
  • Алгоритм поиска точки, максимально удалённой от границ фигуры на изображении?

    @Alexander1705
    Если фигура выпуклая, можно взять произвольную точку внутри, которую будем считать центром вписанной окружности, принять радиус равным нулю и применить следующий алгоритм:

    1. Увеличить радиус на 1 условную единицу (пиксель).
    2. Если окружность не пересекает фигуру, перейти к шагу 1.
    3. Если возможно сдвинуть центр окружности на 1 условную единицу так, что окружность не будет пересекать фигуру, сдвинуть центр и перейти к шагу 1.

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

    Алгоритм будет работать довольно медленно, но других вариантов я не знаю.

    P.S. По сути, это всё равно, что надувать воздушный шарик внутри коробки. Сначала мы можем разместить его где угодно, но потом, надуваясь, он сам займёт верное положение.

    P.P.S. Как альтернативный вариант, можно создать матрицу, в элемент M[i][j] которой записать расстояние от точки с координатами (i, j) до ближайшей точки фигуры. Потом просто найти максимальное в матрице.
    Ответ написан
    Комментировать
  • Как выбрать какую функцию вызвать на этапе выполнения программы?

    @Alexander1705
    Так как имя функции по сути является указателем, то этот указатель можно передать, как аргумент другой функции.

    Указатель на функцию можно использовать следующим образом:
    // Некоторая функция
    float func(float x1, float x2);
    
    // Указатель на функцию: возвращаемый_тип (* имя_указателя)(типы_аргументов)
    float (*func_pointer)(float, float);
    
    // Указателю можно присвоить только функции имеющие такую же 
    // сигнатуру (возвращаемый тип и типы аргументов)
    func_pointer = func;
    
    // Указатель на функцию может быть аргументом
    double findMinimum(x1, x2, float (*func_arg)(float, float)) {
        // Вызвать функцию через указатель можно также как и обычную функцию
        // потому, что имя функции тоже является указателем
        float x = func_arg(x1, x2);
    }
    
    // Чтоб передать указатель на функцию, нужно просто написать имя функции без скобок
    cout << findMinimum(1, 2, func) << '\n';
    Ответ написан
    Комментировать
  • Как считывать числа из файла построчно на C++?

    @Alexander1705
    Почитайте вот здесь - stackoverflow.com/questions/9673708/tell-cin-to-st...
    А именно следующий код:
    std::string line;
    std::getline(cin, line);
    std::istringstream iss(line);
    while (iss >> c) {    
        vec.push_back(c);
    }

    Объект istringstream инициализируется строкой, и позволяет работать с ней как с потоком.

    P.S. Не забудьте подключить sstream
    Ответ написан
    1 комментарий
  • Как решаются задачи на вероятность?

    @Alexander1705
    Конкретно эту задачу можно решить так:

    И так, у нас p - вероятность нападения разбойников, 0 <= p <= 1. Пускай q - вероятность выйти из леса.
    Рассмотрим какие варианты событий могут произойти и с какой вероятностью:
    1. С вероятностью 0,(3) богатырь выходит из леса.
    2. С вероятностью 0,(6)*p нападают разбойники.
    3. С вероятностью 0.(6)*(1-p) богатырь проходит в другой город. (рекурсивный вариант)

    Так как 3 вариант рекурсивный, он не меняет соотношение вероятностей выйти_из_леса и нападения_разбойников. Значит в итоге соотношение будет 0,(3) к 0,(6)*p, а их сумма будет равна единице.

    Получаем уравнение:
    q / ( 1 - q ) = 0.(3) / ( 0.(6) * p )

    Решаем, получаем следующее выражение:
    q = 0.(3) / ( 0.(6)*p + 0.(3) )
    Ответ написан
    Комментировать