
- •Учебно-методический комплекс
- •Пояснительная записка.
- •Рабочая программа дисциплины Основы алгоритмизации и программирования
- •Тематический план учебной дисциплины
- •Раздел 1. Основные принципы алгоритмизации.
- •Тема 1.1. Алгоритм, свойства алгоритма. Способы описания алгоритмов. Базовые алгоритмические конструкции..
- •Тема 1.2. Языки программирования и их классификация. Этапы решения задач на компьютере .
- •Раздел 2. Основные понятия языка программирование Turbo Pascal .
- •Тема 2.1 Среда программирования Турбо Паскаль. Операторы ввода-вывода.
- •Тема 2.2. Типы данных. Стандартные функции и процедуры.
- •Раздел 3. Работа с графическим модулем.
- •Тема 3.1. Текстовый и графический режимы работы монитора. Выбор и переключение графического режима в языке Pascal .
- •Тема 3.2. Рисование простых графических элементов (линия, точка, прямоугольник). Цвет объектов. Графический шрифт. Вывод текста.
- •Раздел 4. Основные алгоритмические конструкции и их реализация на языке Pascal .
- •Тема 4.1. Разветвляющиеся алгоритмы. Оператор условия If. Логические операции not, and, or. Нахождение значений логических выражений.
- •Тема 4.2. Вложенные условные операторы. Решение задач.
- •Тема 4.3. Оператор выбора case. Решение задач.
- •Тема 4.4. Циклические алгоритмы. Операторы организации циклов. Простой и составной оператор.
- •Тема 4.5. Цикл с предусловием в графике.
- •Тема 4.6. Рекурсия. Примеры задач рекурсивного решения в текстовом и графическом режимах.
- •Раздел 5. Процедуры и функции.
- •Тема 5.1.Глобальные и локальные переменные. Парадигма модульного программирования.
- •Тема 5.2. Процедуры. Входные и выходные данные процедуры.
- •Тема 5.3. Функции. Отличие функции от процедуры. Тип функции.
- •Раздел 6. Массивы. Стандартные алгоритмы на массивах.
- •Тема 6.1. Одномерные массивы. Способы задания одномерных массивов. Обработка массива.
- •Тема 6.2. Двумерные массивы. Действия с двумерными массивами.
- •Тема 6.3. Методы сортировки массивов.
- •Раздел 7. Символы и строки. Процедуры и функции работы со строками
- •Тема 7.1. Символьный тип данных. Функции работы с символами.
- •Тема 7.2. Строки. Тип string. Сравнение строк. Понятие подстроки.
- •Тема 7.3. Процедуры и функции работы со строками.
- •Раздел 10. Файлы.
- •Тема 10.1. Файлы. Виды файлов. Типизированные файлы.
- •Тема 10.2. Процедуры и функции для работы с типизированными файлами.
- •Тема 10.3. Процедуры и функции работы с файлами. Решение задач.
- •Тема 10.4. Тeкстовые файлы, их описание и основные отличия от типизированных файлов.
- •Тема 10.5. Способы обмена с текстовыми файлами.
- •Раздел 11. Стандартные модули.
- •Тема 11.1. Стандартные процедуры и функции модулей crt и dos. Обработка прерываний.
- •Тема 11.2. Стандартные процедуры и функции Unit Graph. Методы создания анимации.
- •Тема 11.3. Создание библиотечных модулей.
- •Раздел 12. Динамические переменные и структуры данных.
- •Тема 12.1. Динамические структуры данных и их организация с помощью указателей.
- •Тема 12.2. Представление деревьев. Основные операции над деревом.
- •Тема 12.3. Стек. Отличия стека от списка. Основные операции со стеком.
- •Тема 12.4. Очереди. Основные операции над очередью.
- •Тема 12.5. Кольцо. Формирование кольца. Основные операции над кольцом.
- •Тема 12.6. Список. Создание списка путем добавления элементов в конец списка. Просмотр списка.
- •Тема 12.7. Динамические структуры данных. Статические и динамические переменные. Адреса. Указатели и их объявление.
- •Раздел 1. Основные принципы алгоритмизации. Тема 1.1. Алгоритм, свойства алгоритма. Способы описания алгоритмов. Базовые алгоритмические конструкции.
- •Формы записи алгоритма.
- •Тема 1.2. Языки программирования и их классификация. Этапы решения задач на компьютере .
- •Раздел 2. Основные понятия языка программирование Turbo Pascal . Тема 2.1 Среда программирования Турбо Паскаль. Операторы ввода-вывода.
- •Оператор присваивания. Арифметические выражения
- •Основные определения. Типы данных.
- •Операторы Write и WriteLn
- •Операторы Read и ReadLn
- •Тема 2.2. Типы данных. Стандартные функции и процедуры.
- •I Арифметические функции
- •II Функции преобразования типов
- •III Функции для порядковых типов
- •IV Процедуры для порядковых типов
- •Лабораторная работа №1. Линейные программы.
- •Лабораторная работа №2. Составление простейших программ. Вычисления по формулам.
- •Раздел 3. Работа с графическим модулем . Тема 3.1. Текстовый и графический режимы работы монитора. Выбор и переключение графического режима в языке Pascal .
- •1) Инициализация графики, подготовительные работы, управление цветом, закрытие режима:
- •Система координат в графическом режиме.
- •Тема 3.2. Рисование простых графических элементов (линия, точка, прямоугольник). Цвет объектов. Графический шрифт. Вывод текста
- •Лабораторная работа №3. Графические возможности Турбо Паскаль.
- •Тема 4.2. Вложенные условные операторы. Решение задач.
- •Лабораторная работа №4. Разветвляющиеся вычислительные процессы. Условный оператор if.
- •Лабораторная работа №5. Применение условных операторов в решении задач.
- •Тема 4.3. Оператор выбора case. Решение задач.
- •Оператор безусловного перехода Goto. Решение задач.
- •Лабораторная работа №6. Программирование разветвляющихся алгоритмов
- •Тема 4.4. Циклические алгоритмы. Операторы организации циклов. Простой и составной оператор (4 часа)
- •Общая форма записи цикла со счетчиком
- •Лабораторная работа №7.
- •Лабораторная работа №8.
- •Индивидуальные задания.
- •Лабораторная работа №9.
- •Цикл с предусловием while
- •Лабораторная работа №10.
- •Индивидуальное задание
- •Тема 4.5. Цикл с предусловием в графике.
- •Задачи для самостоятельного решения
- •Раздел 5. Процедуры и функции. Тема 5.1.Глобальные и локальные переменные. Парадигма модульного программирования.
- •Тема 5.2. Процедуры. Входные и выходные данные процедуры.
- •Задачи для самостоятельного решения
- •Лабораторная работа №11.
- •Решение задач
- •Тема 5.3. Функции. Отличие функции от процедуры. Тип функции.
- •Общий вид (формат) функции
- •Различие между процедурами и функциями.
- •Задачи для самостоятельного решения
- •Лабораторная работа №12.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Индивидуальные задания.
- •Тема5.4. Рекурсия. Примеры задач рекурсивного решения в текстовом и графическом режимах.
- •Лабораторная работа № 13.
- •Задания
- •Лабораторная работа №14.
- •Решение задач по вариантам.
- •Раздел 6. Массивы. Стандартные алгоритмы на массивах. Тема 6.1. Одномерные массивы. Способы задания одномерных массивов. Обработка массива.
- •Способы задания одномерных массивов
- •Типичные задачи на обработку массивов.
- •Лабораторная работа №15. Тема: Одномерные массивы
- •Описание массива
- •Лабораторная работа №16.
- •Тема 6.2. Двумерные массивы. Действия с двумерными массивами.
- •Лабораторная работа №17.
- •Лабораторная работа №18.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Индивидуальные задания.
- •Тема 6.3. Методы сортировки массивов.
- •Лабораторная работа № 19.
- •Пример выполнения задания
- •Индивидуальные задания
- •Лабораторная работа №20.
- •Раздел 7. Символы и строки. Процедуры и функции работы со строками.
- •Тема 7.1. Символьный тип данных. Функции работы с символами.
- •Тема 7.2. Строки. Тип string. Сравнение строк. Понятие подстроки.
- •Лабораторная работа №21.
- •Тема 7.3. Процедуры и функции работы со строками.
- •Лабораторная работа №22.
- •Лабораторная работа № 23.
- •7.4. Обязательная контрольная работа.
- •Раздел 8. Множества. Тема 8.1. Множество. Элемент множества. Способы задания множества.
- •Лабораторная работа №24.
- •Тема 8.2. Операции над множествами.
- •Лабораторная работа №25. Тема: Множества. (Продолжение)
- •Раздел 9. Записи. Тема 9.1. Определение и правила записи.
- •Лабораторная работа №26.
- •Тема 9.2. Записи с вариантами.
- •Лабораторная работа № 27-28.
- •Раздел 10. Файлы. Тема 10.1. Файлы. Виды файлов. Типизированные файлы.
- •План урока
- •Тема 10.2. Процедуры и функции для работы с типизированными файлами.
- •Функция ioResult
- •Лабораторная работа № 29.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Задания
- •Тема 10.3. Процедуры и функции работы с файлами. Решение задач. Лабораторная работа №30. Тема: Разработка программ обработки созданных файлов.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Лабораторная работа № 31. Тема: Разработка программ обработки созданных файлов.
- •Актуализация опорных знаний
- •Пример выполнения задания
- •Тема 10.4. Тeкстовые файлы, их описание и основные отличия от типизированных файлов.
- •План урока
- •Тема 10.5. Способы обмена с текстовыми файлами.
- •I Операции чтения из файла
- •II Операции записи в файл
- •III Логическая функция Eoln
- •IV Процедура открытия файла для дополнения
- •Лабораторная работа №32.
- •Лабораторная работа № 33.
- •Актуализация опорных знаний
- •Раздел 11. Стандартные модули. Тема 11.1. Стандартные процедуры и функции модулей crt и dos. Обработка прерываний.
- •План урока
- •Процедуры управления звуком
- •Функции работы с клавиатурой
- •Лабораторная работа № 34.
- •Актуализация опорных знаний
- •Задания
- •Тема 11.2. Стандартные процедуры и функции Unit Graph. Методы создания анимации.
- •2. Установка цвета
- •3. Управление экраном
- •4. Работа с точками изображения
- •Лабораторная работа № 35.
- •Актуализация опорных знаний
- •Задания
- •Тема 11.3. Создание библиотечных модулей.
- •Лабораторная работа № 36. Тема: Разработка алгоритмов и программ решения различных задач с использованием библиотечных модулей пользователя.
- •Актуализация опорных знаний
- •Раздел 12. Динамические переменные и структуры данных. Тема 12.1. Динамические структуры данных и их организация с помощью указателей. (4 часа)
- •Указатели и их объявление
- •Оператор @ с переменной
- •Оператор @ с параметром процедуры, переданным по значению
- •Оператор @ с параметром процедуры, переданным по ссылке
- •Тема 12.2. Представление деревьев. Основные операции над деревом.
- •Представление деревьев. Основные операции над деревом.
- •Лабораторная работа № 37.
- •Тема 12.3. Стек. Отличия стека от списка. Основные операции со стеком.
- •Занесение элемента в стек
- •Извлечение элемента из стека
- •Примеры решения задач.
- •Лабораторная работа № 38.
- •Актуализация опорных знаний
- •Примеры выполнения заданий
- •Задания
- •Тема 12.4. Очереди. Основные операции над очередью.
- •Занесение элемента в очередь
- •Извлечение элемента из очереди
- •Примеры решения задач
- •Лабораторная работа № 39.
- •Задания
- •Тема 12.5. Кольцо. Формирование кольца. Основные операции над кольцом.
- •Формирование кольца
- •Обход кольца
- •Лабораторная работа № 40. Тема. Примеры решения задач с применением динамической структуры кольцо. Творческая работа.
- •Тема 12.6. Список. Создание списка путем добавления элементов в конец списка. Просмотр списка.
- •Лабораторная работа № 41. Тема. Примеры задач, решаемых с помощью списка. Решение задач.
- •Лабораторная работа № 42.
- •Экзаменационные вопросы по дисциплине: «Основы алгоритмизации и программирования»
- •Перечень практических задач для подготовки к экзамену.
Тема 12.5. Кольцо. Формирование кольца. Основные операции над кольцом.
Koльцо - это вид связанного списка, в котором указатель последнего элемента ссылается на первый элемент.
Рассмотрите его графическое представление.
При программировании на Паскале считается, что для кольца существует обход элементов. Доступ возможен к любому элементу структуры.
Кольцо является динамической структурой – в зависимости от пользователя программы может изменяется длина и набор составляющих его элементов.
Опишем кольцо на языке программирования:
Type
TypeCircle = ^K;
K = record
Data : integer;
Next : TypeCircle;
End;
Var
Circle1 : TypeCircle;
Формирование кольца
Рассмотрите процедуру формирования кольца. Для работы этой процедуры заводятся две локальные переменные типа TypeCircle для хранения адресов промежуточного и завершающего звена списка, последним оператором преобразуемого в кольцо.
Procedure FofmK(Var u : TypeCircle);
Var
x, y : TypeCircle;
i, N : integer;
Begin
write(‘Введите количество звеньев кольца: ‘);
readln(N);
for i := 1 to N do
begin
new(x); {выделяем память для хранения нового элемента кольца}
write(‘Введите данные в звено: ‘);
readln(i);
x^.Data := i; {заносим информацию в поле данных}
if u=nil {если кольцо еще не создано}
then
u := x {то указатель первого элемента ставим на новый элемент}
else
y^.Next := x; {присоединяем новый элемент к последнему элементу}
y := x; {переносим указатель у на последний элемент}
end;
x^.Next := u; {преобразуем получившийся список в кольцо}
End;
Над кольцом определены три операции: занесение элемента в кольцо, извлечение элемента из кольца и обход кольца.
Задание. Составьте программу, содержащую две процедуры: процедуру занесения элемента в кольцо и процедуру извлечения элемента из кольца по какому-либо условию. (Можно воспользоваться предыдущим текстом программы.)
Обход кольца
Для того чтобы обойти кольцо и вывести на экран содержащуюся в нем информацию, необходимо в локальной переменной типа TypeCircle запомнить адрес первого выводимого элемента. В этом случае можно избежать повторения и зацикливания программы. Вывод данных можно начинать с любого элемента кольца; это зависит от адреса первого элемента, переданного в процедуру обхода.
Рассмотрите процедуру обхода кольца.
Procedure PrintК(u : TypeCircle);
Var
x : TypeCircle;
Begin
x := u;
repeat
write(x^.Data,’ ‘);
x := x^.Next;
until x=u;
readln;
End;
Задание. Дополните предыдущую программу процедурой обхода кольца.
Лабораторная работа № 40. Тема. Примеры решения задач с применением динамической структуры кольцо. Творческая работа.
Задание. Рассмотрите приведенные примеры задач, решенные с помощью динамической структуры – кольцо. Наберите их на компьютере, проверьте их действие, вставьте комментарий.
Задача 1. N ребят располагаются по кругу. Начав отсчет от первого, удаляют каждого k-го, смыкая при этом круг. Определить порядок удаления ребят из круга.
Для хранения данных об участниках игры используется список.
Наберите предложенный ниже текст программы, проверьте его работу, дополните комментариями.
Program Schitalka;
Type
Children = ^Child;
Child = record
Data : integer;
Next : Children;
end;
Var
Circl, p, Temp : Children;
i, j, NumName : integer;
text : string;
Function NumSlov(Var S : string) : integer;
Var
i, d : integer;
Begin
d := 0;
i := 1;
while i < Length(S) do
begin
while S[i] = ‘ ‘ do
Inc(i);
while S[i] <> ‘ ‘ do
Inc(i);
d := d+1;
end;
if S[Length(S)] = ‘‘
then
d := d-1;
NumSlov := d;
End;
Procedure AddName(Var Old, Young : Children);
Begin
Young^.Next := Old;
Young^.Prev := Old^.Prev;
Old^.Prev^.Next := Young;
Old^.Prev := Young;
End;
Procedure DeleteName(Var Old : Children);
Begin
Old^.Next^.Prev := Old^.Prev;
Old^.Prev^.Next := Old^.Next;
End;
Begin
new(Circl);
Circl^.Next := Circl;
Circl^.Prev := Circl;
Circl^.Name := ‘‘;
writeln(‘Считалка’);
writeln(‘Введите текст считалки >‘);
readln(text);
writeln(‘Сколько человек в кругу? >‘);
readln(NumName);
if NumName>0
then
begin
write(‘Введите ‘,i,’-е имя: ‘);
new(p);
readln(p^.name);
temp := head^.next;
while temp <> head do
temp := temp^.next;
AddName(temp, p);
end;
for i := 1 to NumName-1 do
begin
temp := head;
for j := 1 to NumSlov(text) do
begin
temp := temp^.next;
if temp^.name = ‘‘
then
temp :=temp^.next;
end;
writeln(temp^.name, ‘- вышел’);
deleteName(temp);
end;
writeln(head^.next^.name, ‘- остался’);
End.
Пример 2. Вывести на экран работающий светофор.
Program GrushinK;
Uses
Crt, Graph;
Type
TypeCircle = ^K;
K = record
Data : char;
Next : TypeCircle;
end;
Const
XX = 80;
R = 50;
Var
Svetofor, x : TypeCircle;
FraphDriver, GraphMode, Y : integer;
Procedure Picture;
Begin
SetViewPort(240, 1, 400, 477, ClipOff);
Line(0, 1, 0, 477);
Line(160, 1, 160, 477);
Line(0, 1, 160, 1);
Line(0, 477, 160, 477);
Line(0, 150, 156, 150);
Line(0, 330, 156, 330);
Line(-240, 480, 0, 100);
Line(400, 480, 160, 100);
Line(380, 460, 160, 460);
Line(160, 440, 368, 440);
Line(368, 440, 380, 460);
Line(-220, 460, -208, 440);
SetFillStyle(1, White);
FloodFill(375, 455, White);
FloodFill(-215, 455, White);
SetFillStyle(7, 6);
FloodFill(-230, 200, White);
SetColor(4);
Line(-240, 150, -120, -1);
Line(400, 150, 240, -1);
SetColor(15);
SetFillStyle(9, 4);
FloodFill(-240, 0, 4);
FloodFill(390, 10, 4);
SetFillStyle(1, 8);
FloodFill(-100, 470, White);
Y := 74;
Circle(XX, Y, R);
Y := 240;
Circle(XX, Y, R);
Y := 405;
Circle(XX, Y, R);
SetFillStyle(9, 6);
FloodFill(5, 5, White);
End;
Procedure Yellow(Y : integer);
Begin
Picture;
Y := 240;
SetFillStyle(1, 14);
FloodFill(XX, Y, 15);
Delay(850);
ClearViewPort;
End;
Procedure Green(Y : integer);
Begin
Picture;
Y := 405;
SetFillStyle(1, 2);
FloodFill(XX, Y, 15);
Delay(1500);
ClearViewPort;
End;
Procedure Red Yellow(Y : integer);
Begin
Picture;
Y := 240;
SetFillStyle(1, 14);
FloodFill(XX, Y, 15);
Delay(1500);
ClearViewPort;
End;
Procedure Red(Y : integer);
Begin
Picture;
Y := 74;
SetFillStyle(1, 4);
FloodFill(XX, Y, 15);
Delay(2000);
ClearViewPort;
End;
Procedure Vibor;
Begin
case x^.Data of
‘R’ : Red(Y);
‘2’ : Red Yellow(Y);
‘G’ : Green(Y);
‘Y’ : Yellow(Y);
End;
Begin
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode, ‘..\BGI’);
new(x);
u := x;
x^.Data := ‘R’;
new(x^.Next);
x := x^.Next;
x^.Data := ‘2’;
new(x^.Next);
x := x^.Next;
x^.Data := ‘G’;
new(x^.Next);
x := x^.Next;
x^.Data := ‘Y’;
x^.Next := u;
x := u;
while not KeyPressed do
begin
Vibor;
x := x^.Next;
end;
End.
Задание. Придумайте интересную задачу из жизни и решите ее с помощью динамической структуры кольцо.