Алфавит языка icon

Алфавит языка



НазваниеАлфавит языка
Дата конвертации29.12.2012
Размер337.72 Kb.
ТипДокументы
источник

Алфавит языка


В Турбо-Паскале используются:
1. Буквы латинского алфавита
2. Цифры от 0 до 9
3. Спецсимволы + - * / = > < и др.
4. Комбинации символов:
: = присваивание
< > не равно
.. диапазон
< = меньше или равно
> = больше или равно
5. Зарезервированные (ключевые) слова:
absolute – абсолютный, and – и, array – массив, begin – начало, case – в случае, const – константа, div – делить, do – выполнить, else – иначе, downto – назад, end – конец, external – внешний, file – файл, forward – вперед, for – для, function – функция, goto – перейти к, inline – вставить, if – если, in – в, label – метка, mod – модуль, nil – ничто, not – нет, owerlay – перекрытие, of – из, or – или, packed – упакованный, procedure – процедура, program – программа, record – запись, repeat - повторять, set – множество, shl – сдвиг влево, shr – сдвиг вправо, string – строка, then – тогда, type – тип, to – к, until – пока, uses-используется, var – переменная, while – пока, with - с, xor – дизъюнкция.
Знание значений ключевых слов необходимо для понимания программ, написанных на Паскале.
6. Знаки операций:
а) арифметических -
+ сложение
- вычитание
* умножение
/ деление
div деление нацело (отбрасывается остаток)
mod нахождение остатка от деления нацело
> больше
< меньше
< > не равно
> = больше или равно
< = меньше или равно
= равно
б) логических -
not отрицание
or логическое сложение
and логическое умножение
в) над множествами:
* пересечение множеств
+ объединение множеств
- разность множеств
in принадлежность множеству
^

Простейшие конструкции и типы данных


К простейшим конструкциям Паскаля относятся числа, константы, переменные, выражения и стандартные функции. Их значения имеют тот или иной тип. Некоторые из основных типов простых данных, а также сложный тип string, представлены в таблице.

Тип

Диапазон

Примеры записи

^ На Паскале

Обычная

integer (целый)

-32768...32767

-45

-45

longint (длинное целое)

-2147483648...2147483647

675931

675931

real (действительный)

±2,9*10-39...1,7*1038

-33.4581

-33,4581

4.1Е6

4,1*106

-2.88Е-4

-2,88*10-4

boolean (логический)

False, True

false

ложно

true

истинно

char (символьный)

Набор литер данного компьютера

'Ц'

Ц

'F'

F

(строка)

Набор литер данного компьютера

'лист'

лист

Для записи констант, переменных, функций, процедур, файлов в Паскале используют их идентификаторы (имена). Например, х, а, summa1 и т.п. Некоторые стандартные математические функции, используемые в Паскале:

^ Запись на Паскале Действие

abs(x) |x|

sgr(x) x2

sin(x) sin x

cos(x) cos x

exp(x) ex

ln(x) ln x

sgrt(x) x1/2

arctan(x) arctg x

trung(x) выделение целой части х

round(x) округление х до ближайшего целого

pred(x) нахождение предыдущего элемента

succ(x) нахождение последующего элемента

ord(x) определение порядкового номера символа

chr(x) определение символа из набора символов по номеру

odd(x) определение нечетности числа

Для вычисления выражений xy и lg x в Паскале не существует стандартных функций. В этом случае используют равенства xy=ey ln x и lg x =ln x/ln 10. На Паскале эти выражения записываются так: exp(y*ln(x)) и ln(x)/ln(10).

Переменные бывают простые и с индексом. Переменная с индексом – это элемент массива. Например, если имеется одномерный массив
A=(c, f, p, k ), то A[2] = f , A[4] = k Если задан двумерный массив
,
то B[1,2] = 2 , B[2,2] = 11

Порядок вычисления выражения определяется скобками, а при их отсутст-вии – согласно приоритету операций.
Приоритет операций убывает в ряду:
1. Отрицание NOT
2. *, /, div, mod, and
3. +, - , or
4. <=, <, =, < >, >, >=
Операции одного приоритета выполняются последовательно слева направо.
Примеры записи выражений:

Выражение на Паскале Обычная запись

0.5+a 0,5+a

p/(c+2)/8

a*exp (t) aet

Тип результата выражения зависит от вида операции и типов операндов, как это показано в таблице.

Операция

Тип

операндов

выражения

+ , - , *

Real

Real

Intrger

Integer

/

Real или Integer

Real

Div, Mod

Integer

Integer

not, or, and

Boolean

Boolean

=, <, >

Любой

Boolean

>=, <=

Любой

Boolean
^

Структура программ на Паскале


Программы в Турбо-Паскале пишутся по определенной структуре, которая соответствует схеме:



Каждый раздел заканчивается точкой с запятой. В конце программы ставится точка.

Заголовок необязателен, но желателен, чтобы по нему можно было быстро распознать программу.
Пример заголовка: program raschet;
Здесь program – ключевое слово, raschet – название программы.

^ Список модулей. Модули содержат библиотеки вспомогательных программ: вычисление стандартных функций, поддержка графического режима экрана и др. Использование модулей позволяет увеличивать размер программы более 64 Кбайт. Модули бывают стандартные и созданные программистом. Стандартные модули Турбо-Паскаля записаны в файле turbo.tpl, кроме модуля Graph, который находится в файле graph.tpu. К стандартным модулям относятся:
System – поддерживает все стандартные процедуры и функции, обеспечивает ввод – вывод данных и ряд других возможностей. Подключается к любой программе автоматически, поэтому указывать его в списке модулей не надо.
Crt – поддержка работы с экраном в текстовом режиме, управление звуком и др.
Overlay – поддержка оверлейных модулей.
Printer – позволяет выводить информацию на принтер.
Graph – работа с экраном в графическом режиме.
Dos – содержит ряд стандартных функций и процедур, эквивалентных командам MS - DOS, например, организация работы с каталогами и др.
В общем виде список модулей выглядит так: uses <имя>, ... , <имя>;
Пример описания модулей:
uses crt, graph;

^ Раздел описания констант. В принципе, любую программу можно написать без использования имен констант, применяя вместо них числа. Но в ряде случаев использование имен констант целесообразно, т. к. их имена, подобранные в соответствии со смыслом выполняемых действий, облегчают чтение программы. Кроме того, использование имен констант облегчает проведение изменений в программе. В этом случае достаточно изменить значение константы в разделе описания. В общем виде раздел описания констант выглядит так:

Const

<имя>=<значение>; ... ; <имя>=<значение>;

Пример раздела описания констант:

Const

Nmin = 0; Nmax = 100; SIMV = ‘начало’;

Без предварительного описания можно использовать константы:

Имя Тип Значение

Pi real 3,14159…

True boolean True

False boolean True

Maxint integer 32767

^ Раздел описания типов. В этом разделе описывают нестандартные типы данных, образованные программистом. В общем виде раздел описания типов выглядит так:

Type

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

...

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

Пример раздела описания типов:

Type LatBukva = (‘a’.. ‘z’);

Dni = 1..31;

В этом примере описаны два перечислимых типа: тип LatBukva, состоящий из символов латинского алфавита, и тип Dni, состоящий из целых зчисленных значений в диапазоне от 1 до 31.
^ Раздел описания меток. Перед любым оператором можно поставить метку, что позволяет перейти к нему из любого места программы оператором goto. Например:

10: ...

...

...

goto 10;

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

^ Раздел описания переменных. Каждая встречающаяся в программе пере-менная должна быть описана. В общем виде раздел описания прееменных вы-глядит так:

Var

<имя >, ... ,<имя >:<тип>;

...

<имя >, ... ,<имя >:<тип>;

Пример раздела описания переменных:

Var a, b, c, x, nomer: integer;

y, z, result: real;

В разделе описания переменных обычно описывают также массивы. Пример описания одномерного массива из пятидесяти элементов:

Var a:array[1..50] of real;

Или:

Const Nmax = 50;

Var a:array[1..Nmax] of real;

Пример описания матрицы (двумерного массива) С целого типа 10х15:

Var c:array[1.. 10,1..15] of integer;

Или:

Const y1 = 10; y2 = 15;

Var c:array[1.. y1,1..y2] of integer;

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

Любой раздел описания может отсутствовать. Разделы описаний следуют в произвольном порядке. Каждый раздел описаний может использоваться любое число раз.

^ Раздел операторов. Операторы могут быть простые и составные. Составной оператор состоит из нескольких простых операторов и ограничен операторными скобками begin и end.
Операторы присваивания имеют вид a: = b;
Например:

X: = - 0.25;

A: = T + sqr (P);

X: = X – 0.11;

В любом месте программы можно использовать комментарий, т.е. пояснительный текст. Он ограничивается символами { } или (* *). Комментарий игнорируется компилятором и потому влияние на программу не оказывает. Ограничители комментария используют как собственно для комментария, так и для временного отключения какой-либо части программы в процессе ее отладки
^

Ввод и вывод данных


Для ввода данных с клавиатуры в Паскале используют операторы вида
read(a1, a2, …, an);
readln(a1, a2, …,an);

Эти операторы приостанавливают выполнение программы до тех пор, пока с клавиатуры не будут введены значения переменных a1, a2, … an. Значения при наборе разделяются пробелом или клавишей . По окончании ввода нажимают . Если есть два оператора read, данные для второго оператора будут вводиться в той же строке, что и для первого. Оператор readln обеспечивает переход курсора к новой строке.

Для вывода информации на экран в Паскале используются операторы вида
write(y1, y2,…,yn);
writeln(y1, y2,…,yn);

Оператор writeln после вывода всех значений переводит курсор на следующую строку.
Операторы вывода можно записывать в виде
write(b : m);
write(b : m : n);

Здесь b – имя переменной, m – поле для записи значения переменной, n – поле для записи дробной части.

^ Примеры использования оператора write:

Значение А Оператор Результат вывода

134 write(А); 134

287 write(А,А,А); 287287287

14 write(‘сумма = ’, А + 4); сумма = 18

312 write(А+5:7); 317

-715.432 write(А); -7.15432000000Е+02

511.04 write(А: 12); 5.110400Е+02

511.04 write(А: 8 : 4); 511.0400

‘X’ write(А); X

‘Ведомость 2’ write(А); Ведомость 2

^

Программирование линейных структур в Паскале


Пример: Вычислить периметр и площадь прямоугольника со сторонами a и b при вводе длин сторон с клавиатуры.
Алгоритм программы представлен на рисунке.



Текст программы на Паскале:

^ Program pl-perim;

{описание переменных}

Var s,p,a,b,c: real;

begin

{ввод данных}

writeln(‘введите длины сторон’);

write(‘a=’);

readln(a);

write(‘b=’);

readln(b);

{расчет периметра}

p:=2*(a+b);

{расчет площади}

s:=a*b;

{вывод на экран результата}

writeln(‘s=’,s);

write('p=',p)

end.

^

Программирование разветвляющихся структур в Паскале


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

if b then a1;

или

if b then a1 else a2;

Здесь b – логическое выражение, a1 и а2 – простые или составные операторы. Если верно логическое условие b, выполняется оператор a1. Если логическое условие b неверно, оператор a1 игнорируется, но выполняется (при втором виде записи условного оператора) оператор a2.

Логическое выражение может быть простым или сложным. Примеры записи простых логических выражений:
x>5; rezult<=t;
Сложные логические выражения в Паскале строятся из простых с применением операций not (отрицание), and (логическое И) и or (логическое ИЛИ). При записи сложных логических выражений простые логические выражения следует брать в скобки. Пример записи сложного логического выражения:
(x>5) and (rezult)<=t;

Пример: вычислить z = ln(b-y)/(b-y)
Величину z можно вычислить при b-y > 0. В противном случае на экран следует вывести сообщение «b-y <= 0». Алгоритм решения представлен на рисунке.



Текст программы на Паскале:

var b,y,z: real;

begin

writeln(‘введите данные’);

write(‘y=’);

readln(y);

write(‘b=’);

readln(b);

if b-y<=0 then write(‘b-y<=0’)

else

begin

z:=ln(b-y)/(b-y);

write(‘z=’,z);

end;

end.


При разветвлении в Паскале используют также оператор выбора вида


case c of

c1:a1;

c2:a2;

...

cn:an;

end;

Здесь с – выражение, с1, с2, …, сn – константы, а1, а2, …, an – операторы. Если значение выражения равно одной из констант, выполняется соответствующий ей оператор. Если значение выражения не совпадает ни с одной константой, управление передается за пределы оператора case.

Пример: составить программу для вывода на экран дня недели по введённому его номеру.

Текст программы на Паскале:

var day: integer;

begin

write (‘введите номер дня ’);

readln (day);

case day of

1: writeln (‘понедельник’);

2: writeln (‘вторник’);

3: writeln (‘среда’);

4: writeln (‘четверг’);

5: writeln (‘пятница’);

6: writeln (‘суббота’);

7: writeln (‘воскресенье’);

end;

end.

^

Программирование циклов с известным числом поаторений


Циклы – это многократно повторяемые последовательности однотипных действий. Бывают циклы с известным числом повторений и с неизвестным числом повторений. Для организации цикла с известным числом повторений в Паскале служит оператор вида
for i:=m1 tо m2 do s;
Здесь i – параметр цикла, m1 и m2 – начальное и конечное значения параметра цикла, s – тело цикла из одного или нескольких операторов. Параметр автоматически увеличивается на 1 при каждом повторе.
Возможна следующая запись оператора:
for i:=m1 downto m2 do s;
При этом параметр уменьшается на 1 при каждом повторе.

Пример: вычислить и вывести на экран в один столбец пятнадцать значений функции y = x2 - 2x + 2 при увеличении x от начального значения –4 с шагом 0,2.
Алгоритм решения представлен на рисунке.



Текст программы на Паскале:

^ Var x,y: real; к: integer;

begin

x:=- 4; {начальное значение х}

for i: =1 to 15 do {начало цикла}

begin

y: = sqr(x)-2*x+2; {расчет значения y}

writeln (y); {вывод на экран значения y}

x:=x + 0.2; {увеличение значения x в цикле}

end {окончание цикла}

end.

^

Программирование циклов с неизвестным числом повторений


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

Оператор цикла с предусловием в Паскале можно использовать в циклах с неизвестным или с известным числом повторений. Вид оператора:

While b do s;

Здесь b – логическое выражение, s – тело цикла. При выполнении оператора предварительно проверяется значение логического выражения. Пока оно истинно, выполняется тело цикла, т.е. операторы циклической части. Когда оно становится ложным, происходит выход из цикла. Если с самого начала значение логического выражения ложно, тело цикла не выполнится ни разу. Если тело цикла является составным оператором, его необходимо ограничить операторными скобками begin и end.

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



Текст программы на Паскале:

Const k = 10;

Var x: integer;

begin

x : = 1;

while x <= k do

begin

write(x,' ');

x: = x + 1;

end;

end.

Оператор цикла с постусловием в Паскале также используется в циклах с неизвестным числом повторений и с известным числом повторений. Вид оператора:

repeat s until b;

Здесь s – тело цикла, b - логическое выражение. При выполнении оператора сначала выполняется тело цикла, а затем проверяется логическое условие. Таким образом, обеспечивается, по меньшей мере, одно выполнение тела цикла. Цикл повторяется, пока логическое выражение ложно. Когда оно становится истинным, происходит выход из цикла.

Пример : Составить программу определения k, при котором x/k становится меньше или равн а, где k = 1, 2, 3… .
Алгоритм решения представлен на рисунке.



Текст программы на Паскале:

^ Var x,a,p: real; k:integer;

begin

write (‘x=’);

readln (x); {ввод с клавиатуры значения х}

write (‘a=’);

readln (a); {ввод с клавиатуры значения a}

k : = 0; {начальное значение k перед циклом}

repeat {начало цикла}

k : =k+1; {увеличение k в цикле}

until x/k <= a; {проверка логического условия}

write(‘k=’,k); {вывод найденного значения k на экран}

end.

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

^

Программирование вложенных циклов. Массивы.


Циклы могут быть вложены один в другой. Пример: Составить программу для упорядочивания элементов массива (а1, а2, …а100), расположив их по возрастанию в том же массиве.

Алгоритм решения: каждый i–й элемент массива с первого по 99-й необходимо сравнивать со всеми j-ми элементами, имеющими более высокий порядковый номер. Например, первый элемент надо сравнивать со вторым, третьим, четвер-тым и т.д. Второй элемент надо сравнивать с третьим, четвертым, пятым и т. д. Если значение j-го элемента окажется меньше, чем i–го, эти элементы надо поменять местами в массиве. Для этого вводится промежуточная переменная amin. Сначала переменной amin присваивается значение j-го элемента, затем j-му эле-менту присваивается значение i–го элемента, и затем i–му элементу присваива-ется значение переменной amin. Во внутреннем цикле происходит сравнивание и обмен значений элементов, во внешнем цикле меняется номер i–го элемента. Алгоритм представлен также на рисунке.



Текст программы на Паскале:

^ Var amin:real; i, j : integer; a:array[1..100] of real;

begin

for i:=1 to 100 do {ввод данных}

readln a[i];

i:=0;

repeat {Внешний цикл}

i:=i+1;

j:=i;

repeat {Внутренний цикл}

j:=j+1;

if a[i]>=a[j] then {Сравнивание и обмен элементов массива}

begin

amin:=a[j]; a[j]:=a[i]; a[i]:=amin;

end;

until j>=100;

until i>=99;

for i:=1 to 100 do {вывод упорядоченного массива на экран}

writeln(a[i]);

end.


^

Процедуры и функции в Паскале


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

х: =sin(а);


Процедура может быть вызвана, например:


write(a);

Процедуры и функции в Паскале бывают стандартные и нестандартные, т.е. определённые пользователем. Стандартные функции и процедуры не требуют описания. В Паскале их существует более 200. Некоторые стандартные функции были перечислены выше. Примеры стандартных процедур: ClrScr – очистка экрана, курсор перемещается в верхний левый угол. Delay(t) – задержка программы на t миллисекунд. GotoXY(x,y) – перемещение курсора в точку с координатами (x,y). Exit – выход из текущего блока или из программы. Нестандартные процедуры и функции должны быть описаны. Их структура, в принципе, такая же, как и основной программы. Пример использования нестандартной процедуры: вычислить



Алгоритм решения: в программе используется процедура step, в которой описано вычисление выражения вида xy. Значение выражения присваивается переменной s. При вызове процедуры в блоке операторов основной программы, вместо x,y,s используют-ся другие параметры. Например, при первом вызове процедуры вычисляется выражение ab, значение которого присваивается переменной S1.

Текст программы на Паскале:

program zet;

var a,b,c,S1,S2,S3,k,r,z:real;

{описание процедуры}

procedure step(var x,y,s:real);

begin

s:=exp(y*ln(x));

end;

{блок операторов}

begin

read (a,b,c,); {ввод данных}

step(a,b,S1); {вызов процедуры}

r:=b-c;

step(a,r,S2); {вызов процедуры}

k:= sqr(b)-sqr(c);

step(a,k,S3); {вызов процедуры}

z:=(S1-sqr(S2))/sqrt(S3);

writeln(‘z=’,.z);

end.

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

Пример использования нестандартной функции: Рассчитать



Алгоритм решения: в программе используется нестандартная функция fact типа integer с параметром k, в которой описано вычисление выражения k! При использовании функции в блоке операторов вместо k указывается какой-либо другой параметр, факториал которого при этом рассчитывается.

Текст программы на Паскале:

program sochet;

var c,n,m,l: integer;

function fact(k: integer): integer;

var p,i: integer;

begin

p:=1;

for i: =1 to k do

p: = p*i;

fact:=p;

end;

begin

read(n,m);

l:=n-m;

c:=fact(n)/fact(m)/fact(l);

writeln (‘c=’,c);

end.
^

Записи в Паскале.


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

Запись – это структурированный тип данных, состоящий из фиксированного числа компонентов разного типа. Определение записи начинается идентификатором Record и заканчивается ключевым словом end . Между ними заключён список компонентов, называемых полями, с указанием идентификаторов (имён) полей и типа каждого поля.

Формат описания типа запись:

^ Type

<имя типа> = Record


<идентификатор поля>:<тип компонента>;

.......

<идентификатор поля>:<тип компонента>;

end;

Var

<идентификатор, ...> : <имя типа>;

Например, описание записи, содержащей регистрационный номер автомобиля, его марку, год выпуска, цвет, фамилию и адрес владельца, может выглядеть так:

^ Type

avto = record

Nomer:string[6]; { Регистрационный номер }

Marka:string[15]; { марка автомобиля }

God:integer; { год выпуска }

Color: string[20]; { цвет }

Fam:string[20]; { фамилия владельца }

Adress:string[40]; { адрес владельца }

end;

Var

m,v:avto;

В данном примере запись avto содержит 6 компонентов: номер, марка машины, год выпуска, цвет, фамилия владельца, его адрес. Доступ к полям записи осуществляется через переменные m и v типа record.

Имя поля должно быть уникальным в пределах записи. Объём памяти, необходимый для хранения записи, складывается из длин полей.

Значения полей записи могут быть использованы в выражениях. Обращение к значению поля осуществляется с помощью составного имени, включающего идентификатор переменной и идентификатор поля, разделённые точкой. Например, чтобы получить доступ к полям записи m типа avto, надо записать:
m.nomer, m.marka, m.god, m.color, m.fam, m.adress .

Для присваивания полям записей значений используются оператор присваивания.
m.nomer:=’ав345х’;
m.marka:=’ВАЗ 2110’;
m.god:=1995;


Составные имена можно использовать, в частности, в операторах ввода-вывода, например:
^ Write(’Введите фамилию владельца автомобиля ’,m.nomer, ’ ’);
Readln(m.fam);


Допускается применение оператора присваивания к записям в целом, если они имеют один и тот же тип, например, m:=v. После этого значения полей записи m станут равны значениям соответствующих полей записи v.

В ряде задач удобно пользоваться массивами из записей. Их можно описать, например, следующим образом:

^ Type

Person = record

Fam:string[20]; { фамилия сотрудника }

Pol:char; { Пол сотрудника }

Age:16..60; { возраст сотрудника}

Dolgnost: string[20]; { должность }

end;

Var

otdel:array [1..50] of Person;

Обращение к полям записей имеет несколько громоздкий вид, что особенно заметно при использовании идентификаторов длиной более 5 символов. Чтобы избежать этого,применяется оператор with, который имеет следующий формат:

With <переменная типа record> do <оператор>;

Один раз указав имя переменной типа record в операторе with, далее в пределах блока <оператор> можно работать с именами полей, как с обычными переменными, то есть без указания перед идентификатором поля имени переменной, определяющей запись:

With Otdel[25] do

begin

fam:=’Васильев’;

Pol:=’М’;

Age:=45;

Dolgnost:=’Директор’;

end;

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

Записи используются обычно для организации файлов с данными на дисках
^

Работа с файлами в Паскале


Порядок работы с файлами в Паскале:

1. Описать тип файловой переменной. Например, переменная f в зависимости от типа файла может быть описана так:

var

f : file of <тип>;

или

var

f : text;

или

var

f : file;

Тип file описывает линейную последовательность компонент, указанного типа. Тип файла Text означает файл, состоящий из строк символов.

2. Связать файловой переменной с именем файла - команда Assign(f). Одновременно в программе может быть открыто несколько десятков файлов, каждый из которых должен иметь свою файловую переменную.

3. Открыть файл командой Rewrite(f) для записи во вновь создаваемый файл или Reset(f) для чтения/записи уже имеющегося файла. Если открывается существующий текстовый файл, то используем команду Append(f).

4. Осуществить чтение или запись в файл - команды ^ Read или Write соответственно (для построчной работы с текстовыми файлами можно использовать соответственно ReadLn или WriteLn). Например, команда записи в файл выглядит так: Write(f, а), где f - файловая переменная; а - переменная любого типа (byte, real, string и т. д., соответствующая типу файла). При обращении к командам Read/Write позиция чтения/записи в файле автоматически увеличивается на единицу.

5. Закрыть файл - команда Close(f).

Пример программы, демонстрирующей возможные действия с файлом:

Var

f: text;

Begin

Assign(f, 'TEST.TXT'); { связываем файловую переменную f }

{ c именем файла 'TEST.TXT' }

Rewrite(f); { Создаем новый файл }

WriteLn(f,'Исходный текст'); { Записываем строку в файл }

Close(f); { Закрываем файл }

Append(f); { Открыть файл для добавления}

{ в его конец строки }

^ WriteLn(f,'Добавляемый текст'); { Добавляем строку }

Close(f); { Закрываем файл}

End.

Ниже приведено описание процедур и функций Паскаля, работающих с файлами:

Процедура Append(var f : Text);
Открывает существующий текстовый файл f для дополнения.

Процедура ^ Assign(var f; name : String);
Связывает внешний файл с именем name и переменную файлового типа f. Все дальнейшие операции с переменной f будут выполняться с указанным внешним файлом.

Процедура Close(var f);
Закрывает открытый файл, связанный с переменной f.

Функция Eof(var f); типа Boolean;
Показывает значение Истина (True) при наличии признака конца файла для типизированных или нетипизированных файлов, указываемых файловой переменной f.

Функция FilePos(var f); типа Longint;
Показывает текущую позицию в файле, указываемом переменной f. Если эта позиция в конце файла, то функция возвращает значение, равное длине файла, а если в начале файла, значение 0.

Функция FileSize(var f); типа Longint;
Показывает текущий размер файла f в байтах. Если файл пуст, то 0.

Процедура ^ Reset(var f [ : file; RecSize : Word ] );
Открытие существующего файла. Имя внешнего файла, связанного с f, должно быть ранее определено. Необязательный параметр RecSize: размер записи нетипизированного файла.

Процедура ^ Rewrite(var f : file [;RecSize : Word ] );
Создает и открывает новый файл. Если такой файл уже есть, то он удаляется и создается новый с тем же именем.

Процедура Seek(var f; n : Longint);
Перемещает текущую позицию файла к элементу с номером n (не может быть использована для текстовых файлов, первая позиция равна 0).

Процедура Truncate(var f);
Усекает размер файла f до текущей позиции в файле.

Ниже приведен пример программы на Паскале, которая открывает сразу два файла (один для чтения, а второй создает вновь для записи). Командой Readln(f1,s); из первого файла считывается строка s. В цикле For организуется доступ к ее отдельным символам и производится замена буквы k на K. Затем преобразованная строка сохраняется во втором файле. Считывание строк проводится в цикле repeat-until и завершается при нахождении конца первого файла Eof(f1).

^ Var

f1,f2:text;

s:string;

i:byte;

Begin

Assign(f1, 'text.txt');

Assign(f2, 'text_new.txt');

Reset(f1);

Rewrite(f2);

Repeat

Readln(f1, s);

for i:=1 to Length(s) do

if s[i]='k' then s[i]:='K';

WriteLn(f2, s);

until Eof(f1);

Close(f1);

Close(f2);

End.

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

^ Var

f1,f2:file of char;

ch:char;

Begin

Assign(f1, 'text.txt');

Assign(f2, 'text_new.txt');

Reset(f1);

Rewrite(f2);

Repeat

Read(f1, ch);

if ch='k' then ch:='K';

Write(f2, ch);

Until Eof(f1);

Close(f1);

Close(f2);

End.

^

Программирование в графическом режиме


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

Для разработки программ, работающих в графическом режиме, в системе программирования Турбо Паскаль существует стандартный модуль GRAPH.TPU, содержащий константы, типы, процедуры и функции (более 50-ти). Кроме файла GRAPH.TPU для разработки и работы программ в графическом режиме требуется графический драйвер Egavga.bgi (для адаптеров EGA и VGA), а также файлы *.chr, в которых находятся векторные шрифты для графического режима. В дистрибутивном пакете системы Турбо Паскаль эти шрифты не имеют русских букв, однако можно найти и русифицированные *.chr файлы, например, в системе Quattro Pro.

Для работы в графическом режиме следует выполнить действия:
- скопировать в каталог с файлом программы драйвер egavga.bgi;
- в разделе описания используемых модулей указать ^ Uses Graph;
- описать две переменные целого типа Gd и Gm: Var Gd, Gm:integer;
- задать автоматический режим настройки графического драйвера: Gd:=Detect;
- для переключения в графический режим вызвать процедуру InitGraph: InitGraph(Gd,Gm,'');
- выполнить вывод на экран графической информации;
- для выхода из графического режима вызвать процедуру ClоseGraph;

После переключения в графический режим вместо текстового курсора используется невидимый текущий указатель, который может быть установлен в определённой точке экрана с помощью задания графических координат. Для режима VGA 640*480 верхний левый угол экрана будет иметь координаты (0,0), а правый нижний угол (639,479).

Пример 1. Наберите текст программы, рисующей 5 концентрических окружностей в центре экрана.

Текст программы на Паскале:

^ Program Krug2;

Uses Graph;

Var

Gd,Gm,rad,xc,yc:integer;

begin

Gd:=Detect; { функция InitGraph должна выполнить }

{ автоопределение типа монитора (Gd) и его }

{ максимального разрешения (Gm)}

InitGraph(Gd,Gm,''); { инициализация графического режима }

if GraphResult <> 0 then { в случае ошибки инициализации }

begin

Writeln('Ошибка инициализации графического режима');

Writeln('В каталоге программы должен присутствовать

драйвер egavga.bgi');

Writeln('или укажите путь к нему в IniGraph(Gd,Gm,<путь>)');

Halt(1);

end;

Case Gd of { анализируем тип дисплея }

{ и вычисляем координаты центра экрана }

9: begin { VGA монитор }

xc:=(640-1) div 2; yc:=(480-1) div 2;

end;

3: begin { EGA монитор }

xc:=(640-1) div 2; yc:=(350-1) div 2;

end;

end;

for rad:=1 to 5 do

Circle(xc,yc,rad*20); { рисуем окружности }

Readln;

CloseGraph; { возврат в текстовый режим }

end.

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

Функция ^ GetMaxX:Integer; Возвращает максимальную x-координату (разрешение по горизонтали) текущего графического режима.

Функция GetMaxY:Integer; Возвращает максимальную y-координату (разрешение по вертикали) текущего графического режима.

Функция ^ GetX:Integer; Возвращает текущую x-координату указателя.

Функция GetY:Integer; Возвращает текущую y-координату указателя.

Процедура PutPixel(x,y,color); Выводит на экран точку с координатами (x,y) и цветом color.

Процедура SetColor(color); Устанавливает цвет рисуемых далее линий.

Процедура SetBkColor(color); Устанавливает цвет фона.

Процедура Line(xStart,yStart,xEnd,yEnd); Проводит прямую линию из точки c координатами (xStart,yStart) в точку (xEnd,yEnd).

Процедура LineTo(xEnd,yEnd); Проводит прямую линию из текущего положения указателя в точку с координатами (xEnd,yEnd).

Процедура MoveTo(x,y); Перемещает указатель в точку с координатами (x,y).

Процедура Circle(x,y,Radius); Рисует окружность с центром в точке (x,y) и радиусом Radius.

Процедура Rectangle(x1,y1,x2,y2); Рисует прямоугольник с координатами левого верхнего и правого нижнего угла (x1,y1) и (x2,y2) соответственно.

Процедура Bar(x1,y1,x2,y2); Рисует закрашенный прямоугольник с координатами левого верхнего и правого нижнего угла (x1,y1) и (x2,y2) соответственно.

Процедура ^ Ellipse(x,y, a1,a2, xRad,yRad); Рисует эллиптическую дугу с центром в точке (x,y), начальным и конечным углами a1 и a2 и радиусами по осям xRad, yRad; углы отсчитываются от положительного направления оси х в градусах.

Процедура ^ FloodFill(x,y, border); Закрашивает замкнутую область, внутри которой расположена точка (x,y), согласно текущему стилю заполнения. Параметр border задаёт цвет границы.

Процедура ^ SetFillPattern(parttern, color); Устанавливает тип закраски и её цвет. Тип закраски выбирается из списка: EmptyFill – сплошное заполнение цветом фона; SolidFill - сплошное заполнение заданным цветом; LineFill – заполнение горизонтальными линиями; LtSlashFill -диагональное заполнение (/ / /); LtBkSlashFill - обратное диагональное заполнение (\ \ \); XhatchFill – косое клетчатое заполнение.

Процедура SetLineStyle(Style,Pattern,color); задаёт стиль, палитру и толщину линий. Стили: Solidln - сплошная; ^ Dotted - точечная; Dashed - пунктирная; Centerln - штрихпунктирная. Толщина линий: NormWidth – нормальная; ThickWidth – толстая. Параметр Pattern=0.

Процедура OutTextXY(x,y,s); Выводит текстовую строку s начиная с точки с координатами (x,y).

Простейшие примеры работы с процедурами и функциями графического режима содержатся в справочной системе Турбо Паскаль. Полный список констант, типов, процедур и функций модуля GRAPH содержится также в файле Graph.int
^

Анимация изображений в Паскале


Общим принципом создания движущихся изображений в Паскале является рисование какого-либо объекта, закраска его цветом фона (стирание) и последующее рисование уже с новыми координатами. Необходимо отметить, что эффект движения возникает не всегда. Если частота появления картинки на экране мала, то наблюдается перемещение мигающего объекта. Если объект перемещается слишком быстро, то человеческий глаз не способен воспринять всей траектории движения. На восприятие еще накладывается частота обновления кадра монитора. Может возникать ситуация, когда мерцание наблюдается по этой причине. Продолжительность нахождения на экране прорисованного объекта должна быть максимальна, а продолжительность нахождения стертого минимальна.

Ниже приведена программа на Паскале, в которой организовано перемещение по экрану окружности. В данном случае частоту обновления изображения можно регулировать варьированием продолжительности задержки (time) и величины перемещения (delta), а также размером объекта - переменная radius (чем меньше радиус окружности, тем меньше времени необходимо на ее прорисовку). Перед выполнением примера скопируйте в свой каталог драйвер egavga.bgi;

^ Program Multik;

Uses Graph, Crt;

Var

x,y,dy,dx,time,delta,radius,Gd,Gm: integer;

Begin

Gd := Detect;

InitGraph(Gd,Gm,''); {Включаем графический режим}

if GraphResult <> 0 then Halt(1);

Rectangle(0,0,GetMaxX,GetMaxY); {рисуем рамку вокруг экрана}

x:=100; y:=100; { начальные координаты центра окружности}

delta:=10; { величина перемещения }

dx:=delta; { величина перемещения по х }

dy:=delta; { величина перемещения по у }

radius:=15 ; { радиус окружности }

time:=10000; { продолжительность задержки }

Repeat

SetColor(15); { задание белого цвета для линий }

Circle(x,y,radius);{ рисование белой окружности}

{ смена направления движения при достижении края экрана }

{ и включение звукового сигнала }

if y>=GetMaxY-radius then { нижний край }

begin dy:=-delta; Sound(2000); end;

if y<=radius then { верхний край }

begin dy:= delta; Sound(3000); end;

if x>=GetMaxX-radius then { правый край }

begin dx:=-delta; Sound(5000); end;

if x<=radius then { левый край }

begin dx:= delta; Sound(4000); end;

Delay(time); { задержка выполнения программы }

NoSound;

SetColor(0); { задание черного цвета }

Circle(x,y,radius); { рисование черной окружности }

x:=x+dx; y:=y+dy; { расчёт новых координат }

{ выход из программы при нажатии любой клавиши }

^ Until KeyPressed;

CloseGraph; { Выход из графического режима }

End.

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

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

^ Program Salut;

Uses Graph, Crt;

Var

n,y,x,a,b,c,f,e,i,Gd,Gm: integer;

Begin

Randomize; { Инициируем генератор случайных чисел }

Gd := Detect;

InitGraph(Gd,Gm,''); {Включаем графический режим}

if GraphResult <> grOk then Halt(1);

y:=round(GetMaxY/2); { координаты центра экрана }

x:=round(GetMaxX/2);

n:=200; { количество повторов }

c:=50;

Repeat

a:=random(c)+10;

b:=random(c)+10;

e:=5+random(20);

f:=random(120);

for i:=1 to n do

begin

Delay(50);

SetColor(round(i/10)+1);

Circle(round((y-i/e)*sin(i/a))+x,

round((y/2-i/e)*cos(i/b))+y,

f-round(c*sin(i/e)));

end;

delay(65535);

for i:=1 to n do

begin

SetColor(0);

Circle(round((y-i/e)*sin(i/a))+x,

round((y/2-i/e)*cos(i/b))+y,

f-round(c*sin(i/e)));

end;

Until KeyPressed;

CloseGraph;

^

Построение графика аналитически заданной функции


При выводе на экран графических изображений используется графическая система координат. Графические координаты задают положение каждого пиксела, отображаемого на экране. В отличие от обычной (декартовой) системы координат, графические координаты принимают только целочисленные значения. Диапазон изменения графических координат ограничен снизу нулём, а сверху разрешением экрана по горизонтали и вертикали. Максимальное значение x и y -координат можно получить, используя функции GetMaxX и GetMaxY. Графическая координата y отсчитывается сверху вниз. Геометрические декартовы координаты точки (x,y) для её изображения на экране необходимо пересчитать в графические (xg,yg) по формулам:




где xo, yo – смещение изображения на экране от левого края и сверху; yG – разрешение экрана по вертикали; dx и dy – размер собственно изображения по горизонтали и вертикали соответственно; xmin, ymin, xmax, ymax – минимальные и максимальные значения аргумента x и значения функции y в диапазоне построения графика; |a| - целая часть числа a.

Таким образом, для построения графика функции необходимо:
- получить таблицу значений функции y = f(x) в диапазоне изменения x от xнач до xкон;
- найти минимальные и максимальные значения аргумента x и значения функции y в диапазоне построения графика;
- пересчитать действительные значения x и y в графические xg и yg;
- нарисовать на экране область построения графика и оси координат;
- отправить графический указатель (перо) в начало координат;
- задать цвет и стиль линий;
- последовательно соединить линиями (или отметить маркерами) точки графика.

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

Рассмотрим пример использования графического режима для построения графика функции y = sin x. В примере используется 3 подпрограммы-функции f, xe и уe, причём xe и уe вызываются без параметров.

Program Prg_graf;

Uses Crt, Graph; Var

xn, xk, x, y, Ymin, Ymax, dx:real;

MX, MY,i, n: word;

Gd, Gm: integer;


Function f(xf:real):real; { расчет функции }

begin

f:=sin(xf); { Здесь приводим выражение для вычисления }

{или f:=exp(-0.5*xf*xf);} { значения Вашей функции }

end;


^ Function Xe:word; {расчет позиции на экране для X}

begin

Xe:=10+Round((MX-20)*(x-xn)/(xk-xn));

end;


Function Ye:word; { расчет позиции на экране для Y }

begin { на экране отсчет идет сверху-вниз }

{ на обычном графике – наоборот}

^ Ye:=MY-10-Round((MY-20)*(f(x)-Ymin)/(Ymax-Ymin)); end;

Begin { Начало основной программы }

xn:=-5; xk:=5; n:=250; { Исходные данные }

{или при вводе исходных данных с клавиатуры:

Write(' x начальное = '); Readln(xn);

Write(' x конечное = '); Readln(xk);

Write(' количество точек графика = '); Readln(n); }


dx:=(xk-xn)/(n-1); { интервал между точками на оси Х }

{ Нахождение минимума и максимума функции }

x:=xn; Ymin:=f(xn); Ymax:=f(xn);

for i:=2 to n do

begin

x:=x+dx; if f(x)Ymax then Ymax:=f(x); end; Gd:=Detect;

InitGraph(Gd,Gm,''); { не забудьте скопировать egavga.bgi }

{ в папку с программой Prg_graf.pas }

if GraphResult <> 0 then

begin

Writeln('Ошибка инициализации графического режима');

Halt(1);

end;

MX:=GetMaxX; MY:=GetMaxY;

Rectangle(0,0,MX,MY); { Рамка вокруг всего экрана }

Rectangle(10,10,MX-10,MY-10); { Рамка вокруг поля графика }

^ OutTextXY(270,2,'График функции'); { Вывод строки }

x:=0; Line(Xe,MY-10,Xe,10); { Рисуем ось ординат для x=0}

OutTextXY(Xe-10,15,'Y'); { Подписываем ось ординат }

y:=0; Line(10,MY-Ye,MX-10,MY-Ye);{ Рисуем ось абсцисс для y=0}

OutTextXY(MX-20,MY-Ye+2,'X'); { Подписываем ось абсцисс }

OutTextXY(Xe-10,MY-Ye+2,'0'); {Подписываем начало координат}

{ Рисуем сам график }

x:=xn; MoveTo(Xe, Ye); { Перемещаем перо в начало координат }

for i:=2 to n do

begin

x:=x+dx; LineTo(Xe,Ye); { Чертим линию до следующей точки}

end;

Readln;

CloseGraph;

End.





1

40

2

39

3

38

4

37

5

36

6

35

7

34

8

33

9

32

10

31

11

30

12

29

13

28

14

27

15

26

16

25

17

24

18

23

19

22

20

21


41

48


42

47

43

46

44

45




Похожие:

Алфавит языка iconЛингвистическая игра Фразеологический алфавит Составитель С. В. Боровлёва, учитель русского языка
Ты уже знаешь, что алфавит русского языка не раз менялся, одни буквы уходили, другие появлялись
Алфавит языка iconТема занятия
Алфавит. Глаголица и кириллица. Выделение славян из общеиндоевропейского единства. Восточнославянские племена и их группировка. Образование...
Алфавит языка iconПрограмма на Pascal? Какие разделы могут входить в блок программы? Какие разделы не являются обязательными при написании программы?
Алфавит языка состоит из букв латинского алфавита (русский алфавит используется только для пометок и для задания литерных величин),...
Алфавит языка iconАнглийский алфавит учитель английского языка

Алфавит языка iconПечатный шрифт Рукописный шрифт
Здесь вы можете выучить или повторить алфавит английского языка. Представлены все буквы английского языка, их название, рукописный...
Алфавит языка icon2009 г. Моу лицей №15 г. Ставрополь Классный романовская елена алексеевна учитель
Дорогие ребята! Давайте узнаем, все ли вы правильно называете буквы.(Сначала хором называют весь алфавит, а затем предлагается пропеть...
Алфавит языка iconКодирование графической информации. Растровое представление графической информации
Язык – знаковая система представления информации. Множество символов языка образуют алфавит
Алфавит языка iconАлфавит языка qbasic посмотрите и запомните!
П))-log(x)/exp(2) ( exp(3) 14 2)/(sqr(23. 2)-1) (log(x+2)/log(2)+x (2/3))/x (1/3)
Алфавит языка iconДокументи
1. /Пропись алфавит, чтение, письмо/Послание к верующим.txt
2. /Пропись...

Алфавит языка iconСценарий детского праздника Now I know the abc цели: Показать знания и умения учеников. Воспитывать быстроту реакции, трудолюбие и активность
Здравствуйте уважаемые родители, учителя и ученики. Сегодня у нас праздник, не простой, а волшебный. Мы с радостью приветствуем главного...
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©lib2.podelise.ru 2000-2013
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы