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

    @abcd0x00
    Выводит первые буквы слов.
    #include <stdio.h>
    #include <ctype.h>
    
    int main(void)
    {
        int c, wassp;
    
        wassp = 1;
        while ((c = getchar()) != EOF) {
            if (isspace(c))
                wassp = 1;
            else if (wassp) {
                wassp = 0;
                putchar(c);
            }
        }
        putchar('\n');
        return 0;
    }


    Вывод
    [guest@localhost c]$ .ansi t.c -o t
    [guest@localhost c]$ echo "abcd efgh ijkl" | ./t
    aei
    [guest@localhost c]$
    Ответ написан
    Комментировать
  • Откуда узнавать о библиотеках?

    @abcd0x00
    Свежие черновики стандартов C
    www.open-std.org/JTC1/SC22/WG14

    Стандарт C89 (черновик)
    flash-gordon.me.uk/ansi.c.txt

    Прочитай английские страницы по C
    https://en.wikipedia.org/wiki/C_%28programming_lan...
    https://en.wikipedia.org/wiki/ANSI_C

    Это FAQ по вопросам из comp.lang.c
    c-faq.com

    Ещё можешь на канал #c зайти на irc.freenode.net, там обычно собирают всю последнюю информацию по языку.
    Ответ написан
    Комментировать
  • Как осуществить фукцию по добавлению элемета в конец списка?

    @abcd0x00
    >>> class UnorderedList:
    ...     def __init__(self):
    ...         self.head = None
    ...     
    ...     def append(self, item):
    ...         newnode = Node(item)
    ...         if self.head is None:
    ...             self.head = newnode
    ...             return
    ...         current = self.head
    ...         while True:
    ...             nextnode = current.getNext()
    ...             if nextnode is None:
    ...                 break
    ...             current = nextnode
    ...         current.setNext(newnode)
    ...     
    ...     def print(self):
    ...         current = self.head
    ...         while current is not None:
    ...             print(current.getData(), end=' ')
    ...             current = current.getNext()
    ...         print()
    ... 
    >>> class Node:
    ...     def __init__(self, data):
    ...         self.data = data
    ...         self.next = None
    ...     
    ...     def getData(self):
    ...         return self.data
    ...     
    ...     def getNext(self):
    ...         return self.next
    ...     
    ...     def setData(self, data):
    ...         self.data = data
    ...     
    ...     def setNext(self, node):
    ...         self.next = node
    ... 
    >>> lst = UnorderedList()
    >>> lst.append(1)
    >>> lst.append(2)
    >>> lst.append(3)
    >>> lst.print()
    1 2 3 
    >>>
    Ответ написан
  • Python: format str float - как прятать дробную часть, если она равна нулю?

    @abcd0x00
    Цену надо хранить в виде целого числа, иначе из-за округления она может становиться недостоверной.
    Ответ написан
    Комментировать
  • Как проверить, пустой ли стек?

    @abcd0x00
    В самом начале создаем 1 элемент стека "top" (он же пока что и является верхним) при помощи конструктора с полями key = NULL, deeperElement = NULL;

    Зачем он там нужен, если в нём ничего нет? Бывает, учат так в вузах, добавляя лишние ненужные элементы.
    Сделай стек и инициализируй его вершину нулевым указателем и по этому значению проверяй. Ни один указатель на объект не может быть равен нулевому указателю, поэтому это надёжное средство.
    Ответ написан
    Комментировать
  • Какой стиль комментирования кода правильнее?

    @abcd0x00
    Лучшие из всех те комментарии, которые не нужны. А вообще, да, пиши комментарии на каждый чих, чтобы научиться просто их писать и знать, что в них писать надо, а что не надо. И тогда ты сможешь прийти к тому уровню, когда у тебя сам код станет комментарием самого себя.
    Ответ написан
    Комментировать
  • Как умножить каждый ДЕВЯТЫЙ элемент списка на 2?

    @abcd0x00
    >>> lst = [1, 2, 3, 4, 5] * 10
    >>> 
    >>> out = [n * 2 if i % 9 == 0 else n
    ...        for i, n in enumerate(lst, 1)]
    >>> out
    [1, 2, 3, 4, 5, 1, 2, 3, 8, 5, 1, 2, 3, 4, 5, 1, 2, 6, 4, 5, 1, 2, 3, 4, 5, 1, 4, 3, 4, 5, 1, 2, 3, 4, 5, 2, 2, 3, 4, 5, 1, 2, 3, 4, 10, 1, 2, 3, 4, 5]
    >>>
    Ответ написан
    Комментировать
  • Как проигнорировать содержимое тегов?

    @abcd0x00
    Используй конечный автомат на три состояния: начало (S1), в середине без символа (S2) и в сердине с символом (S3).
    В S1 ты можешь принять только открывающую скобку и перейти в S2.
    В S2 ты можешь принять только простой символ и перейти в S3.
    В S3 ты можешь принимать простые символы и закрывающую скобку.
    Ответ написан
    Комментировать
  • Как назвать направление в программировании, занимающееся алгоритмами парсинга/разбора JSON, XML, др. языков?

    @abcd0x00
    Лексический анализ -> синтаксический анализ -> семантический анализ.

    Теория синтаксического анализа, перевода и компиляции.
    Альфред Ахо и Джеффри Ульман.
    Ответ написан
  • Указатель на указатель?

    @abcd0x00
    Вот в этой строке argv - это указатель на указатель на строку.
    int main(int argc, char *argv[])
    Аргументы программы представлены в виде массива указателей на строки, в котором последний указатель равен нулю (нулевому указателю).

    Бывает, что эту строку записывают и так
    int main(int argc, char **argv)
    Ошибки нет. Просто пишут скобки, чтобы напомнить, что там массив указателей, а не просто один указатель какой-то.

    И дальше что? Правильно, ты можешь делать argv++, переходя по массиву указателей вправо.

    А как сделать функцию, которая сама бы переставила argv?
    void func(char ***p) { (*p)++; }
    ...
        func(&argv);

    Пример
    #include <iostream>
    
    using namespace std;
    
    void func(char ***p)
    {
        (*p)++;
    }
    
    int main(int argc, char *argv[])
    {
        cout << argv << " " << *argv << endl;
        func(&argv);
        cout << argv << " " << ((*argv) ? *argv : "no") << endl;
        return 0;
    }

    Вывод
    [guest@localhost cpp]$ .iso++ t.cpp -o t
    [guest@localhost cpp]$ ./t
    0xbffc3114 ./t
    0xbffc3118 no
    [guest@localhost cpp]$ ./t a
    0xbf999594 ./t
    0xbf999598 a
    [guest@localhost cpp]$

    Ответ написан
    Комментировать
  • Почему char занимает 1 байт, а строка с одним символом - 2 байта?

    @abcd0x00
    Нуль-символ обозначает конец строки. То есть строку можно читать, посимвольно смещаясь вправо, пока не встретится конец. Таким образом её длину хранить не нужно.
    А теперь представь строку на миллиард символов. Для такой строки затраты на хранение её длины остаются теми же - один байт в котором записан нуль-символ.
    А вот если бы длина строки хранилась в переменной, то нужно было бы следить за размером этой переменной, потому что на слишком длинных строках числовое значение длины не помещалось бы в переменную.
    Ты думаешь, почему Дельфи такой медленный язык (программа The Bat! работает медленно), потому что там этого нет, из-за чего происходит множество лишних вычислений.
    Ответ написан
  • Какой путь для написания конкретной программы наиболее эффективен для новичка?

    @abcd0x00
    Кратко о программе которую я хочу написать. Это база данных собственных ошибок (в разных областях)

    Это описание похоже на excel-файл, не более.

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

    @abcd0x00
    statement - оператор
    operator - операция (+, -, *, /)
    expression - выражение
    assertion - утверждение
    condition - условие
    instruction - инструкция
    operation - операция (действие)

    while (cond) {
        f1();
        f2(); f3();
    }

    Оператор while с условием cond содержит в своём теле три оператора, каждый из которых является вызовом функции.
    Ответ написан
    Комментировать
  • Как и как Вы следите за новостями с сфере Ваших интересов и новостями в IT в целом?

    @abcd0x00
    1)
    У меня есть html-файл, который хранит ссылки на каждодневные полезные ресурсы.
    Это типа закладок в браузере, только лучше, потому что ты сам выбираешь внешний вид и оно одинаково выглядит в любом браузере любой версии.
    2)
    На рабочем столе прикреплены виджеты для сбора rss с разных разделов, которые обновляются сами.
    На один сайт с разными разделами нужен один виджет, а виджетов на рабочем столе можно сделать около десяти, а рабочих столов четыре.
    3)
    А для занятий и хранения информации есть множество разных org-файлов.
    Это похоже на гипертекст, когда один упорядоченный файл ссылается на другой упорядоченный файл. Файлы могут ссылаться друг на друга или в интернет или даже на свои собственные позиции в тексте, а ещё могут ссылаться на запуск программы (удобно книги читать в pdf). Внутри можно хранить данные в табличном виде, где таблицы динамически форматируются сами. Поэтому ссылки на программы можно хранить прямо в таблицах, которые сами форматируются.
    Картинка
    53a11eb3b5304fccbaaa39f44f9d633e.png
    Ответ написан
    Комментировать
  • Си. Как сделать функцию, умножающую число?

    @abcd0x00
    Тебе, конечно, предложили с указателем, но надо сделать без указателя.
    int func(int x)
    {
        return x / 10;
    }
    
    ...
    
        a = func(a);
    Ответ написан
    1 комментарий
  • Как сделать откат нескольких коммитов git в eclipse?

    @abcd0x00
    Сначала делаешь ветку или тег, чтобы удерживать эти неправильные коммиты, потом откатываешь master.
    git branch incorrect
    git reset HEAD~3
    Ответ написан
    Комментировать
  • Для чего в программировании на Си нужно и можно применять побитовое отрицание (тильду) для беззнаковых чисел?

    @abcd0x00
    Чаще всего побитовое отрицание используется для того, чтобы сохранить установленные биты нетронутыми при побитовом умножении.

    Например:
    У тебя есть переменная с битовыми флажками
    0101 0011
    Здесь 8 бит и в каждом записан флажок: 0 - флажка нет, 1 - флажок есть.

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

    Чтобы снять самый правый флажок, нужно
    0101 0011
    превратить в
    0101 0010

    А как это сделать?
    Нужно взять значение переменной, поменять его и результат сохранить обратно.
    Чтобы его поменять, мы делаем маску и побитово умножаем её на первоначальное значение (операция &).

    То есть нам нужно выполнить
    0101 0011
    &
    1111 1110
    Тогда самый правый флажок станет нулём, а остальные флажки останутся незатронутыми, так как побитовое умножение на 1 даёт то же самое, что там и было.

    И вот тут-то возникает главный вопрос: как сделать эту маску?
    Мы можем её записать напрямую или получить с помощью побитовых операций.

    Мы берём число 1, оно выглядит как
    0000 0001
    применяем к нему операцию побитового отрицания (операция ~)
    1111 1110
    и видим свою маску.
    Ответ написан
    Комментировать
  • Правильно ли составлена блок-схема программы, и что нужно изменить, чтобы она стала идеальной?

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

    @abcd0x00
    В приличной документации должно быть дано описание этого синтаксиса в начале. (Если её писал человек, знакомый с математикой.)
    Ответ написан
    Комментировать
  • Применение техник запоминания (мнемотехник) для освоения языков/фреймворков/библиотек/документации?

    @abcd0x00
    Есть ли результаты?

    Результаты есть и без этого. Главное правило: если приходится искать способы запоминания, значит ты слишком поверхностно проходишь материал, который требует глубокого погружения. Нет ничего хуже поверхностных знаний всего понемногу.
    Ответ написан
    Комментировать