Задать вопрос
  • Как создать ссылку на строку внутри объекта класса, которая указывает на переменную вне объекта?

    arusef
    @arusef
    Novice .NET dev
    Это невозможно в рамках C#, потому что тип string - неизменяемый тип. Каждая новая строка имеет свой собственный экземпляр string (такое же поведение имеют все ValueType).
    Если хотите добиться иного поведения, нужно использовать System.Text.StringBuilder.
    Например:
    public class stateEnterWord
            {
                private StringBuilder word;
                public void init(StringBuilder input)
                {
                    word = input;
                }
                public void startExecution()
                {
                    word.Append(Console.ReadLine());
                }
            }
      static void Main(string[] args)
            {
                stateEnterWord obj = new stateEnterWord();
                StringBuilder Name = new StringBuilder();
                obj.init(Name);
                obj.startExecution();
                Console.WriteLine(Name.ToString());
            }

    Однако, если честно, это нарушает принципы ООП.
    Ответ написан
  • Как открывать файлы .cs в пользовательском интерфейсе?

    arusef
    @arusef
    Novice .NET dev
    Если у вас консольное приложение спроектировано правильно и умеет принимать параметры командной строки, то можно воспользоваться методами System.Diagnostics.Process.Start, передать параметры в новый процесс, перенаправить поток вывода и считать оттуда информацию.

    Если же нет, и переписать консольную программу нет возможности (а спецификация требует использования именно
    этой сборки), тогда можно воспользоваться System.Reflection.Assembly, подгрузить инстанс класса основной программы, вызвать метод Main (или любой другой) и передать список аргументов. Кстати, в данном случае очень неплохо может облегчить жизнь тип dynamic, так как многие вещи он сам умеет распознавать. У такого подхода много минусов, но он рабочий, если нужна динамическая подгрузка.

    Ну и, наконец, самый разумный способ: просто переписать весь код основной логики из консольной программы в какую-нибудь отдельную .dll, подключить её к своему проекту и использовать методы и сущности напрямую. Если исходного кода нет - можно воспользоваться Reflector'ом, например. (Причём это если нельзя дотнетовский .exe подключить сразу, без переписывания. Но с таким я не сталкивался.)
    Ответ написан
    2 комментария
  • Возможно ли функциональное программирование в C# без LINQ?

    arusef
    @arusef
    Novice .NET dev
    Вполне возможно. Смотрите:
    static IEnumerable<TResult> Map<TIn, TResult>(this IEnumerable<TIn> seq, Func<TIn, TResult> mapper){
        foreach(TIn item in seq) yield return mapper(item);
    }
    enum Parity { Even, Odd }
    static void Test(){
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
        Func<int, Parity> parity = (num) => num % 2 == 0 ? Parity.Even : Parity.Odd ;
        foreach(var parity in numbers.Map(parity)) 
            Console.Write(parity.ToString() + ", ");
    }

    Это выведет на экран "Odd, Even, Odd, Even, Odd, Even, ".
    Чем вам не функциональный подход? И LINQ здесь нет (разве что самодельный).
    Ответ написан
    Комментировать
  • Каким образом составить план проекта клиент-серверного приложения (Web,Android,ios)?

    arusef
    @arusef
    Novice .NET dev
    • Для проектирования подойдёт Visual Paradigm, если вы умеете пользоваться CASE средствами. (Чисто формально можно и в draw.io работать, но это рушит саму идею, если вам вообще нужен rup'овский подход)
    • Для разработки под Android лучше использовать Android Studio и писать нативно на Java/Kotlin. Если хочется извращений - можно попробовать Dart.
    • Для разработки под iOS лучше всего XCode и Swift/Objective-C, очевидно.
    • Если хотите сразу под несколько платформ, и у вас в команде люди любят C#, то можно попробовать Visual Studio и Xamarin.
    • Для сервера вариантов действительно много. Начиная от python, js, php и заканчивая java, c#, f#.
    Ответ написан
    Комментировать
  • Симуляция и непрерывное считывание нажатия клавиш в c#?

    arusef
    @arusef
    Novice .NET dev
    Можете воспользоваться фреймворком SlimDX.
    Ответ написан
    Комментировать
  • Как доказать отсутствие алгоритма для решения задачи?

    arusef
    @arusef
    Novice .NET dev
    В общем случае, задачи такого рода сводятся к, наоборот, доказательству существования алгоритма.
    Есть несколько универсальных базовых методов доказательств: от противного, индукция, инвариант, и т.д.

    Для решения такой задачи, вам нужно выделить несколько основных тезисов, касающихся вашей проблемы:
    1. Исходные данные
    2. Варианты возможных действий с ними
    3. То, как изменяются данные в процессе
    4. Что должно получиться на выходе
    Основываясь на этом можно применить вышеуказанные методы, например, предположить, что такой алгоритм существует, или, например, составить шаги индукции и определить, для всех ли случаев выполняются условия. В таком контексте, ваши исходные условия - это аксиомы, они нерушимы и не требуют доказательств. На основе аксиом можно строить некоторые леммы - такие себе "частичные доказательства" - какие-то более сложные положения, которые выводятся из аксиом, и помогают позже в конечном доказательстве. Следует также помнить, что условие доказательства можно искусственно усилить, для того, чтобы легче было доказать всю вашу теорему.
    Больше об этом можно послушать в лекциях от MIT.
    Ответ написан
    Комментировать
  • MPI: Как оповестить процесс о новых сообщениях?

    arusef
    @arusef
    Novice .NET dev
    Можно просто захватывать мьютекс на время выполнения приёма данных. Однако, исходя из здравого смысла, ваша "многопоточность" будет сводиться к тому, что потоки станут работать поочерёдно. Можно использовать только один поток, т.к. MPI в принципе подразумевает выделение процессов под количество вычисляющих ядер в системе и наличие второго потока будет лишь притормаживать работу. В таком случае, ваш процесс может принимать данные о задаче в неблокирующей манере в какой-нибудь буфер, где после выполнения задачи будет проводиться проверка на наличие новых задач.
    Ответ написан
    Комментировать
  • Можете пояснить принципы ООП?

    arusef
    @arusef
    Novice .NET dev
    Это принципы, касающиеся не столько процесса выполнения программы, сколько её дизайна. Все изменения в данном случае - процесс переписывания исходного кода программистом.
    Архитектура приложения должна быть составлена таким образом, чтобы для некоторого изменения её функционала, расширения и т.д. достаточно было бы изменить код лишь в узком круге мест, а для добавления нового - вовсе ничего не меняя, включить новые элементы. На такую гибкость, лёгкость в сопровождении/тестировании, читабельность, и направлены принципы ООД, которые определяются вот уже несколько десятков лет.
    Это очень обширная тема, требующая огромных знаний и опыта в сфере ООП. Лучше начинать с чего-то простого, и не лезть в тот же MVC без хотя бы базового понимания этих принципов.
    Ответ написан
    4 комментария
  • Для этого ли нужны делегаты?

    arusef
    @arusef
    Novice .NET dev
    Нет, это не жизненный пример. Это вообще очень странный пример, и никто в здравом уме не будет вызывать нестатический метод на имени типа. В данном случае расово верным и единственным рациональным решением было бы обратиться к этому методу, как var ret = instance.Method("string");.

    Однако, возвращаясь, собственно, к теме самих делегатов и их жизненного применения. Самым классическим примером была бы реализация функции Where (которая поставляется в LINQ).
    // in static class
    IEnumerable<TElement> Where(this IEnumerable<TElement> source, Predicate<TElement> filter){
       // для простоты опустим проверки и т.д.
       foreach(TElement elem in source)
          if(filter(elem)) yield return elem;
    }
    // ... usage ...
    var list = new List<int> { 1, 2, 3, 4, 5, 6 };
    var ret = list.Where(elem => elem % 2 == 0);
    foreach(int e in ret)
       Console.Write(e + " ");
    // ...

    В данном случае функция перебирает каждый элемент в перечислении source, вызывает функцию filter (функция, которая принимает значение типа TElement и возвращает bool), и возвращает текущий элемент, если возвращённое filter значение было true.
    После выполнения фрагмента кода, на экран было бы выведено "2 4 6 ".
    Ответ написан
    Комментировать
  • Как узнать объем и плотность жидкости до 50мл и есть ли для этого smd сенсоры?

    arusef
    @arusef
    Novice .NET dev
    Могу предположить, что, по крайней мере массу внутренней жидкости можно вычислять исходя из разности центробежных сил вашего подвижного контейнера в пустом и полупустом состояниях, с помощью электронного акселерометра, например.
    Плотность крови, вероятно, можно вычислить исходя из прозрачности пробы. Кровь состоит обычно из плазмы, которая, в принципе, имеет очень точный уровень солёности, и, как следствие, плотности, а так же из миллионов разных кровяных тел, среднее количество которых можно вычислять, скорее всего, именно из оптической прозрачности. Но мне почему-то кажется, что плотность пробы крови будет иметь крайне слабое отклонение от какого-то среднего значения.
    Взяв в расчет эту плотность, а также массу из первого измерения, можно вычислить и объем жидкости в контейнере сложной формы.
    Ответ написан
    Комментировать
  • Нужна хорошая книга без воды по компьютерной графике?

    arusef
    @arusef
    Novice .NET dev
    Текст вопроса звучит так, как будто бы автор предлагает нам хорошую книгу без воды, лол.
    Есть одна суперкнига по OpenGL, она обучает работе с оной технологией, но также достаточно глубоко рассматривает и графические принципы тоже.
    А вот подборочка годных глубоких книг. Некоторые даже у меня есть, хотя я не геймдев.
    Ответ написан
    Комментировать
  • Как удалить элемент из класса в С++?

    arusef
    @arusef
    Novice .NET dev
    Не существует перегрузки оператора "<<" для ostream такой, чтобы она принимала class tv в качестве параметра. Попробуй определить метод toString() в классе tv, который будет выводить на экран то, что тебе нужно.
    К тому же, в классе tv у тебя не перегружен оператор "=", поэтому присваивание идёт поверхностное. Не помню, как там со статическими массивами, но, скорее всего, они просто начинают ссылаться на другую область памяти (то есть на строки в соседнем элементе). Следовательно, если у тебя не были инициализированы чем-то элементы старше count, то всё заполнится мусором.
    Ещё один момент заключается в том, что массив на самом деле не сжимается, это ты двигаешь элементы справа налево, оставляя в конце один неиспользуемый. Обычно в таких случаях выделяют память под новый массив меньшего размера, а потом переносят всё в него, например.
    Ответ написан
  • Быстрый поиск по базе. Что выбрать?

    arusef
    @arusef
    Novice .NET dev
    Не нравится SQL - пользуйтесь NoSQL, например MongoDB. Там заодно и индексы поддерживаются и всякое такое. Можно организовать и дерево. А можно метрическое пространство по кастомным хешам строк. Это уж как захочется.
    Ответ написан
    Комментировать
  • Как хранить массу электрона?

    arusef
    @arusef
    Novice .NET dev
    В принципе, точности double должно хватить для обычных вычислений каких-нибудь школьно-академических задач по физике. Однако, если этого мало, лучше использовать какие-то альтернативные единицы. Пользователь выше предложил всё мерить относительно масс электрона, что в принципе неплохо, однако трудновато для понимания и выражения масс других частиц. Есть возможность использовать электронвольты (эВ) для выражения массы покоя. (Ну в данном случае лучше МэВ, т.к. 1 эВ - слишком маленькая велична). К тому же, массы элементарных частиц часто приводятся именно в таком виде и эта информация доступна.
    Me = 0,510 998 9461 МэВ
    Mp = 938,272 0813 МэВ
    Mn = 939,565 4133 МэВ
    1 МэВ = 1,782 661 907е−30 кг (для перевода в килограммы, если требуется)
    Ответ написан
    Комментировать
  • Стоит ли в программировании учитывать возможность экстренного обрыва выполнения сценария (например выключение электричества, поломки компьютера)?

    arusef
    @arusef
    Novice .NET dev
    Проблема в том, что выход железа из строя невозможно определить программно. Не запишется какой-то код в errno и не будет никаких исключений, поэтому так запросто свой код не обезопасить.
    К программному обеспечению должны быть установлены какие-то требования, которые описывают его безопасность и отказоустойчивость. Вполне возможно не вся программа должна обладать такими характеристиками, а только её какая-то критическая часть. В таком случае, необходимо обеспечивать критически важные модули/участки дополнительными средствами, сохранением состояния, выполнением запросов в транзакциях и т.д.
    В твоём случае добиться этого не так-то просто, потому что отказ во время создания бекапа всё равно приведёт к полному, тотальному и бесповоротному...
    Ответ написан
    Комментировать
  • Как для List.ForEach() определить текущий элемент?

    arusef
    @arusef
    Novice .NET dev
    Метод List<TElement>.ForEach(Action<TElement>) принимает в качестве параметра делегат (то есть, по сути, указатель на функцию), который обрабатывает каждый элемент списка.
    Запись такого вида:
    var list = new List<int>() { 1, 2, 3 };
    list.ForEach(element => { Console.Write(element * element + " "); } );

    Выведет на экран следующее: 1 4 9

    Этот кусок кода полностью эквивалентен такому:
    void Method(){
       var list = new List<int>() { 1, 2, 3 };
       list.ForEach(Square);
    }
    void Square(int element){
       Console.Write(element*element + " ");
    }


    Таким образом, и в первом и во втором случае, переменная element является текущим обрабатываемым значением из списка.
    Ответ написан
    Комментировать
  • Возможно ли имея гуманитарное образование поступить в аспирантуру технического вуза?

    arusef
    @arusef
    Novice .NET dev
    А сейчас, похоже, нужно сдавать экзамены вступительные. К тому же, нужен диплом бакалавра, насколько я понимаю, с оценками по тем ключевым предметам, которые нужны на данной специальности.
    Ответ написан
    4 комментария
  • Как установить размеры picturebox по размеру нарисованной информации?

    arusef
    @arusef
    Novice .NET dev
    Свойство PictureBox.SizeMode позволяет регулировать отображение картинки внутри PictureBox. Например, можно "замостить" изображение, или растянуть по размерам самого элемента управления.
    Ответ написан
    Комментировать
  • Как создать группу элементов в форме?

    arusef
    @arusef
    Novice .NET dev
    Действительно, UserControl - то что нужно в такой ситуации. Создайте пользовательский элемент управления с необходимым содержимым, выведите основные его свойства, и размещайте в своём приложении, как будто это единый элемент.
    Могу посоветовать книгу "WPF 4 Unleashed", by Adam Nathan, тут - глава 20 (стр. 795) про UserControl.
    Ответ написан
    Комментировать