
- •Часть 1
- •1. With elem 50
- •2.1. Если поступившая запись предшествует корневой, идти в левое 98
- •2.2. Иначе – в правое поддерево. 98
- •Введение Основные этапы решения задач на эвм
- •Языки программирования
- •Трансляторы
- •1. Общие сведения о языке паскаль
- •1.1. Алфавит языка. Идентификаторы и зарезервированные слова
- •2. Данные в паскале. Простые типы данных
- •2.1. Целочисленный тип
- •2.2. Вещественный тип
- •2.3. Логический тип
- •2.4. Символьный тип
- •2.5. Перечисляемый тип
- •Var m1, m2: metall;
- •2.6. Ограниченный (диапазонный) тип данных
- •Над значениями ограниченного типа допустимы те же операции, что и над значениями базового типа, используемыми при задании в разделе определения типов. Если, к примеру, задано определение:
- •Var y:bukva;
- •3. Операции и выражения
- •2.1. Целочисленный тип
- •3.2. Арифметические выражения и операции
- •3.3. Логические операции и выражения
- •3.4. Операции отношения
- •3.5. Стандартные функции
- •3.6. Приоритеты операций
- •4. Структура программы
- •4.1. Раздел определения констант
- •4.2. Раздел определения типов
- •4.3. Раздел описания переменных
- •V: boolen;
- •4.4. Раздел описания процедур и функций
- •4.5. Раздел операторов
- •4.6. Директивы компилятора и управляющие символы
- •5. Операторы языка паскаль
- •5.1. Оператор присваивания
- •5.2. Оператор вывода информации
- •5.3. Оператор ввода информации
- •5.4. Составной оператор
- •5.5. Условный оператор
- •5.6. Оператор варианта case
- •5.7. Операторы цикла
- •5.7.1. Оператор цикла по счетчику (цикл с параметром )
- •Иденти-фикатор перемен-ной
- •I,n:integer; {I -пар-р цикла, n - его кон.Занч.}
- •X,s,p;integer;
- •5.7.2. Оператор цикла с предусловием
- •Пример составления таблицы переменных
- •Var a,Summa:real;
- •Inc (Summa, a);
- •5.7.3. Оператор цикла с постусловием
- •X,Summa:real;
- •6. Структурированные типы данных
- •6.1. Массивы
- •I,ne:integer;
- •6.1.1. Сортировка массивов
- •Vr:char;
- •Vr : char;
- •6.2. Строки
- •6.3. Множества
- •I : byte;
- •6.4. Записи
- •With elem
- •7. Типизированные константы
- •7.1. Типизированные константы скалярных типов
- •7.2. Типизированные константы - массивы и строки
- •7.3. Типизированные константы – множества
- •Var a: hvor;
- •I, j, k, simp: byte;
- •7.4. Типизированные константы – записи
- •8. Файлы
- •8.1. Типизированные файлы
- •8.2. Текстовые файлы
- •Var f : text;
- •9. Подпрограммы
- •9.1. Процедуры и функции
- •9.2. Процедуры и функции пользователя
- •Var p: real;
- •Var p: real;
- •9.3. Параметры подпрограмм
- •Var X: real; m: integer;
- •Var I : integer;
- •10. Рекурсии
- •10.1. Рекурсивные алгоритмы и определения
- •10.2. Рекурсивные процедуры и функции
- •Var f : longint ;
- •Var a, y, z : real;
- •10.3. Виды рекурсивных процедур
- •If условие
- •If условие
- •If условие then Recur ; then begin
- •Var k : integer;
- •Var c : char;
- •Var c : char;
- •11. Графика в паскале
- •11.1. Основы работы в графическом режиме
- •11.1.1. Аппаратная и программная поддержка графики
- •11.1.2. Запуск графической системы
- •Var Driver, Mode: integer;
- •Init Graph (Driver, Mode, Path);
- •11.1.3. Обработка ошибок
- •11.1.4. Закрытие видеорежима
- •11.2. Система координат дисплея
- •11.3. Экран и окно
- •11.4. Установка цвета, заполнения и палитры
- •11.5. Построение простейших геометрических образов
- •11.6. Работа с текстом OutText (X,y:integer; txt:string) – вывести строку txt с текущего положения указателя.
- •11.7. Вывод числовых значений
- •12. Программные модули
- •12.1. Структура программного модуля
- •Interface –интерфейсные раздел («видимая» часть модуля)
- •Implementation – раздел реализации («черный ящик»)
- •Interface
- •Var X:integer;
- •Implementation
- •Interface
- •X: integer;
- •Implementation
- •12.3. Ссылки на модули
- •Unit hlp _ sr;
- •Xa, ya, xb, yb, xc, yc: integer;
- •13. Динамическая память
- •Var a1: array[1..300,1..300] of integer.
- •13.1. Адресация памяти
- •13.2. Указатели
- •13.2.1. Операции с указателями
- •13.2.2. Нетипизированные указатели
- •X: integer;
- •13.2.3. Типизированные указатели
- •13.3. Создание и уничтожение динамических переменных
- •X: real;
- •13.4. Администратор кучи
- •Heapend содержит адрес конца кучи
- •13.5. Примеры использования указателей
- •Объявление
- •Var Pr:preco;
- •14. Использование указателей для организации связанных динамических структур
- •14.1. Списки
- •14.1.1. Алгоритмы работы со списками
- •14.2. Организация стека в динамической памяти
- •Var p, st :pstack; {st - указатель на вершину стека}
- •I: integer;
- •14.3. Очереди
- •14.4. Деревья
- •14.4.1. Организация деревьев в динамической памяти
- •14.4.2. Построение полного двоичного дерева
- •I,j :I nteger; I - значение инф. Поля очередной
- •Var p,h:pstack;
- •Inc(I); {создаем новый узел – вершину}
- •Inc(j); {переместим указатель t и переход
- •14.4.3. Алгоритмы работы с двоичными упорядоченными деревьями (деревьями поиска)
- •14.4.4. Рекурсивные алгоритмы работы с двоичными деревьями
- •I, X : integer;
- •Литература
- •Часть 1. Язык программирования Паскаль
МПС РОССИИ
Государственное образовательное учреждение
высшего профессионального образования
«Ростовский государственный университет путей сообщения
Министерства путей сообщения Российской Федерации»
(РГУПС)
___________________________________________________________________
Г.В. Козлов, В.Н. Смоляков
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ
Учебное пособие
Часть 1
ЯЗЫК ПРОГРАММИРОВАНИЯ ПАСКАЛЬ
Утверждено
методическим советом университета
Ростов-на-Дону
2003
УДК 681.3.06
Козлов Г.В., Смоляков В.Н.
Программирование на языке высокого уровня: Учебное пособие Ч. 1. Язык программирования Паскаль / Под общ. ред. Е.М. Ульяницкого. Ростов н/Д: Рост. гос. ун-т путей сообщения, 2003. 95 с.
Изложены сведения об основных конструкциях языка высокого уровня Паскаль, а также об особенностях программирования и разработки Паскаль-программ. Теоретический материал иллюстрируется большим числом примеров.
Пособие предназначено для студентов специальностей 220100 «Вычислительные машины, комплексы, системы и сети» и 071900 «Информационные системы в технике и технологиях», изучающих дисциплины «Технология программирования» и «Программирование на языке высокого уровня», а также может быть использовано студентами всех специальностей университета для самостоятельного изучения языка Паскаль и освоения основных приемов программирования на нем.
Табл. 7. Ил. 24. Библиогр.: 6 назв.
Рецензенты: д-р техн. наук, проф. Н.А. Целигоров (ВГАВТ);
канд. техн. наук, доц. В.Н. Семенов (РГУПС)
© Ростовский государственный университет
путей сообщения, 2003
Оглавление
ВВЕДЕНИЕ 11
Пример графического изображения алгоритма 13
Свойства алгоритма. При составлении и записи алгоритма необходимо обеспечить, чтобы он обладал рядом свойств. 14
Языки программирования 15
Трансляторы 16
1. ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ ПАСКАЛЬ 17
1.1. Алфавит языка. Идентификаторы и зарезервированные слова 17
2. ДАННЫЕ В ПАСКАЛЕ. ПРОСТЫЕ ТИПЫ ДАННЫХ 18
2.1. Целочисленный тип 18
Рис. 2.1. Структура типов данных языка Паскаль 19
Таблица 2.1 19
2.2. Вещественный тип 19
Таблица 2.2 19
2.3. Логический тип 20
2.4. Символьный тип 20
2.5. Перечисляемый тип 20
operators=(plus, minus, divide); 21
sim=(a, c, d, e); 21
Var m1, m2: metall; 21
Type Boolean = (False, True); 21
2.6. Ограниченный (диапазонный) тип данных 21
TYPE <имя типа>=<нижняя граница>..<верхняя граница>; 21
TYPE MONTH=(JAN,FEB,MAR,APR,MAY,JUN,JUL, 21
AUG,SEP,OCT,NOV,DEC); {перечисляемый тип} 21
TYPE BUKVA = ’A’.. ’Z’; 22
VAR Y:BUKVA; 22
3. ОПЕРАЦИИ И ВЫРАЖЕНИЯ 22
2.1. Целочисленный тип 22
3.2. Арифметические выражения и операции 22
Таблица 3.1 23
3.3. Логические операции и выражения 23
23
Таблица 3.2 24
3.4. Операции отношения 24
3.5. Стандартные функции 24
3.6. Приоритеты операций 26
4. СТРУКТУРА ПРОГРАММЫ 26
PROGRAM STUD(INPUT, OUTPUT); 26
PROGRAM LAB1(INPUT, OUTPUT); 26
PROGRAM RASCHET; 26
4.1. Раздел определения констант 27
4.2. Раздел определения типов 27
TYPE 27
NN=INTEGER; 27
VECTOR=ARRAY[1..10] OF REAL; 27
COLOR=(RED, YELLOW, GREEN, BLUE); 27
4.3. Раздел описания переменных 27
VAR 27
A, B, C: INTEGER; 27
D: REAL; 27
V: BOOLEN; 27
F: VECTOR; 27
4.4. Раздел описания процедур и функций 28
В нем размещаются процедуры и функции пользователя (см. гл. 9). 28
4.5. Раздел операторов 28
PROGRAM PRIM1 (INPUT, OUTPUT); {заголовок программы} 28
END; 28
WRITELN(‘ N=’, N, ‘ N!=’, Fact) 28
4.6. Директивы компилятора и управляющие символы 28
5. ОПЕРАТОРЫ ЯЗЫКА ПАСКАЛЬ 29
5.1. Оператор присваивания 29
KOR:=2; 29
RESULT:=SIN(A)+2; 29
5.2. Оператор вывода информации 30
WRITE (V1, V2,...,VN); 30
WRITE(VAR1: P: Q); 30
WRITE(V1: P); 30
5.3. Оператор ввода информации 31
READ (VAR1, VAR2, ... , VARN); 31
PROGRAM PRIM5; 31
VAR 31
A,B,S:REAL; {A, B – стороны, S – площадь} 31
S:= A*B; 31
END. 31
5.4. Составной оператор 31
BEGIN 32
I:= 8; 32
C:=16; 32
WRITELN(I*C:10) 32
END; 32
5.5. Условный оператор 32
Рис.5.1. Синтаксическая диаграмма условного оператора 32
THEN C:=D 32
ELSE C:=8; 32
IF R 32
THEN C:=10; {R имеет тип BOOLEAN} 32
PROGRAM PRIM6; 33
VAR 33
A,B,C,D,X1,X2:REAL; 33
WRITELN(’A=’, A, ’ B=’, B, ’ C=’, C); 33
D:=SQRT(SQR(B)-4*A*C); 33
X1:=(-B-D)/(2*A); X2:=(-B+D)/(2*A); 33
END 33
END. 33
5.6. Оператор варианта CASE 33
END; 33
PROGRAM PRIM7; 33
VAR 33
DEN:INTEGER; 33
CASE DEN OF 34
END 34
5.7. Операторы цикла 34
5.7.1. Оператор цикла по счетчику (цикл с параметром ) 34
Рис. 5.2. Синтаксическая диаграмма оператора цикла с параметром 34
Порядок выполнения цикла for: 35
П р и м е р 1. Вычислить n! (1* 2 * 3 * 4 … * n). 35
5.7.2. Оператор цикла с предусловием 36
Рис. 5.3. Синтаксическая диаграмма цикла с предусловием 36
Readln (A) {читаем новое значение А} 37
Синтаксическая диаграмма цикла с постусловием изображена на рис. 5.4. 37
Рис. 5.4. Синтаксическая диаграмма цикла с постусловием 37
3. Конец цикла; проверка X > PRK. 38
4. Печать суммы. 38
Перечень используемых переменных приведен в табл. 5.2. 38
Таблица 5.2 38
Таблица переменных 38
6. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ 39
6.1. Массивы 39
TYPE 39
MATR=ARRAY[1..2,1..12] OF REAL; 39
VAR 39
A,B,C:MATR; 39
A,B,C:ARRAY[1..10] OF INTEGER; 39
1. {Программа, позволяющая найти сумму элементов одномерного массива} 40
2. {Программа поиска наибольшего элемента одномерного массива и его порядкового номера} 40
3. {Программа нахождения произведения двух матриц A размером M*N и B размером N*K . Элементы результирующей матрицы C размером M*K рассчитываются по формуле . Значения M, N, K не превышают 10} 41
6.1.1. Сортировка массивов 41
П p и м е p. Отсоpтиpовать массив символов по алфавитy. 42
П p и м е p. Отсоpтиpовать по yбыванию массив методом «пузырька». 42
6.2. Строки 43
Var 44
1. {Подсчитать количество цифр в произвольной строке} 44
2. {Подсчитать cумму цифр в целом положительном числе} 44
6.3. Множества 45
Внутреннее представление множеств. Все значения множества представляются в памяти последовательностями битов одинаковой длины. За каждое значение базового типа «отвечает» 1 бит. Если множество содержит некоторый элемент, в соответствующем бите хранится 1, если не содержит – хранится 0. 45
4. Что будет выведено на экран? 49
6.4. Записи 49
TYPE <имя типа>=RECORD <Список полей> End; 50
Здесь <имя типа> – правильный идентификатор; <Список полей> – список полей; представляет собой последовательность разделов записи, разделяемых точкой с запятой. Каждый раздел записи представляет собой один или несколько идентификаторов полей, отделяемых друг от друга запятыми. За идентификаторами ставится двоеточие и описание типа поля. 50
Как было указано в п. 3.1., запись может быть элементом массива. 50
П р и м е р: 50
Type 50
rec = record 50
a: integer; 50
b: real; 50
c: string[10] 50
end; 50
var 50
elem : rec; 50
tabl : array[1..100] of rec; 50
Обращение к элементам записи осуществляется с помощью составных имен. Составное имя начинается с имени записи и содержит список имен полей (разделенных точками), входящих в цепочку, ведущую к требуемому элементу. 50
Например, к полям вышеприведенной записи можно обратиться по именам: 50
elem.a, elem.b, elem.c, elem.c[5], 50
a к полям i-го компонента массива записей – по именам: 50
tabl[i].a, tabl[i].b, tabl[i].c, tabl[i].c[1]. 50
Для сокращения обозначения полей записи (когда ведется работа с несколькими полями одной и той же записи) используется оператор присоединения: 50
WITH <переменная запись> DO <оператор>; 50
Внутри оператора, входящего в оператор присоединения, компоненты записи обозначаются с помощью только имен полей (имя переменной-записи перед ними не указывается). Заголовок операторов может содержать список переменных-записей, разделенных запятыми: 50
WIHT <переменная-запись_1>, …<переменная-запись_N> DO <оператор>; 50
П р и м е р ы 50