Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Копирование файлов






 

Типичная операция над файлами копирует один файл в другой. Программа CopyTwice копирует INPUT в OUTPUT через промежуточный рабочий файл Chars. Первый шаг – копирование INPUT в Chars, второй шаг – копирование Chars в OUTPUT.

 

 

DP 1

PROGRAM CopyTwice (INPUT, OUTPUT);

{Копирует символы, предшествующие # из INPUT в OUTPUT

Программа выдаст ошибку, если в INPUT отсутствует #}

VAR

Ch: CHAR;

Chars: TEXT; {Рабочий файл}

BEGIN {CopyTwice}

{Копировать INPUT в Chars}

{Копировать Chars в OUTPUT}

END. {CopyTwice}

 

DP 1.1

BEGIN {Копировать INPUT в Chars}

REWRITE(Chars); {Готовим Chars для записи}

READ(INPUT, Ch);

WHILE Ch < > ‘#’

DO

BEGIN

WRITE(Chars, Ch);

READ(INPUT, Ch)

END;

WRITELN(Chars, ‘#’) {Закрыть Chars маркером конца строки}

END

 

DP 1.2

BEGIN {Копировать Chars в OUTPUT}

RESET(Chars); {Готовим Chars для чтения}

READ(Chars, Ch);

WHILE Ch < > ‘#’

DO

BEGIN

WRITE(OUTPUT, Ch);

READ(Chars, Ch)

END;

WRITELN(OUTPUT)

END

 

Без маркера конца входной последовательности, который DP 1.1 помещает в конец промежуточного файла, DP 1.2 не сможет остановить свое выполнение.

 

Собираем разделы проекта.

 

DP 1A

PROGRAM CopyTwice (INPUT, OUTPUT);

{Копирует символы, предшествующие # из INPUT в OUTPUT}

VAR

Ch: CHAR;

Chars: TEXT; {Рабочий файл}

BEGIN {CopyTwice}

BEGIN {Копировать INPUT в Chars}

REWRITE(Chars); {Готовим Chars для записи}

READ(INPUT, Ch);

WHILE Ch < > '#'

DO

BEGIN

WRITE(Chars, Ch);

READ(INPUT, Ch)

END;

WRITELN(Chars, '#') {Закрыть Chars маркером конца строки}

END

BEGIN {Копировать Chars в OUTPUT}

RESET(Chars); {Готовим Chars для чтения}

READ(Chars, Ch);

WHILE Ch < > '#'

DO

BEGIN

WRITE(OUTPUT, Ch);

READ(Chars, Ch)

END;

WRITELN(OUTPUT)

END

END. {CopyTwice}

 

Выполнение:

INPUT: ABCD#

OUTPUT: ABCD

 

INPUT: 1#ABCD

OUTPUT: 1

 

INPUT: Four score and seven years ago#

OUTPUT: Four score and seven years ago

 

[восемьдесят семь лет назад]

 

Комментарий, описывающий поведение программы CopyTwice

{Копирует символы, предшествующие # из INPUT в OUTPUT

Программа выдаст ошибку, если в INPUT отсутствует #}

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

 

Используйт е имена переменных в комментариях только после того как они были объявлены.

 

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

 

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

 

 

После выполнения Условие INPUT OUTPUT Chars Ch
REWRITE(Chars) READ(INPUT, Ch) WHILE Ch < > ‘#’ BEGIN WRITE(Chars, Ch) READ(INPUT, Ch) END WHILE Ch < > ‘#’ BEGIN WRITE(Chars, Ch) READ(INPUT, Ch) END WHILE Ch < > ‘#’ WRITELN(Chars, '#') RESET(Chars) READ(Chars, Ch); WHILE Ch < > ‘#’ DO BEGIN WRITE(OUTPUT, Ch) READ(Chars, Ch) END WHILE Ch < > ‘#’ DO BEGIN WRITE(OUTPUT, Ch) READ(Chars, Ch) END WHILE Ch < > ‘#’ WRITELN(OUTPUT) END.     TRUE     TRUE     FALSE   TRUE   TRUE   FALSE A B# A B # A B # A B # A B # AB # AB # AB # AB # AB # AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB#_ AB# _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ A_ A_ A_ A_ A_ A_ AB_ AB_ AB_ AB_ AB/_ AB _ _ _ _ A_ A_ A_ A_ A_ AB_ AB_ AB_ AB_ AB#/_ A B#/ A B #/ A B #/ A B #/ A B #/ A B #/ AB # / AB # / AB # / AB # / AB # / AB # / AB# / AB# / AB# / AB# /   ? A A A A B B B B B # # # # # A A A A A B B B B B B # # # #  

 


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

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал