
- •Введение в конструирование программ
- •Пенза 2006 г.
- •Предисловие
- •1 Обработка информации на компьютере
- •1.1 Модель обработки информации на компьютере
- •1.2 Основные объекты языка программирования
- •1.2.1 Синтаксические элементы языка программирования
- •1.2.2. Значения и типы
- •1.2.3. Константы и переменные
- •1.2.4. Выражения
- •1.2.5. Операторы
- •1.3 Лабораторные задания
- •1.3.1 Логическая разминка
- •1.3.2 Реализовать схемы программ на языке Object Pascal
- •2 Структурное конструирование программ
- •2.1 Простая программа
- •2.2 Консольное приложение
- •2.2.1 Создание, сохранение и загрузка программы
- •2.2.2 Компиляция и выполнение программы
- •2.3 Лабораторные задания
- •2.3.1 Составление простых программ
- •2.3.2 Выполните трассировку и определите результаты работы программы
- •2.3.3 Программирование с использованием управляющих структур
- •2.4 Подпрограммы
- •2.4.1 Глобальные данные
- •2.4.2 Способы передачи параметров
- •2.4.3 Функции
- •2.4.4 Процедуры
- •2.4.5 Значения параметров по умолчанию
- •2.4.6 Перегрузка функций
- •2.4.7. Рекурсивные подпрограммы
- •2.4.8. Передача наименования подпрограммы как параметра
- •2.5 Отладка программ
- •2.6 Лабораторные задания. Подпрограммы
- •2.6.1 Конструирование подпрограмм
- •2.6.2 Разработка рекурсивных подпрограмм
- •2.7. Модули
- •Interface {интерфейс модуля}
- •Implementation {реализация}
- •Initialization {инициализация}
- •3. Структуры данных
- •3.1. Массивы
- •3.1.1. Действия над массивами
- •I, j : byte; { индексы элементов массивов }
- •3.1.2 Передача массивов в качестве параметров
- •3.1.2.1. Формальные параметры как массивы с фиксированными размерами
- •3.1.2.2. Формальные параметры как массивы со «свободными» размерами
- •3.1.2.3. Определение наименьшего/наибольшего значения массива
- •3.1.3 Лабораторные задания
- •3.1.3.1 Одномерные массивы
- •3.1.3.2. Двумерные массивы
- •3.2. Строки
- •3.2.1 Лабораторные задания
- •3.3. Записи
- •3.3.1 Лабораторные задания
- •3.4 Файлы.
- •3.4.1 Основные понятия и операции
- •3.4.2 Типизированные файлы
- •3.4.3 Текстовые файлы
- •3.4.4 Лабораторные задания
- •3.5 Динамические структуры данных. Указатели
- •3.5.1 Основные понятия и определения
- •3.5.2 Процедуры выделения и освобождения памяти
- •3.5.3 Односвязный список
- •3.5.4 Лабораторные задания. Указатели, список
- •3.5.5 Динамические массивы
- •4. Введение в объектно-ориентированное конструирование программ
- •4.1 Основные понятия и определения
- •4.2 Классы и объекты
- •4.2.1 Структура класса
- •4.2.2 Создание и уничтожение объектов
- •4.2.3 Пример. Класс – динамический массив
- •4.2.5 Операции с объектами
- •4.2.5.1 Оператор is
- •4.2.5.2 Оператор as
- •4.2.5.3 Копирование объектов одного класса
- •4.2.6 Свойства
- •4.2.7 Наследование и полиморфизм
- •4.2.8 События
- •4.2.9 Исключительные ситуации
- •4.2.9.1 Операторы try…except
- •4.2.9.2 Операторы try…finally
- •5. Визуальная разработка программ в delphi
- •5.1. Интегрированная среда разработки программ
- •5.1.1 Проект
- •5.2 Конструирование простого приложения
- •5.2.1 Интерфейс Пользователя
- •5.2.2 Визуальное конструирование
- •5.2.3 Реализация методов
- •5.2.4 Обработка исключительных ситуаций
- •5.2.5 Файлы приложения Калькулятор
- •5.3 Компоненты ввода/вывода данных StringGrid и Memo
- •5.3.1 Компонент StringGrid – таблица строк
- •5.3.1 Ввод массива. Компонент StringGrid
- •5.3.3 Компонент Memo – многострочное окно редактирования
- •5.3.4 Ввод массива. Компонент Memo
- •5.4 Немного о графике
- •5.4.1 Свойство Canvas. Построение графика функции
- •5.4.2 Событие OnPaint
- •Список литературы
- •Приложение а. Кратко о Delphi а.1 Свойства проекта
- •А.2 Программный код пустой формы
- •А.3 Главная форма
- •А.3.1 Свойства главной формы
- •А.3.2 События главной формы
- •А.4 Компоненты Delphi
- •Приложение b. Приложение «Калькулятор»
2.6 Лабораторные задания. Подпрограммы
Сконструировать консольное приложение в соответствии с одним из приведенных ниже заданий.
2.6.1 Конструирование подпрограмм
Оформить по заданию преподавателя одну из ранее разработанных программ раздела 2.3.3 как подпрограмму. Операции ввода данных и вывода результатов должны выполняться в главной программе. Для передачи информации между главной программой и подпрограммой использовать параметры.
2.6.2 Разработка рекурсивных подпрограмм
Напишите программу, которая осуществляет рекурсивную обработку информации по одному из условий, заданных ниже
y =
y =
y =
Определить наибольший общий делитель по алгоритму Евклида для двух чисел А и В (А0, В0, В>А).
Реализовать двоичный поиск заданного значения х в упорядоченном массиве А.
Реализовать решение нелинейного уравнения методом «половинного деления».
Упорядочить массив по возрастанию методом прямого выбора:
Просматривая массив с первого элемента, найти минимальный элемент и поставить его на место первого, а первый на место минимального
Просматривая массив со второго элемента, найти минимальный элемент и поставить его на место второго, а второй на место минимального
И так до предпоследнего элемента.
Дополнительные задания с использованием графических примитивов
Разделить прямоугольник на прямоугольники меньших размеров (минимальная длина стороны задана). Использовать рекурсивную процедуру деления прямоугольника на два прямоугольника меньших размеров.
Нарисовать треугольник Серпинского. Рисуется треугольник и его средние линии. В образованных при углах треугольника новых треугольниках нарисовать средние линии и так далее. Завершением рекурсии может служить порядок вложенности или минимальная длина стороны треугольника.
Нарисовать шестиконечную снежинку. Рисуется правильный шестиугольник и его диагонали. Для каждого угла шестиугольника вызывается рекурсивная процедура рисования шестиугольника и его диагоналей и так далее. Порядок вложенности равен 4.
2.7. Модули
Д. Парнас (David Parnas) определил модуль как программный объект с собственной моделью данных и собственным набором операций. Доступ к данным модуля возможен только через имеющиеся в нем операции.
Понятие модуля, как программного компонента, используемого для создания программ и программных систем, тесно связано с такими понятиями разработки программных средств как абстракция и сокрытие информации.
Суть абстракции состоит в выделении существенных свойств с игнорированием второстепенных деталей. По мере декомпозиции программной системы на модули каждый из них становится частью абстракции на соответствующем уровне.
«Сокрытием информации (information hiding) называют приемы, благодаря которым одни программы маскируют информацию, получаемую из других программ. Программа может скрывать детали реализации, такие как алгоритмы и данные, благодаря чему, в случае, если их необходимо изменить, другие программы, от них зависящие, не придется переписывать. Программы, скрывающие информацию, взаимодействуют друг с другом через общедоступные интерфейсы. Главное достоинство сокрытия информации заключается в увеличении независимости программ друг от друга» [David Parnas, «On the Criteria to Be Used in Decomposing Systems into Modules»].
Достоинством информационной закрытости является возможность осуществить:
Независимую разработку программных средств несколькими программистами
Легкую модификацию программной системы, так как можно производить изменения одного модуля независимо от других.
Главные части модуля – интерфейс и реализация (рисунок 2.10):
Рисунок 2.10 – Структура модуля
Каждый модуль компилируется независимо от других компонент программы.
Для того чтобы включить модуль в программу на языке Object Pascal, необходимо указать имя модуля в предложении uses.
Синтаксис подключения модулей:
uses <список имен модулей>;
Структура модуля в языке Object Pascal:
unit <имя модуля>;