Программирование на языках Фортран, C++,Java,Qt и других
Программирование на языках Фортран, C++,Java,Qt и других













Статьи



Фортран


Краткий экскурс в Windows и современный Фортран
Обзор системы Windows
Современный Фортран
Фортран-90
Общий взгляд на программирование для Windows
Взаимодействие Windows с программой
Win32 API: прикладной интерфейс для Windows
Оконная функция
Создаем первое приложение
Создание проекта в среде Microsoft Developer Studio
Каркас приложения
Цикл обработки сообщений
Оконная функция
Модуль MyPr_Iinc
Меню и обработка сообщений
Что такое ресурсы
Создание меню
Обработка сообщений
Включение акселераторов меню
Взаимодействие приложения с меню
Создание контекстного меню
Диалоги
Окно сообщений
Стандартные диалоги
Пользовательские диалоги
Построение модального диалога
Включение диалога в программу
Немодальный диалог
Оперативное редактирование окна диалога
Элементы управления диалогом
Кнопки
Создание кнопок
Управление кнопками
Включение кнопок в диалоговые функции
Диалог со списком элементов
Создание и инициализация списка
Взаимодействие диалога со списком
Стандартный список
Диалог с окном редактирования
Взаимодействие окна ввода с пользователем
Диалог с комбинированным писком
Управление комбинированным списком
Подключение диалога
Общие элементы управления
Подключение и инициализация общих элементов управления
Окно состояния
Инициализация окна состояния и взаимодействие с ним
Панель инструментов
Создание шаблона инструментальной панели с помощью редактора ресурсов
Взаимодействие с панелью инструментов
Включение инструментальной панели в приложение
Закладки
Взаимодействие с закладками
Пример диалога с закладками
Подсказки
Инициализация подсказок
Использование подсказок в диалогах
Окна просмотра деревьев
Взаимодействие с окнами просмотра деревьев
Инициализация окна просмотра деревьев и обработка нотификационных сообщений
Ползунковый регулятор
Взаимодействие с ползунковым регулятором
Индикатор
Пример диалога с индикатором
Спин
Взаимодействие со спином
Пример диалога с общими элементами управления
Создание заголовка
Взаимодействие приложения с окном заголовка
Списки изображений
Создание списка изображений
Управление списком изображений
Пример диалога со списком изображений
Реестр
Взаимодействие с реестром
Пример диалога, взаимодействующего с реестром
Функции для создания окна и управления им
Функции оконной процедуры
Функции, обслуживающие меню
Функции, обслуживающие диалоги
Функции, обслуживающие элементы управления диалогом
Функции для работы с таймером
Функции для работы с буфером обмена
Функции для работы с ресурсами
Макросы
Графические функции
Функции многодокументного интерфейса
Функции многопотоковых приложений
Функции для работы с файлами

Статьи по C++


Использование массивов в буфере динамического распределения памяти
Утечка памяти и повторное удаление
Самоприсвоение
Обобщение: использование динамически выделяемых строк
Общие представления о классе string
Естественный интерфейс
От строковых объектов назад к строкам с нулевыми окончаниями
Создание адресной книги с помощью контейнера vector
Реализация класса AddressBook с помощью вектора
Объявление вектора объектов Address
Использование вектора как расширяемого массива
Доступ к элементам вектора
Удаление записей адресов
Альтернативная реализация адресной книги с помощью контейнера list
Общие представления о контейнере list
Реализация класса AddressBook с использованием списка
Удаление элементов с помощью итераторов
Использование итераторов в константных контейнерах
Поддержание списка в алфавитном порядке
Ввод объектов Address в алфавитном порядке
Редактирование записей адресов с помощью функций класса String и операторов ввода-вывода
Базовый класс редактора
Вывод приглашений пользователю
Неформатированный ввод и вывод
Прием данных, вводимых пользователем, и контроль за ошибками
Добавление и замена отдельных строк в многострочной записи
Редактирование объекта Address с помощью интегрированного редактора
Новое требование к программе: форматированный номер телефона
Анализ набора символов
Вычленение и подсчет цифр
Форматирование номера
Усовершенствование адресной книги с использованием алгоритмов и сортированных контейнеров
Недостатки использования обычных функций доступа
Использование интерфейса в стиле STL
Выявление дубликатов записей с помощью алгоритма count
Что такое алгоритм
Что такое диапазон итераторов
Общие представления об объектах функций
Использование подшивок и отрицателей
Поиск с помощью lower_bound и find_if
Линейный поиск
Поиск строк
Эффективная сортировка объектов Address с помощью контейнера Set
Добавление, удаление и возвращение записей адресов
Поиск в multiset
Двойное индексирование в контейнере с установкой соответствий
Ключ контейнера
Контейнер тар как ассоциативный массив
Реализация оставшихся функций
Прокручивание экранных списков с помощью двухсторонних очередей и потоков ввода-вывода
Разработка экранного списка
Класс DisplayList
Прокручивание списка
Отслеживание ошибок с помощью макроса assert
Заполнение контейнера deque с помощью алгоритмов сору и back_inserter
Копирование контейнеров
Форматирование с помощью манипуляторов ввода-вывода
Итераторы
Категории итераторов
Реализация дополнительных функций класса DisplayList
Именования алгоритмов
Избегайте появления бессмысленных итераторов
Считывание вводимых чисел и отслеживание ошибок
Определение класса AddressDisplayList
Реализация открытых функций
Простая система меню
Конструирование системы меню
Создание иерархии меню с помощью шаблона stack
Почему функция pop не возвращает значение
Семантика поддержания взаимодействия с пользователем
Считывание данных, введенных пользователем
Класс AddressBookMenu
Функция mainLoop
Функция viewEntry
Функция createEntry
Функции deleteEntry и editEntry
Поиск и фильтрация записей
Исполняемая программа
Функция генерирования данных с помощью потоков строк
Функция generateAddress
Потоки fstream и strstream
Выполнение поиска независимо от регистра букв
Указатели как ассоциативные ключи
Написание нового алгоритма
Сравнение объектов
Реализация классов даты и времени
Компоновка и извлечение значений типа time_t
Реализация функций ввода и вывода времени
Тестирования класса DateTime
Вывод года в шестнадцатеричном формате
Устранение недостатков ввода-вывода
Использование вспомогательных строк для большей гибкости программирования
Использование класса DateTime в книге контактов
Методы класса DateTime
Автоматическая нормализация
Сборка блоков программы
Написание главной программы
Реализация класса PiMDate с использованием шаблона
Особенности компиляции.
Классы Appointment и DateBook
Функция generate Appointment
Главное меню
Создание меню книги контактов
Класс DateBookMenuCatalog
Класс MonthlyDateBookMenu
Реализация класса DateBook
Показ календаря для текущего месяца
Переходы между видами
Экранные списки книги контактов
Классы, производные от ListBasedDateBookMenu
Создание записи контакта
Завершение работы приложения
Научитесь профессионально работать со стандартной библиотекой C++
Тщательно выбирайте контейнер
Использование итераторов как закладок в контейнерах
Использование функции swap
Управление памятью
Шаблоны bitset и vector
Устойчивость к ошибкам
Библиотеки языковой поддержки, средств диагностики и специальных утилит
Библиотека региональных установок
Библиотека чисел
Техническая документация компилятора
Поиск работы стал еще удобнее - http://foolforhim.com.

Научитесь выбирать наиболее подходящие средства программирования

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

Для чего нужна стандартная библиотека C++

Стандарты языка C++ описываются в документе, состоящем из 776 страниц (ISO/IEC 14882, 1998). Примерно половина этого документа посвящена описанию библиотеки функций и классов, которые поставляются вместе со стандартным компилятором языка C++. Поэтому, если вы не знакомы со стандартной библиотекой C++, то половину его возможностей вы не знаете.

Что представляет собой стандартная библиотека C++

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

Части стандартной библиотеки

Стандартная библиотека C++ в действительности состоит из десяти небольших библиотек, 1. Библиотека языковой поддержки, которая содержит типы и функции, непосредственно связанные с работой компилятора языка программирования C++.

О наследстве стандартных библиотечных функций, оставшемся от языка С

Если вам приходилось программировать на языке С, то вы, безусловно, знакомы с библиотечными функциями стандартной библиотеки С. Такие функции, как printf, strcpy, atoi и прочие, по-прежнему доступны в языке C++, и позже мы рассмотрим их использование.

Какова разница между стандартной библиотекой C++ и стандартной библиотекой шаблонов

Стандартную библиотеку шаблонов еще называют библиотекой STL (Standard Template Library). Под этим термином понимают набор интерфейсов и компонентов, разработанных Александром Степановым (Alexander Stepanov) и другими сотрудниками AT&T Bell Laboratories и Hewlett-Packard Research Laboratories.

Принципы, положенные в основу библиотеки STL

Когда в конце 1993 года комитету по стандартизации языка C++ были предложены основные идеи создания библиотеки STL, они были приняты и поддержаны с большим энтузиазмом. Это был тот редкий случай, когда предлагалось простое и универсальное решение для многих назревших проблем.

Наш рабочий набор инструментов

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

Особенности компиляции

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

Где можно достать стандартную библиотеку

Многие компиляторы, перечисленные выше, содержат встроенную стандартную библиотеку. Особенности компиляции. Версия стандартной библиотеки, встроенная в компилятор Microsoft Visual C++ 6.0 и его ранние версии, содержит ряд известных ошибок, допущенных изготовителями.

Знакомство с TinyPIM

Как уже говорилось во введении, мы будем изучать средства стандартной библиотеки C++ по мере создания реальной программы. Сейчас пришло время познакомить вас с нашим проектом.

Объектно-ориентированный анализ проекта

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

Анализ ситуаций использования

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

Ситуации поиска и отображения списка записей

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

Ситуации возникновения ошибок

14. Пользователь ошибочно дважды ввел запись адреса с одинаковыми фамилией и именем. Программа должна предупредить пользователя о существовании подобной записи и предложить подтвердить ввод новой информации или отменить его.

Краткий вводный курс в UML

Диаграмма классов, показанная на рис. 1.2, описывает члены каждого класса и отношения между объектами этих классов. Отдельный класс представлен прямоугольником, разделенным на три секции. В верхней секции показано имя класса, в средней - список переменных-членов класса (постоянных переменных), в нижней - функции-члены класса.

Функциональное ядро

Теперь, когда вы уже знаете немного о языке UML, давайте внимательно проанализируем диаграмму, представленную на рис. 1.2. Функциональное ядро PIM, как и следует из названия, является сердцевиной нашей программы TinyPIM.

Блок текстового пользовательского интерфейса

Блок текстового пользовательского интерфейса ответствен за налаживание взаимодействия между пользователем и программой. В основе его будут использоваться главным образом средства ввода-вывода стандартной библиотеки C++.

Классы редакторов

Чтобы пользователь мог создать или изменить запись в книгах адресов или контактов, используются классы AddressEditor и Appointment Ed it or, которые поддерживают некоторые базовые функции текстовых редакторов. На рис. 1.4 в наиболее общих чертах показана структура классов редакторов.

Блок функций сохранения

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

Реализация класса Address для работы с текстовыми строками

Объекты класса Address используются в программе TinyPIM для сохранения отдельных записей адресной книги. На эти объекты возложено не так-то много функций, это просто вместилища данных. Все переменные-члены класса Address являются текстовыми строками.

Строковые литералы

Строки, заключенные в парные кавычки, называются строковыми литералами. Строковый литерал "Hello" имеет тип const char[6] (требуется массив из 6 символов, поскольку один элемент массива отводится нулевому окончанию). Преобразование строк в массивы происходит в C++ автоматически, поэтому возможна следующая строка кода: const char* p = "Hello"; где р определяется как указатель на первую букву Н в слове Hello.

Особенности компиляции

Некоторые изготовители компиляторов еще не перешли на новые соглашения об именах файлов заголовков. Чтобы избежать ошибок компиляции, вам, возможно, придется добавить к имени расширение .п и удалить первую букву с. Другое решение - создать собственные файлы заголовков и сохранить их под стандартными именами.

Функция strcpy

Некоторые изготовители компиляторов еще не перешли на новые соглашения об именах файлов заголовков. Чтобы избежать ошибок компиляции, вам, возможно, придется добавить к имени расширение .п и удалить первую букву с. Другое решение - создать собственные файлы заголовков и сохранить их под стандартными именами.

Статьи по языку программирования Qt


Платформонезависимость языка Qt
Qt Designer
Обзор иерархии классов Qt
Модули Qt
Модуль QtCore
Модуль QtGui
Другие модули
Философия объектной модели
Механизм сигналов и слотов
Метаобъектный компилятор
Сигналы
Слоты
Соединение объектов
Разъединение объектов
Организация объектных иерархий
Метаобъектная информация
Установка Qt в ОС Windows
Установка Qt в ОС Linux
Qt Assistant
Работа с qmake
Рекомендации для проекта с Qt
Метаобъектный компилятор MOC
Компилятор ресурсов RCC
Структура Qt-проекта
Методы отладки
Отладчик GDB (GNU Debugger)
Прочие методы отладки
Глобальные определения Qt
Библиотека контейнеров
Контейнерные классы
Итераторы
Итераторы в стиле STL
Описание последовательных контейнеров
Списки QList, QLinkedList
Стек QStack
Описание ассоциативных контейнеров
Хэши QHash и QMultiHash
Алгоритмы
Сортировка
Строки
Регулярные выражения
Произвольный тип QVariant
Модель общего использования данных
С чего начинаются элементы управления
Класс QWidget
Модификации окон
Механизм закулисного хранения (Backing Store)
Изменение указателя мыши
Стек виджетов
Виджет видовой прокрутки
Управление автоматическим размещением элементов
Лейаут-менеджеры (Layout managers)
Горизонтальное и вертикальное размещения
Горизонтальное размещение QHBoxLayout
Вложенные размещения
Табличное размещение QGridLayout
Класс calculator
Порядок следования табулятора
Разделители QSplitter
Элементы отображения
Индикатор прогресса
Электронный индикатор
Кнопки
Кнопка нажатия
Флажки
Переключатели
Группировка кнопок
Элементы настройки
Ползунок
Полоса прокрутки
Установщик
Элементы ввода
Редактор текста
Расцветка синтаксиса (Syntax Highlighting)
С чего начинаются виджеты счетчиков
Элемент ввода даты и времени
Элементы выбора
Вставка элементов
Сортировка элементов
Режим пиктограмм
Иерархические списки
Таблицы
Выпадающий список
Закладки
Виджет панели инструментов
Интервью или модель-представление
Концепт
Представление
Выделение элемента
Делегат
Индексы модели
Иерархические данные
Роли элементов
Создание собственных моделей данных
Промежуточная модель данных (Proxy Model)
Модель элементно-базированных классов
Цветовая палитра элементов управления
События
Перезапись специализированных методов обработки событий
Класс QFocusEvent
Событие обновления контекста рисования. Класс QPaintEvent
Класс QMouseEvent
Класс QWheelEvent

События перетаскивания (drag&drop)
Реализация собственных классов событий
Сохранение работоспособности приложения
Фильтры событий
Искусственное создание событий
Введение в компьютерную графику
Класс QColor
Легенда о короле Артуре и контексте рисования
Класс QPainter
Рисование
Трансформация систем координат
Режим совмещения (composition mode)
Растровые изображения
Контекстно-независимое представление
Класс QImage как контекст рисования
Контекстно-зависимое представление
Класс QPixmapCache
Создание нестандартного окна виджета
Работа со шрифтами
Графическое представление
Элемент
События
Анимация
Работа с OpenGL
Реализация OpenGL-программы
Графические примитивы OpenGL
Трехмерная графика
Вывод на печать
Разработка собственных элементов управления
Элементы со стилем
Встроенные стили
Создание собственных стилей
Метод рисования элементов управления
Использование QStyle для рисования виджетов
Звук
Пример программы, воспроизводящей звук
Сохранение настроек приложения
Управление сеансом
Буфер обмена
Реализация Drag

Введение
Заглянем в память
Двоичная система счисления
Шестнадцатеричная система счисления
Беззнаковые целые числа
Числа со знаком
Вещественные числа
Регистры микропроцессора Pentium
Сегментные регистры
Основной набор команд
Команды математического сопроцессора
Список особых ситуаций
Расширение ММХ Архитектура ММХ
Особенности программирования в операционной системе Windows
Консольные приложения
Оконные приложения
Приложения на основе диалоговых окон
Формат команд микропроцессора Intel
Код команды
Байт MOD R/M
Маленький пример ручного дизассемблирования
О некоторых проблемах дизассемблирования
О командах арифметического сопроцессора
Описание структуры исполняемого модуля (РЕ-модуль)
Заголовок РЕ
Секции
Таблица импорта
Таблица экспорта
Первый уровень
Об отладочной информации
Примеры дизассемблирования
Некоторые сложности в распознавании исполняемого кода
Использование отладочной информации
Используем функцию WriteProcessMemory
Инструментарий исследователя машинного кода
Знаменитый дизассемблер IDA Pro
Turbo Debugger
Исследователи ресурсов
Отображение данных
Отладка программ
Отладчик OllyDbg
Точки останова
Аппаратные точки останова
Несколько примеров редактирования исполняемых модулей
Снятие ограничения на количество запусков программы
Основные парадигмы анализа исполняемого кода
Оценка времени выполнения
Размер, расположение и тип переменных
Сложные типы данных
Массивы
Локальные переменные
Временные переменные
Процедуры и функции
Структуры стека
Идентификация процедур и функций (обобщение)
Переполнение буфера
Условные конструкции и операторы выбора
Вложенные конструкции и логические связки
Условные конструкции без переходов
Циклы
Вложенные циклы и циклы со сложными условиями выхода
Идентификация объекта
Виртуальные функции
Конструктор и деструктор
Еще об исследовании исполняемого кода
Другие конструкции. Обработка исключений
Идентификация главной функции и начальный код
Отладчик SoftICE
Основы работы с SoftICE
Загрузчик (Loader)
Некоторые приемы работы с SoftICE. Начало работы. Процессы
Точки останова
Прерывания на сообщения Windows
Если приложение содержит отладочную информацию
Краткий справочник по SoftICE
Команды SoftICE. Макрокоманды отладчика SoftICE
Команды управления точками останова
Команды трассировки
Основные информационные команды
Другие команды
Встроенные функции SoftICE
Дизассемблер IDA Pro
Введение в IDA Pro
Простые примеры исследования кода
Отладка в среде IDA Pro
Встроенный язык IDA Pro
Встроенные функции и примеры программирования на языке IDC
Структура строки листинга
Работа с функциями
Элементы интерфейса с пользователем