Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1601

.pdf
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
1.46 Mб
Скачать

begin Vowels:=['A','a','E','I','i','O','o','U','u']

;

Uppercase:=['A'..'Z'];

LowerCase:=['a'..'z']; Repeat

write('Введите букву '); readln(NextChar);

if NextChar in Vowels then writeln('Содержит гласную ',NextChar)

else if NextChar in Uppercase then writeln('Содержит прописную

согласную ',NextChar) else

if NextChar in LowerCase then writeln('Содержит строчную

согласную ',NextChar) else

writeln('Содержит не букву

',NextChar);

Until NextChar in ['A'..'Z','a'..'z']; end.

Здесь цикл ( Repeat – Untie) выполняется до тех пор, пока значение переменной NextChar является буквой. В самом теле цикла оператор if с помощью оператора Writeln выводит сообщение о содержимом NextChar (в зависимости от этого содержимого).

Пример 2. Для заданного множества (BEGINSET), состоящего из 256 целых чисел (цифр) в диапазон от 255, выделить все простые числа, из которых нужно сформировать новое множество PRIMERSET, вывести на печать.

В основе поиска (выделения) простых чисел лежит метод, называемый «решето аратосфера», который заключается в следующем: из ряда натуральных чисел от 2 до N вычеркивают (удаляют) сначала числа делящиеся на 2, потом удаляют числа, делящиеся на 3, на 5 и т. д. Оставшиеся числа являются простыми.

Заметим, что признаком окончанием программы (цикла) является получение пустого множества BEGINSET, из которого в цикле удаляются элементы делящиеся на 2, 3, 5 и т.д.

Вариант программы следующий:

Program Primer; const N=225;

type SetofNumber=set of 1..N; var n1,Next,i:word;

BeginSet,PrinterSet:SetofNumber; Begin

BeginSet:=[2..N];

PrinterSet:=[1];

next:=2;

while BeginSet<>[] do Begin

n1:=next; while n1<=N do

Begin Exclude(BeginSet,n1); n1:=n1+next;

end;

Include(PrinterSet,next); Repeat

inc(next);

until (next in BeginSet) or

(next>N);

end;

for i:=1 to N do

if i in PrinterSet then Write(i:8); Writeln;

end.

В данной программе имеется внешний цикл While-do и два последовательных внутренних цикла: Whiledo и Repeat-Untie.

Здесь перед началом внешнего цикла положено PrinterSet;=1, т.к. заранее известно, что 1 – простое число. Затем, до начала внешнего цикла обозначено NEXT := 2, что означает: при первой реализации первого внутреннего цикла (While-do) осуществляется удаление чисел из исходного массива кратным

2.

После такого удаления, переход на второй внутренний цикл (repeat-untie), где осуществляется наращивание кратности до 3-

х, после этого на внешнем цикле осуществляется присвоение данной кратности переменной n1 (n1:=next) и затем на первом внутреннем цикле удаляются числа кратные 3-м и т.д. В конце программы приведен цикл for-to-do, в котором параметр цикла I последовательно принимает значение от 1 до N = 255. В поле

цикла осуществляет проверка: принадлежит ли величина I массиву PrimerSet, если да, то оно выводится на печать. При этом, каждой величине при печати отводится восемь позиций.

Файлы.

Все вышеприведѐнные программы представляют собой интерактивные программы. Такая программа считывает все

входные ( исходные ) данные с клавиатуры, а весь вывод осуществляет на экран дисплея.

Интерактивный ввод и вывод хороши для программ, манипулирующих небольшими количествами данных, однако подобный подход мало эффективен для программ, предназначенных для обработки обширных объемов информации. В последнем случае, чтобы выйти из положения, можно для ввода и вывода использовать файлы. Turbo Pascal работает с двумя видами файлов: текстовыми и двоичными файлами. В данном пособии будут рассмотрены только текстовые файлы.

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

для текстовых файлов.

Под файлом понимается либо именованная область внешней памяти компьютера (жесткого диска, гибкой

дискеты и.т.д.), либо логическое устройство – потенциальный источник или приѐмные информации.

При этом файл должен:

-иметь имя, что даѐт возможность программе работать одновременно с несколькими файлами;

-содержать компоненты одного типа ( типом компонентов может быть любой тип языка, кроме

файлов); При этом длина создаваемого файла не объявляется и

ограничивается только ѐмкостью устройств внешней памяти.

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

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

Заметим, что преимущество использования входного файла заключается в том, что с применением какого-либо редактора

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

Можно так же преобразовать программу таким образом, чтобы вычисленные результаты она выводила не на экране

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

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

и одновременно и одновременно для визуального контроля отображается на экране. При сохранении файла, информация отображается на экране, сохраняется в виде последовательности символов на диске (рис 4.2.11.)

1

5

9

0

0

.

0

0

 

J

o

h

n

n

y

 

J

o

n

e

s

 

2

5

0

0

0

.

0

0

 

S

a

l

l

y

 

S

m

y

t

h

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

eof

Рис.4.2.11. Текстовый файлэто последовательность символов.

Текстовый файл, изображенный на данном рисунке содержит в целом 45 символов или байтов, включая цифры, точки, пробелы, буквы и два специальных символа, <EOLN> и <EOF>. Первый них (<EOLN>-end.оf.line) вставляется в текстовый файл каждый раз, когда на клавиатуре нажимается клавиша Enter .

Второй специальный символ (<EOF>- end.оf.file) автоматически вставляется после последнего символа при сохранении текстового файла. Текстовый файл может содержать множество специальных символов Таким образом, текстовый файл может содержать множество символов < EOLN > (т.к. много строк), но только один символ < EOF >.

Хотя физически текстовый файл содержится на диске в виде одной длинной последовательности символов, логически он организован в виде последовательности

символов, разделенных символом <EOLN> на строки. Если воспользоваться текстовым редактором языка Turbo Pascal (Edit), чтобы получить доступ к файлу, изображенному на рис. 4.2.11., на экране он будет выглядеть так:

15900.00 Johnny Jones <eoln> <eof>

25000.00 Salli Smythe <eoln>

При этом на экране дисплея символы <EOLN> и <EOF> будут отсутствовать.

Файловый тип или переменную файлового типа можно описать (задать) одним из трех способов:

<имя> = FILE OF <тип>;

 

<имя> = TEXT;

 

<имя> = FILE;

 

Здесь <имя> - имя

файлового типа (правильный

идентификатор);

FILE, OF – зарезервированные слова (файл, из); TEXT – имя стандартного типа текстовых файлов;

< тип > - любой тип языка Turbo Pascal, кроме файлов. Например:

Type

Product = record; name: string; code: word; const: comp;

end;

text 80 = file of string [80]; var

f1: file of char; f2: text;

f3: file; f4: text 80;

f5: file of product;

Здесь фрагмент Type – end является записью;

f1, f4 и f5 –типизированные файлы, f2текстовые файл, f3не типизированный файл.

Таким образом, в зависимости от способа объявления можно выделить три вида файлов:

-типизированные файлы (задаются предложением FILE

.of);

-текстовые файлы (определяются типом TEXT);

-не типизированные файлы (определяются типом FILE).

Доступ к файлам.

Любой программе доступны два предварительно объявленных файла со стандартными файловыми переменными: INPUT – для чтения данных с клавиатуры и OUTPUTдля вывода на экран дисплея. Стандартный Pascal требует обязательного упоминания этих файлов в заголовке программы, например:

Program Name (input, output);

В Turbo Pascal это необязательно, вот почему заголовок программы можно опускать.

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

Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN: ASSIGN (< ф.п. >, < имя файла или л.у. >);

Здесь < ф.п. > - файловая переменная (правильный идентификатор, объявленный в программе как переменная файлового типа); < имя файла или л.у. > - текстовое выражение, содержащее или

файлы или логическое устройство.

При этом, если имя файла задается в виде пустой строки, например: ASSIGN (f1‖), то в зависимости от направления обмена данными файловая переменная связывается со стандартным файлом INPUT или OUTPUT.

Имена файлов.

Имя файла - это любое выражение строкового типа, которое строится по правилам определения имен в определенной системе компьютера.

При этом:

- имя должно содержать до восьми разрешенных символов – это прописные и строчные логические буквы, цифры и следующие дополнительные символы:

! # % ^ ( ) ` ~ - _ и т.д.

-имя может начинаться с любого разрешенного символа.

-за именем может следовать расширение – последовательность до тех трех размещенных символов (расширение, если оно есть, отделяется от имени точкой).

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

Имя диска - это один из символов A..Z, после которого ставится двоеточие. Имена A: и B: относятся к дисковому накопителю на гибких дисках, а имена C: и D: и т.д. – к жестким дискам.

Если имя диска не указано, подразумевается устройство по умолчанию – то, которое было установлено в определенной системе перед началом работы программы. Рассмотрим пример:

ASSIGN (MyData,‘ a: InData. Dat‘);

Здесь указано полное имя файла, т.е. указано имя файла и в каком каталоге он содержится.

Таким образом, данный оператор вызова процедуры ассоциирует файловую переменную MyData с файлом InData.Dat, содержащейся в корневом каталоге диска A.

Заметим, что процедура ASSIGN – единственная, которая определяется фактическим именем файла на диске. Все другие процедуры и функции используют файловую переменную. По этой причине программы называют MyData внутренним именем файла,

аA: InData.Dat – его внешним именем.

При этом, необходимо иметь в виду – никогда не следует применять процедуру ASSIGN к открытому файлу.

Итак, за именем диска может указываться имя каталога, за именем каталога может следовать одно или несколько имен каталогов нижнего уровня. Каждому из них должна предшествовать обратная косая черта (\), т.е. весь путь к файлу отделяется от имени файла обратной косой чертой. Максимальная длина имени вместе с путем – 79 символов, например:

Var

Finp: text;

Fout: file of string; Const

Name = ‗c: \dir\Sub dir\out. txt‘;

Begin

Assign (finp ,123.dat ); Assign (fout, name);

End.

Инициация файла.

Прежде чем программа сможет манипулировать текстовым файлом, этот файл должен быть подготовлен к вводу или выводу – иными символами, открыт.

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

Таким образом, инициировать (открыть) файл означает – указать для этого файла направление передачи данных.

Для чтения файл инициируется с помощью стандартной процедуры RESET:

RESET (< ф.п.>);

Здесь < ф.п.> - файловая переменная, с вязанная ранее процедурой ASSIGN с уже существующим файлом или логическим устройством – приемником информации.

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

0 (см. рис.4.2.11.).

Рассмотрим фрагмент программы иллюстрирующей вышеизложенное:

Var

F: life of char; Begin

Assign (f,‘ my file. dat‘);

Reset (f);

end.

Рассмотрим другую стандартную процедуру REWRITE: REWRITE (< ф.п.>)

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

Другая процедура:

APPEND (<ф.п.>);

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

Процедура APPEND применима только к текстовым файлам, т.е. их файловая переменная должна иметь тип TEXT. Кроме того данной процедурой нельзя инициировать запись в типизированный или не типизированный файл. Если текстовый ранее уже был открыт с помощью RESET или REWRITE, то использование APPEND приведет к закрытию