ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.04.2025
Просмотров: 1356
Скачиваний: 0
СОДЕРЖАНИЕ
Министерство образования и науки российской федерации
Начальный курс программирования на основе алгоритмического языка Паскаль
Часть. Основы программирования на Паскале
1.1. Структура простейшей Паскаль-программы
1.2. Данные и операции над ними
1.2.1. Свойства ячейки памяти. Переменные и константы
1.2.3. Правила записи констант
1.2.4. Описание переменных и именованных констант в Паскале
1.3. Операторы преобразования данных
1.4. Разработка простейших программ
1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
1.4.2. Алгоритм и способы его записи.
1.4.3. Изображение алгоритмов в виде блок-схем
1.4.4. Базовые структуры алгоритмов и их кодирование на Паскале
1.4.5. Примеры разработки программ
1.5.1. Понятие массива. Основные правила работы с массивами в Паскале
1.5.2. Примеры программ с массивами
1.614. Структура паскаль-программы
2.1. Общие сведения о подпрограммах
2.4. Глобальные и локальные имена
2.5. Использование подпрограммы в качестве параметра другой подпрограммы
2.6.4. Модули как средство программирования
Часть. Обработка символьной информации и документов сложной структуры
3.1. Обработка символьной информации
3.1.3. Подпрограммы, работающие со строками
Часть IV. Работа с динамическими массивами
Приложение 1. Краткая инструкция по работе в среде Turbo (Borland) Pascal.
Режимы компиляции программы, использующей модули
VAR C:COMPLEX; D,D1:DATE; B:BOOK;
BEGIN . . . C.Re:=5; D.Month:=January; B.Author:='Smith';
{*} D1.Day:=6; D1.Month:=June; D1.Year:=1799;{*} . . .
Чтобы не писать многократно имя записи при работе с ее полями, используется оператор
WITHИмя_записи DOоператор
Три оператора, ограниченные {*}, эквивалентны оператору:
WITH D1 DO
BEGIN Day:=6; Month:=June; Year:=1799
END;
Пример. Ниже приведена программа для задачи §3.1.3, использующая для отображения строки таблицы тип запись (вместо типа строка)
Program Toys;
TYPE SVED=RECORD {тип "запись", описывающий игрушку}
name:String; {название игрушки}
MinAge, MaxAge,Rub:Real;
{возрастные границы и стоимость}
END;
VAR N:Integer; {число наименований игрушек}
Toy:SVED; {переменная, описывающая игрушку}
max:Real; {максимальная стоимость конструктора для детей до 7 лет}
namemax:String; {название искомого конструктора}
i:Integer; {счетчик наименований игрушек}
BEGIN
Writeln(' Введите число наименований игpушек');
ReadLn(N);
max:=0;
For i:=1 to N Do
With Toy Do {работаем с полями записи Toy}
BEGIN
Writeln('Введите название игpушки с номером', i:2);
Readln(name);
Writeln('Введите мин. и макс. возраст и стоимость');
Readln(Minage,Maxage,Rub); {вводим запись по полям}
If ((Pos('констpуктоp',name)>0) or {содержит ли название}
(Pos('Констpуктоp',name)>0)) and {слово "конструктор" }
(MaxAge<=7) Then
If Rub>max Then
BEGIN
max:=Rub;
namemax:=name
END;
END;
If max=0 Then
WriteLn(' Констpуктоpов для детей до семи лет нет')
Else
BEGIN
WriteLn('Cамый доpогой констpуктоp для детей до семи лет');
WriteLn(namemax);
WriteLn('стоит ', max:6:0, ' pублей')
END;
END.
Замечания:
Программа, использующая запись, конечно, алгоритмически проще, чем программа со строками. Платой за упрощение является разрушение структуры таблицы при вводе: строка таблицы распределяется по нескольким строкам экрана монитора компьютера.
Недостатки программы, отмеченные в §3.1.3, имеют место и для этой программы. Они устраняются использованием файлов.
3.3. Файлы
3.3.1. Общие понятия
Термин файл используется в программировании в двух смыслах. В рамках операционной системы файл понимается как область памяти внешнего запоминающего устройства (обычно диска), имеющая имя. В алгоритмических языках файл - это тип данных, используемый, как правило, при работе с внешними запоминающими устройствами. В этой главе мы будем рассматривать файл как тип данных.
Файл- это последовательность однотипных компонент.Число компонент файла не ограничено. После последней компоненты файла стоит специальный код, называемый признаком конца файла; этот код обычно ставится автоматически, без участия программиста.
В классическом понимании файл рассматривается как абстрактное обобщение данных на устройстве с последовательным доступом, типичным представителем которого является магнитная лента. В библиотеках современных языков программирования, конечно, имеются средства и для работы с файлами прямого доступа.
Условно устройство с последовательным доступом можно представить как бесконечную ленту с фиксированным началом. Движение по этой ленте возможно только от начала, последовательно от компоненты к компоненте. Для достижения N-й компоненты необходимо пройти (N-1) предыдущих компонент. В оперативной памяти ЭВМ для каждого файла существует единственная ячейка, в которую информация может считываться из файла или из которой информация может записываться в файл; эта ячейка рассчитана точно на одну компоненту файла; она называетсябуфером( или окном, карманом). Используется также терминуказатель файла. Это абстрактное понятие, соответствующее головке считывания-записи магнитной ленты или магнитного диска. Указатель стоит (указывает) на доступной ( в каждый момент единственной!) компоненте файла.
Обычно в алгоритмических языках определяется программное и физическоеимя файлов. Программное имя - это имя переменной файлового типа, физическое имя - это имя устройства или файла на диске. Существуют специальные операторы, связывающие программное и физическое имя файла.
Файлы бывают текстовыми идвоичными.
Текстовые файлы хранят информациюво внешнем представлении. Они имеют два основных признака: во-первых, их компонентами являются строки символов; во-вторых, эта символьная информация интерпретируется в соответствии с типом вводимых или выводимых переменных. Эти файлы являются обобщением данных на устройствеCON (т.е. вводимых с клавиатуры или выводимых на экран компьютера). Умение работать с текстовыми файлами необходимо даже начинающим программистам, так как на устройствеCON данные существуют малый промежуток времени, а обычно имеется потребность в их длительном хранении.
Текстовые файлы можно подготовить, прочитать, исправить с помощью текстового редактора. Они хранят информацию во внешнем представлении, в виде, понятном для человека. Такие файлы часто называются видимыми.
Двоичный файл- это последовательность байтов; обмен информации между двоичным файлом и переменными программы происходит без преобразования. В Турбо Паскале рассматривается два вида двоичных файлов: типизированные и нетипизированные. В случае типизированных файлов байты файла разбиваются на ячейки в соответствии с типом компонент файла; например, для файла с базовым типомintegerкаждая пара байтов (для 32-разрядных компьютеров – четверка) рассматривается как целое значение;типизированныефайлы хранят данныево внутреннем представлении. Для нетипизированных файлов представление информации безразлично, файл рассматривается как последовательность нулей и единиц.
Ниже рассматривается подход к файлам версии Турбо Паскаль. Объектный Паскаль поддерживает этот подход, хотя имеет и другие широкие возможности для работы с файлами, характерные для операционной среды Windows; рассмотрение последних возможностей выходит за рамки данного пособия.
3.3.2. Файлы в Турбо Паскале
Файлы бывают текстовые, типизированные и нетипизированные.
Функция EOF20(имя_файла) применяется к файлам любого вида. Она возвращает значениеTRUE при чтении конца файла, иначе возвращает FALSE.
Все процедуры, использующие файлы, не работают без других, подготовительных, процедур: ASSIGN21, RESET, REWRITE.
Процедура ASSIGNсвязывает программное имя файла (т.е. имя переменной, описанной как файл) и его физическое имя (т.е. имя файла на диске или имя устройства, записанное по правилам операционной системы). Обращение к процедуре имеет вид:
ASSIGN(програм_имя_файла,физич_имя_файла).
Процедура RESET(имя файла) подготавливает файл к чтению (вводу). В случае отсутствия файла с заданным физическим именем процедура выводит сообщение об ошибке. В случае существования файла производятся следующие действия. Если файл не пустой, то указатель устанавливается на первую компоненту, значение первой компоненты пересылается в буфер, функцияEOF принимает значениеFALSE. Если файл пуст, то содержимое буфера считается неопределенным, а функцияEOF устанавливается в значение TRUE.
Процедура REWRITE(имя_файла) подготавливает файл к записи (выводу). Если файл с заданным физическим именем не существует, то делается попытка создать файл. Далее файл очищается; указатель устанавливается на первую компоненту; функцияEOF принимает значениеTRUE.
RESETи REWRITE называются процедурами открытия файла (для чтения и записи, соответственно). ПроцедураAPPEND(имя_файла) открывает текстовый файл для дополнения.
После окончания работы с файлом необходимо его закрыть с помощью процедуры CLOSE22 (имя_ файла). Под закрытием файла понимается его сохранение и перерегистрация в каталоге. Кроме того, в результате закрытия файла разрушается связь между программным и физическим именами файла, определенная операторомASSIGN; использование программного имени файла становится невозможным (до повторного примененияASSIGNи открытия файла).
3.3.3. Текстовые файлы
Для описания переменной типа текстовый файл используется ключевое слово TEXT23:
VAR имя_текст-файла: TEXT;. . .
Процедуры считывания из текстового файла (записи в него) отличаются от привычных процедур ввода с клавиатуры ( вывода на экран) только тем, что в скобках перед списком ввода (вывода) указывается имя файла:
READ(имя-файла,список_ввода);
WRITE(имя_файла, список_вывода)
READLN(имя_файла, список_ввода);
WRITELN(имя_файла, список_вывода)
Если имя файла отсутствует, то используется имя CON.
Функция EOLN24(имя_файла) применима только к текстовым файлам (так же, как и процедурыREADLN иWRITELN); она возвращает значениеTRUE,если считан конец строки, иначе возвращает значение FALSE.
Далее приведены программы, исходные и выходные данные которых хранятся в текстовых файлах.
Пример 1
program Primer1_3_3_3;
{В текстовом файле Х хранятся сведения об игрушках}
{в текстовый файлY записываются сведения}
{о конструкторах для детей до 7 лет}
Type sved=record
name:string;
minage,maxage:integer;rub:real;
end;
Var x,y:text; toy:sved;
Begin
Assign (x,'d:\student\xtext.txt');
Assign(y,'d:\student\ytext.txt');
{физические имена файлов выбраны произвольно}
reset(x); rewrite(y);{xоткрывается для чтения, у - для записи}
if eof(x) then writeln('x - пустой')
else
Begin
while not eof(x) do
with toy do
Begin
readln(x,name); {запись считывается по полям}
readln(x,minage,maxage,rub);
if((pos('конструктор',name)>0) or pos('конструктор',name)>0))
and (maxage<=7) then
writeln(y,name); {запись выводится по полям}
writeln(y,minage,maxage, rub:8:0);
End;
End;
Close(x); Close(y);
End.