
- •Конспект лекций по информатике
- •Организация данных в эвм и основы программирования
- •1. Основные понятия языка программирования паскаль
- •1.1. Структурное программирование
- •1.2. Основные символы языка
- •1.3. Элементы языка
- •1.4. Интегрированная среда turbo pascal
- •1.5. Структура программы в turbo pascal
- •1.6. Определение типов
- •1.7. Операторы в программе
- •1.7.1. Операторные скобки
- •1.7.2. Операторы ввода
- •1.7.3. Оператор присваивания
- •1.7.4. Условный оператор
- •1.7.5. Пример простой программы
- •1.7.6. Оперетор безусловного перехода
- •1.8. Организация циклов
- •1.8.1. Использование операторов условного и безусловного перехода
- •1.8.2. Цикл с параметром
- •1.8.3. Цикл с предусловием - цикл while
- •1.8.4. Цикл с постусловием - цикл repeat
- •1.9. Оператор выбора варианта
- •1.10. Расположение операторов в программе
- •1.11. Концепция типов данных
- •2. Стандартные простые типы
- •2.1 Целый тип
- •2.1.1. Операции над данными целого типа:
- •2.2. Действительный тип
- •2.2.1. Операции над данными действительного типа:
- •2.3. Логический тип
- •Var p, q, r : Boolean;
- •2.3.1. Алгебра логики в Паскале
- •2.3.2. Законы алгебры логики в Паскале
- •2.4. Символьный тип
- •2.4.1. Символьные строковые константы
- •3. Нестандартные простые типы (определяемые пользователем)
- •3.1. Перечисляемый тип
- •3.2. Ограниченный тип (диапазон, интервал)
- •4. Процедуры и функции
- •4.1. Описание процедур
- •4.2. Стандартные процедуры
- •4.3. Описание функций
- •4.4. Стандартные функции
- •4.5. Итерация и рекурсия
- •4.6. Побочный эффект рекурсии
- •4.7. Предварительное описание (ссылки вперед)
- •5. Регулярные типы
- •5.1. Одномерный массив, или переменные с индексами
- •Алгоритмы сортировки массивов
- •1. Метод пузырька (метод обменной сортировки с выбором)
- •2. Сортировка выбором
- •3. Метод Шелла
- •4. Метод Хoopа
- •5.2. Многомерные массивы
- •5.3. Упакованные массивы
- •5.4. Строки
- •6. Множественные типы
- •6.1. Свойства множеств
- •6.2. Операции над множествами
- •7. Комбинированные типы
- •7.1. Описание записей и действия с ними
- •7.2. Оператор присоединения.
- •7.3. Записи с вариантами
- •8. Типизированная константа
- •8.1. Простая типизированная константа
- •8.2. Структурированная (сложная) типизированная константа
- •8.2.1. Типизированная константа массива
- •8.2.2. Типизированная константа записи
- •8.2.3. Типизированная константа множества.
- •9. Преобразование типов
- •9.1. Неявные преобразования типов
- •9.2. Использование стандартных функций для преобразования
- •9.3. Явные преобразования типов
- •9.5. Совместимость типов
- •10. Файловые типы
- •10.1. Определение файлового типа
- •10.2. Структура файла
- •10.3. Имя файла
- •10.4. Описание файлового типа
- •10.5. Файловая переменная
- •10.6. Операции над файлами
- •10.7. Типизированные файлы
- •10.8. Текстовые файлы
- •10.9. Нетипизированные файлы
- •10.10. Стандартные файлы inpuTиOutput
8.2.3. Типизированная константа множества.
Она образуется из одной или нескольких спецификаций элементов, разделенных запятыми и заключенных в квадратные скобки.
Спецификацией элемента может быть константа или выражение идентификатора. Оно состоит из двух констант, разделенных двумя точками.
Пример:
TypePropisnoy=Setof‘A’..’Z’;
Strochny = Set of ‘a’..’z’;
Const PropBukw : Propis =[‘A’..’Z’];
StrochnBukw : Stroch =[‘a’, ’e’, ‘l’, ‘c’, ‘u’];
Simvol : Set of char = [‘’..’/’, ‘:’..’?’, ‘[‘..’^’, ‘{‘..’~’];
9. Преобразование типов
Тип переменной позволяет не только установить длину ее внутреннего представления, но и контролировать те действия, которые осуществляются над ней в программе. Контроль за использованием переменных еще на этапе компиляции программы – важное преимущество Турбо Паскаля перед другими языками программирования, в которых допускается автоматическое преобразование типов. Фактически именно та вольность, с какой, например, PL/1 преобразует по умолчанию различные типы данных, послужила объектом наиболее сильной его критики.
9.1. Неявные преобразования типов
В Паскале почти невозможны неявные (автоматические) преобразования типов. Исключение сделано только в отношении констант и переменных типа Integer, которые разрешается использовать в выражениях типаReal.
Пример:
Var X : Integer;
Y : Real;
Y:=X+2 - правильно, хотя справа от знака присваивания стоит целочисленное выражение, а слева – вещественная переменная. Компилятор сделает необходимые преобразования автоматически.
X=2.0 – неверно, так как автоматическое преобразование типаRealв типIntegerв Паскале запрещено.
9.2. Использование стандартных функций для преобразования
Разумеется, запрет на автоматическое преобразование типов еще не означает, что в языке программирования Паскаль нет средства преобразования данных. Эти средства есть, но их нужно использовать явно. Для преобразования данных существуют встроенные функции, которые получают в качестве параметра значения одного типа, а возвращают результат в виде значения другого типа.
В частности, для преобразования RealвIntegerимеются две встроенные функции:
Round округляет Realдо ближайшего целого,
Trung усекает Realпутем отбрасывания дробной части.
X:=Y/X – нельзя,
X:=round(Y/X) – можно.
OrdпреобразуетCharвInteger,
ChrпреобразуетIntegerвChar.
Пример. Программа выводит на экран символ и соответствующий ему внутренний код.
Var simvol : char;
Begin readln (simvol);
Writeln (simvol, ‘=’, ord(simvol));
End.
9.3. Явные преобразования типов
Наличие двух операций деления есть еще одно появление основополагающего принципа языка программирования Паскаль: программист должен явно подтверждать компилятору, что он готов к возможным последствиям преобразования типов. Если, например, в Фортране используется выражение 1/2, то результат этого действия будет зависеть от того, переменной какого типа он будет присвоен:
если X– целое,
Y- действительное,
то фортрановское присваивание дает:
X= 1/20
Y= 1/20.5
В языке программирования Паскаль такой двусмысленности нет: выражение 1/2 всегда имеет значение 0.5 и поэтому оператор X:=1/2 для целого Х просто недопустим. В то же время
VarY:Real;
--------------
Y: = 1div2;
самим фактом использования операции целочисленного деления divпрограммист свидетельствует, что он сознательно отбрасывает дробную часть.
Еще две функции для целого типа:
Dec(X[,N]) – уменьшение значенияXна N; еслиNне задан, то на 1,
Inc (X[,N]) – увеличение.
Пример: А,В, С – типаinteger.
А = В andС < 0 где ошибка?
Надо (А = В) and (С < 0) так как логические операции имеют более высокий приоритет, чем операции отношения:
not
* / div mod and chr chi
+ - or xor
= <> < > <= >= in.