Основы алгоритмизации и программирования. Часть четвертая. Файловая система Turbo Pascal. Асламова В.С - 28 стр.

UptoLike

55
var
А, В, С: Array [1..2000] of Real;
то их элементы выстраиваются в одну сплошную цепочку. Иными словами,
адреса в памяти, которую занимают массивы В и С равны:
Addr (B) = Addr (A) +SizeOf (A),
Addr (C) = Addr (B) +SizeOf (B).
(Это верно не только для массивов, но и для любых статических структур,
кроме объектов: память в пределах блока описания переменных отводится
последовательно, но мере
их следования.)
Используя этот факт, можно записать или считать блоком сразу не-
сколько структур данных, приняв за начало блока первую из них:
Assign (f,
ABC.DAT);
Rewrite (f, SizeOf (A));
BlockWrite (f,A,3); {открыть f и записать в него три блока сразу}
Close (f);
или
Reset (f, SizeOf (A));
BlockRead (f. A, 3); {открыть f и считать из него три блока сразу}
Close (f);
Бестиповые файлы хороши для копирования, переноса на другой
диск. Их используют для доступа к любым дисковым файлам независимо от
их структуры. Если необходимо просто скопировать какой-либо файл без об-
работки записей, то лучше использовать бестиповые файлы.
Пример:
const bufsize=10000;
var f,g:file;
fname, gname:string[20];
buf:array[1..bufsize] of char;
fzahl, gzahl:word;
begin
writeln(‘ввод имени исходного файла’);
readln(fname);
assign(f,fname);
writeln(‘ввод имени скопированного файла’);
readln(gname);
assign(g,gname);
reset(f,1);
56
rewrite(g,1);
repeat
blockread (f, buf,sizeof(buf), fzahl); {функция sizeof(buf) выдает коли
чество байт buf }
blockread (g, buf,sizeof(buf), gzahl);
until (fzahl=0) or (fzahl<>gzahl);
close(f); close(g);
end.
МОДУЛИ UNIT
Модуль (UNIT) в Турбо Паскалеэто специальным образом оформ-
ленная библиотека определений типов, констант, переменных, а также
процедур и функций. Модуль в отличие от программы не может быть запу-
щен на выполнение самостоятельно: он может только участвовать в
построении программы или другого модуля.
Так же как и подпрограммы, модули могут быть стандартными
и не-
стандартными, или пользовательскими, то есть такими, которые
разрабатываются программистами. Как стандартные, так и нестандартные
модули устроены совершенно одинаково, поскольку оформляются по еди-
ным правилам.
Все системные библиотеки Турбо Паскаля реализованы как модули, и
чтобы воспользоваться, например, библиотеками функций операционной
системы DOS и графики Graph, нужно только указать директиву
USES
DOS, Graph;
и дальше использовать любое содержание библиотек, как будто оно
предопределено в языке.
В Турбо Паскале возможность модульного построения чрезвычайно
полезна в двух случаях. Во-первых
, модули очень удобны для построения
собственных библиотек процедур и функций, которые впоследствии могут
подключаться к разным программам, не требуя при этом никаких переделок.
Во-вторых
, именно модульность позволяет создавать программы прак-
тически любого размера. Дело в том, что ни программа, ни модуль, не могут
произвести выполнимый код объёмом более 64 К, если они не используют
     var                                                                               rewrite(g,1);
            А, В, С: Array [1..2000] of Real;                                          repeat
то их элементы выстраиваются в одну сплошную цепочку. Иными словами,                   blockread (f, buf,sizeof(buf), fzahl); {функция sizeof(buf) выдает коли
адреса в памяти, которую занимают массивы В и С равны:
      Addr (B) = Addr (A) +SizeOf (A),                                                                                        чество байт buf }
      Addr (C) = Addr (B) +SizeOf (B).                                               blockread (g, buf,sizeof(buf), gzahl);
                                                                                     until (fzahl=0) or (fzahl<>gzahl);
(Это верно не только для массивов, но и для любых статических структур,
                                                                                     close(f); close(g);
кроме объектов: память в пределах блока описания переменных отводится
                                                                                     end.
последовательно, но мере их следования.)
      Используя этот факт, можно записать или считать блоком сразу не-
сколько структур данных, приняв за начало блока первую из них:

       Assign (f, ′ABC.DAT′);                                                                                 МОДУЛИ UNIT
       Rewrite (f, SizeOf (A));
       BlockWrite (f,A,3);      {открыть f и записать в него три блока сразу}         Модуль (UNIT) в Турбо Паскале – это специальным образом оформ-
       Close (f);
                                                                                ленная библиотека определений типов, констант, переменных, а также
                  или
       Reset (f, SizeOf (A));                                                   процедур и функций. Модуль в отличие от программы не может быть запу-
       BlockRead (f. A, 3);     {открыть f и считать из него три блока сразу}   щен на выполнение самостоятельно: он может только участвовать в
       Close (f);                                                               построении программы или другого модуля.
                                                                                      Так же как и подпрограммы, модули могут быть стандартными и не-
        Бестиповые файлы хороши для копирования, переноса на другой
                                                                                стандартными,    или пользовательскими,      то есть такими,     которые
диск. Их используют для доступа к любым дисковым файлам независимо от
                                                                                разрабатываются программистами. Как стандартные, так и нестандартные
их структуры. Если необходимо просто скопировать какой-либо файл без об-
                                                                                модули устроены совершенно одинаково, поскольку оформляются по еди-
работки записей, то лучше использовать бестиповые файлы.
                                                                                ным правилам.
      Пример:
                                                                                      Все системные библиотеки Турбо Паскаля реализованы как модули, и
      const bufsize=10000;
                                                                                чтобы воспользоваться, например, библиотеками функций операционной
      var f,g:file;
                                                                                системы DOS и графики Graph, нужно только указать директиву
      fname, gname:string[20];
                                                                                      USES
      buf:array[1..bufsize] of char;
                                                                                        DOS, Graph;
      fzahl, gzahl:word;                                                              и дальше использовать любое содержание библиотек, как будто оно
      begin                                                                     предопределено в языке.
        writeln(‘ввод имени исходного файла’);                                        В Турбо Паскале возможность модульного построения чрезвычайно
        readln(fname);                                                          полезна в двух случаях. Во-первых, модули очень удобны для построения
        assign(f,fname);                                                        собственных библиотек процедур и функций, которые впоследствии могут
        writeln(‘ввод имени скопированного файла’);                             подключаться к разным программам, не требуя при этом никаких переделок.
        readln(gname);                                                                Во-вторых, именно модульность позволяет создавать программы прак-
        assign(g,gname);                                                        тически любого размера. Дело в том, что ни программа, ни модуль, не могут
        reset(f,1);                                                             произвести выполнимый код объёмом более 64 К, если они не используют
                                    55                                                                              56