
- •Часть 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. Язык программирования Паскаль
14.4.4. Рекурсивные алгоритмы работы с двоичными деревьями
Рекурсивное определение дерева. Представим, что отдельные дуги дерева ведут к частям дерева, которые сами являются деревьями. Такая точка зрения приводит к рекурсивному определению дерева. Дерево – это пустая структура или узел, связанный дугами с конечными числом деревьев. Прохождение дерева заключается в обходе всех его узлов. Рекурсивный алгоритм прохождения двоичного дерева будет таким:
1. Посетить корень.
2. Посетить левое поддерево.
3. Посетить правое поддерево.
Обходя дерево по этому алгоритму, мы посетим узлы по алфавиту (рис.14.8).
Рис.14.8. Порядок обхода дерева
Проходя дерево по данному алгоритму, мы посетим вершины дерева в следующем порядке: A, B, C, D, E, F, G. Как изменить порядок пунктов алгоритма, чтобы пройти узлы в последовательности:
а) A, E, G, F, B, D, C; б) C, D, B, F, G, E, A; в) C, B, D, A, F, E, G
П р и м е р ы использования рекурсивных алгоритмов для работы с двоичными деревьями.
const k = 13;
a:array[1..k] of integer=(2,4,6,1,3,5,7,10,12,14,11,13,15);
type ptree=^ttree;
ttree = record
dat:integer;
l,r:ptree
end;
var
kor, t:ptree;
I, X : integer;
fl : boolean; {v - новый элемент}
procedure bild(v:ptree; var kor:ptree); {построение}
begin
if kor = nil
then begin
kor:=v;
v^.l := nil;
v^.r := nil
end
else if v^.dat<kor^.dat
then bild(v,kor^.l) {заполнение левой ветви}
else bild(v,kor^.r) {заполнение правой ветви}
end;
procedure prosm(t:ptree);{просмотр в порядке возрастания}
begin
if t^.l <> nil then prosm (t^.l);
writeln (t^.dat);
if t^.r<> nil then prosm (t^.r);
end;
procedure poisk(t:ptree); {линейный поиск в
begin неупорядоченном дереве}
writeln(' ',t^.dat);
if t^.dat=x
then writeln(' Нужный элемент найден !',t^.dat)
else begin
if t^.l <> nil
then poisk(t^.l);
if t^.r <> nil
then poisk(t^.r);
end;
end;
procedure dv_poisk(t:ptree); {двоичный поиск в
begin упорядоченном дереве}
write(' ',t^.dat);
if t^.dat = x
then begin
fl:=true;
writeln;
writeln('Нужный элемент найден!',t^.dat)
end
else if (x<t^.bat)and(t^.l<>nil)
then dv_poisk (t^.l)
else if t^.r<>nil
then dv_poisk(t^.r)
end;
{ ОСНОВНАЯ ПРОГРАММА }
begin
kor := nil;
for i:=l to k {строим упорядоченное дерево}
do begin
new(t);
t^.dat:=a[i];
build(t,kor);
end;
writeln('Просмотр дерева!');
prosm(kor);
{или writeln ('Обход дерева! ');
obch(kor);}
readln;
write(' Линейный поиск, введите х ');
readln(x);
poisk(kor);
writeln( 'Двоичный поиск: ');
fl:=false;
dv_poisk(kor);
if not fl
then writeln (' " Элемент не найден!');
readln
end.
Литература
Методы программирования: Учеб. Пособие / Под ред. Г.А. Угольницкого. – М.: Вузовская книга, 1999. – 280 с.
Фаронов В.В. Турбо Паскаль 7.0. Начальный курс: Учеб. пособие. –М.: Изд-во «Нолидж», 1997. – 616 с.
Фаронов В.В. Турбо Паскаль 7.0. Практика программирования: Учеб. пособие. –М.: Изд-во «Нолидж», 1997. – 432 с.
Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0. –М.: Бином универсал, Киев: ЮНИОР, 1997. – 496 с.
Гусева А.И. Учимся информатике: задачи и методы их решения. – М.: Изд-во «Диалог-МИФИ», 1999. – 320 с.
Пильщиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. – М.: Наука. 1989. – 160 с.
Учебное издание
Козлов Георгий Валентинович
Смоляков Виктор Николаевич
Программирование на языке высокого уровня