Методическое пособиеПрограммирование
на языке Turbo Pascal.
Язык программирования Паскаль.
Язык Паскаль был одним
языков, созданных для обучения и получивших
популярность, как и новичков, так и в
серьёзном программировании. При его
создании успешно решена задача сочетания
сравнительной простоты языка с
потенциальной широтой области его
применений. В отличии от своих
предшественников (в частности Бейсика)
Паскаль допускает разнообразные типы
составных объектов: запись - упорядоченный
набор про именованных объектов
произвольных типов; файл - упорядоченный
набор однородных данных, размещаемых во
внешней памяти; множество - набор элементов
одного типа, кодируемых отрезками
натурального ряда или произвольными
именами. В Паскале имеется оператор
варианта, т. е. выбора одной из нескольких
альтернативных последовательностей(ветвей)
операторов по вычисляемому номеру ветви.
Самые популярные системы
программирования на языке - Object Pascal, Borland
Pascal (Turbo Pascal) и TopSpeed Pascal. На основе Паскаля
была разработана одна из наиболее
популярных систем быстрой разработки
программ (Rapid Application Development, RAD) - визуальная
система программирования Воrlаnd Delphi.
Программа на Паскаль,
также как и в других языках
программирования реализует алгоритм
решения задачи. Она обьединяет
последовательность действий, выполняемых
над определенными типами данными с помощью
операций, определяемых возможностями языка.
Язык Паскаль является универсальным языком,
т.е. на нем можно писать вычислительные,
графические и системные программы,
программы по обработке больших блоков
данных(типа СУБД).
Формат программы.
Программа на Паскаль состоит из строк.
Максимальная длина строки - 127 символов.
Набор текста программы осуществляется
обычно с помощью встроенного редактора
текстов системы программирования Turbo Pascal (или
другой версии этой системы). Набирая текст
программы, программист имеет право
произвольно располагать строки на экране.
Обязательным является только порядок
следования частей программы и правильность
их записи.
Структура программы:
Program <имя>(input,output); -заголовок
Uses <имя1,имя2,..>; -список подключаемых библиотечных модулей
Label :; -раздел описания меток
Const :; - раздел описания констант
Type :; - раздел описания типов данных
Var :; - раздел описания переменных
Procedure <имя>; - описание процедур и запись их операторов
<основная часть процедуры>;
Function <имя>; - описание функций
<основная часть функции>;
Begin
<основная часть программы >
End.
Любой раздел, кроме раздела
операторов (основная часть программы),
может отсутствовать. Раздел операторов в
основной программе или подпрограмме всегда
начинается зарезервированным словом Begin,
далее следуют операторы языка, отделенные
";". Завершает раздел зарезервированное
слово End и точка ".". В Паскаль конструкция
Begin-End называется операторными скобками.
Комментарии помещаются в
фигурные скобки { }и могут размещаться в
любом месте программы.
Константы и
переменные.
Как и другие языки
программирования Паскаль интерпретирует
данные как константы или переменные. В
программе константы или переменные
определяются идентификаторами (именами), по
которым к ним можно обращаться для
получения текущих значений.
Константами называются
элементы данных, значения которых
установлены в описательной части программы
и в процессе выполнения программы не
изменяются. Для определения значения
констант служит зарезервированное слово
Const. Например,
Const
Max=1000; Str1='Иванов';
Переменные в отличие от констант могут
менять свои значения в процессе выполнения
программы. Каждая переменная или константа
принадлежат к определенному типу данных.
Тип переменных (в отличии от констант)
должен быть описан перед тем, как с
переменными будут выполняться какие-либо
действия. Например,
Var
I,j:integer;
A:array [1..10] of real;
Типы данных в языке
Паскаль .
Каждый элемент данных относится к одному из
конечного множества типов, допустимых для
конкретного языка программирования. Тип -
это множество значений, которые могут
принимать объекты программы, и
совокупность операций, допустимых над
этими значениями.
Все типы данных разделяются на две группы:
скалярные (простые) и структурированные (составные).
Простые типы данных:
| Целочисленные типы (Shortint, Integer, LongInt, Byte,
Word) данных представляют собой значения,
которые могут использоваться в
арифметических выражениях и занимать
память от 1 до 4 байт.
| Вещественные типы (Single, Real, Double, Extended, Comp)
данных представляют собой вещественные
значения, которые могут использоваться в
арифметических выражениях и занимать
память от 4 до 10 байт.(Самый большой объем
памяти - 10 байт - занимают данные
вещественного типа повышенной точности :
Extended). Паскаль допускает представление
вещественных значений в виде как с
плавающей, так и с фиксированной точкой.
| | Символьный (char) тип определяется
множеством значений кодовой таблицы ASCII.
Для переменной символьного типа
требуется 1 байт.
| | Логический тип (Boolean, ByteBool, WordBool, LongBool)
представлен двумя значениями: (истина) и (ложь).
Он широко применяется в логических
выражениях и выражениях отношения. Типы
ByteBool, WordBool, LongBool являются нововведением
Turbo Pascal 7.0, они были введены для
обеспечения совместимости создаваемых
программ в Windows.
| | Указательный тип (Pointer) - значениями
переменных и констант данного типа
являются адреса оперативной памяти,
состоящие из адреса сегмента и смещения |
| <
Пользовательские типы данных.
В Паскаль существуют типы данных,
определяемые пользователем. Это
перечислимый тип (когда непосредственно, в
разделе описания типов, заранее
записываются все значения для переменных
этого типа) и интервальный (когда задаются
границы диапазона значений для данной
переменной), указательный тип (кроме Pointer),
структурированные типы и процедурный тип.
- Перечислимый тип данных
задается непосредственно перечислением
всех значений, которые может принимать
переменная данного типа. При описании
отдельные значения указываются через
запятую, а весь список заключается в
круглые скобки. Например,
Var Season: (winter,spring,summer,autum );
Temp: (23,24,25,26);
- Интервальный тип
позволяет задавать две константы,определяющие
границы диапазона значений для каждой
переменной.Обе константы должны
принадлежать одному и тому же
стандартному типу (кроме real). Например,
Var S:1..30;
Сh:'a'..'f';
- Указательный типы - их
значениями являются адреса памяти. В
отличие от стандартного указательного
типа Pointer, пользовательский тип
определяет множество значений, которые
указывают на динамические переменные
опеределенного типа , называемого
базовым типом. Указатель на какой-либо
тип может быть описан до обьявления
самого типа:
Type PtStack=^Stack;
Stack=array[1..40] of
real;
- Процедурный тип позволяет
обьявлять переменные, которым
допускается присваивание имен процедур,
функций и методов, а ткже передавать
такие переменные и имена в качестве
параметров. Описание процедурных типов
имеет такой же синтаксис, как и
обьявление процедур и функций:
Type Tproc1=procedure (var x,y:real);
Tproc2=function (
x:real):real;
Структурированные
типы данных.
Составные типы данных определяют
упорядоченную совокупность скалярных
переменных и характеризуются типом своих
компонентов. К структурированным типам
данных в Turbo Pascal относят: тип-массив (array), тип-множество
(set), тип-запись (record), файловый тип (file),
объектный тип (object), строковый тип (string);
Строковый тип :
Строка- в общем случае это
последовательность символов. Строка
представляет собой особую форму
одномерного массива символов, которая
имеет существенное отличие. Массив
символов имеет фиксированную длину (количество
элементов), которая определяется при
описании. Строка имеет две разновидности
длины:
Общую длину строки, которая характеризует
размер памяти, выделяемый строке при
описании.
Текущую длину строки (всегда меньше или
равную общей длине), которая показывает
количество смысловых символов строки в
каждый конкретный момент времени.
Для определения данных строкового типа в
Turbo Pascal 7.0 введены стандартные типы String
и PChar.
В строках типа String>
текущая длина строки указывается в нулевом
(то есть имеющем индекс 0) элементе строки.
Максимальная текущая длина строки может
быть не более 255 символов. Например,
Const Adres='ул.Королева,2';
Type
FileName=string[150];
Var
St1:
FileName;
St2,St3:string[10];
В Паскаль существует ряд
встроенных процедур и функций для работы со
строками типа String: Delete, Str, Val, Insert, Copy,
Concat, Length, Pos, UpCase.
Тип PChar поддерживает
формат представления строк, признаком
конца строки которых служит символ с кодом 0
(нуль) и которые называются строками с
завершающим нулем, или ASCIIZ-строками.
Тип-массив (array):
Массив - это
структурированный тип данных, состоящий из
фиксированного числа элементов, имеющих
один и тот же тип. Элементами массива могут
быть данные любого типа, включая
структурированный тип. Описывается в виде:
Type Имя =array [тип
индекса] of тип
компонентов;
>При выполнении программы к
каждому элементу массива можно обратиться
используя его индекс в массиве.
Например, М=array [1..4] of integer;
- массив из четырех целых чисел.
M[1], M[2], M[3], M[4] - элементы
массива М.
Тип-множество (set):
Множество - набор
взаимосвязанных по какому-либо признаку (или
группе признаков) элементов, которые можно
рассматривать как единое целое. Элементы
множества должны принадлежать к одному и
тому же типу данных, которые называют
базовым типом множества.
Type Имя =set of "элемент1,..элементN";
Например, А=set of (3,5,7,11,13) -
множество простых чисел.>
Тип-запись (record):
Запись- тип
данных, состоящий из фиксированного числа
компонентов одного или нескольких типов.
Определение типа записи начинается
идентификатором record и заканчивается
зарезервированным словом end. Между ними
заключен список компонентов, называемых
полями, с указанием идентификаторов полей и
типа каждого поля:
Type имя = record
Например, Mash=record
имя поля1: тип компонента;
Nomer:integer;
имя поля2: тип компонента;
Marka:string[20];
:
year:integer;
end;
end;
Файловый тип (file):
Файлы классифицируются по двум признакам:
по типу (логическая структура) и по методу
доступа к элементам файла.
В Паскале существует три класса файлов по
типу - типизированные текстовые,
нетипизированные. По методу доступа они
делятся на файлы последовательного доступа
и прямого доступа.
К типизированным файлам относятся файлы
строго определенного типа (их иногда
рассматривают как последовательность
записей определенного типа).Стандартное
задание в программе такой файловой
переменной осуществляется следующим
образом:
Type FileRec=record
:
end;
var F:file of FileRec;
Текстовый файл
рассматривается как последовательность
символов, разбитая на строки. Каждая строка
завершается символом конца строки. На
практике это два символа: перевод строки
Chr(13) и возврат каретки Chr(10).
Нетипизированный файл
рассматривается в Pascal как набор символов
или байтов. Представление Char или Byte не
играет роли, а важно лишь с точки зрения
обьема занимаемого данными.
Нетипизированный файл является файлом
прямого доступа, что говорит о возможности
одновременного использования операций
чтения записи. При обьявлении
нетипизированного файла указывается
только ключевое слово file:
Var F: file;
Объектный тип (object):
Обьект - тип данных ставший основой
обьектно-ориентированного
программирования на языке Паскаль. Он похож
на запись, так как содержит данные
различных типов в качестве полей, и
отличается тем, что также содержит методы
работы с этими данными в рамках обьекта.
Методы работы с данными обьекта называются
правилами. Например,
Type
Coordinate=object
обьект с именем Coordinate
X,Y:byte;
X,Y - данные, входящие в
обьект
Procedure Init(Xinit,Yinit:byte); метод
инициализации данных
Function GetX:byte; метод
получение значения X
Function GetY:byte; метод
получение значения Y
| Для арифметических операций используют
обычные знаки +,-,*, /-деление, |
^-возведение в степень, div- целочисленное
деление, mod- остаток от деления.
| Операторы отношений: < - больше,> -
меньше,<= - больше или равно, |
>= -
меньше или равно,<> - неравно
| Логические отношения :AND (и), OR (или), NOT, XOR (логическое
исключающее или).
| | Конкатенация - '+'
(слияние двух строк)
| | Операции над
множествами: +-обьединение, - разность, *
пересечение, in- принадлежность,<=
является подмножеством, >= является
надмножеством, <> неравно. |
Операторы.
Составной оператор. Представляет
собой группу из произвольного числа
операторов, отделенных друг от друга ";" и
ограниченную операторными скобками Begin и End.
Например,
Begin
Read (B);
A:=B+0.75;
Write (A);
End;
Оператор
присваивания :
Этот оператор предписывает выполнить
выражение, заданное в его правой части, и
присвоить результат переменной, имя
которой расположено в левой части. Например,
A:=В+0.5
Оператор безусловного перехода (goto).
Применяется в случаях, когда после
выполнения некоторого оператора надо
выполнить не следующий по порядку, а другой,
отмеченный меткой. Тогда в программе, перед
оператором к которому нужно перейти
ставится один или несколько символов (метка,
которая должна быть описана в разделе
описания меток).
Процедура ввода-вывода.
Процедура чтения Read и Readln обеспечивает ввод
данных (чисел, символов, строк и т.д.) в
программу во время её работы.
Процедура записи Write и Writeln обеспечивает
вывод данных (чисел, символов, строк и т.д.)
из программы на экран, принтер или во
внешний файл.
Операторы Readln и Writeln осуществляют
соответственно ввод и вывод с пропуском
строки.
Условные операторы :
(Предназначены для изменения порядка
выполнения инструкций программы, в
соответствии с некоторым условием)
1.Оператор условия IF.
Он может принимать одну из
следующих форм:
| IF условие THEN оператор
; (неполная форма) |
Условие задаётся
переменной и её соотношением с некоторой
константой или значением выражения. Если
условие выполняется , то будет выполнен
указанный оператор.
| IF условие THEN оператор1
ELSE оператор2;
(полная форма) |
Добавление к конструкции
служебного слова ELSE позволяет
выполнить определенные действия в случае,
когда условие не выполняются.
>
2.Операторы цикла
Используется для
повторения группы операторов определенное
число раз.
<
FOR переменная цикла:=
начальное значениеТОконечное
значение DO
оператор;
Переменная цикла - всегда
целого типа, указывает сколько раз должны
повторятся операторы. Этот цикл будет
повторен фиксированное число раз, причем
первый раз с начальным значение
переменной цикла, а в последний -с конечным
её значением.
Пример, FOR I:=1 TO 3 DO I:=I+0.5
| Оператор цикла REPEAT..UNTIL
(с проверкой условия в
конце цикла). |
Применяется тогда, когда
группа операторов должна выполнятся до
тех пор, пока не выполнится некоторое
условие.
REPEAT группа
операторов UNTIL условие
;
| Оператор цикла
WHILE..DO (с проверкой
условия в начале цикла). |
>
WHILE условие DO группа
операторов;
Этот оператор выполняется
так: проверяется условие, и если оно
истинно, то выполняется оператор (или
несколько операторов).
3.Оператор выбора
case.
Позволяет сделать выбор из
произвольного числа вариантов. Для этого
используется переключатель, вычисленное
значение которого определяет какой из
операторов должен быть выполнен. Если ни
одно из значений не верно, будет выполнен
оператор следующий за служебным словом else.
case переключатель of
список1:оператор1;
список2:оператор2;
:
else оператор;
end;
Подпрограммы.
В языке Паскаль для организации
подпрограмм используются процедуры и
функции. Процедура - независимая часть
программы, предназначенная для выполнения
определенных действий. Функция аналогична
процедуре, но имеет два отличия: она
возвращает в программу некоторый результат
и может использоваться как часть выражения.
Они разделяются на встроенные (стандартные)
и пользовательские (создаваемые
программистом) процедуры и функции.
Встроенные (стандартные) процедуры и
функции являются частью языка и могут
вызываться по имени без предварительного
определения в разделе описаний программы.
Процедуры и функции пользователя
организовываются самим программистом в
соответствии с синтаксисом языка и их
предварительное описание (перед
использованием) в тексте программы
обязательно.
Процедуры:
Состоят из группы операторов, реализующих
некоторую часть задачи и вызываемых по
имени при необходимости в любом месте
программы.
Procedure <имя> {формальные
параметры};
"раздел описаний"
Begin
<основная часть процедуры-
раздел операторов >
End;
Описание процедуры
включает заголовок - <имя> и тело
процедуры -<основная часть процедуры>.
Заголовок состоит из зарезервированного
слова Procedure , идентификатора (имени)
процедуры и необязательного списка
формальных параметров, с указанием типа
каждого параметра.
Например,
Procedure Korrect; (процедура
без формальных параметров)
Procedure Sort (a:integer); (а -
формальный параметр)
Имя процедуры -
идентификатор, уникальный в пределах
конкретной программы. Тело процедуры
представляет собой блок, по структуре
аналогичный блоку обычной программы.
Раздел операторов всегда начинается
зарезервированным словом Begin, далее следуют
операторы,отделенные ";". Завершает раздел
зарезервированное слово End и точка ";".
Для обращения к процедуре
используется оператор вызова процедуры. Он
состоит из идентификатора (имени) процедуры
и списка фактических параметров,
отделенных друг от друга запятыми и
заключенных в скобки.
Имя процедуры (список фактических
параметров);
Функции:
Функция, определяемая в программе, состоит
из заголовка и тела функции. Заголовок
содержит зарезервированное слово Function,
идентификатор (имя) функции и
необязательный список формальных
параметров с указанием типа каждого
параметра а также тип возвращаемого
функцией значения:
Function имя (формальные параметры): тип
результата;
Например:
Function Prov(x,y,t:integer):integer;
Function Logic:boolean;
Имя функции - уникальный в
пределах программы идентификатор.
Возвращаемый результат может иметь любой
скалярный тип. Тело функции представляет
собой блок, по структуре аналогичный блоку
обычной программы:
Function имя (формальные
параметры):тип результата;
раздел описаний
begin
раздел операторов
end;
В разделе операторов
должен находиться по крайней мере один
оператор, присваивающий функции значение.
Если таких присваиваний несколько, то
результатом выполнения функции будет
значение последнего оператора
присваивания указанного в теле функции.
Обращение к функции
осуществляется по имени с необязательным
указанием списка аргументов. Каждый
аргумент должен соответствовать
формальным параметрам, указанным в
заголовке, и иметь тот же тип.
Примеры программ.
Данная программа проверяет
принадлежат ли два адреса одному городу и
одной улице. Используется переменная типа
запись с 4 полями: город, улица, дом, квартира.
Program test(input,output);
Type
adress=record
city:array [1..16] of char;
street:array [1..16] of char;
number:integer;
flat:integer;
end;
Var
adr1,adr2:adress;
Begin
{ввод данных}
read(adr1.city,adr1.street, adr2.city,adr2.street);
if (adr1.city=adr2.city) and (adr1.street=adr2.street) then
write('город и улица
совпадают');
else('город и улица
несовпадают');
End.
2. Пример программы ,
в которой вычисляется
наименьшее общее кратное двух чисел А и В.
Главная программа описывает массив чисел С,
вводит исходные данные ,затем обращается к
функции для вычисления НОК(наименьшего
общего кратного). Которая вычисляет нужное
значение используя формулу:
НОК(А,В)=A*B/ HOD(A,B)
где, обращается к другой
функции вычисления НОД (наибольшего общего
делителя).
Program test2(input,output);
Const N = 5;
Var
С: array[1..5]
of integer;
A,B:integer;
function HOК (A, В:integer):integer;
begin
HOK:=A*B/ HOD(A,B);
end;
function НОD(А, В:integer):integer;
var
X,Y:integer;
begin
X:= A; Y: = В;
1:IF X = Y THEN HOD:=X;
IF X > Y THEN begin
X:= X - Y;goto 1;
end;
IF Y > X THEN begin
Y:= Y - X;goto 1;
end;
end;
Begin
FOR i= 1 ТО N READ (C[i]);
A:= С ([l])
FOR i = 1 TO N-1 begin B:=С[i + 1];
A:= HOK(A,B);
end;
writeln ("HOK="; A);
end.
|