Обработка массива, типизированного файла и динамического линейного списка

Автор работы: Пользователь скрыл имя, 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

 



Информация о работе Обработка массива, типизированного файла и динамического линейного списка