Задать вопрос
Ответы пользователя по тегу Программирование
  • Как написать простейшую программу, парсящую информацию с сайта?

    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
    Ответ написан
    Комментировать
  • Чем опасна Blind SQL injection?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Blind означает лишь то, что результат инъекции не отображается на странице. При этом всё равно существуют методы, позволяющие при удаче авторизоваться не зная пароля, например такой конструкцией:
    http://my.site/login.php?name=user' OR TRUE OR '1'='1&password=

    Если запрос на авторизацию к базе выглядит так:
    "WHERE `user` = '".$_GET['name']}."' AND `pass` = '".md5($_GET['password'])."'"

    то он преобразуется в
    WHERE `user` = 'user' OR TRUE OR '1'='1' AND `pass` = 'd41d8cd98f00b204e9800998ecf8427e'

    результат вычисления будет TRUE для любого пользователя и пароля.
    Кроме того, можно разрушить саму базу, выдав команды DROP TABLE или DROP DATABASE
    Ответ написан
    Комментировать
  • Как отличается работа lea от mov в данном примере?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Давайте посмотрим, какой код будет сгенерирован в каждом из случаев:
    @_main	proc	near
    	push      ebp
    	mov       ebp,esp
    ; short int A[20];
    	add       esp,-40 
    	push      ebx
    ; asm lea eax, A;
     	lea	 eax, word ptr [ebp-40]
    ; return A[0];
    	movsx     eax,word ptr [ebp-40]

    @_main	proc	near
    	push      ebp
    	mov       ebp,esp
    ; short int *A = new short int[20];
    	add       esp,-4
    	push      ebx
    	push      40
    	call      @$bnwa$qui
    	pop       ecx
    	mov       dword ptr [ebp-4],eax
    ; mov eax, A;
     	mov	 eax, dword ptr [ebp-4]
    ; return A[0];
    	mov       eax,dword ptr [ebp-4]
    	movsx     eax,word ptr [eax]

    То есть, в первом случае переменная A - непосредственно массив, а во втором она хранит адрес массива.
    Ответ написан
    Комментировать