- •Первый семестр
- •Дальнейшее обучение программированию (по семестрам)
- •Рекомендуемая литература
- •I семестр Лекция 1
- •1.1 Алгоритм. Понятие алгоритма
- •1.2 Алгоритмические языки
- •1.3 Запись алгоритма
- •1.4 Элементарные структуры
- •Лекция 2
- •2.1. Договоренности о синтаксисе
- •2.2. Текст программы на Turbo Pascal
- •2.3 Элементарные операции
- •2.4. Таблица перевода для структур
- •Алгоритм:
- •Текст программы
- •2.5 Практические рекомендации по решению задач
- •3.2. Частные случаи для структуры цикла
- •3.3 Массивы
- •Лекция 4
- •4.0 Требования к защите бальных задач
- •4.1 Начало систематического изложения Turbo Pascal (tp)
- •Лекция 5
- •5.1 Простые типы данных
- •5.1.1 Перечислимый тип
- •5.1.2 Интервальный тип
- •5.1.3 Целочисленные типы
- •5.1.4 Данные типа char
- •5.1.6 Вещественные типы данных
- •Лекция 6
- •6.1 Структура программы на Паскале
- •6.2 Процедуры для стандартного ввода/вывода
- •6.3 Массивы. Регулярный тип
- •6.4 Для работы с массивами – шаблоны
- •Лекция 7
- •7.1 Строки
- •7.2 Записи
- •Лекция 8
- •8.1 Множества
- •8.2 Файлы
- •8.3 Процедуры открытия и закрытия файлов:
- •8.4 Процедуры ввода/вывода:
- •Лекция 9
- •9.1 Текстовые файлы.
- •9.2 Проект программы:
- •9.3 Простейший сканер.
- •9.4 Копия любого файла
- •Лекция 10
- •10.1 Процедуры и функции
- •10.2 Передача параметров в процедуры и функции
- •10.3 Глобальные переменные. Перекрытие (экранирование)
- •10.4 Процедурные типы
- •10.6 Рекурсия. Косвенная рекурсия
- •Лекция 11
- •11.1 Статическая и динамическая память программы
- •11.2 Динамическая память (куча, heap) с точки зрения тр
- •11.3 Операции над указателями
- •11.4 Пояснения с помощью картинки
- •11.5 Динамическая цепочка
- •Лекция 12
- •12.1 Цикл жизни программы. Проект программы
- •12.2 Характеристики качества программ
- •12.3 Программное окружение
- •12.4 Модули
- •Пример Печать данного перечислимого типа. Вот простой пример модуля (пусть имя файла с представленным ниже текстом My_Unit.Pas):
- •12.5 Обзор модуля System
- •12.5.1 Процедуры и функции, обслуживающие файловую систему
- •Лекция 13
- •13.1 Модуль crt - средства работы с экраном, клавиатурой и др.
- •13.2 Обзор примеров программ
- •13.3 Процедуры и функции модуля Crt
- •Лекция 14
- •14.1 Модуль dos - работа с файловой системой.
- •14.1.1 Прерывания.
- •14.1.2 Процедуры и функции модуля Dos
- •Лекция 15
- •15.1 Модуль Graph.
- •15.1.1 Общие сведения:
Лекция 5
5.1 Простые типы данных
Элементы любого простого типа данных представляют собой упорядоченное множество. Следовательно, элементы простого типа могут быть связаны отношениями
=, <>, >, >=, <=, <.
Отношение между элементами простого типа является булевской величиной (относится к типу BOOLEAN).
Все простые типы данных, кроме вещественных, относятся к ординальным типам данных.
Для ординальных типов данных в языке TP определены операции, которые реализованы в функциях и процедурах:
PRED (predecessor -предшествующий),
SUCC (succeedent – последующий),
ORD (ordinal – порядковое числительное),
Dec (decrease – уменьшать),
Inc (increase – увеличивать),
SIZEOF (size of … - размер чего-либо)
Функции PRED и SUCC получают в качестве аргумента значение ординального типа и возвращают предыдущий или последующий элементы этого типа. Считается ошибкой применение функции PRED к первому элементу, а функции SUCC к последнему элементу множества значений данного ординального типа. Функция ORD возвращает порядковый номеp элемента данного ординального типа, пеpвый элемент имеет номер 0, втоpой - 1 и т.д. Исключение представляют данные целого типа, поскольку ORD с целочисленным аргументом возвращает сам аргумент. Функцию ORD можно считать функцией пpеобpазования типа, поскольку для любого ординального аргумента результат будет целочисленный.
Процедуры Dec (или Inc) позволяют увеличить (или уменьшить) аргумент на заданную величину. Например функция Dec(x,n) (или Inc (x,n)) увеличивает (или уменьшает) значение ординальной переменной x на n значений. Если параметр n опущен, то увеличение (уменьшение) происходит на 1.
Для любого типа данных (в том числе и для простого) определена функция SIZEOF(X), которая возвращает размер памяти под аргумент X в байтах. В этой функции в качестве аргумента можно использовать имя константы, имя переменной или типа данных.
5.1.1 Перечислимый тип
Перечислимый ординальный тип описывается прямым перечислением константных значений этого типа в скобках через запятую. В качестве константных значений используются идентификаторы. Например:
type week_day=(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);
На множестве значений перечислимого типа определен естественный порядок Monday<Tuesday<Wednesday<…<Sunday. Если х и у – переменные var x,y:week_day; то можно переменным х и у присвоить значения, например: х:=Wednesday; y:=SUCC(x); применение функции ORD(Monday) – дает значение 0 целого типа, ORD(x) – 2 , ORD(y) – 3 ;
5.1.2 Интервальный тип
Интервальный ординальный тип (или тип – диапазон) является подмножеством последовательных величин ранее определенного (или предопределенного) перечислимого или стандартного ординального типа (базового типа).
Если тип week_day ранее определен, мы можем создать новый тип, например:
TYPE work_day=Monday..Friday;
На интервальном типе данных определены те же операции, что и на базовом. Однако программист должен гарантировать корректность операций на шаге выполнения. Если var D:work_day, то на шаге выполнения программы фрагмент D:=Friday; D:=SUCC(D) приведет к ошибке, поскольку для интервального типа work_day значение Friday является последним и не имеет последующего.
program datas;
type
week_day=(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);
dat=1..31;
month=(January,Fabruary,March,April,May,June,July,
August,September,October,November,December);
year=1900..2100;
attr_of_day=record
w_d:week_day;
d:dat;
m:month;
y:year
end;
var
today:attr_of_day;
kol:integer;
function pred_week_day(w:week_day):week_day;
begin
if w=Monday then pred_week_day:=Sunday else pred_week_day:=pred(w)
end;
function pred_month(m:month):month;
begin
if m=January then pred_month:=December else pred_month:=pred(m)
end;
procedure pred_dat(var t:attr_of_day);
begin
if t.d=1 then
begin
t.m:=pred_month(t.m);
if t.m=December then t.y:=t.y-1;
case t.m of
January,March,May,July,August,October,December:t.d:=31;
Fabruary:if (t.y mod 4)=0 then t.d:=29 else t.d:=28;
April,June,September,November:t.d:=30
end
end else t.d:=t.d-1;
t.w_d:=pred_week_day(today.w_d);
end;
begin
today.w_d:=Monday;
today.d:=2;
today.m:=October;
today.y:=2006;
repeat
pred_dat(today);
if (today.y<=2000) and (today.w_d=Monday) and (today.d=13)
then kol:=kol+1;
until (today.y=1901) and (today.m=January) and (today.d=1);
writeln('Kol= ',kol:4)
end.
