Delphi_part2
.pdfМИНИСТЕРСТВООБРАЗОВАНИЯИНАУКИУКРАИНЫ Черниговский государственныйтехнологическийуниверситет
РАБОТАСМАССИВАМИИФАЙЛАМИ В СРЕДЕ DELPHI
МЕТОДИЧЕСКИЕУКАЗАНИЯ к лабораторномупрактикуму исамостоятельнойработе подисциплине
«Программирование»
длястудентовнаправленияподготовки6.050102 –“Компьютерная инженерия”
Часть вторая
УТВЕРДЖЕНО на заседании кафедры
информационных и компьютерных систем протокол № 3 от 26.11.07
Чернигов ЧГТУ 2007
Робота з масивами та файлами у середовищі Delphi. Методичні вказівки до лабораторного практикуму та самостійної роботи з дисципліни «Програмування» для студентів напряму підготовки 6.050102 – „Комп’ютерна інженерія”, частина друга. /Укл.: П.Г. Бивойно, Н.О. Гора, Д.В. Павловська, В.І. Павловський – Чернігів: ЧДТУ, 2007. – 113 с. Рос. мовою.
Составители: Бивойно Павел Георгиевич, канд. техн. наук, доцент Гора Наталья Олеговна, ассистент Павловская Дарья Владимировна, ассистент
Павловский Владимир Ильич, канд. техн. наук, доцент
Ответственный за выпуск: Бивойно П.Г. , декан факультета электронных и информационных технологий, канд. техн. наук, доцент
Рецензент: Нестеренко С.А., канд. техн. наук, доцент кафедры информационных и компьютерных систем Черниговского государственного технологического университета
СОДЕРЖАНИЕ |
|
Ответственный за выпуск: Бивойно П.Г. , декан факультета электронных и |
|
информационных технологий, канд. техн. наук, доцент.................................. |
3 |
7 ЛАБОРАТОРНАЯРАБОТА№7. ОДНОМЕРНЫЕМАССИВЫ............................ |
7 |
7.1 Краткие теоретические сведения о массивах...................................................... |
7 |
7.1.1 Понятие массив................................................................................................ |
7 |
7.1.2 Объявление массива....................................................................................... |
7 |
7.1.3 Передача массивов в процедуры и функции................................................ |
9 |
7.1.4 Операции с массивами.................................................................................. |
10 |
7.2 Типовые процедуры и функции для работы с массивами............................... |
10 |
7.2.1 Описание типа учебного массива................................................................ |
11 |
7.2.2 Процедуры создания, ввода и вывода массивов........................................ |
11 |
7.2.2.1 Процедура создания случайного массива............................................ |
11 |
7.2.2.2 Процедура ввода массива из строки текста ......................................... |
11 |
7.2.2.3 Процедура ввода массива из компонента TMemo............................... |
12 |
7.2.2.4 Процедура ввода массива с помощью функции InputBox.................. |
13 |
7.2.2.5 Функция преобразования массива в строку символов........................ |
13 |
7.2.2.6 Процедура вывода массива в компонент TMemo................................ |
14 |
7.2.3 Обработка массивов...................................................................................... |
14 |
7.2.3.1 Функция вычисления суммы элементов массива................................ |
14 |
7.2.3.2 Процедура определения минимального, максимального, и их |
|
индексов в массиве ............................................................................................. |
15 |
7.2.3.3 Функция определения позиции элемента в массиве........................... |
15 |
7.2.3.4 Процедура удаления элементов из массива......................................... |
16 |
7.2.3.5 Процедура переворота массива............................................................. |
17 |
7.2.3.6 Процедура циклического сдвига части элементов массива влево..... |
17 |
7.2.3.7 Процедура формирования массива накопленных значений .............. |
18 |
7.3 Задание для самостоятельной работы............................................................... |
18 |
7.4 Содержание отчета .............................................................................................. |
18 |
Контрольные вопросы............................................................................................... |
20 |
8 ЛАБОРАТОРНАЯРАБОТА№8. СОРТИРОВКАМАССИВОВ.......................... |
21 |
8.1 Методы сортировки массивов............................................................................ |
21 |
8.1.1 Сортировка выбором..................................................................................... |
22 |
8.1.1.1 Пример сортировки массива по возрастанию методом выбора......... |
23 |
8.1.1.2 Процедура сортировки массива методом выбора ............................... |
25 |
8.1.2 Сортировка обменом (метод пузырька) ...................................................... |
26 |
8.1.2.1 Пример сортировки массива по возрастанию методом обмена......... |
27 |
8.1.2.2 Процедура сортировки массива методом обмена................................ |
29 |
8.1.3 Сортировка вставкой или включением....................................................... |
30 |
8.1.3.1 Пример сортировки массива по возрастанию методом вставки........ |
31 |
8.1.3.2 Процедура сортировки методом вставки ............................................ |
34 |
8.2 Сортировка по усложненным правилам............................................................ |
35 |
8.3 Обработка упорядоченных массивов................................................................. |
36 |
8.3.1 Вставка элемента в отсортированный массив............................................ |
37 |
3
8.3.2 Слияние двух отсортированных массивов в один..................................... |
37 |
8.3.3 Поиск позиции элемента в отсортированном массиве.............................. |
39 |
8.3.4 Удаление элемента из отсортированного массива .................................... |
40 |
8.4 Задание для самостоятельной работы............................................................... |
40 |
8.5 Содержание отчета .............................................................................................. |
41 |
Контрольные вопросы............................................................................................... |
41 |
9 ЛАБОРАТОРНАЯРАБОТА№9. РАБОТАСДВУМЕРНЫМИМАССИВАМИ |
|
(МАТРИЦАМИ) ......................................................................................................... |
43 |
9.1 Краткие теоретические сведения ....................................................................... |
43 |
9.1.1 Описание матриц........................................................................................... |
43 |
9.1.2 Использование компонента StringGrid для ввода-вывода матриц........... |
44 |
9.1.3 Тотальная обработка данных в матрицах................................................... |
45 |
9.1.4 Выборочная обработка матрицы ................................................................. |
46 |
9.1.5 Перестановки элементов матрицы .............................................................. |
47 |
9.1.6 Удаление и вставка элементов матрицы..................................................... |
48 |
9.1.7 Сортировка элементов матрицы.................................................................. |
48 |
9.2 Задание для самостоятельной работы............................................................... |
53 |
9.3 Содержание отчета .............................................................................................. |
55 |
Контрольные вопросы............................................................................................... |
55 |
10 ЛАБОРАТОРНАЯРАБОТА№10. РАБОТАС ЗАПИСЯМИ............................. |
56 |
10.1 Краткие теоретические сведения ..................................................................... |
56 |
10.1.1 Объявление типа для записи...................................................................... |
56 |
10.1.2 Массивы записей......................................................................................... |
57 |
10.1.3 Поля записей как массивы.......................................................................... |
58 |
10.1.4 Сортировка массивов записей.................................................................... |
59 |
10.1.5 Ввод-вывод записей.................................................................................... |
59 |
10.2 Создание проекта «Результаты аттестации»................................................... |
60 |
10.2.1 Интерфейс пользователя для проекта....................................................... |
60 |
10.2.2 Определение типов данных........................................................................ |
61 |
10.2.3 Инициализация интерфейса....................................................................... |
62 |
10.2.4 Добавление строки в таблицу.................................................................... |
63 |
10.2.5 Удаление строки из таблицы...................................................................... |
63 |
10.2.6 Процедура создания массива записей по содержимому StringGrid....... |
64 |
10.2.7 Процедура отображения массива в компоненте StringGrid.................... |
65 |
10.2.8 Процедура сортировки массива записей по группе и фамилии............. |
65 |
10.2.9 Сортировка записей по количеству неудовлетворительных |
|
оценок и среднему баллу .............................................................................. |
67 |
10.2.10 Выборка студентов какой-нибудь группы, имеющих средний |
|
балл выше 4 .................................................................................................... |
68 |
10.2.11 Подсчет числа студентов, имеющих более 2-х |
|
неудовлетворительных оценок и вывод упорядоченного списка |
|
этих студентов................................................................................................ |
69 |
10.3 Задание для самостоятельной работы............................................................. |
70 |
10.4 Содержание отчета ............................................................................................ |
72 |
Контрольные вопросы............................................................................................... |
72 |
4
11 ЛАБОРАТОРНАЯРАБОТА№11. РАБОТАСТИПИЗИРОВАНЫМИ |
|
ФАЙЛАМИ................................................................................................................. |
73 |
11.1 Краткие теоретические сведения ..................................................................... |
73 |
11.1.1 Объявление файловой переменной........................................................... |
73 |
11.1.2 Назначение файла файловой переменной................................................. |
74 |
11.1.3 Открытие файла........................................................................................... |
75 |
11.1.4 Текущая позиция файла.............................................................................. |
76 |
11.1.5 Чтение данных из файла............................................................................. |
77 |
11.1.6 Запись данных в файл................................................................................. |
77 |
11.1.7 Обрезка “хвоста” файла.............................................................................. |
77 |
11.1.8 Закрытие и удаление файлов...................................................................... |
78 |
11.2 Перечень основных процедур и функций для работы с типизированными |
|
файлами................................................................................................................ |
78 |
11.3 Создание проекта «Результаты аттестации»................................................... |
78 |
11.3.1 Требования к проекту ................................................................................. |
79 |
11.3.2 Интерфейс пользователя для проекта....................................................... |
79 |
11.3.3 Определение типов данных........................................................................ |
81 |
11.3.4 Настройка интерфейса пользователя ....................................................... |
81 |
11.3.5 Вспомогательные процедуры для работы с файлом................................ |
83 |
11.3.5.1 Процедура выбора имени файла ......................................................... |
83 |
11.3.5.2 Процедура открытия файла.................................................................. |
83 |
11.3.5.3 Процедура вывода файла в StringGrid ................................................ |
84 |
11.3.6 Процедуры работы со StringGrid1 ............................................................. |
84 |
11.3.7 Процедуры реализации пунктов меню fileMenu...................................... |
85 |
11.3.7.1 Добавление данных из StringGrid1 в файл......................................... |
85 |
11.3.7.2 Поиск записи по фамилии.................................................................... |
86 |
11.3.7.3 Удаление записи по фамилии.............................................................. |
87 |
11.3.7.4 Сохранение файла под другим именем.............................................. |
88 |
11.3.8 Процедуры для работы с упорядоченными файлами.............................. |
89 |
11.3.8.1 Процедура сортировки файла.............................................................. |
89 |
11.3.8.2 Поиск записи в отсортированном файле........................................... |
90 |
11.3.8.3 Добавление записи в отсортированный файл.................................... |
91 |
11.3.8.4 Удаление записи из отсортированного файла................................... |
91 |
11.3.9 Процедуры реализации пунктов меню sortMenu ..................................... |
92 |
11.3.9.1 Реализация пункта меню «Сортировка файла по фамилиям» ......... |
92 |
11.3.9.2 Реализация пункта меню «Поиск студента по фамилии» ................ |
93 |
11.3.9.3 Реализация пункта меню «Добавление в упорядоченный файл из |
|
StringGrid1».......................................................................................................... |
93 |
11.3.9.4 Реализация пункта меню «Удаление записи из отсортированного |
|
файла»................................................................................................................... |
94 |
11.4 Задание для самостоятельной работы............................................................. |
94 |
11.5 Содержание отчета ............................................................................................ |
95 |
Контрольные вопросы............................................................................................... |
95 |
12 ЛАБОРАТОРНАЯРАБОТА№12. РАБОТАСТЕКСТОВЫМИФАЙЛАМИ .. |
96 |
12.1 Краткие теоретические сведения ..................................................................... |
96 |
5
12.1.1 Объявление файловой переменной для текстового файла ..................... |
96 |
12.1.2 Связывание файловой переменной с конкретным файлом..................... |
96 |
12.1.3 Открытие файла........................................................................................... |
97 |
12.1.3.1 Создание нового файла ........................................................................ |
97 |
12.1.3.2 Открытие файла для чтения................................................................. |
97 |
12.1.3.3 Открытие файла для дополнения........................................................ |
98 |
12.1.4 Текущая позиция файла.............................................................................. |
98 |
12.1.5 Записи данных в файл................................................................................. |
98 |
12.1.6 Чтение данных из файла........................................................................... |
100 |
12.1.6.1 Особенности чтения чисел из текстового файла............................. |
102 |
12.1.6.2 Особенности чтения данных типа String .......................................... |
103 |
12.1.6.3 Особенности чтения и записи символов .......................................... |
104 |
12.1.7 Закрытие и удаление файлов.................................................................... |
105 |
12.2 Перечень основных процедур для работы с текстовыми файлами............ |
105 |
12.3 Общая схема работы с текстовым файлом.................................................... |
106 |
12.3.1 Примеры работы с текстовыми файлами................................................ |
106 |
12.3.1.1 Пример ввода-вывода при решении простейшей задачи ............... |
106 |
12.3.1.2 Пример добавления данных из одного файла к другому................ |
107 |
12.3.1.3 Пример чтение из файла в поле Memo ............................................. |
108 |
12.3.1.4 Пример ввода-вывода при работе с массивом................................. |
108 |
12.3.1.5 Пример ввода-вывода при работе с матрицей................................. |
109 |
12.3.1.6 Пример ввода-вывода при работе с записями ................................. |
110 |
12.4 Задания для самостоятельной работы ........................................................... |
112 |
12.5 Содержание отчета .......................................................................................... |
112 |
Контрольные вопросы............................................................................................. |
113 |
РЕКОМЕНДОВАННАЯ ЛИТЕРАТУРА................................................................. |
113 |
6
7 ЛАБОРАТОРНАЯ РАБОТА № 7. ОДНОМЕРНЫЕ МАССИВЫ
Цели работы:
–Познакомиться с понятием массив и правилами его объявления.
–Познакомиться с понятием многомерные массивы.
–Познакомиться с операциями над массивами.
–Создать приложение, в котором наглядно выполняются различные операции с одномерными массивами. Обеспечить выбор операции над массивом с помощью компонента MainMenu.
7.1 КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ О МАССИВАХ
Массив представляет собой группу элементов одного и того же типа. Преимущество массива – простота доступа к отдельному элементу
массива и простота реализации самого массива. Поэтому массивы являются наиболее распространенным типом данных, особенно в вычислительных машинах.
7.1.1 Понятие массив
Структура данных формируется из множества данных определенного типа или других, более простых, структур данных.
Массив |
это структура данных, которая состоит из фиксированного числа |
||
элементов, |
каждый из которых имеет один |
и тот |
же тип. |
Элементы массива могут иметь стандартный тип |
или тип, |
введенный |
|
пользователем. |
|
|
Каждый элемент массива имеет свой номер, который называется индексом.
Доступ к элементу массива происходит путем указания имени массива и указания в квадратных скобках порядкового номера элемента.
7.1.2 Объявление массива
Статический массив – это массив, количество элементов которого заранее известно, т.е. количество элементов массива определяется при его объявлении.
Объявление одномерного массива имеет вид, представленный на рисунке 7.1.
Var <имя массива>: array[<тип индекса>] of <тип элементов> ;
Рисунок 7.1 – Синтаксис объявления одномерного массива
Тип индекса – это любой порядковый (ordinal) тип, например, Char, Boolean. Наиболее часто используется ограниченный тип, например, 0 .. 10 или
7
‘a’..’z’.
Тип индекса определяет границы изменения значений индекса.
Тип элементов определяет тип элементов, из которых состоит массив. Пример объявления массива с именем А, состоящего из десяти элементов
целого типа приведен ниже:
var A: |
array[1 .. 10] of integer; |
|
|
|
|
|
|||
Допустим, элементам массива присвоены конкретные значения (2, 5, 10, |
|||||||||
3, 6 ,0, 9, 4, 5, 7). Этот массив, для наглядности представим: |
|
||||||||
|
Имя элемента массива |
|
|
|
|
|
|||
A[1] A[2] |
A[3] A[4] |
A[5] A[6] |
A[7] |
A[8] A[9] |
A[10] |
||||
2 |
5 |
10 |
3 |
6 |
0 |
9 |
4 |
5 |
7 |
|
Значения элементов массива |
|
|
|
|
||||
|
Рисунок 7.2 – Схема одномерного массива |
|
Для доступа к элементам массива используется синтаксическая конструкция, состоящая из имени массива и индекса, который записывается в квадратных скобках. То есть доступ к элементам этого массива обеспечивается выражением: A[i]. Индекс i в данном примере является целым числом в диапазоне от 1 до 10. Таким образом, A[1] – это имя первого элемента, A[2] - имя второго элемента и т.д.
Индексированные элементы массива могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, им можно присваивать любые значения, соответствующие их типу.
Элементы массива могут иметь любой тип. Например, предложение, приведенное ниже, определяет массив символов.
var S : array [0 .. 10] of char;
Но массив символов это не строка, так как способ хранения в памяти для этих типов данных не одинаков. Единственное, что их объединяет – это способ обращения к элементам. И к элементам массива, и к символам строки
8
обращение делается путем указания индекса.
Ниже приведен пример использования массива для получения чисел Фибоначчи. Два первых числа Фибоначчи равны 1, а каждое последующее равно сумме двух предыдущих. В программе первые 2 элемента массива заполняются до цикла, остальные – в цикле.
…
var a : array [1..10] of integer; begin
a[1] := 1; a[2] := 1;
for i:=3 to 10 do
a[i] := a[i – 2] + a[ i – 1 ]; end;
Во всех приведенных примерах все характеристики массива объявлялись непосредственно при объявлении переменных. Но это не лучший способ объявления переменной типа массив. При работе с массивами лучше вначале объявить тип массива, а затем использовать этот тип при объявлении переменных. Например:
type TArr = array[1 .. 10] of integer; var A, B : TArr;
Здесь вначале для массивов из 10 целых чисел объявляется тип TArr, а затем объявляются переменные этого типа.
При объявлении массива удобно использовать именованные константы. Например:
const size = 10;
var ar1 : array[1..size] of integer;
7.1.3 Передача массивов в процедуры и функции
При создании функции или процедуры для обработки массива нужно иметь в виду, что в ее объявление нельзя включать описание индексов. Например, такое объявление процедуры вызовет сообщение компилятора о синтаксической ошибке.
9
Procedure MyProc(A:array[1..10] of integer);
В данном случае необходимо сначала объявить тип массива в разделе Type, а затем использовать его при описании массива в списке формальных параметров процедуры:
type TArr = array[1..10] of integer;
.
.
.
procedure MyProc(A: TArr);
Begin
End;
7.1.4 Операции с массивами
При работе с массивами приходится выполнять ряд специфических операций, связанных именно с этим типом данных. Наиболее распространенными из них являются:
–ввод массива
–вывод массива
–поиск максимального и минимального элемента массива
–поиск заданного элемента массива
–циклический сдвиг элементов массива
–сортировка массива
–вставка элемента в массив
–удаление элемента из массива
–объединение массивов
7.2ТИПОВЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С МАССИВАМИ
При решении учебных задач на обработку массива требуется неоднократно вводить, выводить массивы, а также выполнять над ними различные операции. Очевидно, что в этом случае удобно использовать заранее написанные процедуры и функции, которые целесообразно хранить во вспомогательном модуле. Такой модуль был создан. Он называется
UnitArrayDop и находится в папке ProjectToLection\toLection12.
Однако созданные процедуры и функции, которые записаны в этом модуле, могут стать универсальными только в том случае, если будут оперировать с одним и тем же типом массива. Поэтому в дополнительном модуле описан и тип такого массива. Предполагается, что при решении
10