Работа с записями
Министерство
науки и образования Республики Казахстан
Карагандинский
государственный технический университет
Кафедра:
ВТиПО
Лабораторная
работа № 1
По
дисциплине: «Структуры и методы обработки данных»
Тема:
«Работа с записями»
Караганда
2013
Лабораторная работа № 1: «Работа с записями»
Цель работы: Использование на практике механизма
работы с структурами данных и их компонентами.
Постановка задачи:
Разработать структуру записи. Предусмотреть
наличие ключевого поля.
Составить не менее 20 записей по разработанной
структуре.
Упорядочить записи по значению ключевого поля.
Сохранить созданное в виде файла на внешнем
носителе.
Описание метода реализации:
При открытии программы создается файл базы
данных, в которую будут записываться записи. База рассчитана на 20 записей. При
нажатии на кнопку «Добавить» происходит считывание всех полей записи и запись
записи в базу данных. Все поля ввода очищаются и затем происходит считывание
базы данных. Записи находящиеся в ней переносятся в таблицу. Каждой колонке
таблицы соответствует одно поле записи. Колонки в таблице сортируются по
ключевому полю. Сортировка числовых данных происходит по алгоритму пузырьковой
сортировки. Сортировка строковых данных происходит по схожему алгоритму.
Позиция первых букв записей сравниваются друг с другом и ставятся в зависимости
от того чья позиция меньше или больше.
Листинг программы:
unit Unit1;, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, Grids;=
class(TForm): TLabeledEdit;: TLabeledEdit;: TLabeledEdit;: TLabeledEdit;:
TButton;: TButton;: TStringGrid;: TButton;: TButton;: TButton;: TButton;:
TButton;: TButton;: TButton;FormCreate(Sender: TObject);Button3Click(Sender:
TObject);Button1Click(Sender: TObject);Button2Click(Sender:
TObject);Button4Click(Sender: TObject);Button5Click(Sender:
TObject);Button9Click(Sender: TObject);Button6Click(Sender:
TObject);Button7Click(Sender: TObject);Button8Click(Sender:
TObject);Actions;Vivod;Sortirovka;
{ Private declarations }
{ Public declarations
};=record:integer;:string[20];:string[20];:string[10];:integer;;: TForm1;:file
of Students;:array [1..20] of
Students;,k,P,l,PNumber:integer;,rod1,rod2,rod3,rod4:boolean;:string;,N:array
of integer; // массив оценок,
номеров,F,G:array
of string; // массив имен,
фамилий,
групп,PSurName,PGroup:string;
//промежуточное
значение
для
имен:boolean;
{$R *.dfm}TForm1.FormCreate(Sender:
TObject);
var: word; // ответ пользователя
rod0:=false;:=false;:=false;:=false;:=false;:='АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя';(DB,
'd:\Students.db');
{$I-}(DB);
// открыть файл
Seek(DB,
FileSize(DB));
// указатель записи в конец файла
{$I+}IOResult = 0button1.enabled :=
TRUE // теперь
кнопка
Добавить
доступна
else:= MessageDlg('Файл базы данных не найден.'
+
'Создать новую БД?',
mtInformation, [mbYes, mbNo], 0);resp = mrYes then
{$I-}(DB);
{$I+}IOResult = 0button1.enabled :=
TRUEShowMessage('Ошибка создания
файла
БД.');;;;TForm1.Button3Click(Sender:
TObject);.Close;;TForm1.Button1Click(Sender: TObject);:=i+1;i=20 then begin
ShowMessage('База заполнена!
Добавление
невозможно')
end;[i].Number:=i;[i].Name:=LabeledEdit1.Text;[i].SurName:=LabeledEdit2.Text;[i].Group:=LabeledEdit3.Text;[i].Mark:=StrToInt(LabeledEdit4.Text);(DB,
Student[i]);.Text:='';.Text:='';.Text:='';.Text:='';.Click();;TForm1.Button2Click(Sender:
TObject);:integer;,b:integer;a:=0 to 20 dob:=0 to 3
do.Cells[b,a]:='';:=-1;(DB);not EOF(DB) do
begin:=m+1;(DB, Student[m]); // прочитать строку
из файла
i:=Student[m].Number;.Cells[0,m]:=IntToStr(Student[m].Number);.Cells[1,m]:=Student[m].Name;.Cells[2,m]:=Student[m].SurName;.Cells[3,m]:=Student[m].Group;.Cells[4,m]:=IntToStr(Student[m].Mark);;;TForm1.Button4Click(Sender:
TObject);:word;:= MessageDlg('Вы
уверены?',
mtInformation, [mbYes, mbNo], 0);ans = mrYes then
{$I-}(DB);
{$I+};;
//сортировка
номераTForm1.Button5Click(Sender:
TObject);;rod0=true then:=true;sort=true do begin:=false;k:=1 to l-1 do
begin:=0; PNumber:=0;N[k-1]>N[k] then;;;;:=false;begin:=true;sort=true do
begin:=false;k:=1 to l-1 do begin:=0; PNumber:=0;N[k-1]<N[k]
then;;;;:=true;;;;
//сортировка
оценокTForm1.Button9Click(Sender:
TObject);;rod4=false then:=true;sort=true do begin:=false;k:=1 to l-1 do
begin:=0; PNumber:=0;R[k-1]>R[k] then;;;;:=true;begin:=true;sort=true do
begin:=false;k:=1 to l-1 do begin:=0; PNumber:=0;R[k-1]<R[k]
then;;;;:=false;;;;
// сортировка
именTForm1.Button6Click(Sender:
TObject);;rod1=false then:=true;sort=true do begin:=false;k:=1 to l-1 do
begin:=0; PNumber:=0;H[k-1]>H[k] then;;;;:=true;begin:=true;sort=true do
begin:=false;k:=1 to l-1 do begin:=0; PNumber:=0;H[k-1]<H[k]
then;;;;:=false;;;;
//сортировка
фамилийTForm1.Button7Click(Sender:
TObject);;rod2=false then:=true;sort=true do begin:=false;k:=1 to l-1 do
begin:=0; PNumber:=0;F[k-1]>F[k] then;;;;:=true;begin:=true;sort=true do
begin:=false;k:=1 to l-1 do begin:=0; PNumber:=0;F[k-1]<F[k]
then;;;;:=false;;;;
//сортировка
группTForm1.Button8Click(Sender:
TObject);;rod3=false then:=true;sort=true do begin:=false;k:=1 to l-1 do
begin:=0; PNumber:=0;G[k-1]>G[k] then;;;;:=true;begin:=true;sort=true do
begin:=false;k:=1 to l-1 do begin:=0; PNumber:=0;G[k-1]<G[k]
then;;;;:=false;;;;TForm1.Actions;:=0;k:=0 to 19 do
beginStringGrid1.Cells[0,k]<>'' then l:=l+1;;(R, l);(N, l);(H, l);(F,
l);(G, l);k:=0 to l-1 do
begin[k]:=StrToInt(StringGrid1.Cells[4,k]);[k]:=StrToInt(StringGrid1.Cells[0,k]);[k]:=(StringGrid1.Cells[1,k]);[k]:=(StringGrid1.Cells[2,k]);[k]:=(StringGrid1.Cells[3,k]);;;TForm1.Vivod;k:=0
to l-1 do begin.Cells[4,k]:=IntToStr(R[k]);.Cells[0,k]:=IntToStr(N[k]);.Cells[1,k]:=(H[k]);.Cells[2,k]:=(F[k]);.Cells[3,k]:=(G[k]);;TForm1.Sortirovka;
//оценки:=R[k-1];[k-1]:=R[k];[k]:=P;
//номера:=N[k-1];[k-1]:=N[k];[k]:=PNumber;
//фамилии:=H[k-1];[k-1]:=H[k];[k]:=PName;
//фамилии:=F[k-1];[k-1]:=F[k];[k]:=PSurname;
//группы:=G[k-1];[k-1]:=G[k];[k]:=PGroup;
sort:=true;;.
Результаты работа программы:
Рис. 1
Анализ полученных результатов:
Программа может выполнять следующие действия:
добавление записи «Студент» в базу данных и его
4 основные переменные: Имя, Фамилия, Группа и Оценка
Считывание базы данных из файла и отображение
записей из базы в виде таблицы
Очищение базы данных от записей
Сортировка записей по ключевым полям. Числовые
записи сортируются по возрастанию и убыванию. Строковые записи сортируются по
алфавиту (от А до Я и наоборот)
Вывод: в ходе выполнения данной лабораторной
работы были приобретены навыки работы со структурами данных, а именно с
записями в среде Object Pascal. Была написана программа для работы с записями,
хранящимися в базе данных, и сортировкой этих записей по ключевым полям.
Ответы на контрольные вопросы:
. Основные типы данных и их представление в
памяти компьютера.
При обработке данных часто бывает необходимо
собрать в одну коллекцию разнотипные данные. Для этого используются
структурированные типы данных: записи - в Паскале, структуры - в Си. В Паскале
записи отображаются в памяти так, что их компоненты располагаются
последовательно. Каждая компонента обычно занимает целое число слов.Адрес
какой-либо компоненты (поля) записи относительно начального адреса R называется
смещением поля Kj. Оно вычисляется по формуле
= S1+S2+…+Si-1,
где Sj - размер j-й компоненты в словах.
Для массива Кi = (I-l)S, т.к. все длины
одинаковы.Доступ к компонентам записи ограничен - можно пользоваться лишь
фиксированными идентификаторами. Это ограничение позволяет узнать относительные
адреса во время трансляции, что увеличивает эффективность доступа к записям.
. Понятие структуры. Логическая и физическая
структуры. Структура - иерархически упорядоченная коллекция данных. Данные
разных типов располагаются на определенных уровнях. Элементами записей могут
быть:
скалярные данные;
массивы;
записи.
Различные составные типы могут комбинироваться
различными способами. Физическая структура данных - это способ физического
представления данных в памяти компьютера. Логическая или абстрактная структура
- это рассмотрение структуры данных без учета его представления в машинной
памяти.
. Запись как структура данных. В Паскале
составной структурированный тип - запись - определяется описанием типа.
TYPE Т
= RECORD: T1;
S2 : T2;
. . . . .:TN;
. Оператор присоединения. При работе с записями
могут получиться слишком громоздкие тексты программ, т.к. обращаясь к элементам
записи, вынуждены писать длинные имена, в которых одни и те же составляющие
могут часто повторяться. Сократить описание позволяет оператор присоединения,
имеющий вид:
WITH R DO S,
где WITH,
DO - служебные
слова;- список имен записи (через запятую);- любой оператор Паскаля.
Смысл: внутри оператора S имена полей записи
можно использовать без префикса (имени записи и, возможно, имен старших
подзаписей). Считается, что все они ссылаются на переменную R.
. Записи с вариантами. На практике часто оказывается
удобным рассматривать два типа как варианты одного и того же типа. Например, в
геометрии можно использовать декартовы или полярные координаты точки на
плоскости. Эти координаты можно считать типом, объединяющим два варианта
записи, компонентами которой являются:
две длины;
длина и угол.
Для того, чтобы определить, какой вариант в
данный момент принят, вводится третья компонента. Она называется дескриптором
типа или полем признака. Например,
COORD = RECORD
CASE KIND : (DEC, POL) OF: (X, Y :
REAL);: (R, FI: REAL);
Здесь имя поля признака - KIND, а имена
координат либо Х и Y в случае DEC, либо R и FI в случае POL.
Множество значений типа COORD есть объединение
двух типов:
T1=(X,Y: REAL)
Т2= (R, FI: REAL),
а его кардинальное число равно сумме кардинальных
чисел T1 и Т2.
. Понятие множества как структуры. Множество
является фундаментальной оперативной статической структурой, объединяющей
произвольный набор однотипных объектов, понимаемый как единое целое.
Соответствующий тип описывается:
TYPE Т
= SET OF T0,
где Т0 - базовый тип элементов множества.
Базовым типом может быть только перечислимый или интервальный.Значениями
переменной х типа Т являются множества элементов типа Т0. Они составляют
множества всех подмножеств Т0. Такое множество называется множеством-степенью.
Т.е. тип Т - это множество-степень своего базового типа Т0
. Операции над множествами. Операции над
множествами - операции теории множеств.
Присваивание: CH := [12]; D:= [SU, FR];
Объединение:
множество паскаль запись оператор
А = [1, 2, 3, 4, 5]
В = [2, 5, 6, 7, 8]
А+В=[1, 2, 3, 4, 5, 6, 7, 8]
Пересечение:
А * В = [2, 5]
Разность
А-В = [1, 3, 4]
Отношение
Паскаль
|
Математическая
запись
|
значение
|
A=B
|
(A
= B)
|
True
false
|
A<>B
|
(A
≠ B)
|
|
A<=B
|
(A
≥ B)
|
|
A=>B
|
(A
≤ B)
|
|
x
IN A
|
(x
A)
|
|