Задать вопрос
Ответы пользователя по тегу C++
  • Как найти сумму углов n-многоугольника?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы выбрали неудачный метод проверки на выпуклость. Из-за погрешности при расчётах углов велики шансы получить неточное значение, причём погрешность при суммировании будет накапливаться.
    Правильный метод - проверка знаков векторных произведений соседних отрезков. Для выпуклого многоугольника все произведения будут иметь один и тот же знак, зависящий от направления обхода.
    #define sign(x) ((x) == 0 ? 0 : ((x) > 0 ? 1 : -1))
    #define vmul(i,j,k) = ((x[(j)]-x[(i)])*(y[(k)]-y[(j)])-(x[(k)]-x[(j)])*(y[(j)]-y[(i)]))
    bool function isConvex(double *x, double *y, int n) {
        S = sign(vmul(n-2, n-1, 0));
        if ((S1 = vmul(n-1, 0, 1)) != 0 && sign(S1) != S)
            return false;
        for (int i = 0; i < n-2; i++)
            if ((S1 = vmul(i, i+1, i+2)) != 0 && sign(S1) != S )
                return false;
        return true;
    }

    Контроль на совпадение точек (Pi = Pi+1) или (Pi = Pi+2) добавьте сами.
    Ответ написан
    Комментировать
  • Почему цикл for не уменьшает значение в префиксной форме?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    for(int i = f; i > 0; --i)обычно раскрывается компилятором в
    {
        int i = f;
        goto loop_cond;
    loop:
        // тело цикла
        --i;
    loop_cond:
        if (!(i > 0)) goto loop;
    }
    Ответ написан
    Комментировать
  • Кодировка LDAP запроса: как?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если используется AD, то кодировка должна быть Windows-1251
    Ответ написан
    Комментировать
  • Почему в электронной книге "Архангельский. C++Builder 6. Справочное пособие" некоторые страницы пустые?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    WinDjView 1.0.3, WinDjView 2.0.2, djvu-viewer - везде одинаково, похоже файл кривой.
    Ответ написан
    Комментировать
  • Задача расчета расстояния путей между городами с использование графов в C++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Самое простое - двумерный массив w[N][N], где w[i][j] - стоимость перехода из узла i в узел j или -1 если такого пути нет. Если узлов много, а связность низкая, то надо уже копать в сторону разреженных массивов.
    Ответ написан
    Комментировать
  • О нюансах работы со строками и массивами в C

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    C - язык со статической типизацией. Это означает, что во время объявления переменной под неё выделяется область памяти, которая в дальнейшем не меняется. Соответственно если происходит выход за пределы этой области, то есть шансы испортить соседние данные, код программы или получить системное исключение при попытке записи за пределы памяти, отведённой программе.
    Функция копирования строк есть в стандартной библиотеке string.h и устроена несколько сложнее. Попробуйте с помощью своей функции выполнить следующий код:
    char str[20] = "Прпущен символ";
    strcpy(str+3, str+2);
    str[2] = 'о';
    printf("%s\n", str);
    Ответ написан
    6 комментариев