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

    @abcd0x00
    Или хотя бы расскажите, что он делает.

    1. Он добавляет 8-битное значение к 32-битному значению.
    2. Затем берёт у этого 32-битного значения 13 бит слева и переставляет их направо.
    3. Потом из исходного 32-битного значения вычитается полученное 32-битное значение.
    4. Потом всё повторяется, пока есть 8-битные значения.

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

    @abcd0x00
    import urllib.request
    
    url = 'http://www.ex.ua'
    
    data = urllib.request.urlopen(url)
    enc = data.info().get_content_charset() or 'latin1'
    doc = data.read().decode(enc)
    print(doc)
    Ответ написан
    2 комментария
  • Программист может быть только в одном яп профи или в нескольких?

    @abcd0x00
    Человек может стать профи только в одном яп или может быть профи сразу в нескольких яп ?

    Один язык нужно выучить полностью, остальные языки наматываются на знания из него. Если что-то не выучишь, будешь должен учить это всё равно в каком-нибудь другом языке.
    Ответ написан
    Комментировать
  • Кто нибудь знает хороший учебник по Python-Fu?

    @abcd0x00
    Примеры скриптов
    registry.gimp.org/node/28124

    Обычно переводишь со схемы на питон. Если не знаешь чего-то, просто смотришь через dir() список имён в объекте.
    Ответ написан
    1 комментарий
  • Как лучше организовать электронную библиотеку?

    @abcd0x00
    Форматы совершенно разные, от pdf и djvu до fb2, т.е. естественно будет база данных с описанием и т.п.

    Форматы не имеют значения, так как название формата каждой книги будет храниться в базе данных.
    Там у тебя как бы получается две таблицы: одна описывает книгу, другая - адрес и способ хранения. И эти две таблицы связаны в одну базу данных по общему полю.
    Ответ написан
    Комментировать
  • Нужно ли тратить кучу времени на задачу, которую знаешь как можно решить, но не до конца получается самому реализовать решение?

    @abcd0x00
    Для меня проблема заключается в том, что я не знаю - правильно ли так вообще делать?


    Этим ты ведёшь себя к состоянию "я всё, всё, всё знаю, только вот написать не могу ничего". И таких "программистов" в мире - вагон и маленькая тележка. Они ничего не делают, только пользуются чужими программами.
    Ответ написан
    Комментировать
  • Как происходит смена головы списка при вставке?

    @abcd0x00
    до этой строчки node указывает на голову

    Он указывает не на голову, а на только что выделенный через new фрагмент памяти.
    А вот уже внутри этого фрагмента памяти есть указатель, который указывает на голову.
    Дальше они (новый узел и голова) становятся связанными и мы можем сделать новый узел головой.
    Доступ к прежней голове осуществляется через новую голову.
    Ответ написан
    Комментировать
  • Как развить аналитические способности?

    @abcd0x00
    Мне в детстве подарили книжку "Твоё свободное время", она интересная, там собраны головоломки.
    rutracker.org/forum/viewtopic.php?t=1286275
    Ответ написан
    Комментировать
  • Есть ли общепринятый Code Style для Си?

    @abcd0x00
    существует ли что-то вроде этого для Си?

    Возьми книжку K&R2 и тот стиль, который там использован. Когда будешь встречать в редакторах "установить стиль K&R" - это будет он.

    Можешь этого мужика читануть
    stolyarov.info/books/codestyle
    но он не особо шарит.
    Ответ написан
    Комментировать
  • Алгоритм парсинга страниц по списку ключевых слов?

    @abcd0x00
    Нагруженное множество надо сделать.
    Потом просто получаешь последовательность всех слов страницы, проходишь по ним, сравнивая с шаблоном, и инкрементируешь счётчик во множестве для соответствующего ключа.

    Вот тебе иллюстрация на питоне
    >>> words = ['a', 'b', 'c', 'a', 'b', 'b']
    >>> 
    >>> d = {}
    >>> for i in words:
    ...     if i in d:
    ...         d[i] += 1
    ...     else:
    ...         d[i] = 1
    ... 
    >>> print(d)
    {'b': 3, 'c': 1, 'a': 2}
    >>>
    Ответ написан
    Комментировать
  • Для чего программисту математика?

    @abcd0x00
    Многое не сможешь узнать, потому что нужна база. А знать не будешь такие вещи, как "устройство jpeg-файла", "устройство mp3-файла", "устройство сертификата в браузере" - то есть то, что тебя окружает.
    Ну, и кто-то будет сидеть и программу писать, а кто-то будет сидеть и ждать, когда ему напишут программу.
    Ответ написан
    Комментировать
  • Как убрать отступ между ответом и фразой(x=_1.0)?

    @abcd0x00
    >>> x, y1, y2 = 1.0, -0.99, 0.48
    >>> 
    >>> print('x={} y1={:.2f} y2={:.2f}'.format(x, y1, y2))
    x=1.0 y1=-0.99 y2=0.48
    >>>
    Ответ написан
    Комментировать
  • Как вытащить в C из переменной первый знак, второй знак итд и из какого типа переменной это удобнее всего делать?

    @abcd0x00
    #include <stdio.h>
    
    int main(void)
    {
        char s[4] = "1234";
    
        printf("%d\n", (s[0] - '0') + (s[1] - '0'));
        printf("%d\n", (s[2] - '0') + (s[3] - '0'));
        return 0;
    }


    Результат
    [guest@localhost c]$ .ansi t.c -o t
    [guest@localhost c]$ ./t
    3
    7
    [guest@localhost c]$
    Ответ написан
    Комментировать
  • Как найти последний нулевой элемент в массиве?

    @abcd0x00
    Надо искать с конца. (После последнего нулевого может вообще не быть элементов.)

    for (i=30;i!=0;i--)

    Если в массиве 30 элементов, то
    for (i = 29; i >= 0; i--)

    Нулевой индекс рассматриваем потому, что все элементы массива могут быть ненулевыми.
    Ответ написан
    Комментировать
  • Каким алгоритмом можно перебрать десятичные числа с повторениями?

    @abcd0x00
    Можно сделать функцию
    int eqdigits(int n);
    и подать в неё числа по порядку.
    Ответ написан
    Комментировать
  • С чего начать изучение написания TDD - тестов?

    @abcd0x00
    TDD на первый взгляд выглядит хорошо, но потом начинается свистопляска.

    С одной стороны, код, находящийся под контролем тестов, выглядит очень красиво, к нему не прикопаешься, потому что тесты его как бы "зажимают" в правильный вид. Есть такое выражение "пуленепробиваемый код". Когда такого кода много, смотреть на него - одно удовольствие.

    С другой стороны, я как-то около месяца просидел, обкладывая тестами будущую программу, в которой не было ничего, кроме воздуха. А потом просто потерял мотивацию и программу уже писать не хотелось.

    Это выглядит так:
    Однажды ты хочешь написать классную программу, которая делает это, это и это. Ты, находясь под впечатлением от её возможностей (в воображении), продумываешь все её компомненты в голове до мельчайших подробностей и готов броситься в бой. Уже видишь эти данные, полученные из неё в результате, и уже лазишь по ним, применяя там-то и там-то.

    Но надо соблюсти правила TDD и ты утопаешь в этих покрытиях каждой шпуньки тестами со всех сторон. В результате, у тебя множество тестов, длинная история в репозитории из их создания и ноль программы.
    А ведь нужна именно программа, а не тесты к ней.

    Поэтому сейчас делаю программу вообще без тестов (прототип), чтобы проявить все подводные камни, а потом пишу тесты и уже новую программу. При этом всё это происходит под мотивацию, получаемую из данных (прототипа), ради которых вся эта программа и затевалась.

    Но это ещё не всё. Однажды наступает момент, когда программу надо не отрефакторить, а кардинально изменить. (А это самое важное - вовремя убрать какой-нибудь тупик, к которому всё идёт. Если этого не делать, программа будет представлять из себя конгломерат из затычек - и пример уже есть, десятой версии.) И становится просто жалко стирать тесты, которые к новой версии вообще не подходят.
    Ответ написан
  • Какая разница между C, C#, C++?

    @abcd0x00
    Какая разница между этими языками ?

    Язык C - это язык, которому 40 лет, на нём очень много программ написано, поэтому сталкиваться с ним в мире компьютеров ты будешь постоянно.

    Язык C++ - это язык, созданный лишь с одной целью, - прославить своего автора так же, как C прославил своего. Поэтому он всё время противопоставляется C, при этом явно до него не дотягивая.
    Тут тебе и каша-малаша в приоритетах операций, и запутанный синтаксис (иногда чрезмерно удлинённый или в стиле масла масляного), множество введённых ключевых слов, убивающих любой язык, и вечная недоделанность встроенных типов данных (стек или очередь, которые обязательно надо дописывать, прежде чем пользоваться).
    Но ему тоже много лет (лет на 15 он младше C), да и производительность сохранилась на сишном уровне, поэтому кода тоже много и есть многие вещи, которых нет для C.

    Язык C# - это язык, созданный лишь с двумя целями, - выпнуть Java с рынка и максимально пришпилить программистов к Windows, чтобы они никуда не могли с неё уйти и были вынуждены ставить сегодняшние индусские обновления для десятки.
    Сам язык хороший, в нём всё есть, но его политическая направленность заставляет софт работать для Microsoft, а они обычно бесплатно ничего не делают и целенаправленно создают проблемы из воздуха.

    Резюмируя вышесказанное, хорошо спроектированные языки - это C и C#, но C - минималистичный и удобный для подготовки к ассемблеру (а это тоже придётся узнать с вероятностью 100%), а C# - полон всех новшеств, но подходит для перехода на другой хороший язык.

    А программировать надо в Linux, там всё для этого есть.
    Ответ написан
    4 комментария
  • Есть ли какая-нибудь классическая литература про работу с памятью, на примере языка Си или С++?

    @abcd0x00
    K&R2
    https://en.wikipedia.org/wiki/The_C_Programming_La...

    Там в 8-ой главе описывается принцип работы функций выделения памяти, а потом ещё пишешь свой менеджер памяти.

    Память представлена связным списком блоков, от которых нарезаются кусочки при выделении и которые склеиваются в большие блоки при высвобождении. (Есть и другие менеджеры памяти типа питоновского.)
    Ответ написан
    Комментировать
  • Где найти эти Ваши "основы программирования"?

    @abcd0x00
    Так же я не знаю какой язык изучать.

    Изучай Python 3.x, он создавался как язык, похожий на псевдокод, поэтому там нет лишних заморочек с синтаксисом. К тому же он славится скоростью разработки, так как многие вещи на нём можно компактно выражать. И ещё у него документация написана доступным языком, так что многие сложные вещи легко воспринимаются.

    Я хочу писать свои личные приложения для своего андроидофона, я хочу писать свои личные десктоп программки, я хочу оптимизировать свою работу при помощи скриптов

    Почти все приложения - это такие айсберги, у которых видно лишь верхушку. Само ничего не пишется и из космоса не появляется. Чтобы писать окна, нужно знать, как они устроены, а устроены они непросто и по-разному. (Можно просто потратить целый день на закрытие окна и открытие нового.)

    Как происходит изучение программирования:
    1) Сначала ты просто приобщаешься. Покупаешь книжку какую-нибудь по языку и проходишь все примеры в ней. Так ты узнаёшь, как выглядит хороший код. (Чтобы потом отличать лажовые материалы от нормальных.)
    2) Потом ты изучаешь разные классические алгоритмы. Так ты узнаёшь, что существует что-то общее в устройстве разных алгоритмов.
    3) Потом ты находишь теорию алгоритмов. Так ты узнаёшь, что программа - это просто реализованный алгоритм. (Программу можно встраивать в программу.)
    4) Потом ты читаешь другие программы, выделяя их алгоритмы. Так ты перенимаешь распространённые способы построения алгоритмов.
    И вот после всего этого у тебя есть представление, как сделать большую программу.
    Большая программа - это объединение маленьких программ.
    Ответ написан
    Комментировать
  • Как вы используете git при разработке в одиночку?

    @abcd0x00
    Использую git по принципу master/devel. В master идут только крупные изменения вроде новых версий, которые помечаются тегами. В devel идут только принимаемые изменения (никаких ошибок). Для каждого нового процесса создаётся ветвь, которая вливается в devel, когда полностью завершена. А вот ветвь процесса может быть одна или ветвиться дальше.

    Зачем это нужно? Проектов много, каждому по несколько лет уже. Когда через год открываешь что-то, то не очень помнишь, какие там были нюансы, задумки. У меня бывало уже такое, что я открывал собственный код и никак не мог даже вспомнить, когда это я его писал.
    Ответ написан
    1 комментарий