
- •Часть 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. Язык программирования Паскаль
Пример составления таблицы переменных
Имя |
Тип |
Начальное значение |
Смысл |
Amin |
|
100 |
Минимальное значение интервала |
Amax |
|
150 |
Максимальное значение интервала |
А |
Real |
|
Число, вводимое с клавиатуры |
Summa |
Real |
|
Сумма чисел |
{Текст программы}
program while_2;
const
Amin=100; Amax=150;
Var a,Summa:real;
begin
Summa:=0;
Writeln(' Введите А ');
Readln (A);
while A>=0 {заголовок цикла}
do begin
if (A>100) and (A<150)
then Summa:=Summa+A;
Inc (Summa, a);
Readln (A) {читаем новое значение А}
end; {конец цикла}
Writeln(' Значение суммы = ',Summa)
end.
5.7.3. Оператор цикла с постусловием
Синтаксическая диаграмма цикла с постусловием изображена на рис. 5.4.
Рис. 5.4. Синтаксическая диаграмма цикла с постусловием
Оператор – любой оператор Паскаля.
Выражение – выражение логического типа.
Данный оператор аналогичен оператору цикла с предусловием. Отличия:
1) условие проверяется после выполнения оператора, следовательно, хотя бы один раз оператор выполнится;
2) цикл прекращает выполняться, когда значение выражения равно true (истина). Если результат логического выражения false (ложь), то тело цикла активизируется (выполняется) еще раз.
Факториал n! с помощью цикла Repeat можно вычислить следующим образом:
{фрагмент программы}
i := 1;
f:=1;
readln (n);
repeat
f:=f*i;
inc(i)
until i > n;
П р и м е р. С клавиатуры вводятся числа. Найти сумму этой последовательности. Как только введено число большее 999, суммирование выполнить последний раз и выдать результат на печать.
А л г о р и т м:
1. Сумма = 0.
2. Открываем цикл.
2.1. Ввод Х.
2.2. Summa = Summa + X.
3. Конец цикла; проверка X > PRK.
4. Печать суммы.
Перечень используемых переменных приведен в табл. 5.2.
Таблица 5.2
Таблица переменных
Имя |
Тип |
Начальное значение |
Смысл |
PRK |
Константа |
999 |
Признак конца цикла |
Summa |
Real |
0 |
Cумма чисел |
Х |
Real |
0 |
Текущее значение |
{Программа подсчета суммы}
program sum;
const
PRK = 999;
Var
X,Summa:real;
Begin
Summa:=0;
repeat
readln(X);
Summa:=Summa+X
until X>PRK;
writeln(Summa:10:4)
end.
6. Структурированные типы данных
6.1. Массивы
Массив представляет собой структуру, состоящую из фиксированного числа компонент одного типа. В качестве компонент можно использовать как ранее описанные типы, так и следующие: массивы, записи, множества, указатели и т. п. Число элементов в массиве фиксируется при описании и далее при выполнении программы не меняется.
Определение типа, значения которого являются массивами, выполняется следующим образом:
TYPE <имя типа> = ARRAY[<диапазон первого индекса>,...,
<диапазон n-го индекса>] OF <тип компонент>;
Количество индексов n определяет размерность массива, а сами индексы разделяются запятыми и заключаются в квадратные скобки.
П р и м е р
TYPE
MATR=ARRAY[1..2,1..12] OF REAL;
VAR
A,B,C:MATR;
Массив можно описать в разделе VAR следующим образом:
<идентификатор>: ARRAY [<диапазон первого индекса>,...,
<диапазон n-го индекса>] OF <тип компонент>;
П р и м е р
VAR
A,B,C:ARRAY[1..10] OF INTEGER;
Для обращения к элементам массива используются конкретные значения индексов. Индекс представляет собой выражение любого простого (скалярного) типа (кроме REAL). К примеру, оператор B[3] := 10; присваивает третьему элементу одномерного массива с именем B значение 10.
П р и м е р
Пусть двумерный массив описан следующим образом:
VAR A : ARRAY[1..2,1..4] OF INTEGER; а в памяти ЭВМ записана таблица чисел, представляющая этот массив:
17 11 4 5
22 8 16 12
Все элементы в таблице имеют тип Integer. При обращении к элементам матрицы А первый индекс указывает номер строки таблицы (изменяется в данном случае от 1 до 2), второй – номер столбца (в нашем примере изменяется от 1 до 4). Если задать оператор присваивания в виде X:=А[2,3]; то после его выполнения значение некоторой переменной X будет равно 16.
Ввод и вывод значений элементов массива производится поэлементно.
Рассмотрим несколько типичных задач, связанных с применением массивов.
1. {Программа, позволяющая найти сумму элементов одномерного массива}
program msg1;
const n=15; {число элементов массива}
var
a:array[1..n] of real;
summa:real;
begin
summa:= 0;
for i:=1 to n
do begin
readln(a[i]);
summa:=summa+a[i]
end;
writeln(‘сумма ’,n,‘ элементов массива равна ’,summa)
end.
2. {Программа поиска наибольшего элемента одномерного массива и его порядкового номера}
program msg;
const n=20;
var
a:=array[1..n] of real;
amax: real;