Лекция

Тема: «Знакомство с Turbo Pascal. Запись выражений. Ввод/вывод»

 

План

1. История возникновения языка 

2. Работа в и ИСР Turbo Pascal

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

4. Структура программы 

5. Понятие переменных и основные типы переменных в программе

6. Запись арифметических выражений 

7. Оператор присваивания

8. Организация ввода/вывода информации

9. Использование модуля Crt

 

1. История возникновения языка

Первыми языками программирования явились Фортран, Кобол, Алгол (50-е годы). На базе Алгола развилось большинство современных языков программирования. Швейцарский математик Никлаус Вирт задался целью создания языка программирования для обучения студентов. В качестве названия языка была выбрана фамилия известного французского математика Блеза Паскаля, который в 17 веке изобрел первую механическую счетную машинку. 

В 1970 г. вышло полное описание языка Pascal. Со временем язык получил несколько путей развития, наиболее удачной  явилась разработка фирмы Borland EnterpriseTurbo Pascal. Версия Turbo Pascal 7.0 явилась последней версией Pascal, далее разрабатывалась система Delphi, в которую входит Object Pascal. 

В процессе своего развития язык наращивал свою функциональность, в него добавлялось все больше процедур и функций. На сегодняшний день последние версии практически ничем не напоминают первые версии Pascal (разве что только названием).

 

2. Работа в ИСР Turbo Pascal

Среда разработки Turbo Pascal отличается дружественным интерфейсом и значительно облегчает разработчику выполнение рутинных операций по набору текста программы, управлению файлами, запуску и отладке программ. Интерфейс языка называется Интегрированной средой разработки (ИСР).

Для запуска среды разработчика используется файла Turbo.exe или Bp.exe, которые расположены в каталоге Bin. Сама среда чаще всего находится в каталоге TP7 или BP7.

Операции с файлами

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

Создание – FileNew;

Открытие – F3 или File – Open;

Сохранение – F2 или File – Save

Выход – Alt + X.

Работа с окнами

В отличие от Basic в Pascal можно открыть несколько окон одновременно (до 9).

Для перехода между окнами используют клавиши F6 (вперед) или Shift + F6 (назад) или Alt + номер окна (для быстрого перехода).

Для раскрытия окна на весь экран используется клавиша F5 (повторное нажатие возвращает окно к первоначальному размеру).

Для закрытия окна  используют клавиши Alt + F3. При этом, если содержимое окна изменялось, то появится запрос на сохранение данных.

Запуск и отладка программы

После набора программы можно нажать F9 – компиляция программы (проверка на ошибки) или Ctrl + F9 – компиляция и запуск. В случае обнаружения ошибки выдается текст с номером ошибки, и курсор устанавливается в строку, где находится ошибка или на следующую.

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

Работа со справкой

Вся справочная информация находится в файле Turbo.tph. С помощью клавиши Shift + F1 можно вызвать алфавитный указатель с полной информацией как по языку.

Нажатие клавиши F1 открывает окно со справкой по работе с самой ИСР Turbo Pascal.

Если необходимо получить справку по отдельному оператору при написании программы, необходимо установить курсор на нужный оператор в тексте и нажать клавиши Ctrl + F1. При этом в справке могут быть приведены примеры использования операторов. Эти примеры можно копировать в программы для ускорения программирования.

 

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

Алфавит языка Паскаль - это набор символов, которые используются для написания программ. К таким символам относят:

Остальные символы не применяются для написания программы и могут использоваться только для вывода на экран в операторах вывода (при этом символы берутся в одинарные кавычки).

Идентификаторы

В программе каждая переменная,  оператор, функция или процедура имеет свое имя. Также свои имена имеют модули, типы, константы и переменные. Все имена - это идентификаторы.

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

 

4. Структура программы

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

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

Название программы

Необязательный элемент, записываемый в виде:

Program имя;

В качестве имени указывается произвольный текст, поясняющий назначение программы (максимальная длина 32 символа).

 

Раздел подключения модулей

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

Для подключения нужных модулей в самом начале программы имеется раздел подключения модулей. Этот раздел имеет структуру:

Uses имя модуля1, имя модуля2, ..., имя модуляN;

Uses Crt, Dos, Graph;

          Наиболее используемый модуль CRT – работа с экраном; DOS – работа с диском, файлом, каталогом; GRAPH – работа с графикой.

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

Раздел описания меток

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

Label метка1, метка2, …, меткаN;

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

Принцип безусловной передачи управления рассмотрен в лекции № 14.

 

Раздел описания констант

Иногда в программе применяются значения, которые никогда не меняются. Чаще всего - это некоторые известные физические или математические коэффициенты, которые используются для вычислений в программе. Эти значения целесообразно не вводить с клавиатуры, а описать как константы (постоянные), а затем ссылаться на них при расчетах.

Для описания таких значений используется раздел описания констант, имеющий вид:

Const имя константы=значение; 

имя константы=значение;

...

имя константы=значение;

Имя константы задается по правилам записи идентификаторов.

Const Pi = 3.1415

    E = 2.78

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

 

Раздел описания типов

В Паскале имеется ряд стандартных типов для описания переменных. Однако имеется возможность описывать собственные типы, а затем использовать их в программах. Такие типы описываются в разделе описания типов. Этот раздел имеет вид:

Type имя типа=описание типа; 

       имя типа=описание типа;

...

     имя типа=описание типа;

Имя типа задается по правилам записи идентификаторов.

Если использовать нестандартные типы в программе не нужно, то этого раздела может не быть.

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

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

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

Очень редко программа не использует переменных. В этом случае этого раздела может не быть.

 

Раздел описания процедур и функций

Данный раздел служит для описания подпрограмм, которые могут использоваться внутри главной программы. Подробно использование этого раздела рассмотрен в лекции № 21.

Если подпрограммы не нужны, то этого раздела может не быть.

Раздел операторов

Данный раздел содержит сам текст программы.  Присутствие этого раздела в программе обязательно. Раздел имеет вид:

Begin

Оператор1;

Оператор2;

...

Оператор n

End.

При написании программ каждый оператор отделяется знаком «;». В конце программы после оператора End ставится точка. Все команды, которые идут после оператора End. Не выполняются.

 

5. Понятие переменных и основные типы переменных в программе

Переменная - это область памяти, которую программа занимает под хранение данных и обозначает определенным именем. Использование переменных позволяет создавать универсальные (работающие для любых данных) программы.

Раздел описания переменных имеет структуру:

Var имя переменной1, имя переменной2, ..., имя переменнойM:имя типа1; 

имя переменной1, имя переменной2, ..., имя переменнойM:имя типа2;

.  .  .

имя переменной1, имя переменной2, ..., имя переменнойM:имя типаN; 

Имя переменной задается по правилам задания идентификаторов.

Var A,B,C: Integer;

STR:String;

CH:Char;

REZ,SUM,MIN,MAX:Real;

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

 

Стандартные типы переменных Паскаля

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

В Паскале существует набор стандартных типов, которыми можно описывать переменные.

 

Тип INTEGER

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

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

Тип

Диапазон чисел

Размер

Shortint

-128…127

1б

Integer

-32768…32767

2б

Longint

-214748648…214748647

4б

Byte

0…255

1б

Word

0…65535

Тип REAL

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

Существует разновидности вещественного типа, которые могут быть использованы при описании переменных, принимающих дробные значения:

Тип

Диапазон чисел

Размер

Значащие цифры

Single

1,5∙10-45…3,4∙1038

4б

7…8

Real

2,9∙10-39…1,7∙1038

6б

11…12

Double

5∙10-324…1,7∙10308

8б

15…16

Extended

3,4∙10-4932…1,1∙104932

10б

19…20

Такие числа могут выводиться на экран в двух видах:

Например 1.25E+4 = 12500

1.25E-4 = 0.000125

 

Тип CHAR

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

При записи данных в такие переменные, записываемая информация заключается в кавычки одинарные кавычки.

Подробнее работу с такими переменными мы рассмотрим в лекции № 18.

 

Тип STRING

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

Подробнее работу с такими переменными мы рассмотрим в лекции № 18.

 

6. Запись арифметических выражений

Выражения состоят из операндов и операций (например, сложение, вычитание и др.).

существуют следующие типы операций:

Арифметические операции

Операция

Действие

Тип операндов

Тип результата

+

-

*

/

div

mod

сложение

вычитание

умножение

деление

деление нацело

вычисление остатка от деления

integer, real

integer, real

integer, real

integer, real

integer

integer

integer, real

integer, real

integer, real

real

integer

integer

Ряд арифметических операций может использоваться с операндами типа integer или real, результат при этом будет типа real, если хотя - бы один из операндов имеет тип real.

Примеры записи арифметических выражений:

10+4 равно 14;

9*(-3) равно -27;

10 div 3 равно 3;

15 div 3 paвнo5.

Операция div вычисляет целую часть частного, а его остаток можно найти с помощью операции mod. Требование стандарта Паскаля состоит в том, чтобы результат выполнения операции mod был положительным, независимо от знаков операндов.

Операции "*", "/", "+", "-" необязательно окружать разделителями, например, пробелами, но пробелы обязательны при употреблении зарезервированных слов mod, div, поскольку AmodB является идентификатором, a A mod В - выражением, используемым для вычисления остатка от деления А на В.

При вычислении арифметических выражений приняты следующие правила, определяющие приоритет операторов. Операции "*", "/", div, mod имеют более высокий приоритет, чем операции "+" и "-". Операции с более высоким приоритетом выполняются раньше. Если операции имеют одинаковый приоритет, то операция, стоящая левее, выполняется первой. Для изменения приоритета выполнения операций можно использовать круглые скобки.

Операции отношения

Операция

Действие

Тип операнда

Тип результата

= <>

равно не равно

real, порядковый,

символьная строка,

boolean

> <

больше меньше

real порядковый,

символьная строка

boolean

<= 

>=

меньше или равно

больше или равно

real порядковый

символьная строка

boolean

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

Логические (булевы операции)

В Паскале предусмотрены 3 логические операции:

Эти операции являются фундаментом булевой логики, разработанной в XIX веке математиком Джорджем Булем. Результат операции and является истинным, если оба ее операнда истинны. Результат операции or является истинным, если какой-либо из ее операндов истинен. Операция not имеет один операнд и результатом ее выполнения является противоположное логической значение not(true)=false not(false)=true

Булевы выражения могут быть сложными. Операнды этих выражений должны быть булевого типа. Самой приоритетной булевой операцией является операция not, за ней следует операция and, а затем операция or.

С помощью булевых операндов можно конструировать сложные условия: Примеры выражений:

(Х<0) and (Y=0) or (X=0) and (Y>0)

 

Приоритет операций

Согласно Н.Вирту все операции размещаются следующим образом в порядке убывания приоритетности.

Приоритетность

Тип операции

Имя

0

1

2

3

инверсия

мультипликативные операции

аддитивные операции

операции отношения

not

+, /, div, mod, and

+, -, or

=, <>, >, >=, <, <=

 

Стандартные функции

Для выполнения часто встречающихся вычислительных операций и преобразования данных, относящихся к разным типам, существуют заранее определенные стандартные функции. Ниже приведена таблица типов аргументов и результатов стандартных функций языка Паскаль. Во всех тригонометрических функциях (Sin, Cos, Arctan) аргумент задается в радианах (градус*Pi/180).

Действия функций следующие:

Pascal

Алгебра

sin(x)

sin x

cos(x)

cos x

arctan(x)

arctg x

abs(x)

│x│

exp(x)

ex

ln(x)

ln x

sqr(x)

x2

sqrt(x)

√x

exp(y*ln(x))

xy

Для стандартных функций Arctan, Cos, Sin, Exp, Ln, Sqr, Sqrt аргумент может быть целым или вещественным, но результат - всегда вещественный.

Функции Trunc, Round принято называть функциями преобразования типов.

Trunc (X) - Х имеет тип real. Результатом является целая часть числа X. Например, Trunc (6.7)=6, Trunc (-6.7)=-6

Round(X) - Х имеет тип real. Результатом является ближайшее к Х целое число.

Например, Round(4.8)=5,  Round(4.5)=5.

В таблице приведены типы результатов при выполнении стандартных математических функций. В шапке столбца указаны исходные типы. В шапке строки - типы результатов.

integer

real

integer

Abs, Sqr

Trunc, Round

real

Sin, Cos, Arctan, Ln,Exp, Sqr

Abs, Sqr, Sin, Cos, Arrctan, Ln,Exp, Sqrt

В ТурбоПаскале к арифметическим функциям добавлены три функции:

Запись выражений на языке программирования.

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

Например:

(4*LN(X)+2)/((3-SIN(X))*(3+COS(X)))

 

7. Оператор присваивания

Для записи данных в какую-нибудь переменную используют оператор присваивания, имеющий вид :=.

Для использования оператора используют запись: 

имя переменной:=выражение;

Тип переменной и выражения должен совпадать.

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

Пример:

VAR A:INTEGER;

B: REAL;

C: CHAR;

S: STRING;

BEGIN

B:= ABS (-7/2); {В равно 3.5}

A:= ROUND (B); {А равно 4}

C:= 'К'; {С равно символу К}

S:= 'Пример текста'; {S равно тексту "Пример текста"}

END.

 

8. Организация ввода/вывода информации.

Ввод/вывод решает задачу обеспечения взаимодействия человека и ЭВМ.

Интерфейс связи с устройствами ввода/вывода Н. Вирт предусмотрел вводом четырех стандартных процедур Read, Readln, Write, Writeln

Ввод данных

Для ввода информации используются две процедуры вида:

Read(C1,....Ck)

Readln (C1,.... Ck)

Прежде, чем объяснить действие процедур, следует отметить:

Оператор Read

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

Например:

Var A, B, C: Integer;

Begin

Read (A, B, C);

Оператор Readln

Действие процедуры Readln аналогично. Однако после ввода переменных курсор переходит на новую строку.

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

Например:

Var A, B, C: Integer;

Begin

Readln (A,B);

C:=A+B;

Readln;

Вывод данных

Операторы вывода имеют вид:

Write (P1,.., Pn)

Writeln(P1,..., Pn)

где Р1,..., Рn - имена переменных, составляющих список вывода, могут относиться к типам Real, Integer, Char, а также могут использоваться заключенные в кавычки фрагменты текста.

Оператор Write

Процедура Write реализует вывод значений переменных Р1,..., Рn на экран. При этом после вывода переменных курсор остается на той же строке.

Например:

Var A, B, C: Integer;

Begin

Write ('Введите значение переменных:');

Readln (A ,B);

C:=A*B;

Write ('Ответ: С=',C);

End.

Оператор Writeln

Процедура Writeln реализует вывод значений переменных Р1,..., Рn на экран. При этом курсор переходит на новую строку.

Процедура Writeln без параметров реализует пропуск строки (отступ строки).

Например:

Var A, B, C: Integer;

Begin

Write ('Введите значение переменных:');

Readln (A ,B);

Writeln;

C:=A*B;

Writeln ('Ответ: С=',C);

End.

Форматированный вывод

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

Для выдачи таких значений в привычном формате параметры Р1...Рn  в операторах Write и Writeln могут иметь вид:

Е:m:n

где Е -переменная, выводимая на экран, m - общая длина числа, n - количество знаков после запятой (задаются в виде цифр).

Если выводимое данное имеет меньше знаков, чем m, то оно дополняется слева пробелами. Если больше, то выводится столько знаков, сколько необходимо для корректного представления результата.

Такой же подход используют для выдачи целых и символьных значений с заданной шириной. В этом случае параметры Р1...Рn  в операторах Write и Writeln могут иметь вид:

Е:m

Например:

Var A, B, C: Integer;

STR: String;

REZ: Real;

CH: Char;

Begin

Write ('Введите числа:');

Readln (A, B);

C:=A*B;

REZ:=Sin(C*pi/180);

STR:= 'Пример операторов вывода';

Writeln;

Writeln (' ':28,STR); {вывод текста с отступом слева на 28 пробелов}

{Вывод чисел в формате с расстояние между ними в 20 пробелов}

WRITELN('Целое число =', C:4, ' ':20,'Вещественной число =',REZ:4:2)

END.

Пример. Составить программу для вычисления длины окружности, площади круга.

{Описываем переменные}
Var R:Real;

L,S: Real;

Begin

{Выводим на экран подсказку, что нужно ввести пользователю}

Write ('Введите радиус окружности:');

{Вводим значение радиуса и записываем в переменную R}

Readln(R);

{Считаем длину окружности и записываем в переменную L}

L:=2*Pi*R;

{Считаем площадь круга и записываем в переменную S}

S:=Pi*Sqr(R);

{Отступаем одну пустую строку}

Writeln;

{Выводим найденные значения на экран}

Writeln ('Длина окружности=',L:5:2,'см');

Writeln ('Площадь круга=',S:5:2,'кв.см');

{Делаем паузу для просмотра результата}

Readln;

End.

 

9. Использование модуля Crt

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

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

Сам модуль имеет следующие функции:

·         ·        ClrScr  - очистка экрана;

·         ·        TextBackGround (n) - задание цвета фона (от 0 до 7);

·         ·        TextColor (n) - цвет символов (0 – 15). Задает цвет, который будет выводить информацию оператором Write, WriteLn. Данный цвет действует на все операторы вывода, пока не встретится новый оператор с другим цветом. Если к цвету прибавить 128, то будет эффект мерцания;

·         ·        GotoXY (x, y) - установка курсора в заданную позицию на экране (х є [0, 79], y є [0, 24]);

·         ·       Window (x1, y1, x2, y2); - описывает на экране окно, левый верхний угол находится в координате (x1, y1), а правый нижний (x2, y2). После создания такого окна, все функции модуля CRT и оператора вывода работают в этом окне.

При задании цвета нужно пользоваться следующей таблицей:

·         0

·         1

·         2

·         3

·         4

·         5

·         6

·         7

·         8

·         9

·         10

·         11

·         12

·         13

·         14

·         15

·         черный

·         синий

·         зеленый

·         голубой

·         красный

·         пурпурный

·         коричневый

·         белый

·         светло-серый

·         светло-синий

·         светло-зеленый

·         светло-голубой

·         розовый

·         светло-пурпурный

·         желтый

·         ярко белый

Пример. Решим приведенную выше задачу с использование цветового оформления

 
{Подключаем модуль CRT}
Uses Crt;
{Описываем переменные}
Var R:Real;

L,S: Real;

Begin

{Задаем зеленый цвет фона экрана}

TextBackColor (2);

{Очищаем экран указанным цветом фона}

ClrScr;

{Ставим курсор на 5 строку экрана в 15 столбец}

GotoXY(15,5);

{Задаем синий цвет символов}

TextColor (1);

{Выводим на экран подсказку, что нужно ввести пользователю}

Write ('Введите радиус окружности:');

{Вводим значение радиуса и записываем в переменную R}

Readln(R);

{Считаем длину окружности и записываем в переменную L}

L:=2*Pi*R;

{Считаем площадь круга и записываем в переменную S}

S:=Pi*Sqr(R);

{Отступаем одну пустую строку}

Writeln;

{Задаем желтый цвет символов с эффектом мерцания}

TextColor(14+128);

{Выводим найденные значения на экран}

Writeln ('Длина окружности=',L:5:2,'см');

Writeln ('Площадь круга=',S:5:2,'кв.см');

{Делаем паузу для просмотра результата}

Readln;

End.

Вопросы для самоконтроля

  1. История создания языка Pascal;
  2. Принципы работы в ИСР языка;
  3. Алфавит языка;
  4. Структура программы и назначение каждого ее раздела;
  5. Типы переменных. Описание переменных в программах;
  6. Запись выражений. Основные операции;
  7. Запись и принцип работы оператора присваивания;
  8. Ввод данных в программах;
  9. Вывод данных в программах;
  10. Использование модуля по работе с экраном в текстовом режиме