RSS    

   Реферат: Программирование на языке Турбо Паскаль

Пример 1 (процедуры чтения). Пусть имеется текстовый файл, например программа на Паскале. Требуется распечатать его содержимое на экране:

program ShowFile;

var f: text;

    c: char;

begin

  assign(f,'showfile.pas');

  reset(f);

  while not eof(f) do begin

    while not eoln(f) do begin read(f,c); write(c); end;

    readln(f);

    writeln;

  end;

  close(f);

  readln;

end.

3. Запись данных в файл

А теперь перейдём к процедурам записи в файл. Перед тем как что-либо записывать, нужно создать новый (пустой) файл или стереть содержимое существующего. Для этого используется процедура

rewrite(TxtFile: text);

До её вызова файловая должна быть привязана к имени файла на диске с помощью assign. Если файл не существовал, то rewrite создаст его, если существовал, то содержимое будет стёрто. В любом случае файл будет пустым, а указатель записи стоит на начале файла.

Для записи используются процедуры

write(TxtFile: text, p1: type1, p2: type2, ... pN: typeN);

writeln(TxtFile: text, p1: type1, p2: type2, ... pN: typeN);

Здесь в качестве параметров p1, p2, ... pN можно использовать не только переменные, но и выражения: числовых типов, строковые, символьные и логические (boolean). В отличие от write, writeln после записи в файл значений p1, p2, ... pN переводит указатель записи на начало новой строки; writeln с одним параметром (текстовый файл) лишь переводит указатель на новую строку.

Так же как и в случае с чтением из файла, после того как все данные записаны файл нужно закрыть с помощью close.

Пример 2 (запись в файл). Пусть дан произвольный текстовый файл, требуется получить другой файл, в каждой строке которого записана длина соответствующей строки исходного файла:

program WriteLength;

var f1,f2: text;

    s: string;

begin

  assign(f1,'writelen.pas'); reset(f1);

  assign(f2,'result.txt'); rewrite(f2);

  while not eof(f1) do begin

    readln(f1,s);

    writeln(f2,length(s));

  end;

  close(f1); close(f2);

end.

Ещё один способ записи — это открытие для добавления информации в конец файла. Для этого используется процедура

append(TxtFile: text);

Если файл открыт с помощью append, то всё его содержимое сохраняется. При завершении дописывания в конец файла его также следует закрыть с помощью close.

Лекция 13. Двоичные файлы

Двоичный файл представляет собой последовательность одинаковых элементов, записанных на диске. В отличие от текстовых файлов, в двоичных нет разбиения на строки, файл напоминает массив, с той лишь разницей, что доступ к элементам может быть только последовательным. Для того, чтобы определить, достигнут ли конец файла, по-прежнему используется функция eof. Функция eoln, очевидно, здесь неприменима.

Для всех обсуждаемых ниже файлов можно выполнять те же процедуры открытия, закрытия и привязки, что и для текстовых: Append, Assign, Close, Reset, Rewrite. Кроме того, появляется процедура Truncate(var f: file), которая уничтожает всё содержимое файла, находящееся после текущего указателя чтения.

Двоичные файлы будем делить на типизированные и нетипизированные.

1. Типизированные файлы

Файлы этого вида состоят из элементов одинакового типа, то есть в них нельзя записывать (или читать) значения переменных разных типов, в отличие от текстовых файлов.

Объявляются типизированные файлы так:

var f: file of тип_элемента;

В качестве типа элемента можно использовать как простые типы, так и структурированные (массивы, записи и т.п.).

2. Нетипизированные файлы

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

var f: file;

Для чтения и записи процедуры read и write не подходят. Используются такие процедуры:

1.   BlockRead(var f: file; var buf; count: word [; var result: word]); – читает в переменную Buf count записей из файла, переменная result показывает сколько записей было скопировано в действительности. Под записью понимается «кусок» файла в несколько байт, размер записи можно установить при открытии файла, например: reset(f,1).

2.   BlockWrite(var f: file; var buf; count: word [; var result: word]); – записывает указанное количество записей в файл. Если для открытия используется rewrite, то во втором её параметре также можно указать размер записи.

Лекция 14. Модули в Турбо Паскале

В Турбо Паскале допускается разбивать программы на части и хранить эти части в отдельных файлах на диске. Кроме основной программы появляются так называемые модули, которые предоставляют основной программе или другим модулям свои переменные, константы, типы, процедуры, функции и т. п. Чтобы использовать модуль в программе, нужно указать его имя после uses.

При написании модуля сначала описывается то, что он предоставляет для общего пользования (секция интерфейса), а затем – как он устроен (секция реализации). Иногда существует секция инициализации, где записаны действия, которые выполняются при подключении этого модуля. Записывается это всё следующим образом:

unit MyUnit;

interface

  (*Интерфейсная секция*)

  uses ...;

  const ...;

  type ...;

  procedure ...;  {Только

  function ...;    заголовки}

implementation

  (*Секция реализации*)

  uses ...;

  const ...;

  type ...;

  procedure ...;  {Реализация всех описанных

    begin          процедур и функций}

    ...

    end;

  function ...;  

    begin

    ...

    end;

[begin]

  (*Секция инициализации*)

end.

Рассмотрим части модуля подробнее. Uses в интерфейсной секции может быть нужен, если в ней используются какие-либо ресурсы из других модулей. Процедуры и функции здесь только описываются, но не реализуются, то есть не записываются тела процедур и функций (begin ... end;). В секции реализации можно также подключать другие модули; создавать переменные, константы, типы, процедуры и функции, которые «видны» только внутри этого модуля, никакой другой модуль или программа на может  ими пользоваться. Здесь же обязательно должны быть записаны все процедуры и функции (полностью). Параметры (в скобках) после имени процедуры и функции в секции реализации можно не указывать.

Секция инициализации содержит те действия, которые должны выполняться когда наш модуль подключается к программе, то есть до того как начнёт работать сама программа. Модуль graph, например устанавливает в секции инициализации значения по умолчанию цвета линий и фона, стиль линий, стиль заливки т.п.

При сохранении модуля ему нужно дать такое же имя, как и после unit в тексте модуля. Имена файлов, содержащих модули, должны иметь расширение «pas», также как и программы.

Рассмотрим пример. Наш модуль предназначается для операций с трехмерными векторами:

unit Vectors;

interface

  type tVec3D = record

          x,y,z: real;

       end;

  procedure VecAdd(a,b: tVec3D; var c: tVec3D);

  procedure VecSub(a,b: tVec3D; var c: tVec3D);

  procedure VecMultNum(k: real; a: tVec3D; var b: tVec3D);

  function ScalarProduct(a,b: tVec3D): real;

implementation

procedure VecAdd(a,b: tVec3D; var c: tVec3D);

begin

  c.x:=a.x+b.x;

  c.y:=a.y+b.y;

  c.z:=a.z+b.z;

end;

procedure VecSub(a,b: tVec3D; var c: tVec3D);

begin

  c.x:=a.x-b.x;

  c.y:=a.y-b.y;

  c.z:=a.z-b.z;

end;

procedure VecMultNum(k: real; a: tVec3D; var b: tVec3D);

begin

  b.x:=k*a.x;

  b.y:=k*a.y;

  b.z:=k*a.z;

end;

function ScalarProduct(a,b: tVec3D): real;

begin

  ScalarProduct:=a.x*b.x+a.y*b.y+a.z*b.z;

end;

end.

В программе наш модуль можно использовать, например, так:

program xxx;

uses Vectors;

var v1,v2,res: tVec3D;

...

begin

...

  VecMultNum(0.2,v1,res);

  VecSub(v2,res,res);

  {в результате res = v2-0.2×v1}

...

end.

В случаях, когда несколько модулей содержат объекты с одинаковыми именами, обращаться к ним нужно с указанием имени модуля: <имя модуля>.<имя объекта> . Пусть, например, модули unit1 и unit2 содержат процедуры с одинаковыми именами proc1, тогда обращаться к ним следует так: unit1.proc1; и unit2.proc2; .

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

1.   Средства, взятые из модулей позволяют не повторять в программах одни и те же фрагменты.

2.    Переменные, процедуры и другие объекты можно скрыть в секции реализации, если их необдуманное выполнение может испортить программу.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.