Ответы пользователя по тегу Программирование
  • Как придумывать осмысленные имена для классов?

    lam0x86
    @lam0x86
    1) Изучать популярные проекты на гитхабе, независимо от языка программирования.
    2) Использовать словарь (мне Лингво очень помогает).

    Моё мнение - чем необычнее имя сущности (в разумных пределах), тем проще запоминать структуру проекта. Когда приходится разбираться в чужих проектах, где половина классов называется ControllerBase, ControllerImpl, AbstractControllerFactory и т.п., хочется вешаться.
    Ответ написан
    Комментировать
  • Какая часть транслятора должна отслеживать ошибку типа "неверный формат числа"?

    lam0x86
    @lam0x86
    На этапе лексического анализа проверить валидность лексемы не всегда возможно. Скажем, тип данных int32 (условное название типа, содержащего знаковое 32-битное целое) может хранить число в диапазоне [-2147483648; 2147483647]. При этом, константное выражение "2147483648" считается невалидным, а то же самое, но со знаком минус "-2147483648" - вполне валидно. В идеале, лексический анализатор не должен знать о знаке числа. Определение того, унарный или бинарный это минус (а может, язык поддерживает интервалы типа "10-100" или еще какую-то экзотику), лежит на плечах синтаксического анализатора.
    Однако, базовый анализ валидности токенов действительно проще делать в лексическом анализаторе. Например, строковые литералы чаще всего проверяются на валидность escape-символов именно в процессе лексического анализа. Чем раньше будет найдена ошибка, тем проще восстановить ошибочное состояние анализатора.
    Ответ написан
    Комментировать
  • Алгоритмический вопрос от будущего C#.NET-джуниора. С чего начать исследование?

    lam0x86
    @lam0x86
    Последовательность действий такая:
    1) разбиение текста на лексические единицы (в вашем случае значимыми единицами являются слова). Удобно на выходе получать IEnumerable, представляющий ленивый итератор по словам в тексте.
    2) приведение слова к нормальной форме, т. е. к нижнему регистру и, опционально, к общей словоформе (например, для существительных - им. падеж, ед. число, и т.д.)
    3) добавление слова в Dictionary, где ключом является само слово, а значением - счётчик:
    int count;
    dictionary.TryGetValue(word, out count);
    dictionary[word] = count + 1;
    Ответ написан
    Комментировать
  • Как решить данную задачу?

    lam0x86
    @lam0x86
    Не слушай их всех =)
    Наверняка, преподаватель хочет видеть решение с замкнутым связным списком. Что-то вроде такого:
    class Program
        {
            static void Main()
            {
                var personList = GenerateList(15); // personList указывает на первого человека в списке
    
                PrintList(personList);
    
                var p = personList;
                while (p != p.NextPerson) // пока человек не остался один в списке
                {
                    #region Этот кусок для корректного вывода списка на экран. Если вывод не нужен, можно убрать
                    if (personList == p.NextPerson)
                    {
                        personList = p.NextPerson.NextPerson;
                    }
                    #endregion
    
                    // <ВсяСоль>
                    p = p.NextPerson = p.NextPerson.NextPerson;
                    // </ВсяСоль>
    
                    // Если убрать верхний регион, то может возникнуть ситуация, когда personList указывает на 
                    // человека, который был удалён из списка. Возникнет бесконечный цикл.
                    PrintList(personList);
                }
            }
    
            // Вывод списка на консоль
            private static void PrintList(Person personList)
            {
                var p = personList;
                do
                {
                    System.Console.Out.Write(p.SequenceNumber);
                    System.Console.Out.Write(" ");
                    p = p.NextPerson;
                } while (p != personList);
                System.Console.Out.WriteLine();
            }
    
            // Генерация списка
            private static Person GenerateList(int n)
            {
                // Начинаем с последнего человека
                var currentPerson = new Person(n);
                var lastPerson = currentPerson;
    
                // затем создаём N-1 человек, указывая его порядковый номер и следующего за ним человека
                for (int i = n - 1; i > 0; i--)
                {
                    currentPerson = new Person(i) { NextPerson = currentPerson };
                }
    
                // последнего человека закольцовываем с первым
                lastPerson.NextPerson = currentPerson;
                return currentPerson;
            }
        }
    
        class Person
        {
            public Person(int sequenceNumber)
            {
                SequenceNumber = sequenceNumber;
            }
    
            public int SequenceNumber { get; private set; }
    
            public Person NextPerson { get; set; }
        }
    Ответ написан
    Комментировать
  • Есть ли такой элемент управления .net OpenSource?

    lam0x86
    @lam0x86
    Можно поинтересоваться, почему не хочется "изобретать велосипед"? Мне кажется, вследствие редкой распространённости подобного функционала, вы, если что-то и найдёте, будете вынуждены городить костыли ради того, чтобы преобразовать вашу модель данных в ту, которая может быть скормлена найденному контролу. Если в процессе эволюции продукта вам необходимо будет добавить функционал, выходящий за пределы возможностей контрола, придётся решать задачу - форкаться от проекта (если он, конечно, open source), и потом иметь боль с каждым новым релизом, либо городить новые костыли, чтобы заставить работать существующую реализацию не так, как это было запланировано создателями.
    В данном случае я бы посоветовал всё же изобрести свой маленький велосипед, тем более, не такой уж и сложный, с виду, должен получиться этот контрольчик.
    Ответ написан
  • Как задать Placeholder для TextBox в среде VisualStudio 2013 язык C#?

    lam0x86
    @lam0x86
    Если WinForms, то, начиная с WinXP в ОС встроена поддержка данной фичи, и называется это Cue Banners. Здесь написано, как это можно прикрутить: stackoverflow.com/a/4902969

    Если WPF, то можно посмотреть здесь: stackoverflow.com/a/833967
    Ответ написан
    Комментировать