Стандартные процедуры и функции для текстовых файлов



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

Особенностью работы с текстовыми файлами является то, что значения которые вводятся и выводятся с помощью процедур read или write, могут быть не обязательно типа Char или String, а также и других стандартных простых типов. Эти процедуры могут также работать и с ASCIIZ-строками.

Имеется две стандартные файловые переменные для текстового файла: input (для ввода с клавиатуры) и output (для вывода на экран дисплея).

Файл типа Text может быть открыт либо для чтения процедурой reset, либо для записи процедурой rewrite или append.

Процедуры:

Append(f) –открытие файла для добавления в конец информации.

Открывается существующий файл, с которым связана файловая переменная F, и указатель текущей компоненты файла настраивается на конец файла.

Read(F,<список ввода>) – чтение информации из файла.

Из файла, с которым связана файловая переменная F, читаются значения для одной или нескольких переменных списка ввода.

ReadLn(F,<список ввода>) – чтение информации из файла.

То же, что и процедура read, но непрочитанная часть строки, включая признак конца строки, пропускается.

Write(F,<список вывода>) –запись информации в файл.

В файл, с которым связана файловая переменная F, записываются значение выражений списка вывода.

WriteLn(F,<список вывода>) –запись информации в файл.

То же, что и процедура write, но выводимая информация завешается признаком конца строки.

Функции:

Eoln(F)– конец строки файла.

Принимает значение true, если текущей компонентой файла является признак конца строки или функция eof(F) принимает значение true. В остальных случаях функция принимает значение false.

Seek(F,Num)– настройка на требуемую компоненту файла.

Осуществляется настройка на компоненту файла, с которым связана файловая переменная F. Компонента файла определяется номером Num, причем нумерация начинается с нуля.

Truncate(F) –удаление части файла, начиная с текущей позиции.

Удаляется часть файла, начиная с текущей позиции и до его конца.

Функции:

FilePos(F)– номер текущей компоненты файла.

Функция возвращает номер текущей компоненты файла, с которым связана файловая переменная F. Нумерация начинается с нуля.

FileSize(F)– текущий размер файла.

Функция возвращает текущий размер файла, с которым связана файловая переменная F,в компонентах этого файла.

 

Билет 14. Модули

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

 

Unit <Имя модуля> {= имя файла};

Interface

<описание заголовков процедур, переменных (описание) и т.д., которые будут использоваться в модуле>

Implementation {секция реализации}

      <то действие, которое выполнит модуль >

Begin

      <Оператор 1>;

      <Оператор 2>;

      ….

End;

 

 

Unit Sort;

Interface

Uses crt;

Const Max = ;

Type M = array [1..max] of integer;

Var I : integer;

Procedure VM( var a:M; var K:integer);

Function Bin( var a:M; K,t:integer);

Procedure PM( var a:M; K:integer);

Implementation

Procedure VM;

Begin write(‘Введите длину массива’);

    Readln(k);

    While k>Max do

       begin

                 Write(‘Массив слишком велик. Введите новую длину массива’);

                 Readln(k);

       End;

     Writeln(‘Введите массив: ‘);

    For i:=1 to k do readln(a[i]);

End;

Procedure PM;

Begin

       For i:=1 to k do

                   Write(a[i],’ ‘);

End;

Function bin;

var l,h:integer;

Begin

l:=1;

h:=k;

while l<=h do

begin

i:=(h+l) div 2;

if a[i]<t then l:=i+1

           else h:=i-1;

end;

bin:=l;

End;

 

Begin

End.

Билет 15. Динамические типы данных.

Ссылочный тип.

 

Type uk = ^el;

   El = record r:uk;

                   V:integer;

       End;

 

New(x);

X^.v := 5;

Y:=nil;

X^.r := nil;

 

 

Билет 16. Простой линейный список.

 

 

program ref;

type YK=^EL;

EL=record

    VAL:integer;

    REF:YK

   end;

var X:YK;

procedure SN1(var Z:YK);

var A:integer;

Y:YK;

begin Z:=nil;

   read(A);

   while A<>0 do

    begin new(Y);

       Y^.VAL:=A; Y^.REF:=Z;

       Z:=Y; read (A);

    end

end;

 

procedure S1N(var Z:YK);

 var A: integer;

Y:YK;

 begin Z:=nil;

   read (A);

   if A<>0 then

    begin

     new(Y);

     Z:=Y;

     Y^.VAL:=A;

     read (A);

     while A<>0 do

       begin new(Y^.REF);

             Y:=Y^.REF;

             Y^.VAL:=A;

             read (A);

       end;

     Y^.REF:=nil;

    end

 end {S1N};

 

procedure PS(X:YK);

 begin writeln;

while X<>nil do

   begin write(X^.VAL,' ');

         X:=X^.REF

   end;

writeln

 end;

 

procedure S1NR(var X:YK);

 var A:integer;

 begin read (A);

if A<>0 then

       begin new(X);

        X^.VAL:=A;

        S1NR(X^.REF)

       end

         else

          X:=nil

 end;

 

begin {MAIN PROGRAM}

S1NR(X);

PS(X)}

end.

 

Билет 18. Дерево поиска

 

Дерево поиска (сортировки).

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

 

Деревья.

Определение. Связный граф без циклов называется деревом. Связный граф без циклов с выделенной вершиной называется корневым деревом. Выделенную вершину называют корнем дерева.

Легко определяются понятия: потомка, сына, предка, отца для данной вершины; понятие листа и внутренней вершины.

 

program dersort;

type ref=^yz; yz=record i:integer; l,r:ref end;

var x:ref;

 

procedure pd(var x:ref);

 var z,y,y1:ref;

a: integer;

 begin read(a);

if a<>0 then

begin new(x); x^.i:=a; x^.l:=nil; x^.r:=nil;read(a);

   while a<>0 do

    begin y:=x; new(z); z^.i:=a; z^.l:=nil; z^.r:=nil;

          while y<>nil do

           begin y1:=y;

            if a<y^.i then y:=y^.l else y:=y^.r

            end;

          if a<y1^.i then y1^.l:=z else y1^.r:=z;

          read(a)

     end

end

end;

 

procedure cod(var x:ref);

 begin if x<>nil then

  begin cod(x^.l); write(x^.i:3); cod(x^.r) end

 end;

 

begin

 pd(x);

 cod(x)

end.

 

Построенное дерево обладает следующим интересным свойством:

При симметричном обходе дерева поиска элементы массива перечисляются в порядке возрастания значений элементов.

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

Необходимость сортировки массив связано, в основном, с тем, что поиск конкретных значений элементов в упорядоченном массиве может быть осуществлен в среднем за O(log2n), где n – число элементов в массиве, а в неупорядоченном за O(n). Предположим, что мы отказываемся от сортировки массивов, заменяя ее построением дерева поиска и поиском конкретных значений элементов в построенном дереве. Давайте оценим эффективность подобной замены.

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

Пусть Тn –мультимножество всех деревьев, соответствующее всем перестановкам элементов массива.

Замечание. Совокупность Tn действительно представляет мультимножество, однако, если узлы дерева помечать номерами мест откуда взято конкретное значение элемента массива то эта совокупность будет множеством.

Пример, n=3, элементы массива: 1 2 3, тогда возможны следующие деревья поиска:

1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1

1                1                            2                   2                    3                       3


Дата добавления: 2018-04-04; просмотров: 303; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!