- •Л. Б. Бузюков, о. Б. Петрова
- •Учебное пособие
- •Предисловие
- •Глава 1. Введение в язык с
- •1.1. История создания и особенности языка с
- •1.3. Элементы языка с
- •1.3.1. Основные символы
- •1.3.2. Ключевые слова
- •1.3.3. Идентификаторы
- •1.3.4. Константы
- •1.3.5. Лексемы
- •1.3.6. Комментарии
- •Глава 2. Типы данных языка c
- •2.1. Числовые типы данных
- •2.2. Объявление переменных
- •2.3. Данные целого типа
- •2.4. Данные вещественного типа
- •Глава 3. Выражения
- •3.1. Операции
- •3.1.1. Арифметические операции
- •3.1.2. Операция присваивания
- •Глава 4. Составление простейших программ
- •4.1. Препроцессор и его функции
- •4.2. Основные директивы препроцессора
- •4.2.1. Директива include
- •4.2.2. Директива define
- •4.2.3. Директива undef
- •4.3. Структура и правила составления программ
- •4.3.1. Структура функции
- •4.3.2. Функция main()
- •4.3.3. Структура простой программы
- •4.3.4. Правила записи объявлений, операторов и комментариев
- •4.3.5. Пример простейшей программы
- •Глава 5. Средства ввода/вывода
- •5.1. Общие замечания
- •5.2. Функция форматированного вывода printf()
- •5.2.1. Основные форматы
- •5.2.2. Модификации форматов
- •5.3. Функция форматированного ввода scanf()
- •Глава 6. Управляющие операторы
- •6.1. Условные операторы
- •6.1.1. Логические выражения
- •6.1.2. Формы оператора if
- •6.1.3. Оператор выбора switch
- •6.2. Операторы цикла
- •6.2.1. Оператор while
- •6.2.2. Оператор for
- •6.2.3. Оператор do-while
- •6.3. Операторы перехода
- •6.3.1. Оператор break
- •6.3.2. Оператор continue
- •6.3.3. Оператор return
- •6.3.4. Применение оператора goto и меток
- •Глава 7. Функции
- •7.1. Основные понятия
- •7.2. Определение функции
- •7.3. Прототип функции
- •7.4. Вызов функции
- •Глава 8. Классы памяти
- •8.1. Логическаяструктура памяти программы
- •8.2. Особенности классов памяти
- •8.3. Объявления переменных
- •8.4. Объявления функций
- •8.5. Время жизни и область видимости программных объектов
- •8.6. Инициализация глобальных и локальных переменных
- •Глава 9. Указатели
- •9.1. Операция получения адреса
- •9.2. Операции над указателями
- •Глава 10. Массивы
- •10.1. Общие сведения о массивах
- •10.2. Одномерные массивы
- •10.3. Двумерные массивы
- •10.4. Массивы и указатели
- •10.5. Массивы и функции
- •Глава 11. Строки
- •11.1. Представление символьной строки при помощи одномерного массива
- •11.2. Указатель на символьную строку
- •11.3. Ввод/вывод символьных строк
- •11.4. Массивы символьных строк
- •11.5. Функции работы состроками
- •Глава 12. Структуры
- •12.1. Определение структуры
- •12.2. Структуры и функции
- •12.3. Указатели на структуру
- •12.4. Массивы структур
- •12.5. Вложенные структуры
- •12.6. Использование синонима типа
- •12.7. Объединения
- •Глава 13. Файлы
- •13.1. Работа с файлами
- •13.2. Функции ввода/вывода
- •Глава 14. Динамическая память
- •14.1. Распределение памяти
- •14.2. Функции управление памятью
- •Глава 15. Проект
- •15.1. Основы создания проекта
- •15.2. Пример создания проекта
- •Глава 17. Основы объектно-ориентированного программирования
- •17.1. Объектно-ориентированный подход
- •17.3. Конструкторы и деструкторы
- •17.4. Инкапсуляция
- •17.5. Полиморфизм
- •17.6. Наследование
- •17.7. Виды взаимодействия классов
- •17.8. Способы графического представления объектно-ориентированной задачи
- •18.2. Библиотека Win32 api
- •18.3. Библиотека owl
- •18.4. Библиотека vcl
- •18.5. Библиотека clx
- •18.6. Библиотека mfc
- •18.7. Библиотека OpenGl
- •19.3. Создание проекта
- •19.4. Редактирование проекта
- •19.5. Компиляция и выполнение программы
- •19.6. Файловая структура проекта
- •19.7. Создание консольного приложения
- •Глава 20. Разработка приложений для операционных систем windows
- •20.1. Взаимодействие программы и Windows
- •20.2. Компоненты библиотеки Win32 api
- •20.3.Функция WinMain()
- •20.4. Оконная процедура
- •20.5. Структура программы для ос Windows
- •20.6. Ресурсы Windows
- •20.7. Взаимодействие прикладной программы и устройств в Windows
- •Глава 21. Создание приложений для ос windows на основе библиотеки mfc
- •21.1. Обзор классов библиотеки mfc
- •21.2. Класс cString
- •21.3. Класс cFile
- •21.4. Класс cPoint
- •21.5. Класс cRect
- •21.7. Приложение, основанное на диалоге
- •21.8. Использование в приложении элементов управления
- •21.9. Мастер классов mfc ClassWizard
- •21.10. Установка начального значения элементам управления
- •21.11. Элементы управления Picture
- •21.12. Элемент управления Group Box
- •21.13. Элемент управления Radio Button
- •21.14. Элемент управления Check Box
- •21.15. Элемент управления List Box
- •21.16. Создание меню
- •21.17. Приложение с двумя диалоговыми панелями
- •21.18. Приложение sdi
- •21.19. Создание панели инструментов
- •21.20. Приложение mdi
- •21.21. Контекстыустройств в mfc
- •21.22. Графические объекты Windows в mfc
- •21.23. Графические операции в mfc
- •П.1. Основы методологии конструирования программ
- •П.1.1. Основные понятия. Программа и алгоритм
- •П.1.2. Этапы разработки программ
- •П.2. Алгоритмы
- •П.2.1. Алгоритм и его свойства
- •П.2.2. Способы описания алгоритмов
- •П.2.3. Средства графического изображения алгоритмов Схемы алгоритмов
- •Псевдокоды
- •Структурограммы
- •П.3. Основные приемы программирования
- •П.3.1. Разновидности структур программирования
- •П.3.2. Программирование линейных и разветвляющихся процессов
- •П.3.3. Программирование циклических процессов
- •Арифметический цикл (цикл с параметром)
- •Итерационный цикл
- •Вложенный цикл
- •Литература
П.1. Основы методологии конструирования программ
П.1.1. Основные понятия. Программа и алгоритм П.1.2. Этапы разработки программ
П.1.1. Основные понятия. Программа и алгоритм
Фундаментальным понятием, употребляемым в связи с использованием ЭВМ, является алгоритм. Это понятие присутствует в любой из книг, относящихся к программированию или организации вычислительных процессов.
Алгоритм – это конечная последовательность точных указаний, приводящая к решению поставленной задачи. Как явствует из определения, класс задачи определяет и класс указаний (действий).
Алгоритм, реализующий вычислительные операции, называется вычислительным алгоритмом.
Необходимым условием решения задачи на ЭВМ является формализация способа ее решения, т. е. получение алгоритма решения задачи.
Этот алгоритм должен содержать полное, ясное и однозначное описание вычислительных процессов. В описании должны содержаться формулы, по которым происходит расчет, последовательность их применения, условия, при которых используется та или иная формула, правила перехода от одной части вычислительного процесса к другой части.
Разработка алгоритма для решения любой задачи является наиболее ответственным и важным моментом, так как именно алгоритм определяет последовательность действий, выполняемых ЭВМ.
Ошибки, допущенные при записи алгоритма, приводят к неверному ходу вычислительного процесса и, следовательно, к неверному результату. Отсутствие учета индивидуальных особенностей задачи ведет к построению неоптимального алгоритма, снижающего скорость вычислений.
Основное условие для эффективного использования ЭВМ - построение качественного алгоритма решения задачи.
Если алгоритм формулируют безотносительно к какому-либо устройству, его выполняющему, то говорят об абстрактном (математическом) алгоритме, обладающем высокой степенью формализации.
Если алгоритм формулируют для человека, то говорят скорее об алгоритмическом описании действий, и степень формализации невелика.
И, наконец, алгоритм, сформулированный для ЭВМ, носит специальное название – программа.
Программа – это алгоритм решения задачи, сформулированный на языке вычислительной машины и представляющий собой инструкцию управления ЭВМ. От абстрактного алгоритма программа отличается тем, что она должна размещаться в памяти ЭВМ и выполняться за практически приемлемый отрезок времени.
Применительно к языку программирования – программа это набор операторов, который может быть представлен как единое целое в некоторой вычислительной системе, и используется для управления поведением этой системы.
Программирование означает конструирование и формулирование программ, т. е. алгоритмов, записанных на языке, понятном ЭВМ.
Предмет программирования составляют идеи, лежащие в основе искусства конструирования программ, методы, способы и приемы конструирования, общие для всех предметных областей и не зависящие от конкретных приложений.
П.1.2. Этапы разработки программ
При решении различных задач на ЭВМ следует иметь в виду, что ЭВМ выполняет вычислительный процесс по заранее заданной программе и не может сама «осмыслить» процесс решения задачи и полученные результаты. Следовательно, работа на ЭВМ подразумевает нечто большее, нежели простое использование ЭВМ как инструмента вычислений.
Технология подготовки и решения задачи на ЭВМ включает в себя четыре основных этапа:
ознакомление с поставленной задачей – условия задачи, общий подход к решению, исходные данные, цели решения;
составление плана решения – определение состава и последовательности требуемых преобразований, выбор способа решения, разработка алгоритма;
осуществление решения – переработка согласно составленному плану входной информации в выходную, разработка программы;
проверка правильности решения задачи – отладка, счет, интерпретация результатов, получение выводов.
В идеальном варианте указанные этапы выполняются последовательно в линейном порядке. На самом деле действия в процессе решения задачи представляют последовательность циклов, каждый из которых охватывает либо все этапы и действия, либо некоторые из них.
Комплексы программ создаются, эксплуатируются и развиваются во времени. Жизненный цикл программных средств (ПС) включает в себя все этапы развития – от возникновения потребности в программе определенного целевого назначения до полного прекращения использования программы вследствие морального старения, либо отсутствия необходимости решения соответствующих задач.
По длительности жизненного цикла ПС можно разделить на два класса: с малым и большим временем жизни.
В научных организациях и вузах преобладают разработки программ первого класса, а в проектных и промышленных организациях – второго.
Рассмотрим структуру разработки крупных программных комплексов систем управления и обработки информации, оформляемых в виде программного продукта.
Жизненный цикл такого класса программ включает в себя следующие основные этапы (рис. П.1.1):
системный анализ, в ходе которого определяют потребность в ПС, его назначение и основные функциональные характеристики, оцениваются затраты и возможная эффективность применения комплекса программ;
проектирование ПС, включающее в себя разработку структуры комплекса и его компонентов, программирование модулей и ряд этапов отладки, а также испытание и внедрение для регулярной эксплуатации комплекса программ;
эксплуатацию ПС, заключающуюся в исполнении программ и получении ожидаемых результатов, а также в обеспечении достоверности и надежности выдаваемых данных;
сопровождение ПС, состоящее в эксплуатационном обслуживании, развитии функциональных возможностей, повышении эксплуатационных характеристик и тиражировании ПС.
Наиболее специфическим и трудно формализуемым этапом является этап системного анализа, где формулируются назначение и основные показатели качества создаваемых программ, тесно связанные с предметной областью системного анализа, т. е. с решаемой задачей.
Рис. П.1. Жизненный цикл программ
Исходя из функционального назначения, программы с малой длительностью эксплуатации создаются, как правило, для решения научных и инженерных задач. Их жизненный цикл – это длительные этапы системного анализа и проектирования, которые продолжаются от месяца до года, и относительно небольшой этап эксплуатации, редко превышающий несколько лет.
Программы с малой длительностью эксплуатации не предназначены для тиражирования и не нуждаются в сопровождении и модификации.
Программы с большой длительностью эксплуатации создаются для регулярной обработки информации и управления в сложных вычислительных системах. Эти программы тиражируются и сопровождаются документацией как промышленные изделия, жизненный цикл которых состоит в основном из эксплуатации и сопровождения, и может длиться десятки лет.
Поскольку именно крупные программные комплексы систем управления и обработки информации оформляются как программные продукты, целесообразно привести основные этапы их разработки (рис. П.1.2).
Процесс разработки ПС в соответствии с техническим заданием делится на две крупные стадии: техническое и рабочее проектирование.
В представленной схеме (рис. П.1.2) второй, третий и частично четвертый этапы относятся к техническому проектированию, а последующие этапы – к рабочему.
После завершения разработки и испытаний ПС начинается процесс их эксплуатации и сопровождения.
Сопровождение должно обеспечивать высокое качество и расширение функций ПС в течение всего времени его жизни. Сюда входит качественное тиражирование и передача пользователям определенных версий комплекса с учетом частных запросов пользователя.
Рис. П.1.2. Этапы разработки программного продукта
На основе эталонных версий создаются пользовательские экземпляры ПС, имеющие значительные различия.
Создание и модернизация пользовательских экземпляров осуществляется обычно программистами, которые не осуществляли первичную разработку. Для корректного и эффективного изменения программ необходима более обширная, чем при эксплуатации, технологическая документация, а также регистрация и учет всех вносимых изменений.
Очень старые эталонные версии целесообразно списывать и объявлять всем пользователям о прекращении их существования и сопровождения.
