
- •Введение в конструирование программ
- •Пенза 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. Приложение «Калькулятор»
3.3.1 Лабораторные задания
Сконструировать консольное приложение в соответствии с одним из приведенных ниже заданий.
Программа должна иметь следующую структуру
Рисунок 3.3 – Структура разрабатываемой программы
Назначение компонент:
Главная программа – осуществляет вызов подпрограмм обработки данных.
Для вызова подпрограммы необходимо указать номер пункта меню. Меню может быть организовано, например, так:
Создание массива записей.
Просмотр массива записей.
Выход
Процедуры обработки данных:
Создание массива записей – ввод исходных данных массива записей
Просмотр массива записей – отображение данных массива записей на дисплее.
Ввод-вывод данных осуществляется в табличном виде.
Структуры для лабораторных заданий:
1.
2.
3.
Boolean
Real
[1 .. .. 2]
4.
Boolean
Integer
[ 1 .. .. 2 ]
5
.
Char
Real
[ 1 .. .. 2 ]
6.
7.
8.
Integer
Real
[ 1 .. .. 2 ]
9.
String[2]
Boolean
[ 1 .. .. 2 ]
10.
String[3]
Real
[ 1 .. .. 2 ]
3.4 Файлы.
3.4.1 Основные понятия и операции
Все рассмотренные ранее структуры данных (массивы, строки, записи) обеспечивают хранение информации в оперативной памяти, то есть только на время работы программы.
А как сохранить информацию после завершения работы программы? Для этого используют структуру данных, которую называют файл.
Файл – это структура данных, обладающая двумя основными свойствами:
Обычно она располагается на каком-либо внешнем носителе (например, магнитная лента, магнитный или оптический диск) и, следовательно, ее размер может быть значительно больше, чем размеры других типов структур данных;
Ее время жизни может значительно превышать время выполнения программы, создавшей ее.
Файловая переменная – переменная в программе, которая используется для описания структуры файла и логических операций с файлом (операций на уровне программы).
Синтаксис описания файловой переменной:
<имя файловой переменной> : file of T; {Т – тип компонентов файла}
Перед выполнением любой операции над файлом файловая переменная должна быть предварительно инициализирована – сопоставлена с физическим файлом:
AssignFile(<имя файловой переменной>, <путь к файлу и его имя>);
Наиболее распространенными являются файлы с последовательным доступом к их компонентам.
Последовательный доступ к компонентам файла
Доступ к компонентам файла осуществляется либо в режиме записи, либо в режиме чтения.
В режиме записи указатель текущей позиции в файле всегда расположен после последнего компонента файла, и единственно возможной операцией в этом режиме является запись очередного компонента файла, в результате чего файл «расширяется».
В режиме чтения указатель текущей позиции может располагаться в любом месте файла, и единственно возможной операцией в этом режиме является доступ к компоненту, следующему непосредственно за указателем, то есть считывания этого компонента.
Основные операции над файлами с последовательным доступом к их компонентам таковы.
Открытие файла. Операция открытия получает в качестве параметров имя файла и режим доступа (чтение или запись).
В режиме чтения предполагается, что файл существует. Операция открытия запрашивает у операционной системы информацию о расположении и свойствах файла, отводит требуемый объем памяти для буфера обмена и устанавливает указатель текущей позиции перед первым компонентом файла.
В режиме записи операционная система получает указание создать новый пустой файл или, если файл с таким именем уже существует, уничтожить всю содержащуюся в нем информацию, так чтобы он стал пустым. Указатель текущей позиции устанавливается в начало этого пустого файла.
Чтение. Операция чтения передает содержимое текущего компонента (определяемого указателем текущей позиции файла) в переменную программы.
Запись. Операция записи создает новый компонент в текущей позиции файла и передает значение программной переменной этому новому компоненту.
Проверка конца файла (Eof – End of file). Операция чтения не может быть выполнена, если указатель текущей позиции достиг конца файла. Так как длина файла не фиксирована, требуется проводить явную проверку на достижение конца файла.
Закрытие файла. Когда обработка файла завершена, его необходимо закрыть. Обычно эта операция приводит к передаче сообщения операционной системе о том, что файл следует отсоединить от программы и освободить область памяти, которая использовалась при работе с файлом (буфер обмена). При изменении режима доступа к файлу (от записи к чтению и наоборот) его следует закрыть и открыть в требуемом режиме.
Схема формирования файла:
var
F: file of T;
a: T;
begin
AssignFile(F, <путь к файлу и его имя>);
Rewrite(F); { Открытие файла для записи – создание пустого файла }
<цикл формирования файла>
begin
<получить значение а>;
write(F, a); { записать а в конец файла }
end;
CloseFile(F); { закрыть файл }
end.
Схема просмотра (использования файла):
var
F: file of T;
a: T;
begin
AssignFile(F, <путь к файлу и его имя>);
Reset(F); { Открытие файла для чтения, Файл уже существует }
while not Eof(F) do begin { пока не конец файла выполнять}
read(F, a); { прочитать данные из файла в переменную а }
<использовать а >;
end;
CloseFile(F); { закрыть файл }
end.