Работа с записями

Пузырьковый алгоритм сортировки числовых данных, листинг программы. Основные типы данных и их представление в памяти компьютера. Логическая и физическая структура. Запись как структура данных в Паскале. Оператор присоединения, операции над множествами.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.