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

    @abcd0x00
    Сначала полное словесное описание.
    Потом блок-схема по словесному описанию.
    Потом псевдокод по блок-схеме.
    Потом код по псевдокоду.

    Все этапы делаешь на бумаге или чём там, пока они не станут выполняться в воображении. То есть, если пишешь псевдокод, то в голове уже должна быть ясная блок-схема. Если рисуешь блок-схему, то в голове должно быть полное словесное описание алгоритма. Если же пишешь код сразу, то в голове должно быть всё.

    А сейчас твой псевдокод ничего из себя не представляет, поэтому и код по нему получается никакой.
    Ответ написан
    Комментировать
  • Можно ли писать на чистом Си под Qt? Или для этого нужно именно Си++?

    @abcd0x00
    Из C++ там нужно не много - классы и пространства имён. Всё остальное делается там средствами самого Qt. Так что какого-то глубокого знания C++, которое используется в других cpp-шных программах, там не требуется. Можешь писать по-сишному, просто привязывая код к окнам через cpp-шные средства.
    Ответ написан
    Комментировать
  • Как применять перечисляемый тип enum?

    @abcd0x00
    Для начала тебе надо выкинуть тот материал, в котором ты прочитал вот это:
    void main(void) {

    Когда найдёшь материал, где написано:
    int main(void) {
    тогда и узнаешь, что такое enum и так далее.

    Просто если ты учишься по хреновым материалам, то ты и не можешь ничего узнать, потому что автор материалов сам ничего не знает.

    Есть хорошая книга, главная в C мире
    https://en.wikipedia.org/wiki/The_C_Programming_La...
    250 страниц, в которых ты найдёшь всё, что надо.
    Ответ написан
    2 комментария
  • В чем суть maillist'ов и по какому принципу они работают?

    @abcd0x00
    В чем суть? Это же довольно нечитаемо получается.

    Ты просто пропустил целую эпоху. Раньше вместо форумов (форумов не было вообще) были такие почтовые места. Они были двух типов: просто списки рассылки и списки рассылки-эхи. Просто список рассылки - это когда ты подписался на адрес и тебе приходят какие-то новости, например, и ты их просто читаешь и больше ничего не происходит. А списки рассылки-эхи (или просто эхи), это когда толпа подписывается на него и общается друг с другом через этот адрес.

    Суть сводилась к следующему: ты подписываешься на почтовый адрес и становишься участником почтовой рассылки. Потом ты посылаешь письмо на определённый адрес и оно копируется и рассылается всем участникам рассылки. Допустим, если их 1000 человек, то они все получают твоё письмо. И потом они начинают тебе отвечать точно так же, посылая ответ на этот широковещательный адрес. Ты просто принимаешь почту с этого адреса и она у тебя складывается в треды. Дальше ты эти треды разворачиваешь и читаешь - что ты спрашивал и что тебе наотвечали там и что они между собой там наотвечали ещё. А тред (или цепочка) - это один спросил что-то, ему кто-то на это ответил, а потом на этот ответ ответил ещё кто-то, а потом на его ответ ответил ещё кто-то. В каждом письме сохраняется специальный заголовок "ответ тому-то". Так почтовая программа определяет, из каких писем образуется тред. И в результате у тебя в почтовой программе в папке этого списка рассылки лежат треды, где каждый тред - это такой разговор между кем-то и кем-то (может быть два человека, может быть три человека, а может и десять).

    Так что вот эти рассылки - это такой привет из прошлого. Сейчас мы с тобой общаемся через web-приложение, а раньше их не было, все общались через почту. Поэтому сегодня вся движуха идёт в вебе, а из почты все ушли. А ещё раньше, до почты, были группы новостей.
    Ответ написан
    1 комментарий
  • Pure C. Где исходные коды стандартной библиотеки Си?

    @abcd0x00
    Неужели СТАНДАРТНАЯ БИБЛИОТЕКА (которая почти часть языка) это какой-то секрет?

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

    @abcd0x00
    Сначала проходишь всё один раз и подробно. При прохождении каждого раздела делаешь файл с заметками для него. После прохождения раздела читаешь этот файл с заметками снова.

    Ещё сделай себе html-страницу, где помещай ссылки на разделы, на стандарты, на страницы с материалом.
    Через эту страницу входи каждый раз, чтобы продолжить обучение. На этой же странице отмечай то, что ты уже прошёл.

    Потом делаешь одну html-страницу для всех своих html-страниц. (Прямо на диске переходишь между ними, никаких интернетов не надо.)

    Подробности

    Почему надо проходить полностью? Потому что если ты не пройдёшь все нюансы, ты не будешь знать их. А когда ты не знаешь нюансы, ты начинаешь писать всякую лишнюю хрень. Очень часто при открытии файла на чтение в питоне пишут 'r'. А почему? А потому что не читали полное описание open(), в котором написано, что по умолчанию там всегда 'r'. А когда точно не знают, начинают писать на всякий случай. То же самое касается кодировки в третьем питоне. Вот человек не знает, что там кодировку по умолчанию поменяли, и пишет там всегда "#encoding: utf-8", и удалить боится, потому что не знает, можно ли удалить. А чтобы знать, надо читать PEP, а он не читал.
    Ответ написан
    Комментировать
  • Разработчик языка программирования создает только стандарт?

    @abcd0x00
    Язык ведь определяет его транслятор?

    Язык - это множество цепочек над алфавитом. Чтобы задать язык, нужно составить грамматику, порождающую все цепочки языка.
    Транслятор - это программа, переводящая цепочку одного языка над одним алфавитом в цепочку другого языка над другим алфавитом. При этом цепочки должны быть семантически эквивалентными.

    Поэтому язык представляет из себя грамматику, которую составляют и для которой реализуют транслятор.

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

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

    @abcd0x00
    По стандарту C89 (и до C11), при сдвиге вправо знакового отрицательного числа результат зависит от реализации.


    3.3.7 Bitwise shift operators

    ...

    The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1
    has an unsigned type or if E1 has a signed type and a nonnegative
    value, the value of the result is the integral part of the quotient of
    E1 divided by the quantity, 2 raised to the power E2 . If E1 has a
    signed type and a negative value, the resulting value is
    implementation-defined.


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

    @abcd0x00
    >>> import collections
    >>> 
    >>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> n = 5
    >>> 
    >>> deq = collections.deque(enumerate(lst))
    >>> 
    >>> while len(deq) > 1:
    ...     deq.rotate(-n)
    ...     print(deq.pop())
    ... 
    (4, 5)
    (0, 1)
    (6, 7)
    (3, 4)
    (2, 3)
    (5, 6)
    (8, 9)
    (1, 2)
    >>> print(deq)
    deque([(7, 8)])
    >>>
    Ответ написан
    Комментировать
  • Верить ли Макконнелу?

    @abcd0x00
    Он дело говорит или забить?

    1)
    Лучший комментарий - тот, без которого и так всё понятно.
    В комментариях обычно описывается причина, по которой ты пишешь тот или иной фрагмент. Если ты собрался описывать то, как оно работает, то надо не комментарий писать, а код переписать так, чтобы комментарий вообще не нужен был (ниндзя-комментарий).

    2)
    Форматирование - это важная вещь до самых деталей. Есть автоматическое форматирование. Но какое бы оно ни было, ручное или автоматическое, точное и определённое форматирование нужно для того, чтобы сократить время чтения кода.
    Подробности

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

    @abcd0x00
    Получается тогда нам нужно в начале размер файла прочитать, а потом уже все содержимое или как оно все происходит?

    Размер файла записан на диске (в файловой системе). Сам файл хранится в виде кусочков в разных местах диска. Кусочки связаны друг с другом по очереди (в каждом кусочке записано, где следующий кусочек).

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

    Чтобы прочитать файл, выделяется небольшой буфер, в который загружается часть файла. Если ты его прочитал, то в него же загружается следующая часть файла. Ты читаешь файл как бы через окно в виде буфера, которое скользит по файлу вперёд.

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

    @abcd0x00

    Как правильно следить за ходом выполнения работы и поддерживать запуск с предыдущего удачно выполненного этапа, в случае некорректно завершения текущего?

    У тебя прямо в скриптах должно быть завершение с кодом. Если ошибок не было, нужно завершать скрипт через exit 0. Если произошла ошибка, нужно завершать скрипт через exit 1.
    Когда у тебя скрипты так сделаны, ты можешь проверять их код завершения.

    А потом ты можешь написать скрипт со строками
    { script1.sh && echo "script1 - ok"; } || echo "script1 - fail"
    { script2.sh && echo "script2 - ok"; } || echo "script2 - fail"
    { script3.sh && echo "script3 - ok"; } || echo "script3 - fail"


    Пример
    { echo x1 && echo "script1 - ok"; } || echo "script1 - fail"
    { cat x && echo "script2 - ok"; } || echo "script2 - fail"
    { echo x2 && echo "script3 - ok"; } || echo "script3 - fail"
    { touch /x && echo "script4 - ok"; } || echo "script4 - fail"


    [guest@localhost ~]$ { echo x1 && echo "script1 - ok"; } || echo "script1 - fail"
    x1
    script1 - ok
    [guest@localhost ~]$ { cat x && echo "script2 - ok"; } || echo "script2 - fail"
    cat: x: Нет такого файла или каталога
    script2 - fail
    [guest@localhost ~]$ { echo x2 && echo "script3 - ok"; } || echo "script3 - fail"
    x2
    script3 - ok
    [guest@localhost ~]$ { touch /x && echo "script4 - ok"; } || echo "script4 - fail"
    touch: невозможно выполнить touch для «/x»: Отказано в доступе
    script4 - fail
    [guest@localhost ~]$



    Можно сделать и так
    { script1.sh && echo "script1 - ok"; } || { echo "script1 - fail"; exit 1; }
    { script2.sh && echo "script2 - ok"; } || { echo "script2 - fail"; exit 1; }

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

    @abcd0x00
    Проходим циклом по оси X, и в каждой клетке (по оси Х) проверяем все ячейки по оси У (снизу вверх).

    Представь себе спаянную фигуру в виде лестницы из квадратов. При этом она спаяна целиком. И как ты её будешь проверять?

    Тут нужно саму фигуру делать объектом, который состоит из квадратов. А каждый квадрат должен знать, можно ли его сдвинуть в любую сторону. Тогда, чтобы сдвинуть всю фигуру, она должна будет просто опросить все свои квадраты.
    Ответ написан
    Комментировать
  • Как bash terminal парсит комманду и какие параметры ей передать?

    @abcd0x00
    Мне интересен сам алгоритм как BASH сохраняет алиасы, парсит параметры и т.д чтобы воспроизвести что-то подобное на PHP.

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

    @abcd0x00
    Для Firefox (в Linux)
    [guest@localhost tmp]$ cat urls 
    http://www.yandex.ru
    http://www.toster.ru
    [guest@localhost tmp]$ firefox `cat urls`
    [guest@localhost tmp]$
    Ответ написан
    Комментировать
  • С чего начать изучение MySQL для веб-проекта?

    @abcd0x00
    Ответ написан
    Комментировать
  • Как изучить язык приближенно к 100%?

    @abcd0x00
    Думаю, что лучшим способом будет просто перелопатить всю документацию от А до Я и забить на другие ресурсы. Это правильные мысли?

    Если можешь понимать документацию, читай документацию. Но в книгах часто есть приёмы, которые не описаны в документации, которые исходят из других областей. Например, часто бывают задачки с замаскированными машинами Тьюринга или конечными автоматами.

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

    @abcd0x00
    Как создаются линии?

    https://ru.wikipedia.org/wiki/European_Article_Number
    https://ru.wikipedia.org/wiki/Universal_Product_Code

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


    Много нюансов там, связанных с аппаратурой и человеческим фактором. Поэтому логика кодирования такая, немного странноватая.
    Ответ написан
    Комментировать
  • Как из html вытащить url по определенной маске?

    @abcd0x00
    Нужно выбрать все ссылки, а потом из них выбрать те, которые удовлетворяют критерию. Именно так, по частям, потому что как источник ссылок может поменяться независимо от критерия, так и критерий выбора может поменяться независимо от источника.
    Ответ написан
    Комментировать
  • Создание программы по преобразованию текста в изображение. В каком направлении искать решение?

    @abcd0x00
    Обычно цифры-картинки записываются в ряд в изображении, а программа просто вырезает из этого ряда нужную.

    Есть начальные навыки программирования (Делфи, лет 10 назад), и интерес создать штуку самому.

    Можешь использовать C++/Qt. Для создания оконных приложений - Qt Creator.
    Ответ написан
    Комментировать