• Нужна ли программисту профильная математика?

    Знание математики определит ваш потолок как программиста. Формальный ответ на ваш вопрос: не обязательна.

    Для разработки несложных приложений, решения типичных практических задач можно ограничиться базовой математикой. Но если у вас есть амбиции, хочется быть в «высшей касте», «на острие», то сильный математический скилл совершенно необходим.
    Ответ написан
    Комментировать
  • Сортировка точек против часовой стрелки?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Вы что-то напутали, Atan вадает углы против часовой стрелки.

    Вот только угол идет от -pi до pi, а не от 0 до 2pi. Если вы хотите, чтобы первая точка была {1, 0}, то надо к отрицательным углам прибавлять 2pi перед сравнением.

    Это будет работать, но не очень оптимально. Atan - медленная штука. Можно сравнивать знаки координат сначала.

    Если одна точка с положительным y, а другая с отрицательным - положительная идет раньше. Если одна из точек имеет y=0 или знаки одинаковые - сравнивайте знаки по x. Выше и ниже оси OX - сравнения должны давать разные выводы (выше оси OX, положительные x идут раньше отрицательных, ниже оси OX - наоборот).

    Или для каждой точки в зависимости от двух знаков координат надо назначить квадрант от 1 до 4. И сначала сортировать по ним.

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

    HistoryART
    @HistoryART
    Надзиратель
    Типичный школьник в розовых очках, если вы закончите уник - вы не станете программистом, вы станете говно-кодером с устаревшей теорией в голове. Единственное место куда вам лучше ехать, это домой за комп для практики. Тем более нет уточнений чем именно вы будете заниматься, может у вас будет разработка игр или сложных crm систем, что-то советовать на подобный, неадекватный вопрос - это тыкать пальцем в небо.
    Ответ написан
    9 комментариев
  • Как склеить несколько подмассивов расположенных в одном массиве типа Object?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    DEL (первое решение было неверным)

    UPD:

    private static Array Combine(params object[] arrays)
            {
                if (arrays.Length == 0) return null;
                if (arrays.Length == 1) return (Array)arrays[0];
    
                var totalLength = ((Array)arrays[0]).Length;
                var elemType = arrays[0].GetType().GetElementType();
                for (int i = 1; i < arrays.Length; i++)
                {
                    var nextElemType = arrays[i].GetType().GetElementType();
                    if (nextElemType != elemType) return null;
                    totalLength += ((Array)arrays[i]).Length;
                }
                
                Array resultArray = Array.CreateInstance(elemType, totalLength);
    
                var offset = 0;
                foreach (Array array in arrays)
                {
                    Array.Copy(array, 0, resultArray, offset, array.Length);
                    offset += array.Length;
                }
    
                return resultArray;
            }
    Ответ написан
    2 комментария
  • Как склеить несколько подмассивов расположенных в одном массиве типа Object?

    FoggyFinder
    @FoggyFinder
    1. Вы не учитываете вложенность массивов: размер нового массива должен быть равен сумме длин всех входящих массивов. За первый пробег вы узнаете общий размер и проверяете что все типы совпадают, за второй пробег уже копируете.
    Тогда получится нечто вроде такого

    static Array Combine(params object[] arr)
    {
        if (arr.Length == 0)
        {
            return null;
        }
    
        var totalSize = 0;
        Type type = null;
        foreach (Array inner in arr)
        {
            var innerType = inner.GetType();
            type ??= innerType;
    
            if (innerType != type)
            {
                return null;
            }
    
            totalSize += inner.Length;
        }
    
        var resultArr = Array.CreateInstance(type.GetElementType(), totalSize);
        var currentSize = 0;
    
        foreach (Array inner in arr)
        {
            Array.Copy(inner, 0, resultArr, currentSize, inner.Length);
            currentSize += inner.Length;
        }
    
        return resultArr;
    }


    2. Отказаться от возвращения Array и перейти к дженерикам. Тогда можно использовать Linq в виде связки SelectMany + ToArray(), в SelectMany нужно будет привести к нужному типу.
    Ответ написан
    9 комментариев