
- •A. Государственный образовательный стандарт
- •B. Рабочая программа учебной дисциплины b.1. Цели и задачи дисциплины, ее место в учебном процессе
- •B.2. Протокол согласования рабочей программы с другими дисциплинами специальности на 200_ учебный год
- •B.3. Объем дисциплины и виды учебной работы
- •B.4. Содержание дисциплины b.4.1.Тематический план
- •B.4.2. Лекционный курс
- •B.4.3. Лабораторный практикум
- •B.4.4. Самостоятельная работа студентов
- •B.5. Список рекомендуемой литературы для изучения дисциплины
- •B.6. Вопросы к экзамену
- •B.9. Тематический план
- •C.2.Технические и программные средства реализации информационных процессов.
- •C3. Модели решения функциональных и вычислительных задач. Алгоритмизация и программирование. Алгоритмы, классы, типы, свойства алгоритмов, Языки программирования высокого уровня (обзор).
- •C.4. Тема 4. Основы и методы защиты информации.
- •C.5. Тема 5.Компьютерный практикум.
- •C.9. Тема 9. Постановка задачи и спецификация программы. Способы записи алгоритмов. Стандартные типы данных.
- •5. Описание процедур и функций. Этот вопрос рассматривается в пункте 6.
- •C.10.5. Лекция 5 (1час) Понятие рекурсии, примеры рекурсивных задач и программ с рекурсивными вызовами процедур и функций.
- •C.10.7. Лекция 7 (2 часа) Множества
- •D. Лабораторный практикум d.1 Лабораторная работа № 1
- •D.2. Лабораторная работа № 2
- •D.3. Лабораторная работа № 3
- •D.3.1. Варианты для задания 1. «Простейшие циклы»
- •D.3.2. Варианты для задания 2 «Обработка одномерных массивов»
- •D.4. Лабораторная работа № 4
- •D.5. Лабораторная работа № 5
- •D.6. Лабораторная работа № 6
- •D.7. Лабораторная работа № 7
- •D.8. Лабораторная работа № 8
- •D.9. Лабораторная работа № 9
- •D.10. Лабораторная работа № 10
- •D.11. Литература к лабораторным работам
- •E. Самостоятельная работа. E.1. Задачи для самостоятельной работы e.1.1. Задачи для самостоятельной работы по теме: "Запись числовых констант, переменных и выражений".
- •E.1.2. Задачи для самостоятельной работы по теме: "Типы данных. Операции и функции над данными разных типов".
- •E.1.3. Задачи для самостоятельной работы по теме: "Операторы цикла".
- •E.1.4. Задачи для самостоятельной работы по теме: "Массивы".
- •E.1.5. Задачи для самостоятельной работы по теме: "Процедуры и функции".
- •E.1.6. Задачи для самостоятельной работы по теме: "Строки".
- •E.1.7. Задачи для самостоятельной работы по теме: "Множества".
- •E.1.8. Задачи для самостоятельной работы по теме: "Файлы".
- •E.2. Задачи и упражнения на тему «Структуры данных»
- •E.2.1. Векторы
- •E.2.2. Матрицы
- •E.2.3. Строки
- •E.2.4. Записи и таблицы
- •E.2.5. Списки
- •E.2.6. Очереди, стеки, деревья
- •E.2.7. Двоичные деревья
- •E.2.8. Литература по теме «Структуры данных»
- •G. Контрольные задания по лабораторным работам g.1. Контрольная работа по лабораторным № 3,4
- •G.2. Контрольная работа по лабораторной № 5
- •G.3. Контрольная работа по лабораторным № 6, 7, 8
- •H. Тематика контрольных работ по дисциплине Информатика и программирование
- •I. Вопросы к экзамену
- •J. Литература
E.2.6. Очереди, стеки, деревья
1. Для работы с очередью, т.е. последовательностью элементов, в которую элементы всегда добавляются в конец, а удаляются из начала ("первым пришел - первым ушел"), нужны обычно следующие операции:
ОЧИСТОЧ(Q)- создать пустую очередьQ(очистить очередь);
ПУСТОЧ(Q)- проверить, является ли очередьQпустой;
ПЕЧОЧ(Q) – распечатать содержимое очереди;
ВОЧЕРЕДЬ(Q,x)- добавить в конец очередиQэлементx;
ИЗОЧЕРЕДЬ(Q,x)- удалить из очередиQпервый элемент, присвоив его параметруx.
Требуется для каждого из указанных ниже представлений очереди описать соответствующий тип ОЧЕРЕДЬ, считая, что все элементы очереди имеют некоторый типТЭО, и реализовать в виде процедур или функций перечисленные операции над очередью ( если операция по тем или иным причинам не может быть выполнена, следует передать управление некоторой процедуреОШИБКА(k), считая ее уже описанной, гдеk- номер ошибки: 1 - переполнение очереди, 2 - исчерпание очереди).
Представление очереди(n – целая константа >1):
а) для каждой очереди отводится свой массив из Nкомпонентов типаТЭО, в котором элементы очереди занимают группу соседних компонент, индексы первой и последней из которых запоминаются; при этом, когда очередь достигает правого края массива, все ее элементы сдвигаются к левому краю;
б) аналогичное представление, но массив как бы склеивается в кольцо, поэтому если очередь достигает правого края массива, то новые элементы записываются в начало массива;
в) для каждой очереди создается свой однонаправленный список из элементов типа ТЭО, при этом запоминаются ссылки на первое и последнее звенья списка.
2. Для работы со стеком, т.е. последовательностью элементов, в которой элементы всегда добавляются в конец и удаляются из конца ("последним пришел - первым ушел"), нужны обычно следующие операции:
ОЧИСТЕК(S)- создать пустой стекS(очистить стек);
ПЕЧСТЕК(S)– распечатать содержимое стека;
ПУСТЕК(S) - проверить, является ли стекSпустым;
ВСТЕК(S,X)- добавить в конец стекаSэлементX;
ИЗСТЕК(S,X)- удалить из очередиSпоследний элемент, присвоив его параметруX.
Требуется для каждого из указанных ниже представлений стека описать соответствующий тип СТЕК, считая, что все элементы стека имеют некоторый типТЭC, и реализовать в виде процедур или функций перечисленные операции над стеком (если операция по тем или иным причинам невыполнима, следует передать управление некоторой процедуреОШИБКА(k), считая ее уже описанной, гдеk- номер ошибки: 1 -переполнение стека, 2 -исчерпание стека).
Представление стека(n-целая константа>1):
а) для каждого стека отводится свой массив из n компонентов типаТЭC, в начале которого располагаются элементы стека, при этом запоминается индекс компоненты массива, занятой последним элементом стека;
б) для каждого стека создается свой однонаправленный список, в котором элементы стека располагаются в обратном порядке.
3. Используя очередь (предварительно выбрав и описав ее тип и создав все нужные для решения функции и процедуры для работы с этой очередью (ОЧИСТОЧ(Q), ПУСТОЧ(Q), ПЕЧОЧ(Q), ВОЧЕРЕДЬ(Q,x), ИЗОЧЕРЕДЬ(Q,x) (задача 1)), решить следующую задачу.
За один просмотр файла f и без использования дополнительных файлов напечатать элементы файла f в следующем порядке: сначала - все числа, меньшие A, затем - все числа из отрезка [A,B] (где A<B), и, наконец, - все остальные числа, сохраняя исходный взаимный порядок в каждой из этих трех групп чисел.
4. Используя очередь (предварительно выбрав и описав ее тип и создав все нужные для решения функции и процедуры для работы с этой очередью (ОЧИСТОЧ(Q), ПУСТОЧ(Q), ПЕЧОЧ(Q), ВОЧЕРЕДЬ(Q,x), ИЗОЧЕРЕДЬ(Q,x)(задача 1))), решить следующую задачу.
Содержимое текстового файла f, разделенное на строки, переписать в текстовый файлg, перенося при этом в конец каждой строки все входящие в нее цифры (с сохранением исходного взаимного порядка как среди цифр, так и среди остальных литер строки).
5. Используя очередь (предварительно выбрав и описав ее тип и создав все нужные для решения функции и процедуры для работы с этой очередью (ОЧИСТОЧ(Q), ПУСТОЧ(Q), ПЕЧОЧ(Q), ВОЧЕРЕДЬ(Q,x), ИЗОЧЕРЕДЬ(Q,x)(задача 1))), решить следующую задачу.
type имя= (Анна, ... , Яков);
дети= array [имя,имя] of boolen;
потомки=file of имя;
Считая заданными имя И и массив Д типа ДЕТИ(Д[X,Y]=true, если человек по имени Y является ребенком человека по имени X), записать в файл P типа ПОТОМКИ имена всех потомков человека с именем И в следующем порядке: сначала - имена всех его детей, затем - всех его внуков, затем - всех правнуков и т.д..
6. Используя стек (предварительно выбрав и описав его тип и создав все нужные для решения функции и процедуры для работы с этим стеком (ПУСТЕК(S), ПЕЧСТЕК(S), ОЧИСТЕК(S), ВСТЕК(S,x) и ИЗТЕК(S,x)(задача 2)), решить следующую задачу.
Напечатать содержимое текстового файла t, выписывая литеры каждой его строки в обратном порядке.
7. Используя стек (предварительно выбрав и описав его тип и создав все нужные для решения функции и процедуры для работы с этим стеком (ПУСТЕК(S), ПЕЧСТЕК(S), ОЧИСТЕК(S), ВСТЕК(S,x) и ИЗТЕК(S,x)(задача 2))), решить следующую задачу.
Проверить, является ли содержимое текстового файла tправильной записью формулы следующего вида:
<формула>::= <терм> <терм>+<формула><терм>-<формула>
<терм>::= <имя> <(<формула>)[<формула>]{<формула>}
<имя::= x yz
8. Используя стек (предварительно выбрав и описав его тип и создав все нужные для решения функции и процедуры для работы с этим стеком (ПУСТЕК(S), ПЕЧСТЕК(S), ОЧИСТЕК(S), ВСТЕК(S,x) и ИЗТЕК(S,x)(задача 2)), решить следующую задачу.
В текстовом файле fзаписана без ошибок формула следующего вида:
<формула>::= <цифра>М(<формула>,<формула>)м(<формула>,<формула>)
<цифра>::= 0 123456789,
где М обозначает функциюmax, амобозначает функциюmin.
Вычислить (как целое число) значение данной формулы (например,
М (5, м (6, 8)) 6).
9. Используя стек (предварительно выбрав и описав его тип и создав все нужные для решения функции и процедуры для работы с этим стеком (ПУСТЕК(S), ПЕЧСТЕК(S), ОЧИСТЕК(S), ВСТЕК(S,x) и ИЗТЕК(S,x)(задача 2)), решить следующую задачу.
В текстовом файле LOGзаписано без ошибок логическое выражение (ЛВ) в следующей форме:
<ЛВ>::=true false(<ЛВ>)(<ЛВ><ЛВ>(<ЛВ><ЛВ>),
где знаки ,иобозначают соответственно отрицание, коньюнкцию и дизьюнкцию.
Вычислить (как boolean) значение этого выражения.
10. Используя очередь и/или стек (предварительно выбрав и описав их типы и создав все нужные для решения функции и процедуры для работы над ними (задача 1 и/или 2)), решить следующую задачу.
В текстовом файле f записан текст, сбалансированный по круглым скобкам:
<текст>::=<пусто> <элемент><текст>
<элемент>::=<буква> (<текст>)
Требуется для каждой пары соответствующих открывающей и закрывающей скобок напечатать номера их позиций в тексте, упорядочив пары номеров в порядке возрастания номеров позиций закрывающих скобок. Например, для текста A+(45-f(X)*(B-C)) надо напечатать: 8 10; 12 16; 3 17.
11. Используя очередь и/или стек (предварительно выбрав и описав их типы и создав все нужные для решения функции и процедуры для работы над ними (задача 1 и/или 2)), решить следующую задачу.
В текстовом файле f записан текст, сбалансированный по круглым скобкам:
<текст>::=<пусто> <элемент><текст>
<элемент>::=<буква> (<текст>)
Требуется для каждой пары соответствующих открывающей и закрывающей скобок напечатать номера их позиций в тексте, упорядочив пары номеров в порядке возрастания номеров позиций открывающих скобок. Например, для текста A+(45-f(X)*(B-C)) надо напечатать 3 17; 8 10; 12 16.
12. Под "выражением" будем понимать конструкцию следующего вида:
<выражение>::=<терм> <терм><терм><знак><выражение>
<знак+->::=+ -
<терм>::=<множитель> <множитель>*<терм>
<множитель>::=<число><переменная>(<выражение>)<множитель>**<число>
<число>::=<цифра>
<переменная>::=<буква>,
где ** обозначают возведение в степень.
Постфиксной формой записи выражения abназывается запись, в которой знак операции размещен за операндами:ab. Примеры:
a-b ab-
a*b+c ab*c- (т.е. (ab*)c+)
a*(b+c) abc+* (т.е. a(bc+)*)
a+b**c**d*e abc**d**e*+
Описать функцию value(postfix), которая вычисляет как целое число значение выражения (без переменных), записанного в постфиксной форме в текстовом файлеpostfix.
Использовать следующий алгоритм вычисления. Выражение просматривается слева направо. Если встречается операнд (число), то его значение (как целое) заносится в стек, а если встречается знак операции, то из стека извлекаются два последних элемента (это операнды данной операции), над ними выполняется операция и ее результат записывается в стек. В конце концов в стеке останется только одно число - значение всего выражения.
13. Описать процедуру translate(infix,postfix), которая переводит выражение (определение "выражения" смотри в задаче 12), записанное в обычной (инфиксной) форме в текстовом файле infix, в постфиксную форму и в таком виде записывает его в текcтовый файлpostfix.
Использовать следующий алгоритм перевода. В стек записывается открывающая скобка, и выражение просматривается слева направо. Если встречается операнд (число или переменная), то он сразу переносится в файл postfix. Если встречается открывающая скобка, то она заносится в стек, а если встречается закрывающая скобка, то из стека извлекаются находящиеся там знаки операций до ближайшей открывающей скобки, которая также удаляется из стека, и все знаки (в порядке их извлечения) записываются в файлpostfix. Когда же встречается знак операции, то из конца стека извлекаются (до ближайшей скобки, которая сохраняется в стеке) знаки операций, старшинство которых больше или равно старшинству данной операции, и они записываются в файл postfix, после чего рассматриваемый знак заносится в стек. В заключение выполняются такие же действия, как если бы встречалась закрывающая скобка.
14. Описать (нерекурсивную) процедуру infixprint(postfix), которая печатает в обычной (инфиксной) форме выражение (определение "выражения" смотри в задаче 12), записанное в постфиксной форме в текстовом файлеpostfix(лишние скобки желательно не печатать).
15. Сформировать файл из символов и с помощью очереди за один просмотр файла напечатать элементы файла в следующем порядке: сначала все символы, отличные от цифр, а затем все цифры, сохраняя исходный порядок в каждой из этих групп символов.
16. Сформировать файл из символов и с помощью очереди за один просмотр файла напечатать сначала все гласные буквы, затем знаки препинания и, наконец, - все согласные, сохраняя исходный порядок в каждой из этих групп символов.
17. В текстовом файле записана без ошибок формула вида: цифра или R(формула, формула), илиL(формула, формула), гдеRобозначает функцию взять правое число,L-взять левое число. Вычислить значение данной формулы ( например,R(8, R(3,L(4,5)))=4 ).
18. Сформировать файл из натуральных чисел и с помощью очереди за один просмотр файла напечатать элементы файла в следующем порядке: сначала все однозначные числа, затем двузначные, сохраняя исходный порядок чисел в каждой из этих групп.
19. Сформировать файл из символов и с помощью очереди за один просмотр файла напечатать элементы файла напечатать элементы файла в следующем порядке: сначала все символы, отличные от знаков препинания и цифр, затем знаки препинания и наконец – все цифры, сохраняя исходный порядок в каждой из этих групп символов.
20. Сформировать файл из натуральных чисел и с помощью очереди за один просмотр файла напечатать элементы файла напечатать элементы файла в следующем порядке: сначала все числа, делящиеся на 5, затем все нечетные числа, не делящиеся на 5, и наконец – все четные числа, не делящиеся на 5, сохраняя исходный порядок в каждой из этих групп чисел.
21. В текстовом файле записана без ошибок формула вида: цифра или s(формула, формула) илиp(формула, формула), гдеs (a,b) = (a+b)mod10,
p (a,b) = (a*b) mod 10. Вычислить значение этой формулы.
Например, p (6, s (8, 4)) = 2.
22. Сформировать файл из натуральных чисел и с помощью очереди за один просмотр файла напечатать элементы файла в следующем порядке: сначала все однозначные числа, затем все двузначные. Первая группа чисел выводится в исходном порядке, вторая - в обратном порядке. Например: 2, 15, 7, 24, 37, 8 2, 7, 8, 37, 24, 15.
23. Сформировать файл из символов и с помощью очереди за один просмотр файла напечатать элементы файла в следующем порядке: сначала все знаки препинания в исходном порядке, затем все согласные в обратном порядке, затем все согласные в обратном порядке, и наконец – все гласные в исходном порядке.
24. В текстовом файле записана без ошибок формула вида: цифра или m(формула, формула) илиp(формула, формула), гдеm (a, b) = (a-b) mod 10,
p (a, b) = (a+b) mod 10. Вычислить значение этой формулы.
Например, m (9, p (p (3, 5), m (3, 8))) = 6.
В упражнениях 25-33 использовать двоичные деревья при следующем их описании.
type ТЭД= ... : {тип элементов дерева}
дерево= ^ вершина;
вершина=record элем:ТЭД;
лев, прав:дерево end;
В этих упражнениях
Т,
и
обозначают деревья, а Е – величину типа
ТЭД.
25. Используя очередь или стек (предварительно описав его тип и операции над ним (упр.1 или упр.2)), описать процедуру или функцию, которая присваивает параметру Еэлемент из самого левого листа непустого дереваТ(лист - вершина, из которого не выходит ни одной ветви). Продемонстрировать работу программы.
26. Используя очередь или стек (предварительно описав его тип и операции над ним (упр.1 или упр.2)), описать процедуру или функцию, которая определяет число вхождений элемента Ев деревоТ. Продемонстрировать работу программы.
27. Используя очередь или стек (предварительно описав его тип и операции над ним (упр.1 или упр.2)), описать процедуру или функцию, которая вычисляет среднее арифметическое всех элементов непустого дерева Т(ТЭД=real). Продемонстрировать работу программы.
28. Используя очередь или стек (предварительно описав его тип и операции над ним (упр.1 или упр.2)), описать процедуру или функцию, которая заменяет в дереве Твсе отрицательные элементы на их абсолютные величины (ТЭД=real). Продемонстрировать работу программы.
29. Используя очередь или стек (предварительно описав его тип и операции над ним (упр.1 или упр.2)), описать процедуру или функцию, которая меняет местами максимальный и минимальный элементы непустого дерева Т, все элементы которого различны (ТЭД=real). Продемонстрировать работу программы.
30. Используя очередь или стек (предварительно описав его тип и операции над ним (упр.1 или упр.2)), описать процедуру или функцию, которая печатает элементы из всех листьев дерева Т(ТЭД=char). Продемонстрировать работу программы.
31. Используя очередь или стек (предварительно описав его тип и операции над ним (упр.1 или упр.2)), описать процедуру или функцию, которая печатает все элементы дерева Тпо уровням ( сначала - из корня дерева, затем (слева направо) - из вершин, дочерних по отношению к корню, затем (также слева направо) - из вершин, дочерних по отношению к этим вершинам, и т.д.) (ТЭД=integer). Продемонстрировать работу программы.
32. Используя очередь или стек (предварительно описав его тип и операции над ним (упр.1 или упр.2)), описать процедуру или функцию, которая находит в непустом дереве Тдлину (число ветвей) пути от корня до ближайшей вершины с элементомЕ; еслиЕне входит вТ, за ответ принять -1. Продемонстрировать работу программы.
33. Используя очередь или стек (предварительно описав его тип и операции над ним (упр.1 или упр.2)), описать процедуру или функцию, которая подсчитывает число вершин на n-ом уровне непустого дереваТ(корень считать вершиной 0-го уровня). Продемонстрировать работу программы.