Работа с записями
Пузырьковый алгоритм сортировки числовых данных, листинг программы. Основные типы данных и их представление в памяти компьютера. Логическая и физическая структура. Запись как структура данных в Паскале. Оператор присоединения, операции над множествами.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 30.09.2013 |
Размер файла | 242,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство науки и образования Республики Казахстан
Карагандинский государственный технический университет
Кафедра: ВТиПО
Лабораторная работа № 1
По дисциплине: «Структуры и методы обработки данных»
Тема: «Работа с записями»
Караганда 2013
Лабораторная работа № 1: «Работа с записями»
Цель работы: Использование на практике механизма работы с структурами данных и их компонентами.
Постановка задачи:
Разработать структуру записи. Предусмотреть наличие ключевого поля.
Составить не менее 20 записей по разработанной структуре.
Упорядочить записи по значению ключевого поля.
Сохранить созданное в виде файла на внешнем носителе.
Описание метода реализации:
При открытии программы создается файл базы данных, в которую будут записываться записи. База рассчитана на 20 записей. При нажатии на кнопку «Добавить» происходит считывание всех полей записи и запись записи в базу данных. Все поля ввода очищаются и затем происходит считывание базы данных. Записи находящиеся в ней переносятся в таблицу. Каждой колонке таблицы соответствует одно поле записи. Колонки в таблице сортируются по ключевому полю. Сортировка числовых данных происходит по алгоритму пузырьковой сортировки. Сортировка строковых данных происходит по схожему алгоритму. Позиция первых букв записей сравниваются друг с другом и ставятся в зависимости от того чья позиция меньше или больше.
Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids;
type
TForm1 = class(TForm)
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
Button1: TButton;
Button2: TButton;
StringGrid1: TStringGrid;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Actions;
procedure Vivod;
procedure Sortirovka;
private
{ Private declarations }
public
{ Public declarations }
end;
type
Students=record
Number:integer;
Name:string[20];
SurName:string[20];
Group:string[10];
Mark:integer;
end;
var
Form1: TForm1;
DB:file of Students;
Student:array [1..20] of Students;
i,k,P,l,PNumber:integer;
rod0,rod1,rod2,rod3,rod4:boolean;
Alpabet:string;
R,N:array of integer; // массив оценок, номеров
H,F,G:array of string; // массив имен, фамилий, групп
PName,PSurName,PGroup:string; //промежуточное значение для имен
sort:boolean;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
resp: word; // ответ пользователя
begin
rod0:=false;
rod1:=false;
rod2:=false;
rod3:=false;
rod4:=false;
Alpabet:='АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя';
AssignFile(DB, 'd:\Students.db');
{$I-}
Reset(DB); // открыть файл
Seek(DB, FileSize(DB)); // указатель записи в конец файла
{$I+}
if IOResult = 0
then button1.enabled := TRUE // теперь кнопка Добавить доступна
else
begin
resp := MessageDlg('Файл базы данных не найден.' +
'Создать новую БД?', mtInformation, [mbYes, mbNo], 0);
if resp = mrYes then
begin
{$I-}
rewrite(DB);
{$I+}
if IOResult = 0
then button1.enabled := TRUE
else ShowMessage('Ошибка создания файла БД.');
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=i+1;
if i=20 then begin ShowMessage('База заполнена! Добавление невозможно') end;
Student[i].Number:=i;
Student[i].Name:=LabeledEdit1.Text;
Student[i].SurName:=LabeledEdit2.Text;
Student[i].Group:=LabeledEdit3.Text;
Student[i].Mark:=StrToInt(LabeledEdit4.Text);
write(DB, Student[i]);
LabeledEdit1.Text:='';
LabeledEdit2.Text:='';
LabeledEdit3.Text:='';
LabeledEdit4.Text:='';
Button2.Click();
end;
procedure TForm1.Button2Click(Sender: TObject);
var
m:integer;
a,b:integer;
begin
for a:=0 to 20 do
for b:=0 to 3 do
StringGrid1.Cells[b,a]:='';
m:=-1;
Reset(DB);
while not EOF(DB) do
begin
m:=m+1;
read(DB, Student[m]); // прочитать строку из файла
i:=Student[m].Number;
StringGrid1.Cells[0,m]:=IntToStr(Student[m].Number);
StringGrid1.Cells[1,m]:=Student[m].Name;
StringGrid1.Cells[2,m]:=Student[m].SurName;
StringGrid1.Cells[3,m]:=Student[m].Group;
StringGrid1.Cells[4,m]:=IntToStr(Student[m].Mark);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
ans:word;
begin
ans := MessageDlg('Вы уверены?', mtInformation, [mbYes, mbNo], 0);
if ans = mrYes then
begin
{$I-}
rewrite(DB);
{$I+}
end;
end;
//сортировка номера
procedure TForm1.Button5Click(Sender: TObject);
begin
Actions;
if rod0=true then
begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if N[k-1]>N[k] then
begin
Sortirovka;
end;
end;
end;
rod0:=false;
end
else begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if N[k-1]<N[k] then
begin
Sortirovka;
end;
end;
end;
rod0:=true;
end;
Vivod;
end;
//сортировка оценок
procedure TForm1.Button9Click(Sender: TObject);
begin
Actions;
if rod4=false then
begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if R[k-1]>R[k] then
begin
Sortirovka;
end;
end;
end;
rod4:=true;
end
else begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if R[k-1]<R[k] then
begin
Sortirovka;
end;
end;
end;
rod4:=false;
end;
Vivod;
end;
// сортировка имен
procedure TForm1.Button6Click(Sender: TObject);
begin
Actions;
if rod1=false then
begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if H[k-1]>H[k] then
begin
Sortirovka;
end;
end;
end;
rod1:=true;
end
else begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if H[k-1]<H[k] then
begin
Sortirovka;
end;
end;
end;
rod1:=false;
end;
Vivod;
end;
//сортировка фамилий
procedure TForm1.Button7Click(Sender: TObject);
begin
Actions;
if rod2=false then
begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if F[k-1]>F[k] then
begin
Sortirovka;
end;
end;
end;
rod2:=true;
end
else begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if F[k-1]<F[k] then
begin
Sortirovka;
end;
end;
end;
rod2:=false;
end;
Vivod;
end;
//сортировка групп
procedure TForm1.Button8Click(Sender: TObject);
begin
Actions;
if rod3=false then
begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if G[k-1]>G[k] then
begin
Sortirovka;
end;
end;
end;
rod3:=true;
end
else begin
sort:=true;
while sort=true do begin
sort:=false;
for k:=1 to l-1 do begin
P:=0; PNumber:=0;
if G[k-1]<G[k] then
begin
Sortirovka;
end;
end;
end;
rod3:=false;
end;
Vivod;
end;
procedure TForm1.Actions;
begin
l:=0;
for k:=0 to 19 do begin
if StringGrid1.Cells[0,k]<>'' then l:=l+1;
end;
SetLength(R, l);
SetLength(N, l);
SetLength(H, l);
SetLength(F, l);
SetLength(G, l);
for k:=0 to l-1 do begin
R[k]:=StrToInt(StringGrid1.Cells[4,k]);
N[k]:=StrToInt(StringGrid1.Cells[0,k]);
H[k]:=(StringGrid1.Cells[1,k]);
F[k]:=(StringGrid1.Cells[2,k]);
G[k]:=(StringGrid1.Cells[3,k]);
end;
end;
procedure TForm1.Vivod;
begin
for k:=0 to l-1 do begin
StringGrid1.Cells[4,k]:=IntToStr(R[k]);
StringGrid1.Cells[0,k]:=IntToStr(N[k]);
StringGrid1.Cells[1,k]:=(H[k]);
StringGrid1.Cells[2,k]:=(F[k]);
StringGrid1.Cells[3,k]:=(G[k]);
end
end;
procedure TForm1.Sortirovka;
begin
//оценки
P:=R[k-1];
R[k-1]:=R[k];
R[k]:=P;
//номера
PNumber:=N[k-1];
N[k-1]:=N[k];
N[k]:=PNumber;
//фамилии
PName:=H[k-1];
H[k-1]:=H[k];
H[k]:=PName;
//фамилии
PSurname:=F[k-1];
F[k-1]:=F[k];
F[k]:=PSurname;
//группы
PGroup:=G[k-1];
G[k-1]:=G[k];
G[k]:=PGroup;
sort:=true;
end;
end.
Результаты работа программы:
Рис. 1
Анализ полученных результатов:
Программа может выполнять следующие действия:
- добавление записи «Студент» в базу данных и его 4 основные переменные: Имя, Фамилия, Группа и Оценка
- Считывание базы данных из файла и отображение записей из базы в виде таблицы
- Очищение базы данных от записей
- Сортировка записей по ключевым полям. Числовые записи сортируются по возрастанию и убыванию. Строковые записи сортируются по алфавиту (от А до Я и наоборот)
Вывод: в ходе выполнения данной лабораторной работы были приобретены навыки работы со структурами данных, а именно с записями в среде Object Pascal. Была написана программа для работы с записями, хранящимися в базе данных, и сортировкой этих записей по ключевым полям.
Ответы на контрольные вопросы:
1. Основные типы данных и их представление в памяти компьютера.
При обработке данных часто бывает необходимо собрать в одну коллекцию разнотипные данные. Для этого используются структурированные типы данных: записи - в Паскале, структуры - в Си. В Паскале записи отображаются в памяти так, что их компоненты располагаются последовательно. Каждая компонента обычно занимает целое число слов.Адрес какой-либо компоненты (поля) записи относительно начального адреса R называется смещением поля Kj. Оно вычисляется по формуле
Ki = S1+S2+…+Si-1,
где Sj - размер j-й компоненты в словах.
Для массива Кi = (I-l)S, т.к. все длины одинаковы.Доступ к компонентам записи ограничен - можно пользоваться лишь фиксированными идентификаторами. Это ограничение позволяет узнать относительные адреса во время трансляции, что увеличивает эффективность доступа к записям.
2. Понятие структуры. Логическая и физическая структуры. Структура - иерархически упорядоченная коллекция данных. Данные разных типов располагаются на определенных уровнях. Элементами записей могут быть:
- скалярные данные;
- массивы;
- записи.
Различные составные типы могут комбинироваться различными способами. Физическая структура данных - это способ физического представления данных в памяти компьютера. Логическая или абстрактная структура - это рассмотрение структуры данных без учета его представления в машинной памяти.
3. Запись как структура данных. В Паскале составной структурированный тип - запись - определяется описанием типа.
TYPE Т = RECORD
S1: T1;
S2 : T2;
. . . . .
SN:TN
END;
Ограничений на типы полей в записи нет. Обращение к элементам записи осуществляется с помощью составных имен, которые являются селекторами записи. Селектор состоит из имени записи и имен полей (подзаписей), однозначно определяющих элементарную компоненту записи.
4. Оператор присоединения. При работе с записями могут получиться слишком громоздкие тексты программ, т.к. обращаясь к элементам записи, вынуждены писать длинные имена, в которых одни и те же составляющие могут часто повторяться. Сократить описание позволяет оператор присоединения, имеющий вид:
WITH R DO S,
где WITH, DO - служебные слова;
R - список имен записи (через запятую);
S - любой оператор Паскаля.
Смысл: внутри оператора S имена полей записи можно использовать без префикса (имени записи и, возможно, имен старших подзаписей). Считается, что все они ссылаются на переменную R.
5. Записи с вариантами. На практике часто оказывается удобным рассматривать два типа как варианты одного и того же типа. Например, в геометрии можно использовать декартовы или полярные координаты точки на плоскости. Эти координаты можно считать типом, объединяющим два варианта записи, компонентами которой являются:
- две длины;
- длина и угол.
Для того, чтобы определить, какой вариант в данный момент принят, вводится третья компонента. Она называется дескриптором типа или полем признака. Например,
TYPE COORD = RECORD
CASE KIND : (DEC, POL) OF
DEC : (X, Y : REAL);
POL : (R, FI: REAL)
END;
Здесь имя поля признака - KIND, а имена координат либо Х и Y в случае DEC, либо R и FI в случае POL.
Множество значений типа COORD есть объединение двух типов:
T1=(X,Y: REAL)
Т2= (R, FI: REAL),
а его кардинальное число равно сумме кардинальных чисел T1 и Т2.
6. Понятие множества как структуры. Множество является фундаментальной оперативной статической структурой, объединяющей произвольный набор однотипных объектов, понимаемый как единое целое. Соответствующий тип описывается:
TYPE Т = SET OF T0,
где Т0 - базовый тип элементов множества. Базовым типом может быть только перечислимый или интервальный.Значениями переменной х типа Т являются множества элементов типа Т0. Они составляют множества всех подмножеств Т0. Такое множество называется множеством-степенью. Т.е. тип Т - это множество-степень своего базового типа Т0
7. Операции над множествами. Операции над множествами - операции теории множеств.
Присваивание: 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) |
Размещено на Allbest.ru
Подобные документы
Возможности языков программирования С и С++. Разработка и реализация информационно-поискового справочника "Блок питания", листинг программы. Функции и структура данных в программе. Динамическое распределение памяти, работа с файлами, несложные сортировки.
курсовая работа [38,7 K], добавлен 10.01.2011Представление данных в памяти компьютера. Обобщенные структуры и модели данных. Методы доступа к информации. Физическая организация системы управления базами данных, структура сервера. Архитектура "клиент-сервер". Создание базы данных с помощью "Денвер".
курсовая работа [770,3 K], добавлен 17.11.2014Основные понятия, используемые в теории управления базами данных. Характеристика объектов MS Access. Построение базы данных, содержащей информацию об учебном процессе текущего семестра. Свойства полей таблицы, работа с записями, импортирование данных.
лабораторная работа [46,0 K], добавлен 23.12.2010Базы данных, их сущность, структура и системы управления. Организация данных во внутримашинной сфере. Поле, запись, файл как основные типы структур данных файловой модели, их характеристика и особенности. Работа с запросами и вывод их полей на экран.
реферат [49,0 K], добавлен 12.11.2009Создание базы данных и СУБД. Структура простейшей базы данных. Особенности языка программирования Турбо Паскаль. Описание типов, констант, переменных, процедур и функций. Описание алгоритма базы данных (для сотрудников ГИБДД), листинг программы.
курсовая работа [26,3 K], добавлен 26.01.2012Создание программы, которая создает набор данных в динамической памяти компьютера и позволяет корректировать его. Описание программного комплекса. Обзор особенностей реализации программы с использованием модулей. Добавление данных в конец текущего набора.
курсовая работа [455,2 K], добавлен 28.08.2017Организация типов данных. Записи, оператор присоединения. Множества, операции над ними. Строки, стандартные процедуры и функции, работающие со строками. Совместимость типов. Явное и неявное преобразование типов. Многомерные массивы. Операции отношения.
презентация [30,8 K], добавлен 13.10.2013Структура микропроцессорной системы. Длина объектного кода команды. Входные и выходные данные. Представление чисел в эмуляторе. Команды, работающие со стеком и памятью. Запись данных в адрес памяти. Состояние ячеек памяти. Алгоритм загрузки программы.
курсовая работа [319,1 K], добавлен 07.08.2013Изучение категории типов данных, видов выражений и операций, работа на языке Си. Составление программы вычисления значения функции у(х) при произвольном значении х. Блок-схема алгоритма. Описание текста программы и рассмотрение контрольного примера.
лабораторная работа [124,7 K], добавлен 09.01.2012Представление (построение, создание) списка данных в виде линейного однонаправленного списка. Формирование массива данных. Вывод данных на экран. Алгоритм удаления, перемещения данных. Сортировка методом вставки. Алгоритм загрузки данных из файла.
курсовая работа [2,1 M], добавлен 16.05.2015