
- •Полный обучающий курс
- •Содержание
- •Ввод-вывод Занятие 1. Язык программирования Паскаль. Знакомство со средой программирования Турбо Паскаль. Основные понятия. Первая программа. Оператор присваивания.
- •Запуск интегрированной среды программирования.
- •Оператор присваивания. Арифметические выражения
- •Порядок выполнения операций
- •Основные определения. Типы данных.
- •Типы данных.
- •Сложные типы
- •Занятие 2. Ввод - вывод. Операторы Read (Readln), Write (Writeln). Простейшие линейные программы
- •Операторы Write и WriteLn
- •Операторы Read и ReadLn
- •I Арифметические функции
- •II Функции преобразования типов
- •III Функции для порядковых типов
- •IV Процедуры для порядковых типов
- •Графика Занятие 1: Графический режим. Инициализация графического режима. Построение точки, линии.
- •1) Инициализация графики, подготовительные работы, управление цветом, закрытие режима:
- •Система координат в графическом режиме.
- •Занятие 2: Построение дуги, окружности, прямоугольника, эллипса.
- •Установка стиля и цвета закраски. Закрашивание фигур.
- •Занятие 3: Вывод текста.
- •Занятие 4. Процедуры рисования закрашенных фигур.
- •Для любопытных. Окно в графическом режиме. Решение задач.
- •Операторы условия и выбора Занятие 1. Разветвляющиеся алгоритмы. Оператор условия If. Разветвляющиеся алгоритмы
- •Занятие 2. Логический тип данных. Логические операции not, and, or. Нахождение значений логических выражений. Самостоятельная работа. Логический тип данных
- •Самостоятельная работа
- •Занятие 3. Вложенные условные операторы. Решение задач.
- •I Выберите с учителем задачи для самостоятельного решения из предложенного списка:
- •II Выберите с учителем задачи для самостоятельного решения из предложенного списка:
- •Занятие 4. Оператор выбора case. Решение задач.
- •Занятие 5. Оператор безусловного перехода Goto. Решение задач.
- •Занятие 6. Контрольная работа
- •Для любознательных
- •Контрольные вопросы
- •Циклы Занятие 1. Циклические алгоритмы. Цикл с предусловием.
- •Цикл с предусловием.
- •Задачи для самостоятельного решения
- •Занятие 2. Цикл с предусловием в графике.
- •Задачи для самостоятельного решения
- •Занятие 3. Контрольная работа
- •Занятие 4. Цикл с постусловием repeat.
- •Задачи для самостоятельного решения
- •Занятие 5. Работа с клавиатурой. Стандартные процедуры read и readLn. Стандартные функции readKey и KeyPressed; их применение в циклах.
- •Стандартная функция readKey
- •Стандартная функция KeyPressed
- •Занятие 6. Цикл со счетчиком.
- •Занятие 7-8. Самостоятельное решение задач.
- •Процедуры и функции Занятие 1. Понятие подпрограммы. Процедуры и функции. Стандартные подпрограммы. Примеры употребления подпрограмм в решении задач.
- •Занятие 2. Формальные и фактические параметры. Вызов по ссылке и по значению. Локальные и глобальные переменные и подпрограммы Формальные и фактические параметры
- •Вызов по ссылке и по значению
- •Параметры-значения
- •Локальные и глобальные переменные и подпрограммы.
- •Занятие 3. Процедуры.
- •Занятие 4. Процедуры в графическом режиме.
- •Занятие 5. Функции.
- •Различие между процедурами и функциями.
- •Задачи для самостоятельного решения
- •Занятие 6. Решение задач
- •Для любознательных. Особенности использования процедур и функций.
- •Заголовок модуля
- •Интерфейсная часть
- •Реализационная часть
- •Инициализационная часть
- •Рекурсия Занятие 1. Понятие рекурсии.
- •Занятие 2. Примеры задач рекурсивного решения в текстовом и графическом режимах.
- •Занятие 3. Косвенная рекурсия.
- •Занятие 4. Решение задач
- •Для любознательных. Ханойские башни. Задача о разрезании прямоугольника
- •Анализ рекурсивных алгоритмов
- •Особенности отладки и компиляции программ, содержащих процедуры и функции
- •Одномерные массивы Занятие 1. Понятие массива. Одномерные массивы. Способы задания одномерных массивов
- •Способы задания одномерных массивов
- •Занятие 2. Доступ к элементам массива
- •Изменение значения некоторых элементов
- •Нахождение номеров элементов с заданным свойством
- •Нахождение количества элементов с заданным свойством
- •Есть ли в данном массиве элементы с данным свойством?
- •Занятие 3. Удаление элементов из одномерного массива.
- •Задачи для самостоятельного решения
- •Занятие 4. Вставка элементов в одномерный массив. Вставка одного элемента
- •Вставка нескольких элементов
- •Задачи для самостоятельного решения
- •Занятие 5. Перестановка элементов массива. Перестановка двух элементов
- •Перестановка части массива
- •Работа с несколькими массивами.
- •Занятие 6. Самостоятельное решение задач.
- •Двумерные массивы Занятие 1. Понятие двумерного массива. Описание типа массива. Формирование значений элементов массива случайным образом.
- •Формирование значений элементов массива случайным образом и с клавиатуры и вывод их на экран
- •Занятие 2. Работа с элементами массива.
- •Нахождение количества элементов с данным свойством
- •Определить, отвечает ли заданный массив некоторым требованиям
- •Изменение значений некоторых элементов, удовлетворяющих заданному свойству
- •Заполнение массива по правилу
- •Задачи для самостоятельного решения
- •1. Найти сумму и количество элементов с заданным условием (хранить эти значения в массивах):
- •2. Найти и вывести на экран индексы заданных элементов массива (если их нет выдать соответствующее сообщение):
- •3. Используя функцию булева типа, определить:
- •4. Измените исходный массив в соответствии с заданием:
- •5. Решите задачу на заполнение массива по определенному правилу.
- •Занятие 3. Вставка и удаление строк и столбцов.
- •Вставка строк и столбцов
- •Удаление строк и столбцов
- •Задачи для самостоятельного решения
- •Занятие 4. Перестановка элементов массива.
- •Задачи для самостоятельного решения
- •Занятие 5. Самостоятельное решение задач.
- •I. Заполнение и анализ элементов массива
- •II. Работа с одномерным и двумерным массивами
- •Занятие 6. Контрольная работа
- •Для любопытных. Графические программы с применением массивов.
- •Методы сортировки массива Занятие 1. Сортировка массива. Способы сортировки массива.
- •Занятие 2. Сортировка вставкой. Сортировка выбором.
- •Сортировка выбором
- •Занятие 3. Сортировка методом простого обмена. Рекурсивная сортировка
- •Cортировка массива с помощью рекурсии.
- •Занятие 4. Сортировка методом слияний.
- •Для любопытных. Рекурсивная сортировка слиянием
- •Занятие 5-6. Самостоятельное решение задач.
- •Строки Занятие 1. Тип данных char. Операции над символами
- •Задачи для самостоятельного решения
- •Занятие 2. Строка. Тип данных string. Строковые переменные, их описание. Длина строки. Операции над строками
- •Задачи для самостоятельного решения
- •Занятие 3. Стандартные функции для работы со строками (concat,copy,length, pos,upcase). Функция Length
- •Функция Upcase
- •Функция Copy
- •Функция Pos
- •Функция Concat
- •Задачи для самостоятельного решения
- •Задачи для самостоятельного решения
- •Занятие 5. Контрольная работа
- •Занятие 6. Решение задач.
- •Для увлеченных программированием. Бегущая строка. Пример программы осыпающихся букв. Строки в графическом режиме.
- •Множества Занятие 1. Множественный тип данных. Множество. Элемент множества. Способы задания множества. Объединение множеств. Разность множеств. Пересечение множеств.
- •Занятие 2. Логические операции над множествами: проверка принадлежности элемента множеству, проверка включения элемента в множество, сравнение множеств.
- •Занятие 3. Примеры решений задач на применение множества.
- •Занятие 4. Самостоятельное решение задач.
- •Запись Занятие 1. Комбинированный тип данных. Запись. Описание записи. Доступ к полям записи. Оператор With. Примеры решения задач
- •Занятие 2. Самостоятельное решение задач
- •Занятие 3. Сортировка записей.
- •Занятие 4. Записи с вариантами.
- •Дополнительно. Решение задач
- •Файлы Занятие 1. Файлы. Виды файлов. Типизированные файлы
- •Процедуры и функции для работы с файлами любого типа
- •Примеры решения задач
- •Занятие 2. Процедуры и функции для работы с типизированными файлами
- •Функция ioResult
- •Занятие 3. Самостоятельное решение задач
- •I Выберите с учителем одну из предложенных ниже задач (тип Integer, real)
- •II Выберите с учителем одну из предложенных ниже задач (тип char)
- •III Выберите с учителем одну из предложенных ниже задач (тип string)
- •IV Выберите с учителем одну из предложенных ниже задач (тип record)
- •Занятие 4. Процедуры и функции работы с файлами. Решение задач
- •Тeкстовые файлы Занятие 1. Тeкстовые файлы, их описание и основные отличия от типизированных файлов.
- •Занятие 2. Способы обмена с текстовыми файлами.
- •Операции чтения из файла
- •Операции записи в файл
- •Логическая функция Eoln
- •Процедура открытия файла для дополнения
- •Занятие 3. Стандартные текстовые файлы Input и Output. Примеры задач
- •Занятие 4. Самостоятельное решение задач
- •Для любознательных. Текстовый режим. Модуль crt. Работа с цветом. Работа с экраном и курсором
- •Нетипизированные файлы Занятие 1. Нетипизированные файлы. Их отличия. Процедуры blockread и blockwrite.
- •Занятие 2. Решение задач
- •Занятие 3. Использование типизированных файлов в качестве нетипизированных
- •Занятие 4. Использование текстовых файлов в качестве нетипизированных.
- •Занятие 5. Примеры решения творческих задач
- •Для любознательных. Дополнительные процедуры и функции работы с файлами
- •Внешние устройства в качестве файлов.
- •Граф Занятие 1. Основные понятия.
- •Занятие 2. Представление деревьев. Основные операции над деревом.
- •Занятие 3. Самостоятельное решение задач.
- •Занятие 4. Идеально сбалансированное дерево.
- •Стек Занятие 1. Стек. Отличия стека от списка. Основные операции со стеком.
- •Занесение элемента в стек
- •Извлечение элемента из стека
- •Примеры решения задач.
- •Занятие 2. Самостоятельное решение задач
- •Занятие 3. Очереди. Основные операции над очередью.
- •Занесение элемента в очередь
- •Извлечение элемента из очереди
- •Примеры решения задач
- •Занятие 4. Самостоятельное решение задач
- •Занятие 5. Кольцо. Формирование кольца. Основные операции над кольцом.
- •Формирование кольца
- •Обход кольца
- •Занятие 6. Примеры решения задач с применением динамической структуры кольцо. Творческая работа.
- •Список Занятие 1. Список. Создание списка путем добавления элементов в конец списка. Просмотр списка.
- •Просмотр списка
- •Занятие 2. Создание списка путем вставления элементов в начало.
- •Занятие 3. Упорядочивание списка. Вставление элемента в середину списка.
- •Занятие 4-5. Примеры задач, решаемых с помощью списка. Решение задач.
- •Занятие 6. Удаление элемента из списка.
- •Занятие 7. Зачет.
- •Динамические структуры данных Занятие I. Динамические структуры данных. Статические и динамические переменные. Адреса. Указатели и их объявление.
- •Указатели и их объявление
- •Занятие 2. Присвоение значений указателю. Оператор @ с переменной. Оператор @ с параметром процедуры, переданным по значению. Оператор @ с параметром процедуры, переданным по ссылке.
- •Занятие 3. Список. Создание списка путем добавления элементов в конец списка. Просмотр списка
- •Занятие 4. Создание списка путем вставления элементов в начало.
- •Занятие 5. Упорядочивание списка. Вставление элемента в середину списка.
- •Примеры задач, решаемых с помощью списка
- •Занятие 6. Удаление элемента из списка.
Стек Занятие 1. Стек. Отличия стека от списка. Основные операции со стеком.
На предыдущих занятиях мы уже рассматривали однонаправленный список. Здесь Вы познакомитесь с двумя разновидностями обычного линейного списка – стеком и очередью. В программировании наиболее часто используемой структурой является стек.
Стек – это линейный список, в котором добавление новых элементов и удаление существующих производится только с одного конца, называемого вершиной стека.
Стек часто называют структурой LIFO [сокращение LIFO означает Last In – First Out (последний пришел, первый вышел)]. Это сокращение представляет удобный способ запомнить механизм работы стека
Изобразим стек графически:
При программировании на Паскале стек реализуется чаще всего в виде однонаправленного списка. Каждый элемент структуры содержит указатель на следующий. Считается лишь, что для этого списка не существует обход элементов. Доступ возможен только к верхнему элементу структуры.
Стек предполагает вставку и удаление элементов, поэтому он является динамической, постоянно меняющейся структурой.
Стеки довольно часто встречаются в практической жизни. Простой пример: детская пирамидка. Процесс ее сборки и разборки подобен процессу функционирования стека.
Итак, если стек – это список, то добавление или извлечение элементов происходит с начала и только с начала (или возможно с конца и только с конца) списка.
Значением указателя, представляющего стек, является ссылка на вершину стека, каждый элемент стека содержит поле ссылки.
Таким образом, описать стек можно следующим образом:
Type
EXST = ^ST;
ST = record
Data : integer;
Next : EXST;
end;
Var
Stack : EXST; {Текущая переменная}
Если стек пуст, то значение указателя равно Nil.
Рассмотрим возможные операции со стеком.
Занесение элемента в стек
Занесение элемента в стек производится аналогично вставке нового элемента в начало списка. Процедура занесения элемента в стек должна содержать два параметра: первый задает вершину стека, в который нужно занести элемент, второй – заносимое значение элемента стека.
Процедура формирования стека будет иметь следующий вид:
Procedure FormStack;
Var
Stack : EXST; {Текущая переменная}
Digit : integer;
Procedure writeStack(Var u : EXST; Digit : integer);
Var
x : EXST;
Begin
new(x); {выделяем память под хранение нового элемента стека}
x^.Data := Digit; {заполняем поле данных элемента}
x^.Next := u; {новый элемент "связываем" со стеком}
u := x; {созданный элемент определяем как вершину стека}
End;
Begin
Stack := Nil; {инициализация стека}
writeln('Введите элементы стека. Окончание ввода – 0');
read(Digit);
while Digit <> 0 do
begin
writeStack(Stack, Digit);
read(Digit);
end;
End;
Извлечение элемента из стека
В результате выполнения этой операции некоторой переменной i должно быть присвоено значение первого элемента стека и значение указателя на начало списка должно быть перенесено на следующий элемент стека.
Procedure readStack(Var u : EXST; Var i : integer);
Var
x : EXST;
Begin
i := u^.Data; {считываем значение поля данных в переменную}
x := u; {запоминаем адрес вершины стека}
u := u^.Next; {переносим вершину стека на следующий элемент}
dispose(x); {освобождаем память, занятую уже ненужным элементом стека}
End.
Недостатком описанной процедуры является предположение о том, что стек не пуст. Для его исправления следует разработать логическую функцию проверки пустоты обрабатываемого стека.
Function FreeStack(u : EXST) : boolean;
Задание. Описать функцию и закончить программу, для чего описать процедуру вывода значений элементов стека на экран (она аналогична выводу списка). Протестировать программу, дополнить комментарием и показать файл и листинг учителю для оценки.
Чтобы наглядно рассмотреть работу стека, наберите следующую программу.
Program Demidenko;
Uses
Crt, Graph;
Type
sp=^spis;
ecord
elem : byte;
next : sp;
End;
Var
a, b : byte;
s : string;
gd, gm, c : integer;
head, some, x : sp;
bol : boolean;
ch : char;
Procedure OutX(x, y : integer);
Begin
Line(x+50,y+10,x+70,y+10);
Line(x+50,y+10,x+55,y+10-3);
Line(x+50,y+10,x+55,y+10+3);
Line(x+55,y+13,x+55,y+10-3);
OutTextXY(x+70,y+10,'x');
End;
Procedure Wiv (x, y : integer; ss : sp);
Begin
Line(x,y,x+50,y);
Line(x,y,x,y+20);
Line(x,y+20,x+50,y+20);
Line(x+50,y,x+50,y+20);
Line(x+30,y,x+30,y+20);
if some=ss
then
Begin
Line(x+50,y+10,x+70,y+10);
Line(x+50,y+10,x+55,y+10-3);
Line(x+50,y+10,x+55,y+10+3);
Line(x+55,y+13,x+55,y+10-3); End;
Str(ss^.elem, s);
OutTextXY(x+10,y+10,s);
if (ss^.next<>nil)
then
Begin
Line(x+40,y+10,x+40,y+40);
Line(x+40,y+40,x+37,y+40-5);
Line(x+40,y+40,x+43,y+40-5);
Line(x+43,y+40-5,x+37,y+40-5);
Wiv(x,y+40,ss^.next);
End
else
Begin
Line(x+40,y+10,x+40,y+30);
Line(x+40,y+30,x+37,y+25);
Line(x+40,y+30,x+43,y+25);
Line(x+43,y+25,x+37,y+25);
Line(x+35,y+32,x+45,y+32);
Line(x+36,y+35,x+44,y+35);
Line(x+38,y+38,x+42,y+38);
End;
End;
Procedure Insertsp(x : byte);
Begin
Cleardevice;
OutTextXY(50,20,'NEW(X)');
new(some);
Line(20,100,20+50,100);
Line(20,100,20,100+20);
Line(20,100+20,20+50,100+20);
Line(20+50,100,20+50,100+20);
Line(20+30,100,20+30,100+20);
Outx(20,100);
if head<>nil
then
Wiv(20,140,head);
Delay(1000);
Cleardevice;
OutTextXY(50,20,'X^.NEXT:=TAIL');
OutTextXY(50,40,'TAIL:=X');
some^.next:=head;
head:=some;
Wiv(20,100,head);
Delay(1000);
Cleardevice;
Str(x,s);
OutTextXY(50,20,'SOME^.ELEM:='+s);
some^.elem:=x;
Wiv(20,100,head);
Delay(1000);
End;
Procedure DelSp;
Begin
Cleardevice;
if head=nil
then
Begin
Y(50,20,'Элемент не существует!');
Delay(1000);
End
else
if head^.next<>nil
then
Begin
OutTextXY(50,20,'X:=TAIL');
OutTextXY(50,40,'TAIL:=TAIL^.NEXT');
some:=some^.next;
Wiv(20,100,head);
OutX(20,100);
Delay(1000);
Cleardevice;
OutTextXY(50,20,'DISPOSE(X)');
Wiv(20,100,head);
OutX(20,100);
Setcolor(red);
Line(20,90,70,130);
Line(70,90,20,130);
Setcolor(white);
Delay(1000);
Cleardevice;
head:=head^.next;
some:=head;
Wiv(20,100,head);
End
else
Begin
OutTextXY(50,20,'DISPOSE(TAIL)');
Wiv(20,100,head);
Setcolor(red);
Line(20,90,70,130);
Line(70,90,20,130);
Setcolor(white);
Delay(1000);
ClearDevice;
head:=nil;
some:=head;
End;
End;
Begin
ClrScr;
bol:=false;
gD := Detect;
InitGraph(gD, gM,'c:\tp7\bgi\');
TextBackGround(black);
Setbkcolor(black);
Head:=nil;
Some:=head;
Repeat
OutTextXY(250,200,'1 * Добавить элемент');
OutTextXY(250,220,'2 * Удалить элемент');
OutTextXY(250,240,'Esc Выход');
ch:=readkey;
case ch of
'1' : Begin
OutTextXY(250,260,'Введите число:');
gotoxy(48,17);
readln(b);
InsertSp(b);
End;
'2' : delsp;
#27 : Begin
CloseGraph;
Halt;
End;
End;
until bol;
CloseGraph;
End.