| Наш сайт посвящен искусству программирования на одном из самых популярных и мощных языков. Значительное внимание уделено таким актуальным вопросам, как обработка данных, работа с битами и байтами, отладка программ, управление памятью, моделирование, рекурсия, а также темам, не часто встречающимся в литературе, но играющим важную роль при разработке коммерческих приложений. |
Пересмотренный язык С
Моделирование и контроллеры
Общее представление о конечных автоматах
Ошибка Шредингера (Schroedinbugs)
Кошмар программиста
Управление памятью
Рассматриваем функцию gets() как вредную
Отсутствие проверки возвращаемых значений
Проанализируйте требования памяти
Используйте буфер фиксированной длины
Выделяйте резерв на случай аварийной ситуации
Использование дискового пространства
Успешное выполнение функции calloc
Занимаемся контролем
Перепроектирование функции realloc
Непрямая рекурсия
Практическое применение рекурсии
Усовершенствованные методы
Индексная адресация
Смежные вопросы
Исправление кода программ
Обратимся к диагностике
Использование более одного компилятора
Выбор уровня предупреждений
Метод “сверху-вниз”
Поиск и исправление распространенных ошибок
СПРОСИ ДРУГА ИЛИ МЕДВЕЖОНКА ТЕДДИ
Программные средства отладки
Коммерческие отладчики
Макросы трассировки
Процесс отладки
Ошибка Мандельброта (Mandelbugs)
Другие битовые операторы
Битовые массивы (битовые карты)
Битовые поля
Хранение и извлечение данных
Цели и приложения
Текстовые и двоичные форматы
Вопросы структурирования
Вопросы разработки форматов
Текстовые файлы
Специфика различных платформ
Представление данных
Строковые данные
Двоичные файлы
Общие форматы
Величины, разделенные запятыми
Кооперативная и параллельная оптимизация
Некоторые новые величины эффективности
Клиент-сервер и параллелизм
Неявный параллелизм
Пользовательский интерфейс для медлительных алгоритмов
Корень зла – в преждевременной оптимизации
Легче сделать корректную программу быстрой, чем быструю программу корректной
Не выполняйте оптимизацию без учета переносимости
Позвольте делать это компилятору
Работа с датами
Ошибка тысячелетия: проблемы, связанные с датами
Представление величин в С
Представление целых величин
Использование величин без знака в битовых операциях
Битовый сдвиг
Войны стандартов программирования: причины и пути перемирия
Косметические исправления кода
Оператор break
Статические и глобальные объекты
Имена идентификаторов
Применение моделирования и контроллеров
Рассказ о Therac-25
Моделирование простого компьютера
Рекурсия
Что такое рекурсия
Как использовать рекурсию
Как не следует использовать рекурсию
О рекурсии подробнее
“Хвостовая рекурсия”
Исключение “хвостовой” рекурсии
Некоторые дополнительные стратегии оптимизации
Локальность ссылок
Использование плавающей точки
Строковые операции
Удаление хвоста рекурсии
Инвариантные вычисления цикла
Реализация стратегий оптимизации, или микрооптимизация
Алгоритмические стратегии оптимизации
Другие методы профайлинга
Графические профили
Профайлинг
Немного арифметики
Виртуальная память
Иерархия памяти и ее влияние на эффективность
Смысл перспективы
Важность измерений
С – быстродействующий язык
Не тратьте времени даром
Привлекательность оптимизации
Оптимизация
С против C++
Размеры целых типов
Поразрядное дополнение до единицы и до двух
Важность переносимости программ
Объявление
Организация данных
Простые операции над матрицами
Операции, которых следует избегать
Обращение матрицы
Поиск “нулевых” значений
Односвязные или двусвязные списки?
Восстановление связей
Память
Связь с элементами заголовочного списка
Односвязные или двусвязные списки?
Вставка новых измерений
Удаление узлов матрицы
Прохождение разреженной матрицы
Перемещение по строкам
Разреженная матрица
Это не просто массив другого типа
Метод доступа
Скорость доступа
Размерность
Почему данные могут быть разреженными
Что такое разреженные данные
Сложность кода
Когда используется разреженная матрица
Типы задач
Сгруппированные данные
Многосвязные узлы
Целесообразные операции
Параллельные операции над узлами
Мономиальные матрицы
Сортировка методом вставок
Сортировка методом Шелла
Быстрая сортировка
Недостатки метода быстрой сортировки
Сортировка методом Синглтона
Пирамидальная сортировка
Ускоренная восходящая поразрядная сортировка
Нисходящая поразрядная сортировка
Поразрядная сортировка произвольных типов данных
Опасности алгоритмов с линейной функцией времени
Недостатки сортировки методом двоичного слияния
Сортировка слиянием с делением на секции
Структура данных типа дерево
В каких случаях применяются деревья
Использование деревьев
Добавление и удаление элементов из отсортированной таблицы
Двоичные деревья
Упорядоченное рекурсивное прохождение
Анализ
Формирование двоичного дерева случайным образом
Передовые методы
Указатели на родительские узлы
Сбалансированные двоичные деревья
Классификация данных
Типы алгоритмов сортировки
Когда выполнять сортировку
Основы сортировки
Алгоритмы порядка 0(п2)
Сортировка методом выбора
Пузырьковая сортировка
Массивы
Массивы указателей
Массивы указателей на функции
Односвязные списки
Добавление элементов
Отыскание данных
Вырезание и вставка
Циклические списки
Прикладная библиотека работы с очередями
Очереди по приоритету
Дек автомобилей
Разнородные структуры и объектные деревья
Поиск по двоичному дереву
Анализ алгоритмов поиска
Двоичный поиск
Простые абстрактные структуры данных
Дополнительные тематические разделы
Скрещивание генов
Отбор
Вскрытие “черного ящика”
Параллелизм
Поиск эффективных генетических операторов
Разделение проблемной области
Использование метафор
Межплатформенная разработка: программирование коммуникационных средств
Сокеты
Что такое CGI
Основы CGI
Ошибки сложения и вычитания
Ошибка умножения
Переполнение, потеря значимости и деление на нуль
Чтение синтаксиса
Интуитивные правила обычного языка
Преобразование из формы польской нотации в оценочную функцию
Синтаксический анализ ошибочного ввода
Создание программных инструментальных средств
Интерфейс пользователя
Ошибкоустойчивость
Переносимость
Библиотеки кодов
Преобразование из EBCDIC в ASCII
Автоматическое генерирование тестовых данных
Написание вспомогательных приложений для тестирования
Разработка тестовых данных
Понятие генетического алгоритма
Операции мутации
Арифметика произвольной точности
Исправление ошибок: коды Гамминга
Технология RAID
Алгоритмы управления PID
Пропорциональное управление: коэффициент Р
Производный член: коэффициент D
Упреждающие поправки
Специализированные процессоры цифровых сигналов
Арифметические операции с насыщением
Циклы переполнения нуля
Множество адресных областей и шин данных
Ограниченные типы данных
Ограниченный доступ к памяти
Расширения DSP в процессорах общего назначения
Синтаксический анализ вычисление выражений
Упрощенный вариант
Что такое начальный индекс
Извлечение матрицы из файла
Определители и нормы Евклида
Норма Евклида и нормализованный определитель
Распространение ошибок при матричных вычислениях
Дальнейшие направления работы
Применение С к явлениям реального мира
Типы сжатия
Наиболее часто используемые алгоритмы сжатия
Факсимильное изображение
Преобразование изображения в закодированный поток
Выявление и исправление ошибок
Борьба с хаосом
Избыточность
Четность
Что такое матрица
Реализация матричной структуры в языке С