• Как работает разность последовательностей в Linq?

    @oleg_ods
    Методы Except, Union, Substruct предназначены для работы с множествами(Set).

    Множество, по определению, совокупность уникальных(!) значений.

    То есть при вызове метода Except LINQ сначала преобразует массив {5, 5, 5} в множество(удаляет все повторяющиеся элементы => {5}, а после этого вычитает из него в второй массив, который предварительно тоже преобразует в множество(пустое). Соответственно после вычитания результат остается {5}.

    Если вам нужно в итоге получать {5, 5, 5} , то нужно пользоваться вариантом предложенным выше. Если делать это нужно часто, то есть смысл написать свое расширение для LINQ.
    Ответ написан
    1 комментарий
  • Как работает разность последовательностей в Linq?

    Adler_lug
    @Adler_lug
    В описание функции не вдавался, но в примере показано, что она работает именно так, как у вас:
    double[] numbers1 = { 2.0, 2.0, 2.1, 2.2, 2.3, 2.3, 2.4, 2.5 };
    double[] numbers2 = { 2.2 };
    
    IEnumerable<double> onlyInFirstSet = numbers1.Except(numbers2);
    
    foreach (double number in onlyInFirstSet)
        Console.WriteLine(number);
    
    /*
     This code produces the following output:
    
     2
     2.1
     2.3
     2.4
     2.5
    */

    Т.е. дублирующиеся значения "сливаются".
    Видимо вы не поняли ее конечное назначение.
    Ответ написан
    2 комментария
  • Почему при интерполяции нужно использовать long?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Потому что твой номер с 9ХХ-* не влезает в пространство int32
    Ответ написан
    Комментировать
  • Как сделать формат времени 99:59:59?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. Тебе нужен TimeSpan, а не DateTime.
    2. Из коробки нельзя форматировать так, как тебе нужно, так что придётся навелосипедить:
    var max = 359999;
    var ts = TimeSpan.FromSeconds(max);
    
    var hours = (int)ts.TotalHours;
    var minutes = ts.Minutes;
    var seconds = ts.Seconds;
    var formattedString = $"{hours}:{minutes}:{seconds}";
    Console.WriteLine(formattedString); // 99:59:59
    Ответ написан
    Комментировать
  • Как сделать проверку на ноль?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    do {
        list.Add(inpNum % 10);
        inpNum = inpNum / 10;
    } while (inpNum > 0);
    Ответ написан
    6 комментариев
  • Как сделать проверку на ноль?

    @JuniorNoobie
    Сижу в поддержке, пишу мелкие проекты
    Ну ошибка, скорее всего, в строчке Convert.ToInt32(). Насколько я помню, если передать туда null или пустую строку, то будет ошибка преобразования, а так и происходит, когда у вас inpNum = 0.
    Если вы используете LINQ у себя, то используйте его по полной:
    string str = "1243586701";
    Console.WriteLine(String.Concat(str.OrderBy(x => x)));
    Ответ написан
    1 комментарий
  • Как можно улучшить код(ревью)?

    @JuniorNoobie
    Сижу в поддержке, пишу мелкие проекты
    Если требуется вывести только одно слово с максимальной стоимостью, то можно сделать так:
    1. Заменить вашу структуру с проверкой на "Alphabet" на простое приведение символа к целочисленному значению (что-то типа такого: int value = (int)charValue. Если важно, чтобы 'a' = 1, то можно так: int value = charValue - 'a' + 1);
    2. Ввести переменные maxIndex (индекс самого дорогого слова в массиве words), maxValue (значение самого дорогого слова в words) и currentValue (стоимость текущего слова); На начальной итерации maxIndex = 0 и maxValue = 0;
    3. Вычислить currentValue в цикле, где мы пробегаем по символам слова;
    4. Сравнить вычисленную стоимость с максимальной и, если что, поменять значения maxIndex и maxValue на текущие;
    5. В конце вернуть words[maxIndex];
    Ответ написан
    Комментировать
  • Как распаковать архив .RAR в linux?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Устанавливаешь (по умолчанию скорее всего не установлено. Во всяком случае в Ubuntu так):
    sudo apt-get install p7zip p7zip-rar rar unrar

    p7zip p7zip-rar - на случай, если захочешь распаковывать rar им...

    А дальше, как Ex1st тебе выше написал.
    Ответ написан
    4 комментария
  • Как распаковать архив .RAR в linux?

    @Ex1st
    unrar filename.rar
    Ответ написан
    Комментировать
  • Как сделать так, чтобы linux при установке видел мой ssd?

    Adamos
    @Adamos
    Асер - не только дерьмовый производитель, но и сволочь, залочившая свои ноуты так, чтобы юзеры на них не могли поставить ничего, кроме Окошек. Банальный картельный сговор.
    Фишка в том, что этот SSD подключен как настолько кривой RAID, что его только предварительно предупрежденная винда и понимает.
    Нужно сменить настройку - изменить SATA mode в BIOS.
    Но уроды из Асера подгадили и здесь: эта опция по умолчанию в BIOS не отображается вовсе.
    Нужно зайти в BIOS и в закладке Main нажать Ctrl-S. Только тогда появится возможность открыть этот капкан - и после этого можете ставить на него, что угодно, системы диск увидят.
    Ответ написан
    9 комментариев
  • Как правильно построить функцию?

    @cicatrix
    было бы большой ошибкой думать
    Короче, вот готовый пример, как работать с матрицами трансформации. Это действительно проще показать, чем объяснить
    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;
    
    namespace DrawPlot
    {
        public partial class MainForm : Form
        {
            // Добавил сюда, чтобы в InitializeComponent не лезть
            PictureBox picDisplay;
    
            // Макс размер сетки по наибольшему измерению окна 
            // для сохранения пропорции (либо по ширине, либо по высоте)
            const float MaxGrid = 10.0f;
    
            // Это задаёт логический размер окна
            SizeF viewPort;
    
            // Шаги сетки 
            const float GridStep = 0.1f;
            // Каждые 10 линий сетки делаем линию поярче
            const int BoldLineStep = 10;
    
            // Цвета        
            Pen pen_LargeGrid = new Pen(Color.FromArgb(0,64,0));
            Pen pen_SmallGrid = new Pen(Color.FromArgb(0,32,0));        
            Pen pen_Axii = new Pen(Color.FromArgb(0,128,0));
            SolidBrush plotBrush = new SolidBrush(Color.Red);
    
            // Ширина 1 пиксела в логических размерах
            float Pixel_Width;
    
            public MainForm()
            {
                InitializeComponent();
                picDisplay = new PictureBox() { Parent = this, Dock = DockStyle.Fill, BackColor = Color.Black };
                picDisplay.Paint += this.PicDisplay_Paint;
                picDisplay.Resize += this.PicDisplay_Resize;
                // Стрелочка 10х4
                AdjustableArrowCap cap = new AdjustableArrowCap(4.0f,10.0f);
                pen_Axii.CustomEndCap = cap;
                CalculateDimensions();
            } // MainForm Ctor       
    
            private void PicDisplay_Resize(object sender, EventArgs e)
            {
                CalculateDimensions();
                picDisplay.Invalidate();
            } // PicDisplay_Resize
    
            private void CalculateDimensions()
            {
                var rect = picDisplay.ClientRectangle;
                // Устанавливаем размеры в зависимости от того, что больше, длина или ширина
                // для сохранения квадратной сетки
                if (rect.Width > rect.Height)
                    viewPort = new SizeF(MaxGrid, MaxGrid * (rect.Height / (float)rect.Width));
                else
                    viewPort = new SizeF(MaxGrid * (rect.Width / (float)rect.Height), MaxGrid);
                // Считаем ширину 1 пикселя 
                Pixel_Width = viewPort.Width / rect.Width;
                // Назначаем эту ширину используемым перьям
                foreach (var pen in new Pen[] { pen_Axii, pen_LargeGrid, pen_SmallGrid, pen_LargeGrid })
                    pen.Width = Pixel_Width;
            } // CalculateDimensions
    
            private void PicDisplay_Paint(object sender, PaintEventArgs e)
            {            
                Graphics g = e.Graphics;
                
                // Масштабируем
                g.ScaleTransform(picDisplay.Width / viewPort.Width, (picDisplay.Height / viewPort.Height));
    
                // Двигаем начало координат в середину
                float halfWidth = viewPort.Width / 2;
                float halfHeight = viewPort.Height / 2;
                g.TranslateTransform(halfWidth, halfHeight);
    
                // Переворачиваем Y
                g.ScaleTransform(1.0f, -1.0f);
    
                // Рисуем сетку
                int step = 0;
                for(var f = 0f; f < MaxGrid / 2 ; f += GridStep)
                {
                    var currentPen = pen_SmallGrid;                
                    if (0 == step % BoldLineStep) currentPen = pen_LargeGrid;
                    // Горизонтальные
                    g.DrawLine(currentPen, -halfWidth, f, halfWidth, f);
                    g.DrawLine(currentPen, -halfWidth, -f, halfWidth, -f);
                    // Вертикальные
                    g.DrawLine(currentPen, f, -halfHeight, f, halfHeight);
                    g.DrawLine(currentPen, -f, -halfHeight, -f, halfHeight);
                    step++;
                } // for
                // Оси координат
                g.DrawLine(pen_Axii, -halfWidth, 0, halfWidth, 0);
                g.DrawLine(pen_Axii, 0, -halfHeight, 0, halfHeight);
    
                // график
                float y;
                for (var x = -halfWidth ; x < halfWidth ; x+= Pixel_Width)
                {
                    y = ((float)Math.Pow(x, 3) - 1) / (x + 5);
                    // Обязательно проверка на NaN и Infinity
                    if (!float.IsNaN(y) && !float.IsInfinity(y)) 
                          g.FillRectangle(plotBrush, new RectangleF(x, y, Pixel_Width, Pixel_Width));
                } // for
            } // PicDisplay_Paint
        } // class MainForm`    1+m  
    } // DrawPlot namespace


    6076227c0d1d2664851754.png
    Ответ написан
    1 комментарий
  • Как отрефакторить с методами?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    У тебя тут четыре куска кода, которые рисуют стороны этого четырёхугольника.
    1. Вынеси отрисовку каждой стороны в отдельный метод, чтобы не писать эти комменты.
    2. Обобщи эти методы, чтобы у тебя только в одном месте было
    var pen = Pens.Yellow;
    Risovatel.MakeIt(pen, ???, ???);
    Risovatel.MakeIt(pen, ???, ???);
    Risovatel.MakeIt(pen, ???, ???);
    Risovatel.MakeIt(pen, ???, ???);
    
    Risovatel.Change(???, ???);
    Risovatel.Change(???, ???);

    Я хз, что за Risovatel, что за MakeIt, что за Change, так что параметры я заменил на вопросительные знаки.
    (а блин, тут же дан его код) - тогда надо переименовать эти методы и их параметры. Делать это г статическим нет никакого смысла.

    Ну и названия переменных всё ещё ничего не говорят. min - это видимо длина стороны квадрата, если я правильно понял.
    Ответ написан
    Комментировать
  • Что лучше изменить и как?

    Здесь
    var outputAmount = (Convert.ToDouble(arrayUserInput[0], CultureInfo.InvariantCulture) / 100) * (Convert.ToDouble(arrayUserInput[1]) / 12) + Convert.ToDouble(arrayUserInput[0], CultureInfo.InvariantCulture);

    посоветую создать три переменные double в них соответственно сохранить:

    исходную сумму, процентную ставку и срок вклада в месяцах.
    это может улучшить понимание кода.
    Ответ написан
    1 комментарий
  • Что лучше изменить и как?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Я бы ещё заменил double на decimal - всё-таки деньги считаем.
    А Convert заменил на TryParse.
    Парсинг лучше сделать в Main, а в метод Calculate передавать три числа.
    Тогда не придётся делать постоянно Split и Join
    В остальном всё хорошо
    Ответ написан
    9 комментариев
  • Как правильно конвертировать массив?

    serafimprozorov
    @serafimprozorov
    Люблю Erlang....
    Эх, вспомнил я первый курс универа...
    Я бы, наверное, сделал как-то так, учитывая, что это всё же учебное задание, если есть вопросы, велкам, отвечу.

    class Program
    {
        private const int MinArrayLength = 2;
        private const int MaxArrayLength = 20;
    
    
        private static int ReadInteger(string prompt)
        {
            while (true)
            {
                Console.Write(prompt);
                
                string input = Console.ReadLine();
    
                if (!int.TryParse(input, out int number))
                {
                    Console.WriteLine($"Значение {input} не является числом");
                    continue;
                }
    
                return number;
            }
        }
    
        private static int ReadArrayLength()
        {
            while (true)
            {
                var number = ReadInteger($"Введите размер массива от {MinArrayLength} до {MaxArrayLength}: ");
    
                if (number > MaxArrayLength || number < MinArrayLength)
                {
                    Console.WriteLine($"Число {number} лежит вне границ интервала [{MinArrayLength}..{MaxArrayLength}]");
                    continue;
                }
    
                return number;
            }
        }
    
        private static int[] ReadArray(int length)
        {
            while (true)
            {
                Console.Write($"Введите до {length} целых чисел через пробел: ");
    
                string input = Console.ReadLine();
                string[] entries = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
    
                if (entries.Length > length)
                {
                    Console.WriteLine($"Вы ввели более {length} чисел");
                    continue;
                }
    
                if (!TryParseIntegerArray(length, entries, out var array))
                    continue;
    
                return array;
            }
        }
    
        private static bool TryParseIntegerArray(int length, string[] strings, out int[] array)
        {
            array = new int[length];
    
            for (int i = 0; i < strings.Length; ++i)
            {
                if (!int.TryParse(strings[i], out int number))
                {
                    Console.WriteLine($"Строка {strings[i]} (позиция {i}) не является числом");
                    return false;
                }
    
                array[i] = number;
            }
    
            if (length > strings.Length)
            {
                Array.Clear(array, strings.Length, length - strings.Length);
            }
    
            return true;
        }
    
        private static int CountNumberOccurs(int[] array, int targetNumber)
        {
            int occursCount = 0;
            
            for (int i = 0; i < array.Length; ++i)
            {
                if (array[i] == targetNumber)
                    occursCount++;
            }
    
            return occursCount;
        }
    
    
        static void Main(string[] args)
        {
            int arrayLength = ReadArrayLength();
            int[] array = ReadArray(arrayLength);
            int targetNumber = ReadInteger("Введите целое число для поиска повторений: ");
    
            int occursCount = CountNumberOccurs(array, targetNumber);
    
            Console.WriteLine($"Количество вхождений числа {targetNumber} в массив: {occursCount}.");
            Console.WriteLine("Нажмите <ENTER> для выхода.");
            Console.ReadLine();
        }
    }
    Ответ написан
    1 комментарий