Автор работы: Пользователь скрыл имя, 27 Февраля 2012 в 18:54, лабораторная работа
При обработке информации числовые данные к заданию должны храниться в текстовом файле, который создается самим студентом любым способом. Необходимо переписать числовые данные из текстового файла в:
1. одномерный массив,
2. типизированный файл,
3. линейный динамический список.
Задание
Описание порядка действий
Блок схема процедуры на примере одномерного массива
Текст программы
Выводы
ГОУ ВПО «Ижевский Государственный Технический Университет»
Институт непрерывного профессионального образованию
Факультет «Информатика и вычислительная техника»
Кафедра «Вычислительная техника»
Отчет по лабораторной работе
по теме «Обработка массива, типизированного файла и динамического линейного списка»
Выполнил:
студент группы 2-78-1
Проверил:
доцент
Ижевск – 2011
3
Задание
Описание порядка действий
Блок схема процедуры на примере одномерного массива
Текст программы
Выводы
При обработке информации числовые данные к заданию должны храниться в текстовом файле, который создается самим студентом любым способом. Необходимо переписать числовые данные из текстового файла в:
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';
Да
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
Информация о работе Обработка массива, типизированного файла и динамического линейного списка