- •Лабораторные работы. Сборник задач.
- •Оглавление
- •Часть 1. Лаборатоные работы
- •Работа со структурами и объединениями …………………………………….91
- •3 Задача
- •4 Задача
- •5 Задача
- •6 Задача
- •Дополнительное условие:использование цикла с предусловием.
- •1 Задача
- •2 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функций.
- •3 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функции.
- •4 Задача
- •Дополнительное условие: программа написана без использования функции
- •Дополнительное условие: программа написана с использованием функции.
- •Самостоятельная работа
- •Лабораторная работа №3
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •Лабораторная работа №6
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •4 Задача
- •Синтаксический анализатор
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •3 Задача
- •Работа с каталогами
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •1 Задача Реализовать очередь, состоящую из целых чисел
- •Комментарий:
- •2 Задача
- •1 Задача
- •Идеально-сбалансированные деревья
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности.
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •Работа с несколькими массивами
- •Преобразование массива
- •Изменение элементов массива
- •2 Уровень сложности Формирование массива и вывод его элементов
- •Анализ элементов массива
- •Преобразование массива
- •Изменение элементов массива
- •Удаление и вставка элементов
- •Серии целых чисел
- •3 Уровень сложности Множества точек на плоскости
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •Not простое_логическое
- •(Простое_логическое знак_операции простое_логическое)
- •Построить синтаксический анализатор для понятия предложение.
- •1 Уровень сложности
- •2 Уровень сложности
- •1 Уровень сложности
- •Примеры:
- •Двусвязные списки
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
3 Уровень сложности
Задача о Ханойской башне.
Имеются три стержня. На одном расположено nколец различного диаметра. Перенести кольца на другой стержень, используя третий как вспомогательный. Ни в какой момент большее кольцо не должно лежать на меньшем кольце. На каждом шаге разрешается перекладывать одно кольцо.
Имеется nнаселенных пунктов, перенумерованных от 1 доn(n= 10). Некоторые пары
пунктов соединены дорогами. Определить, можно ли попасть по этим дорогам из 1-го пункта в n-й. информация о дорогах задается в виде последовательности пар чиселiиj(i<j), указывающих, чтоi-й иj-й пункты соединены дорогой; признак конца этой последовательности – пара нулей.
3. Вывести символы, которые наиболее точно соответствуют приведенным картинкам.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Синтаксический анализатор
Построить синтаксический анализатор для понятия простое_логическое.
TRUE
FALSE
простое_логическое ::= простой_идентификатор
Not простое_логическое
(простое_логическое знак_операции простое_логическое)
простой_идентификатор ::= буква
знак_операции ::= AND
OR
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Написать программу, которая по заданному простому логическому выражению вычисляет и печатает значение этого выражения.
TRUE
FALSE
простое_логическое ::= NOT простое_логическое
(Простое_логическое знак_операции простое_логическое)
знак_операции ::= AND
OR
Во входном файле записано без ошибок логическое выражение следующего вида:
логическое выражение ::= truefalseоперация (операнды)
операция ::= not and or
операнды ::= операнд операнд, операнды
операнд ::= логическое выражение
У операций andиorможет быть любое число операндов, уnot– только один.
Ввести это выражение и вычислить его значение. Например,
and (or (false, not (false)), true, not (true)) false
Построить синтаксический анализатор для понятия текст.
текст ::= элементэлемент текст
элемент ::= ав(текст)тексттекст
Во входном файле записана (без ошибок) формула следующего вида:
<формула>::=<цифра>|(<формула><знак><формула>)
<знак>::=+|-|*
<цифра>::=|1|2|3|4|5|6|7|8|9
Ввести эту формулу и вычислить ее значение.
Например: 5→5, ((2-4);6→-12)
Построить синтаксический анализатор для понятия скобки.
кругл
скобки ::= квадр
А
кругл ::= ((кругл)квадр)
В
квадр ::= квадр(кругл)
Построить синтаксический анализатор для понятия скобки.
квадр
скобки ::= кругл
кругл кругл
квадр ::= +
(квадр квадр)
кругл ::=
Построить синтаксический анализатор для понятия отношение.
отношение ::= операнд знак_отношения операнд
знак_отношения ::= =
операнд ::= выражение
выражение ::= слагаемое слагаемое
слагаемое ::= множительмножитель
множитель ::= константа переменнаявыражение
константа ::= цифра цифра
переменная ::= буква буквацифра
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия текст.
текст ::= пусто элемент текст
элемент ::= буква цифразнак(текст)
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
знак ::= +
Например, АFxC
Построить синтаксический анализатор для понятия переменная.
^ *
переменная ::= идентификатор .идентификатор
список выражений
список_выражений ::= выражение , выражение
терм
выражение ::= термвыражение
множитель
терм ::= множитель терм
целое_без_знака
множитель ::= идентификатор
(выражение)
цифра
целое_без_знака ::= цифра целое_без_знака
идентификатор ::= буква буквацифра
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия логическая_формула.
конъюнкция
логическая_формула ::= конъюнкция ORпробелы логическая_формула
множитель
конъюнкция ::= множитель ANDпробелы конъюнкция
NOTпробелы множитель
переменная
множитель ::= (логическая_формула)
TRUEпробелы
FALSEпробелы
переменная ::= буква пробелы
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
символ_пробела
пробелы ::= символ_пробела пробелы
Построить синтаксический анализатор для понятия формула.
формула ::= цифра формула знак формула
знак ::= +
цифра ::= 0|1|2|3|4|5|6|7|8|9
Построить синтаксический анализатор для понятия список_параметров.
список_параметров ::= параметрпараметр
имя = цифра цифра
параметр ::= имя = (список_параметров)
имя ::= буква буква буква
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия простое_выражение.
простое_выражение ::=
простой_идентификатор
::= (простое_выражение знак_операции простое_выражение)
простой_идентификатор ::= буква
знак_операции ::=
*
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия список_списков.
список_списков ::= список ; список
список ::= элемент элемент
элемент ::= буква
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия константное_выражение.
константное_выражение ::=
цифра цифра
::= константное_выражениеконстантное_выражение )
цифра ::=
Построить синтаксический анализатор для понятия формула.
формула ::= цифраМ (формула, формула)m(формула, формула)
цифра ::=
В текстовом файле записана без ошибок формула следующего вида:
формула ::= цифраМ (формула, формула)m(формула, формула)
цифра ::= ,
где М обозначает функцию max, аm–min. Вычислить (как целое число)
значение данной формулы. Например, М(5,m(6,8))6.
Построить синтаксический анализатор для понятия логическое выражение (ЛВ):
ЛВ ::= true false ( ! ЛВ ) ( ЛВ & ЛВ ) ( ЛВ | ЛВ ),
где знаки ! & и | обозначают соответственно отрицание, конъюнкцию и дизъюнкцию.
В текстовом файле записано без ошибок логическое выражение (ЛВ) в следующей форме:
ЛВ ::= true false ( ! ЛВ ) ( ЛВ & ЛВ ) ( ЛВ | ЛВ ),
где знаки ! & и |обозначают соответственно отрицание, конъюнкцию и дизъюнкцию.
Вычислить (как boolean) значение этого выражения.
Построить синтаксический анализатор для понятия формула.
формула ::= терм | терм + формула | терм – формула
терм ::= имя| (формула) |[ формула] |{ формула }
имя ::= x|y|z
Построить синтаксический анализатор для понятия выражение:
выражение ::= терм | терм знак выражение
знак ::= +
терм ::= множитель | множитель терм
множитель ::= число | переменная| (выражение) | множитель ^ число
число ::= цифра
переменная ::= буква
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия скобки.
кругл
скобки ::= квадр
А
кругл ::= (квадр)
В
квадр ::= кругл
Построить синтаксический анализатор для понятия последовательность.
последовательность ::= {элемент разделитель}*
элемент ::= целое_число
разделитель ::= пробелы
целое_число ::= пробел целое_без_знака
пробелы ::= символ_пробела
символ_пробела пробелы
цифра
целое_без_знака ::= цифра целое_без_знака
цифра ::=
Построить синтаксический анализатор для понятия присваивание.
присваивание ::= левая_часть :=правая_часть
левая_часть ::= переменная
правая_часть ::= переменная
переменная знак_операции переменная
переменная ::= буква {буква | цифра}*
знак_операции ::= +*/
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия отношение.
отношение ::= операнд знак_отношения операнд
операнд ::= переменная
константа
константа ::= цифра {цифра}*
переменная ::= буква {буква | цифра}*
=
>
<
знак_отношения ::= <=
>=
<>
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия список_описаний.
список_описаний ::= описание;
описание; список_описаний
описание ::= список_идентификаторов :идентификатор
список_идентификаторов ::= идентификатор
идентификатор, список_идентификаторов
идентификатор ::= буква {буква | цифра}*
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия система_дорог.
система_дорог ::= количество_городов список_дорог
список_дорог ::= пробел
пробел дорога список_дорог
дорога ::= откуда пробел куда пробел длина_дороги
откуда ::= натуральное
куда ::= натуральное
количество_городов ::= натуральное
длина_дороги ::= цифра {цифра}*. цифра {цифра}*
цифра ::=
натуральное ::= цифра
цифра натуральное
Построить синтаксический анализатор для понятия граф.
граф ::= количество_вершин список_ребер
список_ребер ::= пробел
пробел ребро список_ребер
ребро ::= откуда пробел куда
откуда ::= натуральное
куда ::= натуральное
количество_вершин ::= натуральное
натуральное ::= цифра
цифра натуральное
цифра ::= .
Построить синтаксический анализатор для понятия скалярный_тип.
(имя_константы {, имя_константы}*)
скалярный_тип ::= константа . . константа
имя_скаляр_типа
имя_константы ::= буква {цифра | буква}*
имя_скаляр_типа ::= буква {цифра | буква}*
константа ::= цифра {цифра}* | имя_константы
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия линейная_программа.
линейная_программа ::= присваивание
присваивание; линейная_программа
присваивание ::= левая_часть :=правая_часть
левая_часть ::= переменная
правая_часть ::= переменная
переменная знак_операции переменная
переменная ::= буква {буква | цифра}*
знак_операции ::=
*
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия вещественное_число.
целое_число . целое_без_знака
вещественное_число ::= целое_число . целое_без_знака Е целое_число
целое_число Е целое_число
целое_без_знака ::= цифра {цифра}*
целое_число ::= целое_без_знака
{±} целое_без_знака
цифра ::= 0|1|2|3|4|5|6|7|8|9
Построить синтаксический анализатор для понятия описание.
описание ::= список_имен :имя
список_имен ::= имя
имя , список_имен
имя ::= буква {буква | цифра}*
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия идентификатор.
буква
идентификатор ::= идентификатор цифра
буква
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия список_идентификаторов.
список_идентификаторов ::= идентификатор
идентификатор, список_идентификаторов
идентификатор ::= буква {буква | цифра}*
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
Построить синтаксический анализатор для понятия сумма.
сумма ::= целое {знак_операции целое}*
целое ::= цифра {цифра}*
знак_операции ::= +
цифра ::= 0|1|2|3|4|5|6|7|8|9
Построить синтаксический анализатор для понятия описание_меток.
описание_меток ::= LABELметка { , метка }*;
метка ::= идентификатор | последовательность_цифр
последовательность_цифр ::= 0 . . 9999
идентификатор ::= буква {буква | цифра}*
цифра ::= 0|1|2|3|4|5|6|7|8|9
буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z