• Как понять предел?

    LoliDeveloper
    @LoliDeveloper
    Линейная алгебра как смысл жизни
    Предел это не максимум.
    Предел это про значение функции в беск малой проколотой окрестности точки. Ну вот например для функции 1/|X| мы не можем сказать чему она равна при x = 0. можно говорить только что происходит при приближении X к нулю, вот мы и берём проколотые окрестности, ужимаем их и смотрим что происходит с функцией в этих окрестностях
    Ответ написан
  • Как решить 22 задание ЕГЭ по информатике?

    Vindicar
    @Vindicar
    RTFM!
    Смотри, по логике.
    a = 3x + 67
    b = 3x - 61

    для положительных x число a всегда будет больше на 128 чем b
    поэтому после первой итерации цикла будет
    a = 128
    b = 3x - 61

    Чтобы получить 64, нужно, чтобы b было либо 64, либо 64 + 128 * k, где k натуральное число.
    Тебе нужно найти такое значение x, чтобы 3x - 61 = k * 128 + 64
    Отсюда
    3x = k * 128 + 125
    перебирая k, получим k = 2
    3x = 256 + 125
    x = 381 / 3 = 127
    Ответ написан
    1 комментарий
  • Как решить 22 задание ЕГЭ по информатике?

    GavriKos
    @GavriKos
    Покрыли не всю область входных значений например. При нуле вайл у вас будет бесконечный. Вообще тут надо решать математически мне кажется. Начните наприме num с 100 и получите результат (не факт что правильный). Так же у вас не учтен отрицательный num.

    UPD. Если посмотреть математически - при x < 61/3 b будет отрицательным. А a - положительным. Соответственно вычитая первое из второго a будет только расти и никогда не станет равным b. Вот ничего и не происходит
    Ответ написан
    Комментировать
  • Нужна ли программисту профильная математика?

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

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

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

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

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

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

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

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