Обработка набора данных в динамической памяти компьютера

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    135,92 Кб
  • Опубликовано:
    2017-08-28
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Обработка набора данных в динамической памяти компьютера

Содержание

Введение

. Описание программного комплекса

.1 Главная программа GLAV

.2 Модуль меню MENU

.3 Модуль создания файла с данными SOZDANYE

.4 Модуль создания набора данных OPEN

.5 Модуль вывода VIVOD

.6 Модуль добавления данных в конец DOBAVLEN

.7 Модуль поиска POISK

.8 Модуль DOZAP

.9 Модуль V_DR_ND

. Проверка программы на контрольном примере

.1 Запуск главной программы GLAV

.2 Запуск модуля создания файла с данными SOZDANYE

.3 Запуск модуля вывода VIVOD

.4 Запуск модуля добавления данных в конец DOBAVLEN

.5 Запуск модуля поиска POISK

.6 Запуск модуля DOZAP

.7 Запуск модуля V_DR_ND и переход к другому НД

Заключение

Список использованных источников

Приложение

Введение

Основной целью данного курсового проекта является обработка набора данных в динамической памяти компьютера. Была создана программа, которая создает набор данных в динамической памяти и позволяет корректировать его. Набор данных представляет собой массив указателей, каждый из элементов которого внесен в динамическую память при помощи константы типа запись из файла на внешнем носителе.

Запись (комбинированный тип) - составной тип, который служит для представления совокупности разнородных данных. Записи напоминают по структуре массивы: они составлены из ряда отдельных компонент, однако если компоненты массива должны принадлежать одному типу, записи могут содержать компоненты разных типов.

Для работы с динамическими программными объектами используется ссылочный тип или тип указателей. В переменной ссылочного типа хранится ссылка на программный объект (адрес объекта). Указатель может находиться в состояниях:

1 Содержать адрес какой-либо переменной, память под которую уже выделена.

2 Содержать специальный пустой адрес Nil.

Программа реализована с использованием модулей, в каждом из которых описана процедура.

Процедура - подпрограмма, которая вызывается специальным оператором из основной программы и после своего выполнения возвращает одно или несколько значений.

Из вызывающей программы в процедуру передается список формальных параметров. Между списками формальных и фактических параметров должны быть установлены соответствия по количеству, порядку следования и по типу. Модуль - отдельно хранимая и независимо компилируемая единица. Представляет собой совокупность программных ресурсов, предназначенных для использования другими модулями и программами.

Перечень запросов:

3 Создание набора данных (НД).

4 Добавление новых элементов в конец НД.

5 Просмотр всех элементов НД.

6 Поиск элемента по номеру.

7 Переход к работе с другим НД.

8 Добавление всех элементов в конец другого НД.

9 Добавление содержимого другого НД в конец текущего.

Множество данных - картины на выставке.

· автор (string);

· название (string);

· стоимость (longint);

· вид: живопись, графика, эскиз, другое (перечислимый тип).

1. Описание программного комплекса

1.1    Главная программа GLAV

Данная программа является основной. Она вызывает все модули, используемые для реализации запросов. Здесь с использованием модуля MYMUNY.TPU выводится меню, в котором можно выбрать дальнейшее действие над набором данных. Кроме меню на экран выводится текущий элемент. Перечисление используемых модулей

 uses crt,menu,sozdanye,poisk,vivod,dobavlen,dozap,v_dr_nd,open;

var a:masmenu;

pos,x,y,x1,y1,n:byte;

i,pozn,l:integer;

u:char;

put:string;

flag:boolean;

{Вывод текущего элемента}

{Формирование меню}

vertmenu(a,n,x,y,pos);

textbackground(black);

textcolor(white);

{Выбор пункта меню}

end.

1.2    Модуль меню MENU

В данном модуле содержится меню. При вызове процедуры vertmenu, описанной в модуле, основной программой на экране появляется меню.

unit menu;

interface

uses crt,sozdanye,open;

type masmenu=array[1..25] of string[50];

procedure vertmenu(a:masmenu;n,x,y:byte;var pos:byte);

{Описание процедуры}

procedure vertmenu;

begin

{Прорисовка окна с меню}

{Выбор пункта клавишами}

end;.

1.3    Модуль создания файла с данными SOZDANYE

Этот модуль содержит процедуру sozd, которая создает файл с данными путем последовательного ввода данных. Файл создается по адресу, который также указывается пользователем. Модуль SOZDANYE содержит в себе описание всех основных типов, используемых в дальнейшем всеми модулями. Это тип zap - запись с вариантами, тип mas - массив указателей и тип vid - пользовательский тип.

unit sozdanye;

{описание основных типов}

type

vid=(jiv,graf,ask,oth);

uk=^zap;

zap=record

avt:string[20];

nazv:string[20];

stoim:longint;

case kart:vid of

jiv:(j:string[10]);

graf:(g:string[10]);

ask:(a:string[10]);

oth:(o:string[10]);

end;

mas=array[1..200] of uk;

var nd1,nd2:file of zap;

{Описание процедуры}

procedure sozd;

{Открытие файла}

{Ввод данных}

{Запись в файл}

end .

1.4    Модуль создания набора данных OPEN

Модуль OPEN создает набор данных в динамической памяти компьютера. Содержит единственную процедуру vvod, которая после выполнения возвращает 2 набора данных в динамической памяти (переменные nd1, nd2)и 2 счетчика (n1, n2), которые показывают, сколько элементов содержится в каждом наборе данных. Также в этом модуле описываются такие переменные как nd, raz. Эти переменные служат для указания набора данных, с которым идет работа, и его размера (nd и raz соответственно). Переменные vs и nvs указывают второй набор данных, с которым работа пока не ведется. Все эти переменные являются глобальными и используются во всех модулях. По умолчанию первый набор данных является текущим.

unit open;

{Описание констант и глобальных переменных}

uses crt,sozdanye;

const put1='NABOR1.dat';

put2='NABOR2.dat';

var nd,nd1,nd2,vs:mas;

n1,n2,raz,nvs:integer;

z1,z2:zap;

f1,f2:file of zap;

procedure vvod(var nd1,nd2:mas;var n1,n2:integer);

{Описание процедуры}

procedure vvod;

{Чтение из файла и вывод в динамическую память}

end;.

1.5    Модуль вывода VIVOD

Включает в себя процедуру viv, формальными параметрами которой являются массив указателей и счетчик количества элементов массива. После вызова этой процедуры программой на экране выводится таблица с данными.

unit vivod;

uses crt,sozdanye;

procedure viv(nd:mas;raz:integer);

{Описание процедуры}

procedure viv;

begin

{Формирование таблицы} .

1.6    Модуль добавления данных в конец DOBAVLEN

динамический память программный модуль

Этот модуль предназначен для добавления данных в конец текущего набора. Процедура dob подразумевает ввод данных пользователем и после вызова программой возвращает обновленный набор данных и его размер.

unit dobavlen;

uses crt,sozdanye;

procedure dob(var nd:mas;var raz:integer);

{Описание процедуры}

procedure dob;

var key:char;

nz:zap;

k,x,y,id:byte;

b:masmenu;

begin

{Ввод новых данных}

{Запись данных в конец массива} .

1.7 Модуль поиска POISK

Этот модуль предназначен для поиска данных по номеру. Содержит процедуру р, которая выполняет поиск по введенному номеру .

unit poisk;

uses crt,sozdanye;

procedure p(nd:mas;nom,raz:integer);

{Описание процедуры}

procedure p;

begin

{Проверка номера на попадание}

{Вывод элементов под введенным номером}

end;.

1.8 Модуль DOZAP

Модуль DOZAP предназначен для записи содержимого другого набора данных в конец текущего. За это отвечает процедура copy, параметрами которой являются второй нерабочий массив и его номер, а возвращается текущий дополненный набор данных и новый размер.

unit dozap;

uses crt,sozdanye;

procedure copy(vs:mas;nvs:integer;var nd:mas;var raz:integer);

{Описание процедуры}

procedure copy;

begin

{Запись в текущий НД}

end;.

1.9 Модуль V_DR_ND

Содержит процедуру copy2, предназначенную для записи содержимого текущего набора данных в конец нерабочего. Принцип работы и параметры схожи с copy.

unit v_dr_nd;

uses crt,sozdanye;

procedure copy2(nd:mas;raz:integer;var vs:mas;var nvs:integer);

{Описание процедуры}

procedure copy2;

begin

{Запись в другой НД}

end;.

2. Проверка программы на контрольном примере

2.1 Запуск главной программы GLAV

При открытии программы, выводится меню (модуль MENU) и текущий элемент (рисунок 2.1). Наборы данных автоматически созданы при помощи модуля OPEN.

Рисунок 2.1 - Запуск главной программы

2.2 Запуск модуля создания файла с данными SOZDANYE

При выборе в меню пункта «Создание НД» происходит создание файла(рисунок 2.2). Необходимо вводить данные.

Рисунок 2.2 - Запуск модуля создания файла с данными SOZDANYE

2.3 Запуск модуля вывода VIVOD

При выборе в меню «Просмотр данных» на экран будет выведена таблица с данными (рисунок 2.3).

Рисунок 2.3 - Запуск модуля вывода VIVOD

2.4 Запуск модуля добавления данных в конец DOBAVLEN

Пункт меню «Добавить данные» вызывает процедуру модуля DOBAVLEN, с помощь которой можно добавить новые данные в конец текущего массива. Добавление данных представлено на рисунке 2.4.1, а новый набор данных - на рисунке 2.4.2.

Рисунок 2.4.1 - Запуск модуля вывода добавления данных в конец DOBAVLEN (добавление)

Рисунок 2.4.2 - Запуск модуля вывода добавления данных в конец DOBAVLEN (новый НД)

2.5 Запуск модуля поиска POISK

При выборе пункта меню «Поиск по номеру» вызывает модуль поиска, который выводит на экран и делает текущими данные, которые располагаются под указанным номером (рисунок 2.5).

Рисунок 2.5 - Запуск модуля поиска POISK

2.6 Запуск модуля DOZAP

Пункт меню «Копирование из другого НД» вызывает модуль DOZAP, который копирует данные из другого открытого массива в текущий и выводит на экран новый получившийся массив (рисунок 2.6).

Рисунок 2.6 - Запуск модуля DOZAP

2.7 Запуск модуля V_DR_ND и переход к другому НД

При выборе пункта меню «Копировать в другой НД» модуль V_DR_ND осуществляет копирование из текущего массива в другой и выводит результат на экран (рисунок 2.7.1).

Для перехода к другому набору данных нужно выбрать пункт «Другой НД». Этот переход осуществляется операторами, которые меняют местами текущий и другой массивы. В результате в главном меню меняется текущий элемент (2.7.2).

Рисунок 2.7.1 - Запуск модуля V_DR_ND

Рисунок 2.7.2 - Переход к другому НД

Заключение

Программа копирует данные из файла в массив указателей. Для этого используется переменная комбинированного типа, на котором основан тип указателей. После этого данные можно редактировать.

Программа позволяет создать другие файлы с данными.

Из массива указателей данные можно выводить на экран в виде таблицы. Данные можно дописать в другой набор данных или наоборот, дописать в текущий массив данные из другого.

Программа позволяет отслеживать текущий элемент, осуществлять поиск по номеру элементов.

Программы позволяет добавлять новые данные в конец массива, после завершения ввода полученный массив выводится на экран.

Данная программа справилась со всеми запросами и реализовала различные варианты работы с массивом указателей.

Список использованных источников

1 Зуев, Е. А. Программирование на языке Turbo Pascal 6.0,7.0,/ Е. А. Зуев// М.:Веста,Радио и связь, 1993. - 376с.

2 Свободная энциклопедия ВикипедиЯ [Электронный ресурс]. - 2012. - Режим доступа: http://ru.wikipedia.org. - Дата доступа: 07.05.2012.

3 Pascaler [Электронный ресурс]. - 2012. - Режим доступа: http://pascaler.ru. - Дата доступа: 07.05.2012.

4 Каталог картин [Электронный ресурс]. - 2012. - Режим доступа: http://catalog-kartin.ru. - Дата доступа: 07.05.2012.

Приложение

ПРОГРАММНЫЙ КОД МОДУЛЕЙ

Главная программа GLAV

program glav;

uses crt,menu,sozdanye,poisk,vivod,dobavlen,dozap,v_dr_nd,open;

var a:masmenu;

pos,x,y,x1,y1,n:byte;

i,pozn,l:integer;

u:char;

put:string;

flag:boolean;

vvod(nd1,nd2,n1,n2);

clrscr;

x:=1;

y:=10;

n:=7;

l:=1;

put:=put1;

raz:=n1;

nd:=nd1;

vs:=nd2;

nvs:=n2;

flag:=true;

repeat

a[1]:='создание НД';

a[2]:='добавление данных';

a[3]:='просмотр данных';

a[4]:='поиск по номеру';

a[5]:='копирование из другого НД';

a[6]:='копирование в другой НД';

a[7]:='другой НД';

clrscr;

{Вывод текущего элемента}

writeln('Текущий элемент:');

if l<=raz then

with nd[l]^ do

begin

write('автор - ');

writeln(avt);

write('название - ');

writeln(nazv);

write('стоимость - ');

writeln(stoim);

write('вид - ');

case kart of

jiv:writeln(j);

graf:writeln(g);

ask:writeln(a);

oth:writeln(o)

end;

end

{end with}

else

with nd[raz-1]^ do

begin

write('автор - ');

writeln(avt);

write('название - ');

writeln(nazv);

write('стоимость - ');

writeln(stoim);

write('вид - ');

case kart of

jiv:writeln(j);

graf:writeln(g);

ask:writeln(a);

oth:writeln(o)

end;

end;

{end with}

{Формирование меню}

vertmenu(a,n,x,y,pos);

textbackground(black);

textcolor(white);

clrscr;

window(1,1,80,25);

case pos of

1:sozd;

2:begin

clrscr;

dob(nd,raz);

if flag then

begin

n1:=raz;

nd1:=nd;

end

else

begin

n2:=raz;

nd2:=nd;

end;

{end if}

viv(nd,raz);

end;

3:begin

clrscr;

viv(nd,raz);

end;

4:begin

clrscr;

writeln('введите номер картины:');

readln(l);

p(nd,l,raz);

end;

5:begin

copy(vs,nvs,nd,raz);

if flag then

begin

nd1:=nd;

n1:=raz;

end

else

begin

nd2:=nd;

n2:=raz;

end;

{end if}

viv(nd,raz);

end;

6:begin

copy2(nd,raz,vs,nvs);

if flag then

begin

nd2:=vs;

n2:=nvs

end

else

begin

nd1:=vs;

n1:=nvs

end;

{end if}

viv(vs,nvs);

7:if flag then

begin

nd:=nd2;

raz:=n2;

vs:=nd1;

nvs:=n1;

l:=1;

flag:=false

end

else

begin

nd:=nd1;

raz:=n1;

vs:=nd2;

nvs:=n2;

flag:=true;

l:=1;

end;

{end if flag}

end;

writeln('нажмите Esc для выхода или любую клавишу');

u:=readkey;

until u=#27;.

Модуль меню MENU

unit menu;

uses crt,sozdanye,open;

type masmenu=array[1..25] of string[50];

procedure vertmenu(a:masmenu;n,x,y:byte;var pos:byte);

procedure vertmenu;

var i,j,x1,y1,p,max:byte;

key:char;

begin

if (x<0) or (x>80) or (y<0) or (y>25) then

begin

writeln('верхний угол не попадает в границы экрана');

exit

end;

{end if (x<0) or (x>80) or (y<0) or (y>25)}

max:=length(a[1]);

for i:=2 to n do

if max<length(a[i]) then

max:=length(a[i]);

{end if max<length(a[i])}

{end for i:=2 to n}

for i:=1 to n do

for j:=length(a[i]) to max do

a[i]:=a[i]+' ';

{end for j:=length(a[i]) to max}

{end for i:=1 to n}

x1:=x+max;

y1:=y+n;

if (x1<0) or (x1>80) or (y1<0) or (y1>25) then

begin

writeln('нижний угол не попадает в границы экрана');

exit

end;

{end if (x1<0) or (x1>80) or (y1<0) or (y1>25)}

window(x,y,x1,y1);

textbackground(white);

textcolor(green);

asm

mov ah,$01

mov ch,$20

mov cl,$00

int $10

end;

for i:=1 to n do

begin

gotoxy(1,i);

write(a[i])

end;

{end for i:=1 to n}

gotoxy(1,1);

textbackground(red);

textcolor(white);

write(a[1]);

pos:=1;

repeat

p:=pos;

key:=readkey;

if key=#0 then

key:=readkey;

{end if key=#0}

case key of

#27:begin

pos:=0;

break

end;

#13:break;

#72:begin

pos:=pos-1;

if pos=0 then

pos:=n;

{end if pos=0}

end;

#80:begin

pos:=pos+1;

if pos=n+1 then

pos:=1;

{end if pos=n+1}

end;

end;

gotoxy(1,p);

textbackground(white);

textcolor(green);

write(a[p]);

gotoxy(1,pos);

textbackground(red);

textcolor(white);

write(a[pos]);

until false;

asm

mov ah,$01

mov ch,$06

mov cl,$07

int $10

end;

end;.

Модуль создания файла с данными SOZDANYE

sozdanye;

uses crt;

{описание основных типов}

type

vid=(jiv,graf,ask,oth);

uk=^zap;

zap=record

avt:string[20];

nazv:string[20];

stoim:longint;

case kart:vid of

jiv:(j:string[10]);

graf:(g:string[10]);

ask:(a:string[10]);

oth:(o:string[10]);

end;

mas=array[1..200] of uk;

var nd1,nd2:file of zap;

procedure sozd;

procedure sozd;

var zapis:zap;

ind:byte;

key:char;

put:string;

f:file of zap;

begin

clrscr;

{Открытие файла}

writeln('введите путь к файлу:');

readln(put);

assign(f,put);

rewrite(f);

repeat

with zapis do

begin

writeln('введите ФИО автора картины');

readln(avt);

writeln('введите название картины:');

readln(nazv);

writeln('введите стоимость картины:');

readln(stoim);

writeln('введите:');

writeln('1 если живопись');

writeln('2 если графика');

writeln('3 если эскиз');

writeln('4 если другое');

readln(ind);

case ind of

1:kart:=jiv;

2:kart:=graf;

3:kart:=ask;

4:kart:=oth;

end;

case kart of

jiv:j:='живопись';

graf:g:='графика';

ask:a:='эскиз';

oth:o:='другое'

end;

end;

{end with zapis}

{Запись в файл}

write(f,zapis);

writeln('нажмите Esc для выхода или любую клавишу');

key:=readkey;

until key=#27;

end;.

Модуль создания набора данных OPEN

open;

uses crt,sozdanye;

const put1='NABOR1.dat';

put2='NABOR2.dat';

var nd,nd1,nd2,vs:mas;

n1,n2,raz,nvs:integer;

z1,z2:zap;

f1,f2:file of zap;

procedure vvod(var nd1,nd2:mas;var n1,n2:integer);

implementation

procedure vvod;

begin

assign(f1,put1);

reset(f1);

n1:=1;

n2:=1;

{Чтение из файла и вывод в динамическую память}

repeat

read(f1,z1);

new(nd1[n1]);

nd1[n1]^.avt:=z1.avt;

nd1[n1]^.nazv:=z1.nazv;

nd1[n1]^.stoim:=z1.stoim;

nd1[n1]^.kart:=z1.kart;

with nd1[n1]^ do

case kart of

jiv:j:='живопись';

graf:g:='графика';

ask:a:='эскиз';

oth:o:='другое';

end;

{end with nd1[n1]^}

inc(n1);

until eof(f1);

close(f1);

assign(f2,put2);

reset(f2);

repeat

read(f2,z2);

new(nd2[n2]);

nd2[n2]^.avt:=z2.avt;

nd2[n2]^.nazv:=z2.nazv;

nd2[n2]^.stoim:=z2.stoim;

nd1[n2]^.kart:=z2.kart;

with nd2[n2]^ do

case kart of

jiv:j:='живопись';

graf:g:='графика';

ask:a:='эскиз';

oth:o:='другое';

end;

{end with nd2[n2]^}

inc(n2);

until eof(f2);

close(f2);

end;.

Модуль вывода VIVOD

vivod;

uses crt,sozdanye;

procedure viv(nd:mas;raz:integer);

procedure viv;

var i:integer;

z:zap;

begin

{Формирование таблицы}

i:=0;

write('┌────┬');

writeln('─────────┬──────────┬──────────┐');

write('│ # │ ФИО автора │');

writeln(' Название│ Стоимость│ Вид│');

while i<>(raz-1) do

begin

inc(i);

write('├───┼────────────────────┼');

writeln('─────────┼──────────┼──────────┤');

z.avt:=nd[i]^.avt;

z.nazv:=nd[i]^.nazv;

z.stoim:=nd[i]^.stoim;

z.kart:=nd[i]^.kart;

case z.kart of

jiv:z.j:='живопись';

graf:z.g:='графика';

ask:z.a:='эскиз';

oth:z.o:='другое'

end;

with z do

begin

write('│',i:3,'│',avt:20,'│',nazv:20,'│',stoim:10,'│');

case kart of

jiv:writeln(j:10,'│');

graf:writeln(g:10,'│');

ask:writeln(a:10,'│');

oth:writeln(o:10,'│');

end;

end;

{end with z}

end;

{end while i<>(raz-1)}

write('└───┴────────────────────┴');

writeln('───┴──────────┴──────────┘');

end;.

Модуль добавления данных в конец DOBAVLEN

dobavlen;

uses crt,sozdanye;

procedure dob(var nd:mas;var raz:integer);

procedure dob;

var key:char;

nz:zap;

k,x,y,id:byte;

b:masmenu;

begin

k:=4;

x:=1;

y:=10;

b[1]:='живопись';

b[2]:='графика';

b[3]:='эскиз';

b[4]:='другое';

repeat

with nz do

begin

writeln('введите ФИО автора картины');

readln(avt);

writeln('введите название картины:');

readln(nazv);

writeln('введите стоимость картины:');

readln(stoim);

vertmenu(b,k,x,y,id);

textbackground(black);

window(1,1,80,25);

clrscr;

case id of

1:kart:=jiv;

2:kart:=graf;

3:kart:=ask;

4:kart:=oth;

end;

case kart of

jiv:j:='живопись';

graf:g:='графика';

ask:a:='эскиз';

oth:o:='другое'

end;

end;

{end with}

new(nd[raz]);

nd[raz]^:=nz;

inc(raz);

writeln('нажмите Esc для выхода или любую клавишу');

key:=readkey;

until key=#27;

end;.

Модуль поиска POISK

poisk;

uses crt,sozdanye;

procedure p(nd:mas;nom,raz:integer);

procedure p;

begin

if nom>=raz then

writeln('номер пуст')

else

with nd[nom]^ do

begin

writeln('название картины - ',nazv);

writeln('стоимость картины - ',stoim);

write('вид - ');

case kart of

jiv:writeln(j);

graf:writeln(g);

ask:writeln(a);

oth:writeln(o);

end;

end;

{end with};

{end if}

end;.

Модуль DOZAP

dozap;

uses crt,sozdanye;

procedure copy(vs:mas;nvs:integer;var nd:mas;var raz:integer);

procedure copy;

var putcopy:string;

j,q,h:integer;

begin

j:=1;

{Запись в текущий НД}

repeat

new(nd[raz]);

nd[raz]^:=vs[j]^;

with nd[raz]^ do

case kart of

jiv:j:='живопись';

graf:g:='графика';

ask:a:='эскиз';

oth:o:='другое';

end;

{end with}

inc(j);

inc(raz);

until j=nvs;

writeln('скопировано');

end;.

Модуль V_DR_ND

unit v_dr_nd;

uses crt,sozdanye;

procedure copy2(nd:mas;raz:integer;var vs:mas;var nvs:integer);

procedure copy2;

var j:integer;

begin

j:=1;

{Запись в другой НД}

repeat

new(vs[nvs]);

vs[nvs]^:=nd[j]^;

with vs[nvs]^ do

case kart of

jiv:j:='живопись';

graf:g:='графика';

ask:a:='эскиз';

oth:o:='другое';

end;

{end with}

inc(j);

inc(nvs);

until j=raz;

writeln('скопировано');

end;.

Похожие работы на - Обработка набора данных в динамической памяти компьютера

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!