Динамический и статический массив паскаль
В предыдущих уроках рассматривались переменные простых типов данных. В языке Паскаль из элементов простых типов можно образовывать структурированные типы данных. Примером подобной структуры является массив.
Массив – это структурированный тип данных, образованный из элементов одного и того же типа.
Структура упорядочивается по индексу (номеру), который определяет положение элемента в массиве и предоставляет доступ к отдельным элементам. Тип индекса в зависимости от задачи может быть одним из порядковых типов.
В PascalABC.NET массивы подразделяются на статические и динамические.
Статические массивы
В языке программирования Паскаль существует возможность описать тип статического массива. Память под такую структуру выделяется при описании, поэтому размер массива задается непосредственно в типе:
type = array [ тип индекса ] of
Тип индекса в зависимости от задачи должен быть одним из порядковых. Обычно для описания индекса используется диапазонный тип, который представляется в виде a..b , где a и b — константные выражения целого, символьного или перечислимого типа.
Чтобы использовать заданный тип статического массива, достаточно описать обычным образом переменные этого типа в разделе описаний, например:
- type
- klass = (k9, k10, k11);
- masInt = array[1..100] of integer;
- var
- sch: array[1..3] of klass;
- dig, num: masInt;
Массив также можно описать непосредственно в разделе описания переменных, например:
- var
- s1: array[1..10] of integer;
- met: array[1..31] of real;
Элементам массива можно присвоить значения до начала выполнения программы. Это делается при описании путем инициализации массива значениями, например:
- var
- even: array[1..5] of integer := (2, 4, 6, 8, 10);
При обращении к массиву как к единому целому используется идентификатор массива. Статические массивы в Паскале можно присваивать друг другу. Для этого они должны иметь одинаковый тип индекса и одинаковые типы элементов, например:
- type
- masInt = array[1..5] of integer;
- var
- a: masInt := (2, 4, 6, 8, 10);
- b: masInt;
- begin
- b := a;
- writeln (b);
- end.
Для доступа к элементу массива необходимо указать имя массива и индекс элемента в квадратных скобках. Например, запись even[4] позволяет обратится ко четвертому элементу массива even .
Задача. Дан массив размером n . Осуществите циклический сдвиг элементов массива влево ( т. е. a[n] становиться на место a[n — 1], a[n — 2] – a[n — 2], …, a[2] — a[1] . a[1] переходит на место a[n] ).
Решение. Чтобы не потерять значение первого элемента массива, будем использовать переменную temp , в которой это значение будет хранится, до тех пор, пока не появится возможность присвоить его a[n] ).
Внимание: выход за границы изменения индекса массива является ошибкой.
Copyright © 2014-2018, Урок информатики
Все права защищены
Статические и динамические массивы языка Free Pascal
Free Pascal так же, как и Object Pascal, поддерживает массивы двух категорий. Первую из них составляют традиционные массивы Паскаля, при объявлении кото- рых в явном или косвенном виде указываются конкретные границы изменения ка- ждого индекса:
mat_q_k = array [1..q,1..k] of integer;
sa1: array [3..10] of byte; // явное задание границ sa2: mat_q_k; // косвенное задание границ
В ряде алгоритмических языков приняты соглашения о минимальном значении каждого индекса — в C и C++ индексы отсчитываются от 0, в Фортране — от 1, в Бейсике минимальной границей индекса можно управлять (оператор OPTION BASE). Паскаль допускает в качестве минимальных индексов любые значения порядковых данных. И ими могут быть не только числа, но и, например, символы:
ch: array [‘A’..’Z’] of integer; str: string;
Приведенный фрагмент наиболее простым способом позволяет подсчитать час- тоту появления тех или иных букв в обрабатываемом тексте.
Существует несколько вариантов для объявления многомерных массивов. На- пример, целочисленная матрица sa2, содержащая q строк и k столбцов, может быть включена в текст программы еще одним из следующих описаний:
sa2: array [1..q,1..k] of integer;
sa2: array [1..q][1..k] of integer;
sa2: array [1..q] of array [1..k] of integer;
В языке Free Pascal для обозначения традиционных массивов используется термин «статические массивы», хотя он не совсем точно описывает логику выде- ления памяти для их хранения. Дело в том, что традиционные массивы в зависимо- сти от места их определения делятся на глобальные и локальные. Глобальные мас- сивы описываются в одном из разделов объявлений головной программы. В отличие от них описания локальных массивов встречаются внутри функций или подпро- грамм. Для хранения глобальных массивов компилятор выделяет память перед на- чалом работы программы и чистит ее (числовые массивы заполняются нулями, а строковые — пустыми строками). Глобальные массивы хранятся в памяти до окон- чания работы программы и доступны в любой программной единице (функции или подпрограмме). В отличие от этого память для хранения локальных массивов вы- деляется во время работы программы в тот момент, когда вызывается та или иная программная единица. Эта память не чистится и доступна только в рамках той программной единицы, где она объявлена. При возврате из программной единицы память из-под локальных массивов освобождается. Поэтому локальные массивы появляются в оперативной памяти динамически, и термин «статический» в такой ситуации не очень удачен.
Вторую категорию составляют действительно динамические массивы, объявле- ние которых не содержат указания о границах изменения индексов:
da1: array of integer; <одномерный массив>da2: array of array of integer;
Так как объявление динамического массива не сопровождается указанием о длине, то компилятор выделяет для каждого динамического массива (глобального или локального) по 4 байта. В них хранится указатель на начало значений элемен- тов динамического массива. В начальный момент значения всех таких указателей равны 0, что соответствует «пустым» динамическим массивам (ситуация напомина- ет стратегию распределения памяти под строки типа AnsiString).
Фактическое выделение памяти под динамические массивы производится только во время работы программы путем вызова процедуры SetLength (дослов- но — установить длину):
Такое обращение эквивалентно «статическому» описанию вида:
da1: array [0..99] of integer;
Индексы динамических массивов всегда отсчитываются от 0, поэтому в об- ращении к процедуре SetLength кроме имени динамического массива задается ко- личество элементов. Память, впервые выделяемая динамическому массиву, всегда чистится.
Во время работы программы к процедуре SetLength можно обращаться много раз. Если при очередном обращении новая длина больше предыдущей, то значения ранее вычисленных элементов сохраняются, а всем добавляемым элементам при- сваиваются нулевые значения. Если новая длина динамического массива меньше текущей, то сохраняются значения начальных элементов, «лишние» элементы бу- дут безвозвратно потеряны.
Для выделения памяти под двумерный динамический массив к процедуре Set- Length обращаются с тремя параметрами, задавая количество строк и количество столбцов:
Такое обращение эквивалентно «статическому» описанию вида:
da2: array [0..3, 0..5] of integer;
Если динамический массив был объявлен в процедуре или функции, то он яв- ляется локальным и после выхода из программной единицы память, занимаемая значениями элементов массива, освобождается.
К дополнительным средствам досрочного возврата памяти, занятой элементами динамического массива, относятся следующие способы:
Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)
Динамические массивы в Pascal;
BEGIN
Динамические структуры данных. Динамические массивы (одномерные и двумерные), работа с ними
Основным отличием динамических массивов от статических является возможность изменения их размерности в ходе выполнения программы.
Можно отметить следующие достоинства динамической памяти:
1) Экономичность и эффективность ее использования;
2) возможность динамического изменения числа элементов в связанных структурах, например в списках;
3) статические переменные существуют только в течение жизни блока, в котором они объявлены, а динамические – и после выхода из блока до окончания программы.
4) Переменная, размещаемая динамически, не объявляется в разделе VAR и не имеет имени в программе. компилятор не планирует выделение места в памяти под такие переменные.
В Delphi:
Динамический массив — это массив, память для которого выделяется динамически. Размерность динамического массива на момент компиляции не известна. Для объявления такого массива применяется обычное описание, но без указания размерности. Основным отличием динамических массивов от статических является возможность изменения их размерности в ходе выполнения программы.
Динамические массивы— это тип данных с управляемым временем жизни, поэтому можно не думать о своевременном освобождении выделенной им памяти — она будет освобождена автоматически, когда данная переменная покинет область видимости.
Описание динамического массива:
Память для элементов динамического массива выделяется с помощью вызова стандартной процедуры Setlength. Первым ее параметром является имя массива, а вторым задается требуемое количество его элементов. Использование таких массивов удобно тогда, когда мы изначально не можем точно определить его размер.
Пример динамического массива:
TYPE CODES = ARRAY OF INTEGER;
VAR A:CODES;
SETLENGTH (A,30);
A[0]:= ‘POOH LIKES HUNNY’
END;
Необходимо учитывать, что динамический массив индексируется значениями, отсчет которых начинается с 0. Чтобы обратиться к первому элементу массива, необходимо использовать индекс 0, а к последнему – 29.
При необходимости память, выделенную под массив, можно освободить самостоятельно (например, если массив использовал слишком большое ее количество). Для этого достаточно просто присвоить массиву значение nil. Например: A:= nil;
Пример многомерного динамического массива:
Type Codes = array of array of array of integer;
Массив А имеет 10 элементов, каждый массив A[i] имеет 20 элементов, а массивы A[i][j] – 30 элементов
Обращение к участку динамической памяти в программе осуществляется с помощью специальной ссылочной переменной, которая называется указателем (ссылкой). Переменная типа «указатель» содержит адрес размещения участка динамической памяти, с которой связан этот указатель. Компилятор отводит под переменную типа «указатель» 4 байта статической памяти.
Описание типа указатель:
P=^Word; P – идентификатор типа «указатель» на данные типа WORD.
Динамическая память может быть выделена двумя способами:
New (p), где Р – переменная типа «типизированный указатель»
Getmem (P, size), где Р – переменная типа «указатель» требуемого типа, а size – целочисленное выражение размера запрашиваемой памяти в байтах. Эта процедура создает новую динамическую переменную требуемого размера и свойства, а также помещает адрес этой созданной переменной в переменную Р типа «указатель». Доступ к значению созданной переменной можно получить с помощью P^.
При работе с массивами практически всегда возникает задача настройки программы на фактическое количество элементов массива. В зависимости от применяемых средств решение этой задачи бывает различным.
Первый вариант — использование констант для задания размерности массива. Такой способ требует перекомпиляции программы при каждом изменении числа обрабатываемых элементов.
Статические и динамические массивы
· Статистическими(традиционными) массивами, называются те массивы при объявлении которых в явном или косвенном виде указываются конкретные границы изменения каждого индекса.
Const
A=3
K=2
Type
Mat = array[1..a,1..k]
Var
x: Array [3…10]
Y: mat
· Динамические массивыне содержат указания о границах изменения индексов
Пример:
SetLenght(da1,100) — такое обращение эквивалентно статическому
описаниювидаx: Array [0…99] of integer
Вопрос№24.
Длина и размер массива.
Длина и размер массива — это объем оперативной памяти в байтах, занятых элементами массива. Для определения этой характеристики обычно прибегают к функции SizeOf.
Каждый элемент массива занимает 8 байт. Аоскольку в массиве оъем объявлено 13 элементов, то для хранения их значений компилятор отведет 8х13=104 байта.
Размер одномерного статического массива совпадает с количеством его элементов. И для определения этой характеристики обычно прибегают к функции Length: Length (sa1) = 13
В языке Паскаль предусмотрены еще две функции — Low и High для определения минимального и максимального значения индекса одномерного и статического массиваю Например:
Low (sa1) = 3
High (sa1) = 15
Результат функции SizeOf(da1) иногда равен 4. Фактически, это объем памяти, занимаемый указателем da1 на соответсвующие данные. Функции Length выдает фактическое значение, равное текущему количеству элементов динамического массива, и пока обращение к процедуре SetLength еще не было, эта характеристика равна 0.
Для двумерного массива q размером nxm компилятор заводит n указателей. Первый из них имеет для q0 совпадающее с именем массива. Он является указателем на начало массива и одновременно на первую строку массива. Если минимальное значение первого индекса равно k, то указатель q[k] тоже «смотрит» на первую строку массива (т.е. q и q[k] — это два имение одного и того же указателя). Следующий указатель с именем q[k+1] «смотрит» на вторую строку массива и т.д.
Вопрос№25.
При решении сложных задач целесообразно разбивать их на более простые подзадачи. В языке Паскаль, предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму. Использование подпрограмм позволяет сделать основную программу более наглядной, понятной, более короткой и эффективной. Оформление процедур.PROCEDURE имя (формальные параметры);раздел описанийBEGINраздел операторовEND;Вызывается процедура по имени:имя (фактические параметры);
Вопрос№26.
Алгоритм
Алгоритм программирования на языке Pascal – это есть последовательность операторов Паскаль, с помощью которых мы пришли к решению задачи. Она выглядит так:
Program . ;
Uses . ; < Подключение модулей >– если они есть
Label . ; < Раздел объявления меток >– если они есть
Const . ; < Раздел объявления констант >– если они есть
Type . ; < Раздел объявления новых типов >– если они есть
Var . ; < Раздел объявления переменных >– если они есть
Procedure . ; < Описание своих процедур >– если они есть
Function . ; < Описание своих функций >– если они есть
Begin
End.
Обязательной частью является лишь тело программы, которое начинается словом begin, а заканчивается словом end с точкой. Операторы в Паскале разделяются точкой запятой. Заголовок программы является хотя и необязательным, но желательным элементом и состоит из зарезервированного слова program и идентификатора — имени программы, за котором следует точка с запятой. Порядок объявлений и описаний не регламентируется.
Следование-действие идёт друг за другом
Вопрос№28.
Оператор выбора Паскаля позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит ключ выбора – выражение любого порядкового типа.
Структура оператора выбора в Паскале такова:
Case of
[else ] end
Здесьcase, of, else, end – зарезервированные слова (случай, из, иначе, конец);
· — выражение порядкового типа;
· — одна или более конструкций вида:
· — константа того же типа, что и выражение
— произвольные операторы Паскаля.
Оператор выбора Паскаля работает следующим образом. Вначале вычисляется значение выражения , а затем в последовательности отыскивается константа, равная вычисленному значению. Выполняется оператор, который следует за найденной константой, после чего оператор выбора завершает работу. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается операторам, стоящим за словом else. Часть else можно опустить, тогда при отсутствии в списке выбора нужной константы не будет выполнено никаких действий, и оператор выбора просто завершит свою работу.
Например, составим программу, которая по номеру дня недели выводит на экран его название:
Следует помнить, что все константы из списка выбора должны быть различны.
Любому из операторов списка выбора может предшествовать не одна, а несколько констант выбора, разделенных запятыми. Например, следующая программа при вводе одного из символов ‘ y’ или ‘ Y’ выведет на экран «Да», а при вводе ‘ n’ или ‘ N’ – слово «Нет».
Вопрос№29.
Цикл
Цикл — организация многократного исполнения набора инструкций(операций). Также циклом может называться любая многократно исполняемая последовательность операций, организованная любым способом.
Эта последовательность как раз и является телом любого цикла.
Каждый раз при исполнении любого цикла в начале инициализируются его переменные, затем проверяется условие выхода, исполняется тело цикла и затем обновляется переменная на каждом новом круге выполнения цикла.
Какие бывают циклы? Сейчас мы рассмотрим все возможные варианты циклов по порядку.
1) Безусловные (бесконечные) циклы.
Такие циклы создаются с помощью конструкций, предназначенных для создания обычных (или условных) циклов. Для обеспечения бесконечного повторения проверка условия в таком цикле либо отсутствует, либо заменяется константным значением (while true do …).
2) Цикл с предусловием.
Цикл с предусловием — цикл, который выполняется пока истинно некоторое условие. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу. Реализуется такой цикл оператором while. На языке Pascal цикл с предусловием имеет следующий вид:
3) Цикл с постусловием.
Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. Реализует цикл оператор repeat..until.
Т.е цикл завершается, когда его условие выполнено.
4) Цикл с выходом из середины.
Цикл с выходом из середины — оформляется с помощью трёх конструкций: начала цикла, конца цикла и команды выхода из цикла. Внутри тела должна присутствовать команда выхода из цикла, при выполнении которой цикл заканчивается и управление передаётся на оператор, следующий за конструкцией конца цикла. Чтобы цикл выполнился более одного раза, команда выхода должна вызываться не безусловно, а только при выполнении условия выхода из цикла.
Но в языке pascal таких конструкций не предусмотрено, поэтому для выхода из середины цикла используется оператор безусловного перехода goto.Он позволяет изменить порядок выполнения команд.
Где n – метка, по которой определяется, в какую часть программы следует перейти при определённых условиях.
5) Цикл со счётчиком.
Цикл со счётчиком — цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. Реализуется оператором for, в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик.
Цикл со счётчиком всегда можно записать как условный цикл, перед началом которого счётчику присваивается начальное значение, а условием выхода является достижение счётчиком конечного значения.
То есть в конструкции for сначала пишется произвольное предложение инициализации цикла, затем — условие продолжения и, наконец, выполняемая после каждого тела цикла некоторая операция.
6) Вложенные циклы.
Иногда необходимо поместить один цикл в другой. Такой цикл и называется вложенным. Внутри вложенного цикла в свою очередь может быть вложен еще один цикл, образуя следующий уровень вложенности и так далее. Количество уровней вложенности, как правило, не ограничивается.
Здесь в условный оператор вложен еще один условный оператор, что создаёт вложенный цикл.
С вышеперечисленными циклами можно выполнять определённые операции, для усовершенствования их функционала.
Бывают ситуации, когда необходимо сделать досрочный выход из цикла по определённым причинам (ошибка в теле цикла и т.д.). Для решения таких проблем существует команда break, а её действие аналогично действию команды безусловного перехода (goto) на команду, непосредственно следующую за циклом, внутри которого эта команда находится. Этот оператор прерывает работу того цикла, в котором он непосредственно находится.
Вопрос№30.
Графические средства FP
Практически повторяет набор графических средств Turbo Pascal, Borland Pascal. Дополнительным в FP является выделение приложением двух окон. В главном окне реализуются взаимодействие между пользователем и приложением )ввод/вывод по операциям: read/readln, write/writeln, readkey/keypressed) В дополнительном окне выполняется построение фигур и отображение пояснительных записей с помощью процедур BCI.
Вопрос№31.
Рабочее поле графического окна имеет систему координат, начало которой находится в левом верхнем углу. Ось х направлена вправо, а ось у – вниз.
Единицы измерения – пикселы.
Вопрос№32.
Графический курсор.
Рабочее поле графического окна, расположенное под заголовком окна, снабжено системой координат, начало которой находится в левом верхнем углу. При этом ось у направлена вниз, а ось х – вправо. В качестве единиц измерения приняты пикселы экрана. Для хранения кода цветности каждого пиксела в видеопамяти выделяется до 24 двоичных разрядов.
Ряд графических процедур наряду с абсолютными координатами использует и относительные координаты, которые задаются в виде смещений (dx,dy) относительно позиции текущей точки CP (Current Point). При создании графического окна текущая точка перемещается в начало координат. Ее последующие перемещения зависят от выполняемых графических операций. Например, при построении отрезка прямой текущая точка переводится в конец отображаемого отрезка. При построении окружности положение текущей точки не изменяется. Текущую точку обычно называют графическим курсором, который в отличие от постоянно мигающего текстового курсора не изображается в графическом окне, чтобы не исказить выводимую картинку. Координаты текущей точки программа может опросить с помощью функции GetX и GetY.
Массивы статические и динамические.
Массив— это набор элементов определенного типа, каждый из которых имеет свой порядковый номер, называемый индексом. Различают массивы статические и динамические.
Границы статического массива устанавливаются на этапе разработки и могут изменяться только в новой версии программы.
Динамические массивы изменяют свои границы в ходе выполнения программы.
Статические массивы нельзя определить локально внутри процедуры, а только глобально или для контейнера.
[Static| Public| Dim] Имя_массива([Нижн_предел To] Верхн_предел) [As Тип_данных]
Динамический массив создается в два этапа. Сначала массив определяют в секции (General) (Declarations) контейнера (Form, Module) без указания размера. Затем с помощью оператора ReDim устанавливают фактический размер массива:
Синтаксис оператора ReDim:
ReDim [Preserve] Имя_массива(Границы) [As Тип_данных]
В отличие от Dim оператор ReDim используется только в процедурах. При этом тип данных указывать не обязательно, особенно если он уже определен оператором Dim. Использование ключевого слова Preserveпозволяет сохранить содержимое массива при изменении его размерности (однако, для многомерных массивов можно изменять только последнее измерение).
Dim a() As Variant
Private Sub Command1_Click()
ReDim Preserve a(5,10)
Область видимости динамических массивов (контейнерных, глобальных) определяется способом их объявления:
При необходимости определения фактического размера массива используются встроенные функции:
Lbound(массив, размерность) — нижняя граница.
Ubound(массив, размерность) — верхняя граница.
Пример ввода данных в динамический массив:
Dim ms() As String
Private Sub Command1_Click()
s = «Начало работы»
s = InputBox(«введите фамилию»)
ReDim Preserve ms(UBound(ms) + 1)
ReDim Preserve ms(UBound(ms) — 1)
For i = 0 To UBound(ms)
VISUAL BASIC позволяет использовать массив в качестве передаваемого в процедуру параметра и в качестве возвращаемого функцией значения.
Пример передачи массива в качестве параметра массива:
Public Sub srt(b() As Integer)
Dim i As Integer, f As Integer, k As Integer
For i = LBound(b) To UBound(b) — 1
If b(i) > b(i + 1) Then
k = b(i): b(i) = b(i + 1): b(i + 1) = k: f = 1
Loop While f = 1
Private Sub Command1_Click()
Dim a(1 To 5) As Integer
Dim i As Integer
a(i) = Val(InputBox(«Введите число»))
Пример функции, возвращающей массив:
Public Function VV(ByVal n As Byte) As Byte()
Dim x(1 To n) As Byte, i As Byte
x(i) = Val(InputBox(«Введите число»))
Private Sub Commnd1_Click()
Dim b() As Byte, i As Byte
B()=VV(10) ‘вызов функции
Файлы
Информация хранится на разнообразных носителях в файлах. Процесс работы с файлами состоит из нескольких этапов:
получение дескриптора файла;
чтение или запись файла;
Для связи системы или приложения с файлом имеется канал ввода/вывода. При открытии файлу ставится в соответствие канал с определенным номером. Допустимо использование номеров 1- 511. Каждый открытый файл имеет собственный канал, с помощью которого записываются или считываются данные. Следовательно, для ввода и вывода данных в файл имеет значение не имя файла, а номер канала. Операционная система должна иметь сведения о наличии свободных каналов, которые можно использовать для открытия файлов.
VISAUL BASIC имеет функцию FreeFile[(дапазонНомеров)], возвращающую номер свободного канала, который можно использовать для работы с файлом. Если свободных каналов нет (открыто максимально допустимое количество каналов), возникает ошибка выполнения. Необязательный параметр дапазонНомеров позволяет определить диапазон значений, из которых выбирается очередной свободный номер канала:
если 0 (по умолчанию) — возвращается номер канала из диапазона 1-255,
если 1— то из диапазона 256 — 511.
В VISAUL BASIC реализованы три типа доступа к файлам:
последовательный (для обработки текстовых файлов);
произвольный (для обработки текста или структурированных двоичных файлов с записями фиксированной длины);
двоичный (для обработки произвольно структурированных файлов).
Последовательный файл состоит из текстовых строк ASCII- формата. Любая информация считывается или сохраняется в текстовом виде построчно. Последовательные файлы могут обрабатываться любым текстовым редактором.
Способ открытия файла с последовательным доступом (для чтения, записи или добавления) задается при вызове оператора открытия файла:
Open имяФайла For режим As дескрипторФайла
Где: имяФайла определяет имя открываемого файла; это либo строка символов, заключенная в кавычки, либо выражение, значением которого является строка символов. Она представляет собой путь к открываемому файлу;
режим — это режим доступа, который может иметь значения:
Input (Ввод) — если файл открывается для чтения из него текстовых данных.
Output (Вывод)- если файл открывается для записи в него данных, начиная с первой позиции. Вся имевшаяся в нем старая информация будет стерта.
Append (Дополнение) — если файл открывается для записи в него данных не с первой, а с конечной позиции, так что вся имевшаяся в нем старая информация будет сохранена.
дескрипторФайла — целое число, по которому идентифицируется открываемый файл. Файловые номера используются при выполнении файловых операций в программе.
Все открытые файлы закрываются оператором:
Close [списокДескрипторов]
списокДескрипторов — это записанные через запятую дескрипторы файлов, которые должны быть закрыты. При отсутствии этого параметра будут закрыты все открытые файлы.
Для записи в файл используются операторы:
Print # ДескрипторФайла, [СписокЗначений]
Write # ДескрипторФайла, [СписокЗначений]
Где: СписокЗначений — это записанные через разделитель значения (или выражения).
Оба оператора записывают данные в файл текстовыми строками. Текстовая строка — это последовательность символов, которая заканчивается символом перехода на новую текстовую строку или символом возврата каретки (коды 13 и 10). Текстовый файл представляет собой последовательность текстовых строк.
Логика работы операторов Write и Print различна.
Разделителем в списке значений является запятая. Список значений просматривается последовательно, и элементы этого списка записываются в одну текстовую строку файла через запятую. Элементы типа String заключаются в кавычки. После записи последнего элемента записывается символ перехода на новую строку.
Например, напишем программу записи в текстовый файл следующих строк:
В каждой строке — фамилия и год рождения.
На рис. 68 в окне редактора кодов приведен текст процедуры создания текстового файла с использованием оператора Write.