Задать вопрос
Ответы пользователя по тегу Программирование
  • Взлом шифра Вернама(одноразовый блокнот). Как сделать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Правильно закодированное шифром Вернама (длина гаммы не меньше длины сообщения; гамма получена случайным, а не псевдослучайным образом; гамма используется только один раз) сообщение не декодируется в принципе, доказано математически. Этот шифр считается самым безопасным в криптографии.
    Подумайте сами, из одного исходного сообщения "АААААААААААААААА" применением разных гамм можно получить и "Добро пожаловать!" и "Вход воспрещён!!!".
    Ответ написан
    3 комментария
  • Как найти равноудалённые точки на кривой Безье, или эллипсе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А что значит "равноудалённо"? Равное декартово расстояние между точками или равная длина дуги кривой?
    Для эллипса задача аналитически не решается, поскольку решение содержит эллиптический интеграл, не берущийся в общем виде.
    Можно преобразовать эллипс в набор точек по Брезенхему, сохраняя кроме координат расстояние до предыдущей точки (сдвиг только по X или Y даёт 1, одновременный сдвиг даёт sqrt(2)) и просуммировать расстояния, получив длину приближённой линии. Затем делим эту длину на нужное количество частей, получая шаг по дуге и от стартовой точки суммируем расстояния до получения нужного шага.
    Ответ написан
    1 комментарий
  • Как написать простейшую программу, парсящую информацию с сайта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А зачем изобретать велосипед? Посмотрите, например, сюда.
    Ответ написан
  • Как посчитать словарь текста?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Сортировка - практически то же бинарное дерево, так что проще за один проход.
    Ну или добавить корзинную сортировку, растить несколько деревьев, разделяя их по одной-двум первым буквам слова.
    А может лучше и не бинарное дерево. Если алфавит заранее известен и ограничен (скажем, N символов), то в каждом узле дерева делать разделение на N ветвей, беря в качестве индекса порядковый номер символа в алфавите.
    Ответ написан
    Комментировать
  • Какой алгоритм использовать для задачи?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Задача сводится к разбиению исходного множества грузов на группы, суммарное время доставки которых не превосходит 2:58, но максимально близко к этой величине.
    Точное решение - перебор всех вариантов - на таком количестве грузов неприменим.
    Один из методов приближённого решения - жадный алгоритм. Рассортируем грузы по убыванию времени доставки. Заведём (1000/(178/30)) = 169 ячеек и для каждого груза из отсортированного списка будем просматривать ячейки начиная с первой на возможность добавления в неё груза с учётом ограничений.
    Ответ написан
    Комментировать
  • Как сделать интерпретатор Ook! в Python 3?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Это Вы адресом ошиблись, попробуйте на Фрилансим сходить.
    Ответ написан
  • Как создать почтовый сервер на С#?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    С изучения протоколов SMTP, POP3 и IMAP.
    Ответ написан
  • Как двойной знак равенства влияет на строки в С++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Я понимаю, что Вы только начинаете изучать C++, но некоторые вещи лучше исправлять сразу, чем переучиваться потом.
    1. Вы задаёте массив явно, при этом если измените строку на более длинную и забудете поменять длину массива, то в лучшем случае компилятор выдаст ошибку, в худшем строка затрёт другие данные или обрежется по длине массива потеряв при этом завершающий '\0'.
    2. В цикле Вы сразу закладываете ограничение на длину строки (i<10), если забудете поменять - на более длинной строке получите длину 10 символов.
    3. Сравнивать с нулём необязательно (хотя и ошибки в этом нет). В С++ есть неявное приведение типов, для логических операций 0 и NULL рассматриваются как FALSE, всё остальное как TRUE, так что if (x == 0) эквивалентно if (x). Выбор варианта зависит от самого программиста или стиля, принятого в команде разработчиков.
    4. Небольшой трюк - сравнение вида (0 == x) позволит избежать ошибки при невнимательности, когда вместо (x == 0) оказывается (x = 0).
    5. Освойте пост- и пре- инкремент/декремент. Операции x++ и x-- увеличивают и уменьшают число на 1 (кроме указателей), результат - значение x до изменения. Операции ++x и --x также увеличивают и уменьшают число на 1, но их результат - значение x после изменения. Для указателей эта операция сдвигает значение на следующий/предыдущий элемент (то есть для int *p операция p++ эквивалентна p = p+sizeof(int)).
    char *str = "Привет!";
    int len = -1;
    while (str[++len]);
    printf("Длина строки '%s' равна %d\n", str, len);
    Ответ написан
    Комментировать
  • Определить время соприкосновения облаков - в чем ошибка?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Расстояние между центрами:
    d = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
    Момент соприкосновения:
    r1+v1*t+r2+v2*t = d
    Отсюда:
    t = (d-r1-r2)/(v1+v2)
    Подставляем данные, получаем
    d = 45; t = 41/6 = 6.8(3)
    И не надо никакой графики.
    Ответ написан
  • Как решить проблему с ListBox в C#?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Выносить цикл проверки в отдельный поток.
    Ответ написан
    Комментировать
  • Как решить данную задачу?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Удалять надо по кругу, то есть для {1, 2, 3, 4, 5}
    Пропускаем первого, удаляем второго - {1, 3, 4, 5}
    Пропускаем следующего (3), удаляем (4) - {1, 3, 5}
    Пропускаем следующего (5), переходим на следующий круг, удаляем (1) - {3, 5}
    Пропускаем следующего (3), удаляем (5) - {3}
    Ответ написан
    Комментировать
  • На чем можно писать программы под Windows?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для начала определитесь, действительно ли нужно функциональное программирование. Если да, то C/C++/C#/Delphi и прочие императивные языки не подойдут.
    Ответ написан
    Комментировать
  • Вопрос выбора специализации: *nix админ vs Windows админ?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А почему vs? Как правило в небольших компаниях админу приходится знать и то, и другое. Часть задач эффективнее реализуется на WinServer, часть на *NIX.
    Ответ написан
    7 комментариев
  • Как посчитать количество повторяющихся букв (отрезков) в наборе слов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Угу. Туда же попадут "автор", "автохтон", "автобиография", "автомат"... А уж слова с приставками... По хорошему, надо разделять слова на приставку, корень (корни), суффикс и окончание, для чего желательно знать, как минимум роль слова в предложении (и то может не помочь, попробуйте разобрать "Косил косой косой косой" - да, тот самый заяц на поляне, да ещё и коса кривая.
    Но если так хочется - строите дерево, где каждый уровень - следующая буква слова, а в узлах и листьях стоят счётчики количества слов. Для слов "автомобиль", "авто" и "автострада" получаем:
    .                   +-м(1)-о(1)-б(1)-и(1)-л(1)-ь(1)
    .а(3)-в(3)-т(3)-о(3)+
    .                   +-с(1)-т(1)-р(1)-а(1)-д(1)-а(1)
    Затем обходим дерево, там где сумма счётчиков в дочерних узлах не равна счётчику в родительском - заканчивается слово, а разность между суммами даёт количество этих слов в тексте.
    Ответ написан
    Комментировать
  • Как получить элемент символьного массива в ассемблере?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вопрос на засыпку - а не связаны ли между собой регистры AL, AH и EAX?
    Ответ написан
  • Как вычислить интеграл методом трапеции (С++ and scilab)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Мда... С точностью Вы точно не разобрались. Надо добавить ещё один внешний цикл, в котором количество шагов разбиения n будет увеличиваться до тех пор, пока изменение значения интеграла между предыдущей и текущей итерациями цикла не станет меньше заданной точности.
    n = 2;
    I = (f(a)+f(b))/2*(b-a);
    do {
        Iprev = I;
        // здесь считаем интеграл I при разбиении на n отрезков
        n++;
    } while (abs(Iprev-I) > precision);
    Ответ написан
  • Java - тормозит, а Cи - нет?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Программы на C/C++ работают быстрее за счёт отказа от контроля всего и вся (расхода памяти, переполнения стека, корректности указателей), за счёт явной и жёсткой типизации переменных, за счёт меньшего количества обёрток вокруг типов данных. Но это позволяет программисту выстрелить себе в ногу таким количеством способов, которые в Java и не снились.
    Ответ написан
    8 комментариев
  • Как вычислить погрешность, при которой два числа с плавающей точкой можно считать равными?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если речь идёт об абстрактной математике, то надо рассматривать представление плавающего типа (float, double, long double) в конкретной архитектуре. В большинстве случаев используется IEEE 754-1985. Скажем, для float32 в нормализованной форме точность - то есть единица младшего разряда мантиссы - в зависимости от экспоненты может быть от 1.175494351×10−38 до 3.402823466×1038.

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • ANSI C - Как подключиться к MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Попробуйте подключить <mysql/mysql.h>. Если файла нет, то поставьте пакет libmysqlclient-dev
    Ответ написан
    Комментировать