• Delphi и MySQL - периодически выскакивают ошибки БД - как сделать, чтобы они прекратили выскакивать?

    @Sumor
    В настройках подключения (либо в строке подключения, либо в udl файле, либо в панели управления) установите параметр Timeout до приемлемых для вас значений.
    Ответ написан
  • Как найти максимальную площадь?

    @Sumor
    Подозреваю, что максимальная площадь получится, если AB=AC. Это даже можно доказать, взяв равнобедренный треугольник со стороной a и провести рядом другую сторону равную a. Можно показать, что треугольник "выше" всегда больше треугольника "снизу". Т.е. от площади больше отнимается, чем прибавляется.
    Что касается функции, то нужно взять формулу вычисления площади по стороне и двум углам (второй угол будет оптимизирующим аргументом).
    S = 1/2*a^2*sin (180 - α - β)* sin β/sin α
    Ответ написан
    Комментировать
  • Как правильно записать буфер в файл? Какая должна быть кодировка?

    @Sumor
    По-умолчанию node.js работает с файлами как с текстовыми файлами в различных кодировках.
    bmp это бинарный (нетекстовый) формат. Для его чтения/записи нужно явно указывать кодировку 'binary' при вызове readFileSync, writeFileSync и т.п.
    Ответ написан
    1 комментарий
  • Как разложить на неприводимые в поле R множители?

    @Sumor
    Сначала надо попытаться найти корни многочлена. Если корни есть, то многочлен разделить на (x-x0), где x0 - корень и продолжить разложение с оставшимся многочленом. Если корней нет, или сложно найти, то надо пытаться найти (увидеть) формулы, которые позволят как-то упростить или "сложить" выражение.
    В данном случае вполне может получиться, что корней нет, но многочлен разделяется на два неприводимых многочлена вида (x^2 + bx + c).

    PS.
    Прикидки в excel показывают, что многочлен как минимум неотрицательный, и если имеет корень, то около числа 0,381966.
    Ответ написан
    Комментировать
  • Не создаётся дочернее окно WinAPI или CreateWindows возвращает нуль?

    @Sumor
    Чтобы понять что за ошибка вызовите дополнительно GetLastError.
    В момент обработки WM_CREATE окно ещё не до конца создано, может быть проблема в этом.
    Дочерние окна чаще всего подразумевают панели или контролы. Попробуйте создать дочернее окно не со своим классом, а, например, кнопку или текстовое окно.
    Ответ написан
    Комментировать
  • Есть ли смысл использовать checksum или hashbyte в JOIN'ах?

    @Sumor
    Самый верный способ узнать - это создать выборку и попробовать на ней.
    Предполагаю, что в большинстве случаев выигрывать будет первый вариант, хотя для таблиц меньше чем в десятки тысяч записей разница будет на уровне погрешности. База данных, скорее всего, будет эффективно использовать дату и число для предварительной фильтрации, и только после этого сравнивать текст. Поэтому второй вариант в любом случае проигрышный.
    Вычислять что-то во время выполнения запроса для всей таблицы вообще не очень хорошая идея.
    В некоторых случаях, если данных действительно очень много, то можно посчитать хеш заранее, построить по нему индекс и искать.

    PS. Для академического интереса можно построить БД и данные так, что каждый из трёх вариантов будет выигрывать.
    Ответ написан
    Комментировать
  • Как правильно читать строки из большого файла?

    @Sumor
    Если планируется одновременная работа с данными, да ещё и их изменение, то лучше рассмотреть вопрос с БД.
    Есть много вариантов простых встроенных в программу движков, которые обеспечат вам корректную одновременную работу с данными.

    Если же хочется поиграться самому, то вот несколько моментов.
    Для одновременной работы из нескольких потоков файл нужно открывать с опциями FileShare.Read или FileShare.ReadWrite. Особенности работы с ними прочитаете сами.
    Удаление данных в начале файла приводит к его полному переписыванию операционной системой. То есть компьютер всё равно прочтёт 600 МБ, просто это будет не в вашем потоке.
    Достаточно быстро просто помечать "удалённые строки" какими-то спецсимволами. Например, вы можете выделить под это первый символ строки. А очистку начала файла производить раз в 100-200-300-500 "удалений".
    При этом, если вы планируете многопоточность, то нужно хорошо организовать их взаимодействие, а то получите дважды обработанные строки.
    Ответ написан
    Комментировать
  • Почему Шифр Виженера не работает для маленьких букв?

    @Sumor
    if(isupper(i))
           out += (i + key[j] - 2*'A') % 26 + 'A';
            else
          out += (i + key[j] - 2*'A') % 26 + 'a';

    В первом случае у вас i - большая буква, key[j] - большая буква, поэтому вы вычитаете две буквы A.
    В первом случае у вас i - маленькая буква, key[j] - большая буква, а вы продолжаете вычитать две буквы A.
    Правильнее чуть сгруппировать, чтобы было понятно зачем вы отнимаете:
    out += ((i - 'A') + (key[j] - 'A')) % 26 + 'A';
    И тогда сразу станет видно, что в случае с маленькой буквой нужно:
    out += ((i - 'a') + (key[j] - 'A')) % 26 + 'a';

    NB: i - плохое имя для переменной типа char. Когда программист видит i он подразумевает цикловую числовую переменную.
    Ответ написан
    Комментировать
  • Delphi7 - ошибка variable required при использовании CreateThread - как исправить?

    @Sumor
    Процедура Execute1 должна быть вне класса, без параметров, и расположена перед использованием в CreateThread (или нужно использовать forward).
    Ответ написан
    2 комментария
  • Как вернуть значение из функции?

    @Sumor
    Лучше так:
    class Arrays<T>
        { 
            public T GetValue(int k)
            {
                if (k < 0 || k > array.Length)
                    throw new IndexOutOfRanfeException();
                return (array[k]);            
            }

    Хуже так:
    class Arrays<T> where T : class
        { 
            public T GetValue(int k)
            {
                if (k < 0 || k > array.Length)
                    return null;
                return (array[k]);            
            }

    Ещё хуже так:
    class Arrays<T> 
        { 
            public T GetValue(int k)
            {
                if (k < 0 || k > array.Length)
                    return default(T);
                return (array[k]);            
            }
    Ответ написан
    Комментировать
  • Как отобразить модель видеокарты?

    @Sumor
    Через WMI, примерно так:
    ManagementObjectSearcher searcher 
         = new ManagementObjectSearcher("SELECT * FROM Win32_DisplayConfiguration");
    // или new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
        string graphicsCard = string.Empty;
        foreach (ManagementObject mo in searcher.Get())
        {
            foreach (PropertyData property in mo.Properties)
            {
               if (property.Name == "Description")
               {
                   graphicsCard = property.Value.ToString();
               }
            }
        }

    В MSDN подробное описание свойств каждого из этих классов.
    Ответ написан
    Комментировать
  • Возможна ли утечка внешнего IP-адреса компьютера, находящегося в локальной сети?

    @Sumor
    google в своих запросах при поиске отсылает себе ваш локальный ip адрес, взятый js-скриптом.
    Ответ написан
    Комментировать
  • Как восстановить кодировку?

    @Sumor
    Символы отображаются в шестнадцатеричных кодах Win1251
    xC2xE5xEDxE5xF0xE0 это C2 E5 ED E5 F0 E0 это Венера
    Это значит, что в файле данные не испорчены преобразованиями. Просто их нужно прочитать в кодировке win1251.
    Вполне возможно, что если вы откроете файл с явным указанием кодировки win1251, например через notepad++, вы увидите правильные данные.
    Как их восстановить - пока неизвестно, так как вы не указали ни тип СУБД, ни как вы делали бекап.
    Ответ написан
  • Как создать фоновый процесс со своим названием?

    @Sumor
    Создаёте проект WinForms, удаляете главную форму (Form1.cs), открываете program.cs, удаляете всё из метода Main и пишете туда свой код, как минимум бесконечный цикл:
    public static void  Main()
    {
      while(true)
      {
        Thread.Sleep(100);
      }
    }

    Такое приложение будет висеть в диспетчере задач, но у него не будет окон.
    Для его создания просто нужно выполнить Process.Start("путь к exe");
    Ответ написан
    2 комментария
  • Как создать текстовый редактор в VisualStudio2017?

    @Sumor
    Прекрасная статья на Хабре о внутреннем устройстве текстовых редакторов:
    Текстовый редактор — это вам не высшая математика,...
    Ответ написан
    Комментировать
  • Парсинг html с помощью c# стандартных инструментов?

    @Sumor
    Если у вас правильный html с закрывающимися тегами, то можно попробовать через XDocument или XElement
    Условно, где-то так:
    var xEl = XElement.Parse("<div style=\"font-family: 'Courier New', Courier, monospace; font-weight: normal\">Hello word</div>");
    Console.WriteLine((string)xEl);

    Там же можно воспользоваться XPath. Где-то так:
    var xDoc = XDocument.Parse("<div><div class='c1'>c1</div><div class='c2'>c2</div><div class='c3'>c3</div></div>");
    
    string xPath = "//div[@class='c1']";
    
    foreach (var xElement in xDoc.XPathSelectElements(xPath))
    {
    	Console.WriteLine((string)xElement);
    }
    Ответ написан
    1 комментарий
  • C#. Как получить имя подпапки в реестре?

    @Sumor
    GetSubKeyNames возвратит имена всех подразделов. Выбираете нужный и отрываете.
    OpenSubKey может сразу открыть путь:
    Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop\PerMonitorSettings",true)
    Ответ написан
    Комментировать
  • Редактор формул?

    @Sumor
    Посмотрите редактор формул от Libre/Open office. Вставка -> Объект -> Формула
    Там можно и мышкой потыкать, и текстом забить формулу (LaTeX).
    Ответ написан
    Комментировать
  • Как парсить текст в CSV формате игнорируя запятые внутри кавычек и без сторонних библиотек?

    @Sumor
    По мотивам ответа mefutu
    Примерное решение на конечном автомате:
    using System;
    using System.Text;
    using System.Collections.Generic;
    					
    public class Program
    {
    	public static void Main()
    	{
    		Console.WriteLine(string.Join("|", Parse("Мама,\"мыла, блин\", раму,\"мама, мыла \"\"раму\"\"\",конец")));
    	}
    	
    	public enum StateEnum{Start, StartQuot, Inline, InlineQuot}
    	
    	public static IEnumerable<string> Parse(string str)
    	{
    		var state = StateEnum.Start;
    		var sb = new StringBuilder();
    		foreach(var ch in str)
    		{
    			switch(ch)
    			{
    				case '"':
    					switch(state)
    					{
    						case StateEnum.Start:
    							state = StateEnum.StartQuot;
    							continue;
    						case StateEnum.StartQuot:
    						case StateEnum.InlineQuot:
    							state = StateEnum.Inline;
    							sb.Append('"');
    							continue;
    						case StateEnum.Inline:
    							state = StateEnum.InlineQuot;
    							continue;
    					}
    					break;
    				case ',':
    					switch(state)
    					{
    						case StateEnum.Start:
    						case StateEnum.InlineQuot:
    							yield return sb.ToString();
    							sb.Clear();				
    							state = StateEnum.Start;
    							continue;
    						case StateEnum.StartQuot:
    						case StateEnum.Inline:
    							sb.Append(',');
    							state = StateEnum.Inline;
    							continue;						
    					}
    					goto default;
    				default:
    					sb.Append(ch);
    					break;
    			}
    		}
    		yield return sb.ToString();
    	}
    }
    Ответ написан
    Комментировать
  • Написать программу, считающую сумму ряда с погрешностью EPS?

    @Sumor
    Очевидно, что при x = 2*PI ряд расходится.
    Скорее всего, можно доказать, что он расходится при любых x, возможно кроме каких-то особых точек.

    Например, если x = 2*PI/q, где q - любое рациональное число, q=m/n, где m - целое,n - натуральное. Тогда область значений функции cos(x*k) конечно, с мощностью не более n. Тогда можно взять минимальное значение из области значений и вынести его за скобки; тогда в скобках останется ряд, который снизу ограничивается гармоническим рядом, который расходится.

    Отсюда вам остаётся только считать частичную сумму ряда пока разность между элементами не станет меньше EPS. Кстати нахождение элементов, разность между которыми меньше EPS не гарантирует, что у вас не будет превышения этого порога в следующих слагаемых. Возможно имеет смысл EPS ограничивать соответствующие слагаемые гармонического ряда.
    Ответ написан
    2 комментария