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

ээээээ ээээээээээээээээ

.pdf
Скачиваний:
21
Добавлен:
14.05.2015
Размер:
628.39 Кб
Скачать

При написании, между именем файла и расширением ставится точка.

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

быть пропущена (берется "по умолчанию"), важными являются

только имя и расширение, которые обычно называют именем файла.

ТЕКСТ - набор данных, имеющий вид упакованных строк, закачивается

специальным знаком "конец файла" <26>.

Файлы - программы, доступные процессору, т.е. могут сразу исполнены,

имеют расширения .COM или .EXE . Имена таких файлов служат командами

исполнения содержимого для операционной системы. Операционная система

(ОС) - специальная программа, автоматически запускаемая при включении

компьютера, основным назначением которой является поиск и исполнение

файлов-программ.

Файлы - программы на языке "Pascal" - содержат текст программы,

являются строками. Могут быть созданы с помощью любого текстового

редактора. С помощью программы-транслятора могут быть преобразованы

в файлы, исполняемые процессором.

Обычно специальный редактор объединяют с транслятором, куда

добавляются средства контроля программ и систему подсказок (Help) -

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

записанный в виде .COM или .EXE - файла, в дальнейшем, присутствия

системы программирования не требует.

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

требуется присутствие BASIC-системы. При работе которой оператор

находится в среде специального редактора. Набираемые команды

могут быть выполнены немедленно, или, если имеют метку - номер,

запомнены в оперативной памяти. Команды оперативной памяти

могут быть просмотрены командой "LIST" или исполнены командой "RUN"

Из оперативной памяти программа может быть перенесена во внешнюю

командой SAVE"<ИМЯ ФАЙЛА>"[,A]

Запись присходит в более коротком кодированном варианте или (при наличии флажка - буквы "A" в команде) в полном варианте, пригодном для просмотра и печати средствами ДОС.

Командой восстановления программы в оперативную память из файла

является LOAD"<ИМЯ ФАЙЛА>"[,R]

Флаг 'R' служит для немедленного запуска программы после "загрузки".

Загрузить в оперативную память и сразу исполнить программу можно

командой RUN"<ИМЯ ФАЙЛА>"

Обычно, файл - программа на языке "BASIC" имеет расширение

.BAS .

Запись/загрузка подпрограмм в кодах проводится командами BSAVE"<имя>" BLOAD"<имя>"

При работе с кассетным магнитофоном в качестве ВУ, используют команды CSAVE"<имя>" CLOAD"<имя>"

Есть возможность объединения двух текстов - программ в один. Для этого один текст должен быть в оперативной памяти, а другой, заранее подготовленный, должен быть записан в файл в полном варианте. Команда MERGE"<имя подготовленного файла>" создаст в оперативной памяти совместный текст обеих программ. Если в склеиваемых текстах были строки с одинаковами номерами, то останется только строка подготовленного файла.

Итак, на примере работы с файлами-программами на языке "BASIC",

имеем три вида работы с файлами - создание (SAVE), чтение (LOAD)

и добавление (MERGE).

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

MAXFILES=<N>, по умолчанию, это число =1. Каналы связи программы

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

В языке PASCAL вместо номеров каналов связи вводятся переменные

файлового типа, которые описываются как :file of <тип элементов>; или :text;

Элементы файлов могут быть любых типов, кроме файлового. Слово "text" указывает на файл строк произвольной длины.

* Способ образования (хранения). <цифры приведены для ЭВМ "Yamaha">

В памяти компьютера, для каждого файла, выделяется буфер <256 байт>

При создании файла последовательного доступа, заполняется не файл,

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

внешне устройство (файл), буфер очищается и готов заполняться снова.

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

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

очередные порции информации.

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

Для работы буфера используются служебная информация - блок управления файлом (File Control Blok - FCB) <9 байт>

* Для работы с текстами обычно используют специальный редактор.

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

MAXFILES=<N>, по умолчанию, это число =1. Каналы связи программы

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

В языке PASCAL вместо номеров каналов связи вводятся переменные

файлового типа, которые описываются как :text; 3 Основные операции.

С файлами проделывают две операции: открывают с какой-то целью

и закрывают. (file - папка (англ)). Существуют три цели открытия файла - для занасения в него данных (заново)

-для добавления в него данных (в конец)

-для извлечения из него информации.

BASIC

PASCAL

открыть

open "<имя>" for output as#1

rewrite(f) для записи

open "<имя>" for input as#1

reset(f) для чтения

open "<имя>" for append as#1

append(f) для добавления

close(#1)

close(f)

закрыть

После открытия файла стандартные команды получения и вывода информации,при наличии указания на номер или имя канала связи, работают с файлом:

PRINT #1, A;B

WRITE(f,A,B); WRITELN(f,A,B);

INPUT #1, X,Y

READ(f,X,Y); READLN(f,X,Y);

В языке PASCAL файловая переменная перед использованием связывается

с именим файла - строкой знаков специальной командой ASSIGN(f,<имя>);

4 Связь с данными других типов.

Элементом текста является строка.

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

18) Линейные списки (основные операции)

Списком называется структура данных, каждый элемент которой посредством указателя связывается со следующим элементом.

Из определения следует, что каждый элемент списка содержит поле данных (Data) (оно может иметь сложную структуру) и поле ссылки на следующий элемент (Next). Поле ссылки последнего элемента должно содержать пустой указатель (NIL).Чтобы список

существовал, надо определить указатель на его начало. Опишем переменные:

Var и, х: EXS;

Создадим первый элемент:

New(u); {выделим место в памяти для переменной типа S}

u^.next:=nil; {указатель пуст} и^.data:=3; {информационное поле первого элемента}

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

х:=и; {Введем вспомогательную переменную указательного типа, которая будет хранить адрес последнего элемента списка. Сейчас последний элемент списка совпадает с его началом.}

New(x^.Next)•,{выделим область памяти для следующего элемента списка}

x:=x^.Next; {переменная х принимает значение адреса выделенной области памяти}

x^.Data:=5; {определим значение этого элемента списка} x^.Next.=Nil:

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

Procedure Init(Var u: Exs); {создание списка}

Var х, у: Exs; Digit: Integer; {значение информационной части элемента списка}

Begin

Writeln('Введите список '); u:=Nil; {список пуст} WriteLn('Bводите элементы списка. Конец ввода 0); Read(Digit);

While Digit<>0 Do Begin

New(y); {формирование элемента списка} y^.Nexf:=Nil; y^.Data:=Digit;

If u=nil Then u:=y {вставляем первый элемент списка} Else x^.Next:=y; {вставляем элемент в конец списка}

х:=у; {переносим значение указателя на последний элемент списка}

Read(Digit);

End;

Writein;

End;

Итак, мы построили список добавлением элементов в конец списка. Вставим элемент со значением 7 в начало списка.

Удаление элемента из начала списка

Напишем фрагмент программы:

х:=и; {запомним адрес первого элемента списка} u:=u^.next; {теперь и указывает на второй элемент списка} Dispose(x); {освободим память, занятую переменной х^}

Удаление элемента из середины списка

Для этого нужно знать адреса удаляемого элемента и элемента, находящегося в списке перед ним. х:=и; {переменная х для хранения адреса удаляемого элемента}

{найдем адреса нужных элементов списка }

While (x<>Nil) And (x^.Data<>Digit) Do Begin dx:=x; x:=x^.Next End;

dx^.Next:=x^.Next; Dispose(x);

Удаление элемента из конца списка

Оно производится, когда указатель ах показывает на предпоследний элемент списка, а х — на последний.

{найдем предпоследний элемент} х:=и; ах:=и;

While x^.Next<>NIL Do Begin dx:=x; x:=x^.Next; End;

{удаляем элемент х^ из списка и освобождаем занимаемую им память} dx^.Next:= Nil; Dispose(x);

Стек

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

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

Основные операции со стеками

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

Дадим новое определение стека. Стек — это список, в котором добавление новых элементов и извлечение имеющихся происходит с начала (или конца) списка.

Значением указателя, представляющего стек, является ссылка на вершину стека, каждый элемент стека содержит поле ссылки.

Таким образом, описать стек можно следующим образом:

Type EXST=^ST;

ST=Record Data: Integer; Next: EXST; End;

Var Stack: EXST;

{текущая переменная}

Тогда, если стек пуст, то значением указателя равно NIL.

Занесение в стек

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

Занесение в стек производится аналогично вставке нового элемента в начало списка:

Procedure WriteStack (Var ir.EXST; digit: Integer); {запись в стек} Var x:.EXST;

Begin

New(x); {создание нового элемента стека} x^.Data:=diglt; х^.Nехt:=u

{созданный элемент определить как вершину стека} u:=х;

End;

Основная программа формирования стека будет иметь вид:

Var Stack: EXST; {текущая переменная} digit: Integer;

Begin

Stack:=Nil;

WriteLn(1'Введите элементы стека. Окончание ввода — О'); Read(Digit);

While Digit<>O Do Begin WriteStack(Stack, digit); Read(digit); End

End.

Извлечение элемента из стека.