Индивидуальное задание №2 по теме «Динамические структуры данных»

advertisement
Индивидуальное задание №2 по теме
«Динамические структуры данных»
При выполнении заданий запрещается использовать возможности библиотеки
STL!!! Во всех задачах должна быть защита «от дурака»
1. Абстрактная вычислительная машина имеет один регистр и шесть инструкций:
LD A - Помещает операнд А в регистр
ST A - Помещает содержимое регистра в переменную с именем А
AD A - Прибавляет значение А к регистру. Результат остается в регистре.
SB A - Вычитает значение А из регистра. Результат остается в регистре.
ML A - Умножает содержимое регистра на значение переменной с именем A. Результат остается в регистре.
DV A - Делит нацело содержимое регистра на значение А. Результат остается в регистре.
Дано выражение в постфиксной форме, состоящее из однобуквенных операндов и операций «+», «–
», «*», «/». Написать программу вывода инструкций вычислительной машины, необходимых для вычисления выражения. Результат вычисления должен оставаться в регистре, разрешается использовать обозначения Tn для временных переменных. Копылов
Пример. Для выражения ABC*+DE-/ перечень инструкций имеет вид
LD B
ML C
ST T1
LD A
AD T1
ST T1
LD D
SB E
ST T2
LD T1
DV T2
2. Для сортировки по неубыванию некоторого списка целых чисел реализовать следующий
метод:
- все числа поместить в линейный однонаправленный список;
- создать 10 пустых дополнительных списков (по количеству арабских цифр 0-9)
- в список для цифры 0 поместить из исходного списка все числа, у которых последняя цифра 0;
- в список для цифры 1 поместить все числа, у которых последняя цифра 1;
… и.т.д.
- в список для цифры 9 - все числа, у которых последняя цифра 9.
- после этого все полученные 10 списков объединить в один, записывая последнее звено k-го
списка для цифр в начало (k+1) списка;
Так, если в списках цифр были:
0: 10, 40, 60
1: 21, 11, 61
2: 42, 62, 22
После их объединения должен образоваться новый список:
10, 40, 90, 21, 11, 61, 82, 52, 22
- далее, аналогичный метод применяем к предпоследней цифре чисел (не нарушая при этом
упорядоченность по последней цифре), затем по отношению к третьей с конца цифре и т.д. Выводить на экран все промежуточные результаты (после сортировки по каждой цифре). То есть, если
самое большое число было четырехзначным, то нужно вывести 4 списка. Смирнов
3. Используя структуру стека, вычислить выражение, содержащее две операции: поиск минимума
(обозначается m(<число1>,<число2>)) и поиск максимума (обозначается М(<число1>,<число2>)). Операции могут быть вложенными, например, M(15, m(16,8)) (в данном выражении ищем минимум из 16 и 8, а
потом ищем максимум от результата m(16,8) и 15, ответ 15). В качестве аргументов могут использоваться
только целые положительные числа. Строка, вводимая пользователем, корректна и не содержит пробелов.
Шишкина
4. Дан набор слов. Известно, что эти слова использовались для игры, в которой очередное слово
должно заканчиваться той буквой, на которую закончилось предыдущее слово. С какого слова начинается
игра, не имеет значения. Если слово оканчивается на «ь», то используется предыдущая буква. Входной
файл содержит все слова в одной строке, слова записаны строчными буквами русского алфавита, между
словами может быть один или более пробелов. Требуется выстроить данные слова в цепочку согласно правилам игры. Достаточно найти одно подходящее решение (подсказка – использовать циклический двунаправленный список). Кудрявцев
Пример 1 файла входных данных:
хмель мороз налог лимон запах дым лошадь холм гол молох
Пример 1 файла выходных данных:
налог гол лошадь дым мороз запах холм молох хмель лимон
Пример 2 файла входных данных:
аквариум сирень жатва заноза нож авось тормоз мост
Пример 2 файла выходных данных:
авось сирень нож жатва аквариум мост тормоз заноза
5. Разработать программу, преобразования выражения из инфиксной формы в префиксную и
постфиксную при условии, что используются знаки операций +, –, *, / и операндами являются переменные, выраженные однобуквенными именами. Румянцев
6. Реализовать с помощью списка алгоритм сортировки простыми вставками. Копировать информационные поля элементов списка не разрешается, вместо этого нужно переставлять целиком элементы списка. Айвани
7. Реализовать с помощью списка алгоритм сортировки простым выбором. Копировать информационные поля элементов списка не разрешается, вместо этого нужно переставлять целиком элементы списка.
Бушмакина
8. Для заданного выражения, содержащего скобки, требуется для каждой пары соответствующих открывающей и закрывающей скобок напечатать номера их позиций в тексте, упорядочив пары номеров в
порядке возрастания номеров позиций:
а) закрывающих скобок;
б) открывающих скобок. Шафигулин
.
Например, для текста А+(45–F(X)*(B–C)) надо напечатать:
а) 8 10; 12 16; 3 17;
б) 3 17; 8 10; 12 16. Кондратьев
9. Найти количество четных цифр в записи числа NK, где 1≤N≤9, 1≤K≤10000./ Во входном
файле записано число N, а за ним через пробел – число K. Для реализации операций с «длинными»
числами использовать динамические структуры данных. Боталова
10. Многочлен P(x)=anxn+an-1xn-1+…+a1x+a0 с целыми коэффициентами можно представить в
виде списка, в котором первое информационное поле соответствует коэффициенту при неизвестном, а второе показателю степени этого же неизвестного. Написать процедуры для ввода и вывода
многочлена из строкового формата в список. В качестве строкового формата может использоваться запись типа: 52y^10 – 3y^8 + y, где знак ^ означает возведение в степень. Реализовать функцию
для вычисления значения многочлена в заданной точке и процедуру для определения аналитического вида производной P’(x). Известно, что подобные члены в исходном многочлене отсутствуют
и члены располагаются в списке в порядке убывания степеней. С помощью описанных процедур
ввести многочлен P(x), выполнить вычисление аналитического вида производной P’(x), вычислить
значение многочлена в заданной точке. Лазуков
11. Есть министерство из n чиновников. Каждый из них может иметь только одного непосредственного начальника и произвольное количество подчиненных. Однако в министерстве работает только один чиновник, не имеющий начальников, – главный чиновник. Для того чтобы предприниматель мог получить некоторую лицензию, необходимо получить подпись на документе
главного чиновника. Каждый чиновник для выставления своей подписи требует подпись на документе хотя бы одного из своих непосредственных подчиненных и, может быть, некоторую взятку
– известное число у. е.
Необходимо определить, какое минимальное количество денег предпринимателю нужно заплатить, чтобы получить лицензию, и указать соответствующий этой сумме порядок получения
подписей. Колесников
12. Написать программу, которая по заданной формуле строит дерево и производит вычисления с помощью построенного дерева. Формула задана в традиционной инфиксной записи, в ней
могут быть скобки, максимальная степень вложенности которых ограничивается числом 10. Аргументами могут быть целые числа и переменные, задаваемые однобуквенными именами. Допустимые операции: +, -, *, /. Унарный минус допустим. С помощью построенного дерева формулы
упростить формулу, заменяя в ней все поддеревья, соответствующие формулам ((f1±f2)*f3) и
(f1*(f2±f3)) на поддеревья, соответствующие формулам (f1*f3±f2*f3) и (f1*f2±f1*f3). Радостев
13. Написать программу, которая по заданной формуле строит дерево и производит вычисления с помощью построенного дерева. Формула задана в традиционной инфиксной записи, в ней
могут быть скобки, максимальная степень вложенности которых ограничивается числом 10. Аргументами могут быть целые числа и переменные, задаваемые однобуквенными именами. Допустимые операции: +, -, *, /. Унарный минус допустим. С помощью построенного дерева формулы
упростить формулу, заменяя в ней все поддеревья, соответствующие формулам (f1*f3±f2*f3) и
(f1*f2±f1*f3) на поддеревья, соответствующие формулам ((f1±f2)*f3) и (f1*(f2±f3)). Ковтун
14. В файле даны n целых чисел, и здесь же указан путь их размещения в бинарном дереве
виде двоичного кода (коды не повторяются). Построить двоичное дерево целых чисел, в котором
путь по дереву определяется указанным двоичным кодом в этом листе (1 – переход к правому потомку, 0 - переход к левому потомку). В корень автоматически заносится значение 0. Например,
для исходных данных:
15
111
18
101
3
10
8
11
9
1
11
0
7
100
4
110
17
00
20
01
должно быть построено такое дерево:
Учитывать ситуацию, когда дерево не может быть построено. Галиева
15. На телефонной станции картотека абонентов, содержащая сведения о телефонах и их
владельцах, организованна как бинарное дерево. Составить программу, которая:
1) Обеспечивает начальное формирование картотеки в виде бинарного дерева (информационные поля: номер телефона, общее время разговора за месяц, сумма долга);
2) Производит вывод всей картотеки;
3) Обеспечивает добавление в картотеку для указанного номера телефона времени нового
разговора путем добавления его к уже заданному (суммированием);
4) определяет сумму задолженности для каждого номера после указания ввода стоимости 1
минуты.
5) выводит извещение на оплату телефонного разговора для заданного номера телефона.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
Лобачева
16. Дана строка S, содержащая описание непустого дерева в следующем формате
<вершина>|<вершина>(<левое поддерево>,<правое поддерево>)|
<вершина>(<левое поддерево>)|
<вершина>(,<правое поддерево>)
где <вершина> – это цифра.
Например, 4(2,6(,7(3))) (пробелы отсутствуют, вид описания вершины зависит от того, имеет
ли вершина непустое левое и/или правое поддерево). Создать дерево по описанию, приведенному
в строке S, и вывести его «боком». Определить, является ли данное дерево АВЛ-деревом. Если
нет, то определить, для какого узла нарушается принцип сбалансированности (вывести первый такой узел). Кирюшкин
17. Написать программу, которая считывает из текстового файла текст (слова разделены пробелами) и строит на основе этого текста частотный словарь в виде очереди. В начале очереди
должны идти наиболее часто встречающиеся слова, в конце – менее часто встречающиеся. Вывести на экран список слов и частоту их встречаемости. Исключить из списка слова, которые встречаются только один раз и снова вывести список на экран. Дмитриев
18. Даны два списка L1 и L2 целых чисел. Написать подпрограммы, возвращающие новые
списки, включающие по одному разу числа, которые:
а) входят одновременно в оба списка;
б) входят хотя бы в один из списков;
в) входят в один из списков L1 и L2, но в то же время не входят в другой из них;
г) входят в список L1, но не входят в список L2.
Вывести в текстовый файл исходные списки и результат. Жигулев
19. Составить программу, вычисляющую разность двух натуральных многозначных чисел с
количеством знаков более 20. Для решения задачи использовать списки. Кирьянов
20. Составить программу, вычисляющую произведение двух натуральных многозначных чисел с количеством знаков более 20. Для решения задачи использовать списки. Кузнецов
21. Составить программу, перевода многозначного числа с количеством знаков более 20 в
восьмеричную систему счисления. Для решения задачи использовать списки. Софронов
22. Составить программу, перевода многозначного числа с количеством знаков более 20 в
шестнадцатеричную систему счисления. Для решения задачи использовать списки. Токарев
23. Составить программу, перевода многозначного числа с количеством знаков более 20 в
двоичную систему счисления. Для решения задачи использовать списки. Попов
24. Реализовать программу поиска в дереве T1 поддерева, равного T2. Исходные деревья строятся на основе двух списков целых чисел, которые должны считываться из текстового файла (деревья должны быть деревьями поиска). В качестве результаты выводить логическое значение.
Треногин
25. Написать программу построения тернарного дерева, где кроме левого и правого потомков
есть центральный потомок, в который будут заноситься значение текущего элемента, совпадающее со значением корня (у самих центральных потомков левый и правый потоки отсутствуют)..
Данные считывать из текстового файла. Написать процедуру концевого обхода для данного вида
деревьев. Вывести содержимое всех вершин дерева, используя концевой обход. Вывести для каждой вершины дерева количество ее центральных потомков. Иммис
26. Написать программу построения генеалогического дерева. Данные для дерева считывать
из текстового файла в следующем виде:
Иван#
Сергей Мария#
Дмитрий Ольга Олег Ирина#
Евгений Елена Юрий Татьяна Александр Инга Василий Ульяна#
и т.д.
Знак # означает окончание очередного уровня дерева (необходимо для случая, когда имена не
помещаются в одну строку). Имена не должны повторяться.
Вывести построенное дерево в текстовый файл, положив его «на бок». Вывести на экран всех
предков для узла x (x – это имя, которое запрашивается с клавиатуры) и всех потомков для узла y
(запрашивается с клавиатуры). Карачев
27. Абстрактная вычислительная машина имеет один регистр и шесть инструкций:
LD A - Помещает операнд А в регистр
ST A - Помещает содержимое регистра в переменную с именем А
AD A - Прибавляет значение А к регистру. Результат остается в регистре.
SB A - Вычитает значение А из регистра. Результат остается в регистре.
ML A - Умножает содержимое регистра на значение переменной с именем A. Результат остается в регистре.
DV A - Делит нацело содержимое регистра на значение А. Результат остается в регистре.
Дано выражение в постфиксной форме, состоящее из однобуквенных операндов и операций «+», «–
», «*», «/». Написать программу вывода инструкций вычислительной машины, необходимых для вычисления выражения. Результат вычисления должен оставаться в регистре, разрешается использовать обозначения Tn для временных переменных. Неверов
Пример. Для выражения ABC*+DE-/ перечень инструкций имеет вид
LD B
ML C
ST T1
LD A
AD T1
ST T1
LD D
SB E
ST T2
LD T1
DV T2
28 Для сортировки по неубыванию некоторого списка целых чисел реализовать следующий
метод:
- все числа поместить в линейный однонаправленный список;
- создать 10 пустых дополнительных списков (по количеству арабских цифр 0-9)
- в список для цифры 0 поместить из исходного списка все числа, у которых последняя цифра 0;
- в список для цифры 1 поместить все числа, у которых последняя цифра 1;
… и.т.д.
- в список для цифры 9 - все числа, у которых последняя цифра 9.
- после этого все полученные 10 списков объединить в один, записывая последнее звено k-го
списка для цифр в начало (k+1) списка;
Так, если в списках цифр были:
0: 10, 40, 60
1: 21, 11, 61
2: 42, 62, 22
После их объединения должен образоваться новый список:
10, 40, 90, 21, 11, 61, 82, 52, 22
- далее, аналогичный метод применяем к предпоследней цифре чисел (не нарушая при этом
упорядоченность по последней цифре), затем по отношению к третьей с конца цифре и т.д. Выводить на экран все промежуточные результаты (после сортировки по каждой цифре). То есть, если
самое большое число было четырехзначным, то нужно вывести 4 списка. Никифорова
29. Используя структуру стека, вычислить выражение, содержащее две операции: поиск минимума
(обозначается m(<число1>,<число2>)) и поиск максимума (обозначается М(<число1>,<число2>)).
Операции могут быть вложенными, например, M(15, m(16,8)) (в данном выражении ищем минимум
из 16 и 8, а потом ищем максимум от результата m(16,8) и 15, ответ 15). В качестве аргументов могут использоваться только целые положительные числа. Строка, вводимая пользователем, корректна и не содержит пробелов. Пехотин
30. Дан набор слов. Известно, что эти слова использовались для игры, в которой очередное слово
должно заканчиваться той буквой, на которую закончилось предыдущее слово. С какого слова
начинается игра, не имеет значения. Если слово оканчивается на «ь», то используется предыдущая
буква. Входной файл содержит все слова в одной строке, слова записаны строчными буквами русского алфавита, между словами может быть один или более пробелов. Требуется выстроить данные
слова в цепочку согласно правилам игры. Достаточно найти одно подходящее решение (подсказка –
использовать циклический двунаправленный список). Онянов
Пример 1 файла входных данных:
хмель мороз налог лимон запах дым лошадь холм гол молох
Пример 1 файла выходных данных:
налог гол лошадь дым мороз запах холм молох хмель лимон
Пример 2 файла входных данных:
аквариум сирень жатва заноза нож авось тормоз мост
Пример 2 файла выходных данных:
авось сирень нож жатва аквариум мост тормоз заноза
31. Разработать программу, преобразования выражения из инфиксной формы в префиксную и
постфиксную при условии, что используются знаки операций +, –, *, / и операндами являются переменные, выраженные однобуквенными именами. Никонов
32. Реализовать с помощью списка алгоритм сортировки простыми вставками. Копировать информационные поля элементов списка не разрешается, вместо этого нужно переставлять целиком элементы
списка. Мальцева
33. Реализовать с помощью списка алгоритм сортировки простым выбором. Копировать информационные поля элементов списка не разрешается, вместо этого нужно переставлять целиком элементы
списка. Сырчиков
8. Для заданного выражения, содержащего скобки, требуется для каждой пары соответствующих открывающей и закрывающей скобок напечатать номера их позиций в тексте, упорядочив пары номеров в
порядке возрастания номеров позиций:
а) закрывающих скобок;
б) открывающих скобок
.
Например, для текста А+(45–F(X)*(B–C)) надо напечатать:
а) 8 10; 12 16; 3 17;
б) 3 17; 8 10; 12 16. Имшинецкий
34. Есть министерство из n чиновников. Каждый из них может иметь только одного непосредственного начальника и произвольное количество подчиненных. Однако в министерстве работает только один чиновник, не имеющий начальников, – главный чиновник. Для того чтобы предприниматель мог получить некоторую лицензию, необходимо получить подпись на документе
главного чиновника. Каждый чиновник для выставления своей подписи требует подпись на документе хотя бы одного из своих непосредственных подчиненных и, может быть, некоторую взятку
– известное число у. е.
Необходимо определить, какое минимальное количество денег предпринимателю нужно заплатить, чтобы получить лицензию, и указать соответствующий этой сумме порядок получения
подписей. Кондратов
35. Написать программу, которая по заданной формуле строит дерево и производит вычисления с помощью построенного дерева. Формула задана в традиционной инфиксной записи, в
ней могут быть скобки, максимальная степень вложенности которых ограничивается числом 10. Аргументами могут быть целые числа и переменные, задаваемые однобуквенными
именами. Допустимые операции: +, -, *, /. Унарный минус допустим. С помощью построенного дерева формулы упростить формулу, заменяя в ней все поддеревья, соответствующие формулам ((f1±f2)*f3) и (f1*(f2±f3)) на поддеревья, соответствующие формулам
(f1*f3±f2*f3) и (f1*f2±f1*f3). Хробостова
36. Написать программу, которая по заданной формуле строит дерево и производит вычисления с помощью построенного дерева. Формула задана в традиционной инфиксной записи, в
ней могут быть скобки, максимальная степень вложенности которых ограничивается числом 10. Аргументами могут быть целые числа и переменные, задаваемые однобуквенными
именами. Допустимые операции: +, -, *, /. Унарный минус допустим. С помощью построенного дерева формулы упростить формулу, заменяя в ней все поддеревья, соответствующие формулам (f1*f3±f2*f3) и (f1*f2±f1*f3) на поддеревья, соответствующие формулам
((f1±f2)*f3) и (f1*(f2±f3)). Мартьянова
37. В файле даны n целых чисел, и здесь же указан путь их размещения в бинарном дереве виде
двоичного кода (коды не повторяются). Построить двоичное дерево целых чисел, в котором
путь по дереву определяется указанным двоичным кодом в этом листе (1 – переход к правому потомку, 0 - переход к левому потомку). В корень автоматически заносится значение
0. Например, для исходных данных:
15
111
18
101
3
10
8
11
9
1
11
0
7
100
4
110
17
00
20
01
должно быть построено такое дерево:
Учитывать ситуацию, когда дерево не может быть построено. Свободно
38. На телефонной станции картотека абонентов, содержащая сведения о телефонах и их
владельцах, организованна как бинарное дерево. Составить программу, которая:
1) Обеспечивает начальное формирование картотеки в виде бинарного дерева (информационные поля: номер телефона, общее время разговора за месяц, сумма долга);
2) Производит вывод всей картотеки;
3) Обеспечивает добавление в картотеку для указанного номера телефона времени нового
разговора путем добавления его к уже заданному (суммированием);
4) определяет сумму задолженности для каждого номера после указания ввода стоимости 1
минуты.
5) выводит извещение на оплату телефонного разговора для заданного номера телефона.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
Федорук
39. Дана строка S, содержащая описание непустого дерева в следующем формате
<вершина>|<вершина>(<левое поддерево>,<правое поддерево>)|
<вершина>(<левое поддерево>)|
<вершина>(,<правое поддерево>)
где <вершина> – это цифра.
Например, 4(2,6(,7(3))) (пробелы отсутствуют, вид описания вершины зависит от того, имеет
ли вершина непустое левое и/или правое поддерево). Создать дерево по описанию, приведенному
нет, то определить, для какого узла нарушается принцип сбалансированности (вывести первый такой узел). Митрофанов
40. Написать программу, которая считывает из текстового файла текст (слова разделены пробелами) и строит на основе этого текста частотный словарь в виде очереди. В начале очереди должны идти наиболее часто встречающиеся слова, в конце – менее часто встречающиеся. Вывести на экран список слов и частоту их встречаемости. Исключить из списка слова,
которые встречаются только один раз и снова вывести список на экран. Свободно
41. Даны два списка L1 и L2 целых чисел. Написать подпрограммы, возвращающие новые
списки, включающие по одному разу числа, которые:
а) входят одновременно в оба списка;
б) входят хотя бы в один из списков;
в) входят в один из списков L1 и L2, но в то же время не входят в другой из них;
г) входят в список L1, но не входят в список L2.
Вывести в текстовый файл исходные списки и результат. Свободно
42. Составить программу, вычисляющую разность двух натуральных многозначных чисел с
количеством знаков более 20. Для решения задачи использовать списки. Теплоухов
43. Составить программу, перевода многозначного числа с количеством знаков более 20 в
шестнадцатеричную систему счисления. Для решения задачи использовать списки. Пешкова
44. Составить программу, перевода многозначного числа с количеством знаков более 20 в
двоичную систему счисления. Для решения задачи использовать списки. Паукова
45. Реализовать программу поиска в дереве T1 поддерева, равного T2. Исходные деревья строятся на основе двух списков целых чисел, которые должны считываться из текстового файла (деревья должны быть деревьями поиска). В качестве результаты выводить логическое значение.
Свободно
46. Написать программу построения тернарного дерева, где кроме левого и правого потомков
есть центральный потомок, в который будут заноситься значение текущего элемента, совпадающее со значением корня (у самих центральных потомков левый и правый потоки отсутствуют)..
Данные считывать из текстового файла. Написать процедуру концевого обхода для данного вида
деревьев. Вывести содержимое всех вершин дерева, используя концевой обход. Вывести для каждой вершины дерева количество ее центральных потомков. Паршакова
47. Написать программу построения генеалогического дерева. Данные для дерева считывать
из текстового файла в следующем виде:
Иван#
Сергей Мария#
Дмитрий Ольга Олег Ирина#
Евгений Елена Юрий Татьяна Александр Инга Василий Ульяна#
и т.д.
Знак # означает окончание очередного уровня дерева (необходимо для случая, когда имена не
помещаются в одну строку). Имена не должны повторяться.
Вывести построенное дерево в текстовый файл, положив его «на бок». Вывести на экран всех
предков для узла x (x – это имя, которое запрашивается с клавиатуры) и всех потомков для узла y
(запрашивается с клавиатуры). Реутов
Download