Курсовой проект по программированию
Составила: Ирина Комарова IT2V
Таллинн 2004 г.
Введение
Язык программирования Pascal был разработан в 1968-1971 гг. Никлаусом Виртом в Цюрихском Институте информатики (Швейцария), и назван вчесть Блеза Паскаля – выдающегося математика, философа и физика 17-го века. Первоначальная цель разработки языка диктовалась необходимостью создания инструмента "для обучения программированию как систематической дисциплине". Однако очень скоро обнаружилась чрезвычайная эффективность языка Pascal в самых разнообразных приложениях, от решения небольших задач численного характера до разработки сложных программных систем - компиляторов, баз данных, операционных систем и т.п. К настоящему времени Pascal принадлежит к группе наиболее распространенных и популярных в мире языков программирования:
• существуют многочисленные реализации языка практически для всех машинных архитектур;
• разработаны десятки диалектов и проблемно-ориентированных расширений языка Pascal;
• обучение программированию и научно-технические публикации в значительной степени базируются на этом языке.
Описание типов данных
Достоинством языка Паскаль является возможность использования широкого набора разных типов данных. Тип данных определяет возможные значения констант, переменных, функций, выражений и операций, которые могут выполняться над ними.
Типы данных подразделяются на простые и сложные. Простые типы делятся на стандартные (предопределенные) типы и типы определяемые пользователем (пользовательские типы).
Имена стандартных типов являются идентификаторами и действуют в любой точке программы. Они описаны в стандартном модуле System. Так же, как и другие идентификаторы, имена стандартных типов могут быть переопределены в программе.
Однако остается возможность обращения к их первоначальному смыслу с помощью квалифицируемого идентификатора с указанием имени модуля System. Например: System.Integer, System.Real.
К стандартным типам относятся:
• группа целых типов (Shortint, Integer, Longint, Byte, Word);
• группа вещественных типов (Single, Real, Double, Extended, Comp);
• группа логических (булевских) типов (Boolean, ByteBool, WordBool, LongBool);
• символьный тип (Char);
• строковый тип (String, Pchar);
• указательный тип (Pointer);
• текстовый тип (Text).
Символьный тип, целые и булевские типы относят к, так называемым, порядковым типам.
Порядковые типы характеризуются следующими свойствами:
1. Множество допустимых значений любого порядкового типа представляет собой упорядоченную последовательность , каждый элемент которой имеет свой порядковый номер. Порядковый номер представляется целым числом. Первое значение любого порядкового типа имеет номер 0, следующий номер 1 и т.д. Исключение составляют порядковые типы Integer, Shortint, Longint, где порядковым номером значений этих типов является само значение.
2. К любому значению порядкового типа можно применять функции возвращающие номер, предыдущее или последующее значение данного типа.
Пользовательские типы – дополнительные абстрактные типы, характеристики которых программист может определять самостоятельно.
К пользовательским типам относятся:
• перечисляемый тип;
• интервальный тип;
• указательные типы (кроме стандартного типа Pointer);
• структурированные типы;
• процедурный тип.
Перечисляемый и интервальный типы являются порядковыми.
Структура подраздела описания типов выглядит следующим образом:
Форма записи:
type = ;
Пример:
type
vec = integer;
bool = boolean;
Стандартные функции языка Паскаль
Для выполнения часто встречающихся операций и преобразований данных, относящихся к разным типам, существуют заранее определенные функции, которые называются СТАНДАРТНЫМИ. Для обращения к функции необходимо задать ее имя и в скобках список аргументов (параметров).
Прежде чем перейдем к стандартным функциям, сначала ознакомимся с правилами их использования:
1. Имя функции записывается прописными буквами латинского алфавита.
2. Аргумент функции записывается в круглых скобках после имени функции.
3. Аргументом функции может быть константа, переменная, или арифметическое выражение того же типа
Теперь рассмотрим некоторые стандартные функции:
Функция Действие Тип Х Тип возвращаемого значения
SQRT(X) вычисляет квадратный корень из аргумента Х действительный действительный
SQR(X) вычисляет квадрат аргумента Х целый действи-тельный целый действи-тельный
RANDOM(X) возвращает случайное число, перед вызовом функции желательно использовать в программе оператор RANDOMIZE включающей случайную инициализацию генератора случайных чисел целый, положительный соответствует типу переменной принимающей значение
SIN(X) вычисляет синус аргумента Х действительный действительный
COS(X) вычисляет косинус аргумента Х действительный действительный
ABS(X) вычисляет абсолютное значение (модуль) аргумента Х целый действи-тельный целый действи-тельный
ODD(X) проверяет Х на четность длинное целое логический
ORD(X) определяет порядковый номер символа Х любой тип кроме действительного длинное целое
CHR(X) определяет символ стоящий по порядковому номеру Х byte символьный
PRED(X) определяет предыдущее значение по отношению к Х любой тип кроме действительного тот же тип
SUCC(X) определяет последующее значение по отношению к Х любой тип кроме действительного тот же тип
ARCTAN(X) вычисляет арктангенс аргумента Х действительный действительный
EXP(X) вычисляет экспоненту от аргумента Х действительный действительный
LN(X) вычисляет натуральный логарифм от Х действительный действительный
TRUNC(X) находит целую часть от Х действительный длинное целое
ROUND(X) округляет Х в сторону ближайшего целого действительный длинное целое
INT(X) возвращает целую часть аргумента Х действительный действительный
FRAC(X) возвращает дробную часть аргумента Х действительный действительный
DEC(X,N) уменьшает значение переменной Х на заданное число N любой тип кроме действительного тот же тип
INC(X,N) увеличивает значение переменной Х на заданное число N любой тип кроме действительного тот же тип
PI возвращает значение числа - действительный
Примеры:
1. ORD(‘R’)=82; ORD(5)=5;
2. CHR(68)=’D’; можно вызывать эту функцию через #, если аргумент функции константа (#68='D');
3. PRED(‘N’)=’M’; PRED(87)=86;
4. SUCC(‘S’)=’T’; SUCC(87)=88;
5. PI=3.141592653897932385;
6. ROUND(3.1415)=3;
7. LN(1)=0.000;
8. SQRT(36)=6.000;
9. SIN(90*pi/180)=1.000.
Замечание:
В тригонометрических функциях аргумент должен быть задан только в радианной мере угла.
Совместимость и преобразование типов данных.
Турбо-Паскаль - типизированный язык, следовательно, все применяемые операции определены только над операндами совместимых типов.
Два типа считаются совместимыми, если
• оба они есть один и тотже тип.
• один тип есть тип-диапазон второго типа.
• оба они являются типами-диапазонами одного и того же базового типа.
• один тип есть строка, а другой - строка или символ.
• оба они есть процедурные типы с одинаковым типом результата (для типа-функции), одинаковым количеством параметров и одинаковым типом взаимно соответствующих параметров.
Когда в тех или иных операциях или операторах присутствуют данные, относящиеся к различным типам, возникает вопрос о совместимости типов. В связи с этим говорят об идентичности типов, совместимости типов и совместимости типов для присваивания. Когда возникают проблемы с соответствием типов данных, можно осуществить преобразование тех или иных типов.
Идентичность типов.
Идентичность типов требуется от формальных параметров процедур и функций и соответствующих им фактических параметров во время вызова.
Два типа Т1 и Т2 идентичны в следующих случаях:
T1 и Т2 – один и тот же идентификатор типа (integer; real и т.д. и т.п.);
Один тип объявляется эквивалентным другому.
type
T1 = boolean;
T2 = T1;
T3 = boolean;
M1 = array [1..5] of integer;
M2 = array [1..5] of integer;
var
V1, V2 = array [1..10] of integer;
Так, типы Т1, Т2, Т3 и boolean – идентичны, а М1 и М2 – не идентичные типы, но тем не менее, переменные V1 и V2 – переменные идентичных типов.
Совместимость типов.
Совместимость типов требуется в выражениях (в том числе и в операциях отношения).
Два типа Т1 и Т2 идентичны в следующих случаях:
Т1 и Т2 – один и тот же тип или они идентичны;
Т1 и Т2 – вещественные типы;
Т1 и Т2 – целые типы;
Один тип – вещественный, а другой – целый;
Один тип представляет собой тип – диапазон другого;
Оба типа являются типами – диапазонами какого-то одного типа;
Оба типа являются типами – множествами с совместимыми базовыми типами;
Один тип является строкой, а другой – символом или строкой.
Совместимость для присваивания.
Эта совместимость необходима, когда значение какого-то выражения присваивается переменной, типизированной константе или функции. Если значение объекта типа Т2 присваивается объекту типа Т1, то это возможно в следующих случаях:
Т1 и Т2 – идентичные типы и не являются файловыми типами или структурированными типами, содержащими компоненты файлового типа на любом уровне структурированности;
Т1 и Т2 – совместимые порядковые типы и значение типа Т2 находится в границах возможных значений объекта типа Т1;
Т1 и Т2 – вещественные типы и значение типа Т2 находится в границах возможных значений объекта типа Т1;
Т1 – вещественный тип, а Т2 – целый;
Т1 и Т2 – строки;
Т1 – строка, а Т2 – символ;
Т1 и Т2 – совместимые типы – множества и все компоненты значения типа Т2 находятся в множестве Т1.
Преобразование типов в Паскале может быть явным и неявным. При явном преобразовании типов используются вызовы специальных функций Ord, Trunc, Round, Chr, Ptr (преобразует четырёхбайтный целочисленный аргумент к типу-указателю), аргументы которых принадлежат одному типу, а результат другому.
Преобразование может достигаться применением идентификатора (имени) стандартного типа, или определённого пользователем типа, в качестве идентификатора функции преобразования к выражению преобразуемого типа (так называемое автоопределённое преобразование типов). Например, допустимы следующие вызовы функций: