Обработка массива, типизированного файла и динамического линейного списка
Автор работы: Пользователь скрыл имя, 27 Февраля 2012 в 18:54, лабораторная работа
Краткое описание
При обработке информации числовые данные к заданию должны храниться в текстовом файле, который создается самим студентом любым способом. Необходимо переписать числовые данные из текстового файла в:
1. одномерный массив,
2. типизированный файл,
3. линейный динамический список.
Содержание работы
Задание
Описание порядка действий
Блок схема процедуры на примере одномерного массива
Текст программы
Выводы
Содержимое работы - 1 файл
Отчёт по общей работе.doc
— 90.00 Кб (Скачать файл)Федеральное агентство по образованию РФ
ГОУ ВПО «Ижевский Государственный Технический Университет»
Институт непрерывного профессионального образованию
Факультет «Информатика и вычислительная техника»
Кафедра «Вычислительная техника»
Отчет по лабораторной работе
по теме «Обработка массива, типизированного файла и динамического линейного списка»
Выполнил:
студент группы 2-78-1
Проверил:
доцент
Ижевск – 2011
3
I. Оглавление
Задание
Описание порядка действий
Блок схема процедуры на примере одномерного массива
Текст программы
Выводы
II. Задание
При обработке информации числовые данные к заданию должны храниться в текстовом файле, который создается самим студентом любым способом. Необходимо переписать числовые данные из текстового файла в:
1. одномерный массив,
2. типизированный файл,
3. линейный динамический список.
Необходимо обработать все эти данные по одному и тому же алгоритму в соответствии варианта задания и выполнить в виде трех процедур, не связанных между собой (например, при обработке типизированного файла или динамического списка не ссылаться на размер массива и т.д.).
Вариант №1
Рассортировать числа по возрастанию методом « пузырька», затем удалить нулевые значения. Количество удаленных нулей добавить первым значением.
Описание порядка действий
Сортировка пузырьковым методом подобна движению пузырьков в резервуаре с водой, когда каждый пузырёк находит свой собственный уровень.
Таким образом, создаем массив (файл, динамический список), читая элементы из текстового файла, затем преобразуем его, просматривая n-1 раз, каждый раз уменьшая диапазон просмотра на один элемент. Для перестановки элементов используется буферная переменная. Выполнение этого алгоритма опишем тремя процедурами.
В головной программе вызывать процедуры будем в цикле repeat…until оператором варианта case, считывая оператором readkey номер процедуры.
Repeat
Clrscr;
WriteLn('1) Процедура работы с массивом;');
WriteLn('2) Процедура работы с типизированным файлом;');
WriteLn('3) Процедура работы с динамическим списком;');
WriteLn('4) Вывод содержимого файла;');
WriteLn('0) Выход.');
Case readkey of
'1': Massiv;
'2': Tip;
'3': DinSp;
'4': Vivod;
'0': begin
WriteLn('До свидания!');
Break;
end;
end;
until readkey = '911';
III. Блок схема процедуры на примере одномерного массива
Да
IV. Текст программы
Program Ob_rab;
Uses crt;
Var f: text;
Procedure Vivod;
var t:string;
begin
ClrScr;
Reset(f);
WriteLn('Содержимое файла ');
While not seekeof(f) do
begin
Read(f,t);
Write(t);
end;
end;
Procedure massiv; {Процедура работы с одномерным массивом}
var i,n,j,buf,k:integer;
m: array [0..100] of integer;
begin
ClrScr;
Reset(f);
n:=0; k:=0;
WriteLn('Изначальный массив');
While not seekeof(f) do {Формирование массива}
begin
inc(n);
Read(f,m[n]);
Write(m[n],' ');
if m[n] = 0 then inc(k);
end;
WriteLn;
For j:= 1 to n-1 do {Сортировка методом “пузырька”}
For i:= 1 to n-j do
if m[i] > m[i+1] then
begin
buf:= m[i];
m[i]:= m[i+1];
m[i+1]:=buf;
end;
m[0]:=k;
WriteLn('Преобразованный массив');
For i:= 1 to n do {Удаление нулей}
if m[i]=0 then m[i]:=m[i+k];
n:=n-k;
For i:= 0 to n do Write(m[i],' ');
end;
Procedure Tip;
Type fil = file of integer;
var f2: fil;
i,j,a,b,k: integer;
begin
ClrScr;
Reset(f); k:=0;
Assign(f2,'ob\file.lol'); Rewrite(f2);
WriteLn('Содержимое типизированного файла:');
While not seekeof(f) do {Формирование типизированного файла}
begin
Read(f,a);
if a = 0 then inc(k);
Write(f2,a);
Write(a,' ');
end;
WriteLn;
For j:= 0 to filesize(f2)-2 do {Сортировка методом “пузырька”}
For i:= 0 to filesize(f2)-j-2 do
begin
Seek(f2,i);
Read(f2,a,b);
if a > b then
begin
Seek(f2,filepos(f2)-2);
Write(f2,b,a);
end;
end;
Reset(f2); j:= 0; b:=-1;
For i:= 0 to filesize(f2)-1 do {Удаление нулей}
begin
Seek(f2,i);
Read(f2,a);
If a <> 0 then
begin
seek(f2,i);
If j <> 0 then
begin
inc(b);
Seek(f2,j+b);
end;
Write(f2,a);
end
else if j = 0 then j:= i;
end;
Seek(f2,j+b+1);
if j <> 0 then Truncate(f2);
For i:= filesize(f2)-1 downto 0 do
begin
Seek(f2,i);
Read(f2,a);
Write(f2,a)
end;
Reset(f2);
Write(f2,k);
Reset(f2);
WriteLn('Преобразованный файл');
For i:= 0 to filesize(f2)-1 do
begin
Read(f2,a);
Write(a,' ');
end;
end;
Procedure DinSp;
type uk=^chis;
chis=record
x: integer;
adr: uk;
end;
var p1,p2,first: uk;
k,buf: integer;
p: boolean;
begin
ClrScr;
Reset(f);
First:= Nil; k:=0;
While not seekeof(f) do {Формирование динамического списка}
begin
New(p1);
Read(f,p1^.x);
If First=Nil then First:=p1
else p2^.adr:=p1;
p2:=p1;
end;
p2^.adr:=nil;
WriteLn('Динамический список до преобразования');
p1:=first;
While p1<>Nil do
begin
Write(p1^.x,' ');
p1:=p1^.adr;
end;
Repeat {Сортировка методом “пузырька”}
p:=true;
p1:=first;
while p1^.adr <> nil do
begin
if p1^.x > p1^.adr^.x then
begin
buf:=p1^.x;
p1^.x:=p1^.adr^.x;
p1^.adr^.x:=buf;
p:=false;
end;
p1:=p1^.adr;
end;
until p;
p1:=first;
p2:=p1;
While p1<> Nil do {Удаление нулей}
If p1^.x <> 0 then
begin
p2:=p1;
p1:=p1^.adr;
end
else if p1 = first then
begin
inc(k);
first:=p1^.adr;
dispose(p1);
p1:=first;
end
else
begin
inc(k);
p2^.adr:=p1^.adr;
dispose(p1);
p1:=p2^.adr;
end;
WriteLn;
New(p1);
p1^.x:=k;
p1^.adr:=first;
first:=p1;
WriteLn('Динамический список после преобразования');
p1:=first;
While p1<>Nil do
begin
Write(p1^.x,' ');
p1:=p1^.adr;
end;
end;
Begin {Головная программа}
Assign(f,'ob\chis.txt');
Repeat
Clrscr;
WriteLn('1) Процедура работы с массивом;');
WriteLn('2) Процедура работы с типизированным файлом;');
WriteLn('3) Процедура работы с динамическим списком;');
WriteLn('4) Вывод содержимого файла;');
Case readkey of
'1': Massiv;
'2': Tip;
'3': DinSp;
'4': Vivod;
'0': begin
WriteLn('До свидания!');
Break;
end;
end;
until readkey = '911';
Readkey;
End.
Выводы
Согласно условию задачи, выполнялась работа с различными видами данных: одномерный массив, типизированный файл, динамический список. Каждый из них имеет свои достоинства и недостатки.
1. Одномерный массив
Поскольку одномерный массив описан в статической памяти, то работать с ним немного проще, но при этом есть существенный недостаток – размер выделяемой памяти ограничен и нужно заранее указать количество элементов массива. При выполнении циклического сдвига, нужно переписывать весь массив и дописывать последний элемент в начало.
2. Типизированный файл
При работе с типизированным файлом количество элементов не ограничено, и при работе с ним не нужно знать количество элементов, поскольку есть признак конца файла eof и функция filesize . При выполнении циклического сдвига, также нужно переписывать файл.
3. Динамический список
При работе с ним, также не нужно знать количество элементов, так как работа с ним происходит в динамической памяти. Для выполнения циклического сдвига необходимо просто последнему элементу дать ссылку на первый, а предпоследнему задать адрес nil. Благодаря этому, не нужно переписывать весь список как файл или массив, но при работе с адресами необходимо работать внимательно.
Одномерные массивы и динамические списки обрабатываются в оперативной памяти, поэтому работа с ними осуществляется легче, чем с файлами, но при работе с файлами, информация хранится на диске.
3