Введение в ос linux



Pdf просмотр
страница6/6
Дата15.11.2016
Размер0.54 Mb.
Просмотров1707
Скачиваний0
1   2   3   4   5   6
Раздел program
состоит из зарезервированного слова PROGRAM и имени программы. В Турбо Паскале эта строка не обязательна, и ее можно без ущерба исключить. Но правила хорошего тона в программировании требуют задания некоторого имени программы, чтобы уже при первом знакомстве можно было получить хоть какую-нибудь информацию об ее назначении.
Имя, или идентификатор, строится по следующим правилам: оно может начинаться с большой или малой буквы латинского алфа-вита или знака "_", далее могут следовать буквы, цифры или знак "_"; внутри идентификатора не может стоять пробел. После имени программы следует поставить ";", этот знак служит в Паскале для разделения последовательных инструкций. Имя программы может не совпадать с именем соответствующего файла на диске.
Раздел описания модулей
Раздел описания модулей определяется служебным словом USES и содержит имена подключаемых модулей (библиотек) как входящих в состав системы PASCAL, так и написанных пользователем.
Понятия "библиотека", "модуль", "блок" составляют основу терминологии программирования на Паскале. Библиотека включает набор модулей, каждый из которых замкнут, имеет свое имя, компилируется отдельно и к нашей программе подключается уже как "черный ящик" с известным интерфейсом. Каждый модуль (блок (UNIT), как его называют на Паскале) представляет собой программу, включающую декларации типов и переменных, процедуры и функции.

Раздел описания модулей должен быть первым среди разделов описаний. Имена модулей отделяются друг от друга запятыми: uses CRT, Graph .
Раздел описания констант
Описание констант позволяет использовать имена как синонимы констант, их необходимо определить в разделе описаний констант:
CONST
Year=2007;
Month='november';
Day='Saturday';
При присвоении значений константам вместо оператора присвоения “:=” используется просто знак равенства “=”. Тип константы определяется автоматически по виду значения, присваемового константе и не может быть сложным.
Раздел описания типов
Раздел описания типов type позволяет определить новый тип в программе.
Раздел описания переменных
Здесь содержится список используемых в программе переменных и определеяется их тип.
Объявления переменных записываются в следующей форме: <переменная> :
<тип>;
Если описываются несколько переменных одного типа, то достаточно записать их имена через запятую, а после двоеточия поставить общий тип.
var a,b,c: integer;
x,y: real;
Переменные могут хранить данные различной природы: числа, строки тек-ста, отдельные символы и т. п.
Блок операторов
Основной блок программы, ограниченный операторами begin и end.. Как уже говорилось, оператор end. указывает компилятору, что программа закончена, в отличие от операторов end;, которые завершают блоки, процедуры, модули и т.п.
Текст, следующий за оператором end., игнорируется транслятором.
Символ “;”
Этот символ завершает каждый оператор
Наличие точки с запятой обязательно, т.к. этот символ показывает компилятору, где заканчивается один оператор и начинается следующий. Благодаря тому, что Паскаль - язык со "свободной формой записи", можно без опасений "растянуть" оператор на несколько строк. С помощью символа точка с запятой Вы сообщаете компилятору, какую часть текста
программы следует рассматривать как цельный, неделимый фрагмент. Зарезервированное слово begin, с которого начинаются блоки программы, не требует после себя символа точка с запятой.
Типы данных
Тип переменной задает вид того значения, которое ей присваивается и правила, по которым операторы языка действуют с переменной
Если переменные A и B целочисленного типа, то программа: x:=3; y:=2; writeln(x,’ ‘,y,’ ‘,x+y);
Выведет на экран строку: “3 2. 5”
Если же они строкового типа, то программа: x:=’3’; y:=’2’; writeln(x,’ ‘,y,’ ‘,x+y); выведет: “3 2 32”, так как оператор сложения просто добавит строку y в конец строки x.
Тип константы определяется способом записи ее значения: const c1=17; c2=3.14; c3='a'; c4=false; c5=c2+c1;
При определении констант можно использовать выражения. Выражения должны в качестве операторов содержать только константы, в том числе ранее объявленные, а так же знаки математических операций, скобки и стандартные функции.
В Pascal предопределены следующие простейшие типы переменных:
Целочисленные типы
byte целое число от 0 до 255, занимает одну ячейку памяти (байт). word целое число от 0 до 65535, занимает два байта. integer целое число от –32768 до 32767, занимает два байта.
shortint целое число от -128 до 127, занимает 1 байт longint целое число от –2147483648 до 2147483647, занимает четыре байта.
Вещественные типы данных
real число с дробной частью от 2.9*10
-
39
.до 1.7*10 38
, может принимать и отрицательные значения, на экран выводится с точностью до 12-го знака после запятой, если результат какой либо операции с real меньше, чем 2.9*10
-39
, он трактуется как ноль. Переменная типа real занимает шесть байт. single число с дробной частью от 1.5*10
-45 до 3.4*10 38
, может принимать и отрицательные значения, на экран выводится с точностью до 8-го знака после запятой, если результат какой либо операции с real меньше, чем 1.5*10
-45
, он
трактуется как ноль. Переменная типа real занимает шесть байт. double число с дробной частью от 5.0*10
-324
.до.1.7*10 308
, может принимать и отрицательные значения, на экран выводится с точностью до 16-го знака после запятой ,если результат какой либо операции с double меньше, чем 5.0*10
-324
, он трактуется как ноль. Переменная типа double занимает восемь байт.
Символьный тип
char символ, буква, при отображении на экран выводится тот символ, код которого хранится в выводимой переменной типа char, переменная занимает один байт. Каждому символу приписывается целое число в диапазоне от 0 до 255.
Для кодировки используется код ASCII
Строковый тип
string строка символов, на экран выводится как строка символов, коды которых хранятся в последовательности байт, занимаемой выводимой переменной типа
STRING; в памяти занимает от 1 до 256 байт – по количеству символов в строке, плюс один байт, в котором хранится длина самой строки.
Логический тип
boolean логическое значение (байт, заполненный единицами, или нулями), true, или false.
При обьявлении переменной строкового типа можно заранее указать ее длину в байтах –
X:
MyString:string[X];
При присвоении этой переменной строки длиннее X, присваиваемая строка будет обрезана с конца после X-того символа.
Размер переменной типа STRING в памяти можно узнать следующим способом:
Size:=SizeOf(MyString);
Функция SizeOf() возвращает размер, занимаемый переменной, служащей параметром.
Параметром может служить и тип переменной; строка: writeln(SizeOf(string));
Выведет на экран число 256, так как по умолчанию под все строки отводится по 256 байт.
Кроме того, можно узнать, сколько символов в строке (индекс последнего непустого символа в строке):
Size:=Ord(MyString[0]);
Используется ибращение к нулевому элементу (символу) строки, в котором хранится ее длина, но MyString[0] – значение типа char, тоесть символ, код которого равен длине строки, нужный нам код – число возвращает функция Ord()Таким же образом можно обратиться к любому N – тому элементу строки:
MyChar:=MyString[N];
{MyChar:CHAR} array[a..b,c..d,….] of “тип элемента”;
массив некоторой размерности, содержащий элементы указанного типа.
Диапазоны индексов для каждого измерения указываются парами чисел или констант, разделенных двумя точками, через запятую (a..b,c..d). После OF записывается тип элементов массива. В памяти массив занимает место, равное: (b-a)*(d-c)*..*
SizeOf(“тип элемента”). Размер массива не может превосходить 65536 байт.

Обращение к элементам массива происходит следующим образом:
X:=MyArray[a,b,c,..];
При этом переменная X должна быть того же типа, что и элементы массива или приводимого типа. Число индексов (a,b,c,..) должно быть равно числу обьявленных при описании измерений массива.
Приводимость типов
В Pascal существуют ограничения на присвоение значений одних переменных другим.
Если переменные которую и которой присваивают одного типа, то никаких проблем не возникнет. Но если они разных типов, присвоение не всегда может быть произведено.
например: x:=y; {x:integer; y:real} a:=b; {a:char; b:string}
В то же время, такие присвоения будут выполнены вполне корректно: y:=x;
b:=a;
При этом переменная y примет значение с нулевой дробной частью, а b – станет строкой, содержащей один символ – из a.
В первом же случае, можно поизвести следующие операции: x:=trunc(y); {функция trunc() возвращает целую часть аргумента} x:=round(y); {round() – округляет аргумент стандартным способом}
Кроме рассмотренного случая может существовать множество других, но наиболее общее правило таково: следить за однозначностью присвоения с потерями информации и не удивляться, а экспериментировать переделывать программу, если компилятор выдает сообщение о невозможности присвоения.
Арифметические операции и стандартные функции в Pascal
Арифметические операции
Операция
Действие
Тип операндов
Тип результата бинарные
+ сложение целый, вещественный целый, вещественный
- вычитание целый, вещественный целый, вещественный
* умножение целый, вещественный целый, вещественный
/ деление целый, вещественный вещественный div целочисленное деление целый целый mod остаток от деления целый целый унарные
+ сохранение знака целый, вещественный целый, вещественный
- отрицание знака целый, вещественный целый, вещественный

Операции отношения
Операции отношения выполняют сравнение двух операндов и определяют, истинно значение или ложно. Сравниваемые величины могут принадлежать к любому типу данных, и результат всегда имеет логический тип, принимая одно значение из двух: истина или ложь.
Операция
Название
Выражение
=
Равно
А=В
<>
Неравно
А<>B
>
Больше
A>B
<
Меньше
A>=
Больше или равно
A>=B
<=
Меньше или равно
A<=B
Стандартные математические функции
Обращение
Тип аргумента
Тип результата
Функция abs(x) целый, вещественный целый, вещественный модуль аргумента arctan(x) целый, вещественный вещественный арктангенс cos(x) целый, вещественный вещественный косинус exp(x) целый, вещественный вещественный е
х
- экпонента frac(x) целый, вещественный вещественный дробная часть х int(x) целый, вещественный вещественный целая часть х ln(x) целый, вещественный вещественный натуральный логарифм random вещественный псевдослучайное число [0,1] random(x) целый целый псевдослучайное число [0,х] round(x) вещественный целый округление до ближайшего целого sin(x) целый, вещественный вещественный синус sqr(x) целый, вещественный вещественный квадрат х sqrt(x) целый, вещественный вещественный корень квадратный из х trunc(x) вещественный целый ближайшее целое, не превышающее х по модулю
Логические операции
Логические выражения в результате вычисления принимают логические значения True и
False. Операндами это выражения могут быть логические константы, переменные, отношения. Идентификатор логического типа в Pascal: boolean.
В Паскале имеется 4 логические операции: отрицание -not, логическое умножение -and, логическое сложение - or, исключающее “или” - xor . Использованы обозначения: T (true),

F ( false).
A
B not A
A and B
A or B
A xor B
T
T
F
T
T
F
T
F
F
F
T
T
F
F
T
F
F
F
F
T
T
F
T
T
Приоритеты операций: not, and, or, xor. Операции отношения ( = , <> ) имеют более высокий приоритет, чем логические операции, поэтому их следует заключать в скобки при использовании по отношению к ним логических операций.
Приоритет операций (в порядке убывания):

вычисление функции;

унарный минус, not;

умножение, деление, div, mod, and;

сложение, вычитание, or, xor;

операции отношения
Процедуры ввода/вывода
write(p1,p2,... pn); - выводит на экран значения выражений p1,p2,... pn.
Выражения могут быть числовые, строковые, символьные и логические. Под выражением будем понимать совокупность некоторых действий, применённых к переменным, константам или литералам, например: арифметические действия и математические функции для чисел, функции для обработки строк и отдельных символов, логические выражения и т.п.
Возможен форматный вывод, т. е. явное указание того, сколько выделять позиций на экране для вывода значения.
Например, для того, чтобы вывести значение выражения a+b с выделением для этого 10 позиций, из них 5 - после запятой write(a+b:10:5);
Или например, вывести значение выражения p любого другого типа , выделив под него 10 позиций write(p:10);
Вывод на экран в любом случае производится по правому краю выделенного поля.
writeln(p1,p2,... pn); - аналогично write, выводит значения p1,p2,... pn, после чего переводит курсор на новую строку.
Существует вариант writeln; (без параметров), что означает лишь перевод курсора на начало новой строки.
readln(v1,v2,...vn); - ввод с клавиатуры значений переменных v1,...vn.
Переменные могут иметь строковый, символьный или числовой тип. При вводе следует
разделять значения пробелами, символами табуляции или перевода строки.
read(v1,v2,...vn); - аналогочно readln;
Управляющие структуры в языке Pascal
Условный оператор
if <условие> then <оператор 1> [else <оператор 2>]
Условие – значение типа boolean или логическая операция. Если условие верно, выполняется оператор, или блок операторов, следующий за then, в противном случае выполняется блок операторов после else, если он есть.
Условия могут быть вложенными и в таком случае, любая встретившаяся часть else соответствует ближайшей к ней "сверху" части then.
Оператор выбора одного из вариантов.
case Выражение of
Вариант1: Оператор1;
Вариант2: Оператор2;
ВариантN: ОператорN;
[else ОператорN1;]
end;
Выражение в простейших случаях может быть целочисленным или символьным. В качест-ве вариантов можно применять:
1. Константное выражение такого же типа, как и выражение после case. Константное вы- ражение отличается от обычного тем, что не содержит переменных и вызовов функций, тем самым оно может быть вычислено на этапе компиляции программы, а не во время выполнения.
2. Интервал, например: 1..5, 'a'..'z'.
3. Список значений или интервалов, например: 1,3,5..8,10,12.
Выполняется оператор case следующим образом: вычисляется выражение после слова case и по порядку проверяется, подходит полученное значение под какой-либо вариант, или нет. Если подходит, то выполняется соответствующий этому варианту оператор, иначе - есть два варианта. Если в операторе case записана часть else, то выполняется оператор после else, если же этой части нет, то не происходит вообще ничего.
Рассмотрим пример. Пусть пользователь вводит целое число от 1 до 10, программа должна приписать к нему слово "ученик" с необходимым окончанием (нулевое, "а" или "ов").
program SchoolChildren;
var n: integer;
begin write('Число учеников --> '); readln(n);
write(n,' ученик');
case n of
2..4: write('а');
5..10: write('ов');
end;
readln;
end.
Операторы циклов
Цикл с параметром (со счетчиком)
for <переменная>:=<нач_значение> to <кон_значение> do
<оператор>.
Вместо to возможно слово downto. Рассмотрим такой пример: требуется вывести на экран таблицу квадратов натуральных чисел от 2 до 20.
var i: integer;
begin for i:=2 to 20 do writeln(i,' ',sqr(i)); end.
Цикл с предусловием
while <условие> do <оператор>.
пока условие истинно, выполняется оператор (в этом случае оператор может не выполниться ни разу, т.к. условие проверяется до выполнения). Под оператором здесь понимается либо простой, либо составной оператор (т.е. несколько операторов, заключённых в begin ... end).
Цикл с постусловием
repeat <оператор> until <условие>
Цикл работает следующим образом: выполняется оператор, затем проверяется условие, если оно пока еще не выполнилось, то оператор выполняется вновь, затем проверяется условие, и т. д. Когда условие, наконец, станет истинным выполнение оператора, расположенного внутри цикла, прекратится, и далее будет выполняться следующий за циклом оператор.
Работа с массивами
Массив – упорядоченный набор однотипных переменных , объединенных одним именем.
В качестве типа элементов массива можно использовать все типы, известные нам на дан-ный момент (к ним относятся все числовые, символьный, строковый и логический типы).Каждый элемент массива имеет свой номер (индекс). для индексов массивов подходит любой порядковый тип, то есть такой, который в па-мяти машины представляется целым числом.

Единственное ограничение состоит в том, что размер массива не должен превышать 64 Кб.
Каждый элемент является переменной, т.е. обладает своим именем и значением.
Массив относится к так называемым структурированным данным, то есть таких, что имеют фиксированную внутреннюю структуру (организацию).
При обращении к отдельному элементу массива необходимо указать его индекс
(местонахождение в массиве):
A[7]
i:=7;
A[i]
Здесь i - индекс элемента массива
Объявление массива
Массивы, как и другие переменные, должны быть объявлены в разделе var var
Mas: array [1..15] Of real;
Work: array [(Mon, Tue, Wed)] Of integer;
B: array ['A'..'Z'] Of boolean;
C: array [1..3, 1..5] Of real;
Ввод массива
Чтобы заполнить массив данными существуен несколько способов:

непосрерственное присваивание значений элементам;

генерация и присваивание значений с помощью функции random;

ввод значений элементов с клавиатуры;
1) Ввод элементов одномерного массива с клавиатуры:
var
A : array[1..20] of real;
begin writeln('Введите элементы массива:');
for i:=1 to n do readln(A[i]);
2) Заполнение массива случайными числами.
В этом случае необходимо перезапустить генератор случайных чисел. Затем в цикле(например, в цикле с параметром, где в качестве параметра выступает индекс массива) сгенерровать значения для всех элементов. randomize;
for i:=1 to n do a[i]:=random(100);
Двумерные массивы
Двумерный массив можно задать 2-мя способами:
1. Mas : array [1..3] of array [1..5] of integer;
2. Mas : array [1..3, 1..5] of integer;

Ссылка на элемент матрицы Mas, лежащий на пересечении i-той строки иj-ого столбца выглядит следующим образом Mas[i][j].
Символьный тип данных
Тип данных, переменные которого хранят ровно один символ (букву, цифру, знак препина-ния и т.п.) называется символьным, а в Паскале — char.
Символы в компьютере сохраняются не в виде букв, а в виде чисел. Так, каждой букве, числу, вобще, любому иероглифу, способному виводится на экран, соответствует число в кодовой таблице. Кодовая таблица - это специальная система перевода чисел в начертания на мониторе.
Объявить переменную такого типа можно так: var ch: char;. Для того чтобы положить в эту переменную символ, нужно ис-пользовать оператор присваивания, а символ записывать в апострофах, например: ch:='R';. Для символьных переменных возможно также использование процедуры readln, например:
write('Exit? (Yes/No)'); readln(ch); if ch='Y' then ...
else ...;
Символьные переменные в памяти компьютера хранятся в виде числовых кодов, иначе говоря, у каждого символа есть порядковый номер. К примеру, код пробела равен 32, код 'A'
- 65, 'B' - 66, 'C' - 67, код символа '1' - 48, '2' - 49, '.' - 46 и т. п. Некоторые символы (с кодами, меньшими 32) являются управляющими, при выводе таких символов на экран происхо-дит какое либо действие, например, символ с кодом 10 переносит курсор на новую строку, с ко- дом 7 - вызывает звуковой сигнал, с кодом 8 - сдвигает курсор на одну позицию влево. Под хранение символа выделяется 1 байт (байт состоит из 8 бит, а бит может принимать значения
0 или 1), поэтому всего можно закодировать 28=256 различных символов. Кодировка символов, которая используется Турбо-Паскале, называется ASCII (American Standard Code for Information Interchange - американский стандартный код для обмена информацией).
Операции над символами
Над символами возможны операции перевода их в числовой эквивалент и обратно. Как уже говорилось, в Паскале символы связаны с числами в соответствии с кодовой таблицей
ASCII. Обратите на это внимание, поскольку в Windows символы представлены в таблице
ANSI, поэтому вы можете обнаружить несоответствие вашей программы, открытой в
Windows, например в Блокноте, и в среде Паскаль.
Для получения ASCII-кода любого символа используется функция ord(); . В качестве параметра записывается переменная типа char или же непосредственно в кавычках нужный символ. Например: writeln( Ord('л') );
или writeln( Ord(c3) );
Если в c3 была записана буква л, то на экране появится цифра 171 - ASCII-код строчной русской буквы л.
Обратное действие - получение символа по его коду делает функция сhr();. В скобках записывается число - от 0 до 255, то есть код необходимого символа или числовая переменная. Подобная строчка writeln( Chr(102) );
напишет нам символ f
Стоит заметить, что если вы используете в функции chr() не числовую переменную, а готовое число, можете вместо самой функции писать символ '#', а после него - число: chr(102)
аналогично
#102
program ASCII;
var ch: char;
begin for ch:=#32 to #255 do write(ord(ch),'->',ch,' ');
readln;
end.
В этой программе в качестве счётчика цикла была использована символьная переменная, это разрешается, поскольку цикл for может использовать в качестве счётчика переменные любого типа, значения которого хранятся в виде целых чисел.
Сравнение символов. Также как и числа, символы можно сравнивать на =, <>, <, >, <=,
>=. В этом случае Паскаль сравнивает не сами символы, а их коды. Таблица ASCII составлена та-ким образом, что коды букв (латинских и большинства русских) возрастают при движении в алфавитном порядке, а коды цифр расположены по порядку.
Для хранения строк (то есть последовательностей из символов) в Турбо-Паскале имеется тип string. Значениями строковых переменных могут быть последовательности различной дли-ны (от нуля и более, длине 0 соответствует пустая строка). Объявить строковую переменную можно двумя способами: либо var s: string; (максимальная длина строки -
255 симво-лов), либо var s: string[n]; (максимальная длина - n символов, n - константа или кон-кретное число).
Для того чтобы положить значение в строковую переменную используются те же приёмы, что и при работе с символами. В случае присваивания конкретной строки, это строка должна записываться в апострофах (s:='Hello, world!'). Приведём простейший пример со стро-ками: программа спрашивает имя у пользователя, а затем приветствует его:
program Hello;
var s: string;
begin write('Как Вас зовут: '); readln(s);
write('Привет, ',s,'!'); readln;
end.
Хранение строк. В памяти компьютера строка хранится в виде последовательности из символьных переменных, у них нет индивидуальных имён, но есть номера, начинающиеся с
1). Перед первым символом строки имеется ещё и нулевой, в котором хранится символ с
кодом, равным длине строки.
Сравнение строк. Строки сравниваются последовательно, по символам. Сравниваются первые символы строк, если они равны - то вторые, и т. д. Если на каком-то этапе появилось различие в символах, то меньшей будет та строка, в которой меньший символ. Если строки не различались, а затем одна из них закончилась, то она и считается меньшей. Примеры:
'ананас'<'кокос', 'свинья'>'свинина', ''<'A', 'hell'<'hello'.
Склеивание (конкатенация) строк. К строкам можно применять операцию "+", при этом результатом будет строка, состоящая из последовательно записанных "слагаемых".
Пример: по-сле действия s:= 'abc'+'def'+'ghi'; переменная s будет содержать 'abcdefghi'.
Процедуры и функции для работы со строками. length(s: string): integer (после двоеточия записан тип значения, возвращаемого функцией, в нашем случае - целое число). Эта функция возвращает длину строки s. copy(s: string; start: integer; len: integer): string Возвращает вырезку из строковой переменной s, начиная с символа с номером start, длина которой len pos(s1: string; s: string): byte Ищет подстроку s1 в строке s. Если находит, то возвращает номер символа, с которого начинается первое вхождение s1 в s; если s1 не входит в s, то функция возвращает 0
insert(s1: string; s: string; start: integer) Вставляет строку s1 в строковую переменную s начиная с символа с номером start.
delete(s: string; start: integer; len: integer) Удаляет из строковой переменной s фрагмент, начинающийся с символа с номером start и длиной len.
str(x,st) : преобразует число, записаное в x (целого типа) в строковой тип и записывает его в st; Например, если в x будет записано число 132, то в st мы получим строчку '132'. val(st,x,er) : обратная процедура к str, то-есть, переводит строковое значение
(st) в числовое (x). В переменную er (Integer) записывается код ошибки. Код ошибки необходим, поскольку в строке могут содержатся не только цифры, но и буквы, которые не преобразуются в числа. Поэтому, если в st были не только числа, то в x ничего не запишется, а в er будет не ноль, а какое-то число. Обычно, после этой процедуры проверяют, ноль ли записан в er чтобы убедиться в правильности операции.
Записи
Тип запись, также как и массив, является структурированным типом данных, то есть таким, переменные которого составлены из нескольких частей. В Pascal существует возмож-ность объединить в одну переменную данные разных типов (тогда как в массиве все элементы имеют одинаковый тип). Приведём пример такого типа. Пусть в переменной требуется хранить сведения о некотором человеке: ФИО, пол, адрес, телефон. Тогда для хранения этих данных бу-дет удобен такой тип: type tPerson = record
Name,Surname,SecondName: string[30];
Male: boolean;
Address: string[50];
Phone: string[11];
end;

Объявление переменной типа запись выполняется стандартно, с помощью var. Части записи (в нашем случае: Name, Surname, SecondName, Male, Address, Phone) называются полями. Обращение к полю записи в программе производится с помощью знака '.' (точка).
Пример обращения к полям:
var emp: tPerson;
begin emp.Surname:='Иванов';
emp.Name:='Иван';
emp.SecondName:='Иванович';
В случаях, когда приходится много раз обращаться к полям одной и той же записи, можно воспользоваться ключевым оператором with, который упрощает ссылку к структурированным переменным:
with <имя_записи> do <оператор>;
Пример:
with emp do begin
Surname:=' Иванов';
Name:='Иван';
SecondName:='Иванович';
end;
Записи можно включать в состав более сложных переменных, например массивов и других записей:
type tStaff = array [1..30] of tPerson;
Работа с файлами
В паскале работа с файлами осуществляется через специальные файловые типы, которые определяют тип файла, то есть фактически указывают его содержимое. С помощью этой переменной, которой присвоен необходимый тип, и осуществляется вся работа с файлами - открытие, запись, чтение, закрытие и т.п.
При работе с файлами существует определенный порядок действий, которого необходимо придерживаться. Вот все эти действия:
1. Создание (описание) файловой переменной;
2. Связывание этой переменной с конкретным файлом на диске или с устройством ввода-вывода (экран, клавиатура, принтер и т.п.);
3. Открытие файла для записи либо чтения;
4. Действия с файлом: чтение либо запись;
5. Закрытие файла.
Типы файловых переменных
Перед тем, как начинать работу с файлами, давайте посмотрим, какие существуют переменные для работы с ними. В Pascal имеется три типа таких переменных, которые определяют тип файла:

1. text - текстовый файл. Из переменной такого типа мы сможем читать строки и символы.
2. file of _любой_тип_ - так называемые "типизированные" файлы, то есть файлы, имеющие тип. Этот тип определяет, какого рода информация содержится в файле и задается в параметре_любой_тип_. Например:
F: file of integer;
Файл F содержит числа типа integer; Соответсвенно, читать из такого файла можно только переменные типа integer, ровно как и писать.
Пример type
A = record
I,J: Integer;
S: String[20]; end; var
F: File of A;
3. file - нетипизированный файл. Когда мы указываем в качестве типа файла просто File, то есть без типа:
F: File;
То получаем "нетипизированный" файл, чтение и запись в который отличается от работы с файлами других типов. Эти действия производятся путем указания количества байт, которые нужно прочитать, а также указанием области памяти, в которую нужно прочитать эти данные.
Связывание переменной с файлом

Выполняется одинаково для всех типов файлов: assign(<переменная_файлового_типа>, '<путь к файлу>');
В качестве параметров задаются переменная любого файлового типа и строка - путь к файлу:
var
T: text;
Fi: file of integer;
F: file; begin
Assign(T, 'text.txt');
Assign(F1, 'int.txt');
Assign(F2, 'file1.dat');
Открытие файла

При открытии файла необходимо учитывать, зачем открывается файл - для записи или чтения. Более того, в зависимости от типа файла процедуры выполняют различные действия.
1. Reset(<любая_файловая_переменная>);
Открыват файл на чтение. В качестве параметра - файловая переменная любого из перечисленных выше типов. Это может быть текстовый, типизированный либо не типизированный файл. В случае с текстовым файлом, он открывается только на
чтение. В случае с типизированным и нетипизированным файлом - он открывается на чтение и запись.
2. Append(T: Text);
Эта процедура открывает текстовый файл (только текстовый!) на запись. Reset при задании параметра типа Text не позволит писать в него данные, открыв файл лишь для чтения. То есть если вы используете текстовый файл и хотите производить в него запись, нужнo использовать Append. Если чтение - Reset.
Также обратите внимание, что если вы до этого уже открыли файл на чтение, вам не нужно закрывать его и открывать снова на запись. В этом случае файл закрывается сам и открывается заново. При записи данных в файл при открытии его с помощью этой процедуры они записываются в конец файла.
3. ReWrite(F) - создает новый файл либо перезаписывает существующий. Необходимо быть осторожным при использовании этой процедуры, т.к. файл, открытый таким образом будет полностью перезаписан.
Закрытие файла
Закрытие файла производиться с помощью процедуры Close(F), где F - это переменная файлового типа. Эта процедура одна для всех типов файлов.
Запись и чтение файлов
Текстовые и типизированные файлы
Чтение файлов. Чтение файлов производится с помощью отлично известных нам процедур read и readln. Они используются также, как и при чтении информации с клавитуры. Отличие лишь в том, что перед переменной, в которую помещается считанное значение, указывается переменная файлового типа (дескриптор файла): read(F, C);
где F - дескриптор файла, C - переменная (char, string - для текстовых, любого типа - для типизированных файлов).
Запись в файлы. Запись в файлы производиться точно так же, как и запись на экран - с помощью процедур write и writeln. Как и в случае с чтением, перед записываемой в файл переменной указывается тескриптор файла: write(F, S); где F - дескриптор, S - переменная.
При этом, естественно, переменная должна соответствовать типу файла. program cat;
var f: text;
c: char;
begin assign(f,'prog.pas');
reset(f);
while not eof(f) do begin while not eoln(f) do begin
read(f,c); write(c); end;
readln(f);
writeln;
end;
close(f);
end.
Довольно часто в программе бывает необходимо определить, дошёл ли указатель файла до конца строки или до конца файла. В этом случае полезно использовать такие функции:
eoln(TxtFile: text): boolean;
eof(TxtFile: text): boolean;
Первая принимает значение true (истина), если указатель стоит на конце строки, вторая - то же самое для конца файла.
Нетипизированные файлы
Суть таких файлов заключается в следующем: имея файл без определенного типа, мы можем читать из него любые данные, будь то строки, символы или записи.
Читая данные из файла без типа мы получаем блоки информации, которые составляют обычный набор байт. Указывая переменную, в которую эти байты надо поместить, мы как бы "на ходу преобразуем" эти данные к нужному типу.
Чтение из файлов без типа
Сама процедура связывания файловой переменной с внешним файлом и его открытие ничем чем отличаются от обычного порядка действий. Разве что переменная в данном случае должна иметь тип File; , то есть быть файлом без типа. var
F: File; begin
{ связываем файл с переменной }
Assign(F, '1.txt');
Reset(F); end.
Чтение происводиться с помощью процедуры blockread: blockread(F: file, Buf: var, size: word, result: word)
F: file; - переменная типа file; Именно из этой переменной и происходит чтение данных.
Buf: var; - переменная любого типа. В эту переменную помещаются прочитанные данные.
Size: word; - количество считываемых байт.
Result: word; - в эту переменную помещается реальное количество байт, которые были прочитаны.
Работает эта процедура следующим образом: из файла F считывается Size записей, которые помещаются в память, начиная с первого байта переменной Buf. После выполнения процедуры реальное количество прочитанных байт помещается в переменную Result.

Здесь надо сказать, что эта переменная совсем не обязательно должна присутствовать в качестве параметра, то есть ее попросту можно опустить. Однако иногда она довольно полезна и даже необходима - например, если чтение было окончено до того, как было прочитано требуемое количество байт (достигнут конец файла), мы можем это отследить через переменную Result. Если же в этом случае (чтение данных после конца файла) переменная Result не будет указана, то образуется ошибка времени выполнения N100
"Disk read error" (Runtime error 100).
Запись в файлы без типа
Ну что ж, с чтением данных вроде разобрались, пора переходить к записи. Для этого в
Паскале имеется еще одна, отдельная процедура, а именно BlockWrite. Она очень похожа на предыдущуюBlockRead, по крайней мере параметры у этих двух процедур абсолютно одинаковы.
BlockWrite(F: File, Buf: Var, Size: Word, Result: Word)
F: File; - переменная типа File;
Buf: Var; - переменная любого типа. Начиная с этой переменной, данные будут записываться в файл.
Size: Word; - количество записываемого блока данных в байтах.
Result: Word; - в эту переменную помещается реальное количество байт, которые были записаны. var
Fin, fout : file;
NumRead,NumWritten : word;
Buf : Array[1..2048] of byte;
Total : longint;
begin
Assign (Fin, Paramstr(1));
Assign (Fout,Paramstr(2));
Reset (Fin,1);
Rewrite (Fout,1);
Total:=0;
Repeat
BlockRead (Fin,buf,Sizeof(buf),NumRead);
BlockWrite (Fout,Buf,NumRead,NumWritten);
inc(Total,NumWritten);
Until (NumRead=0) or (NumWritten<>NumRead);
Write ('Copied ',Total,' bytes from file ',paramstr(1));
Writeln (' to file ',paramstr(2));
close(fin);
close(fout);
end.

Document Outline

  • Реальная многозадачность
  • Многопользовательский доступ
  • Свопирование оперативной памяти на диск
  • Страничная организация памяти
  • Загрузка выполняемых модулей "по требованию"
  • Совместное использование исполняемых программ
  • Общие библиотеки
  • Динамическое кеширование диска
  • 100%-ное соответствие стандарту POSIX 1003.1. Частичная поддержка возможностей System V и BSD
  • System V IPC
  • Возможность запуска исполняемых файлов других ОС
  • Поддержка различных форматов файловых систем
  • Сетевые возможности
  • Работа на разных аппаратных платформах
  • Дистрибутивы Linux
  • Графический интерфейс
  • Хотя Linux представляет собой очень мощную и развитую операционную систему, но, если работать с ней только через интерфейс командной строки, она довольно трудна в обращении и "недружелюбна" к пользователю. Все необходимые операции выполняются путем запуска отдельных команд, перечень которых огромен, и которые надо помнить наизусть.
  • XFree86 и его составные части
  • Файлы и их имена
  • Типы файлов
    • Файлы физических устройств
    • Доменные гнезда (sockets)
    • Символические ссылки
  • Права доступа к файлам и каталогам
  • Оболочка bash
  • Специальные символы
  • Выполнение команд
    • Оператор ;
    • Оператор &
    • Операторы && и ||
  • Стандартный ввод/вывод
    • Потоки ввода-вывода
    • Команда echo
    • Команда cat
  • Перенаправление ввода/вывода, каналы и фильтры
    • Оператор |
  • Параметры и переменные. Окружение оболочки
    • Разновидности параметров
      • Переменные окружения. Переменная PATH
      • Операторы if и test (или [ ])
      • Оператор test и условные выражения
      • Оператор case
      • Оператор select
      • Оператор for
      • Операторы while и until
      • Функции
        • Синтаксис
        • Аргументы
        • Локальные переменные (local)
        • Функция вычисления факториала fact
  • Текстовые комментарии
    • Элементарные математические функции
  • Массивы и матрицы в Scilab
    • Условный оператор
    • Чтение из файла
      • Ввод массива

Каталог: lit -> edu -> informatica
lit -> «\"Серьезные игры\" в обучении английскому языку»
lit -> Описание курса hp education Services
lit -> Руководство На русском языке Android 0 Lollipop tm android: краткое руководство II
informatica -> Лекция Введение в ос linux 2 Основные характеристики Linux  Реальная многозадачность 
lit -> Voyager ™ pro hd гарнитура Bluetooth ® дополнительные сведения
lit -> Руководство по безопасной работе для получения важных сведений о безопасности, зарядке, аккумуляторе и нормативных
lit -> Дополнительные сведения гарнитура ml10 и ml12 Bluetooth ® 2 кнопка вызова
lit -> Руководство по безопасной работе для получения важных сведений о


Поделитесь с Вашими друзьями:
1   2   3   4   5   6


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал