ЗАДАЧИ
problems.ru |
О проекте
|
Об авторах
|
Справочник
Каталог по темам | по источникам | |
|
Подтемы:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Версия для печати
Убрать все задачи Базовые типы данных Имеются несколько базовых типов данных: Integer, Char, Boolean и String. Константы этих типов записываются следующим образом. Константа типа String – это последовательность (длиной от 0 до 255) символов, заключенная либо в апострофы (▓), либо в двойные кавычки ("). При этом, если ограничители – апострофы, то внутри них апостроф удваивается, а кавычка нет. Аналогично, внутри кавычек двойная кавычка удваивается, а апостроф нет. В качестве символов будут использоваться ASCII-символы с кодами от 32 до 255. Единственная допустимая операция над строками – конкатенация (+). Константа типа Char – это константа типа String длины 1. Определена
операция Ord(<символ>), возвращающая ASCII-код заданного символа
Константы типа Boolean могут иметь только два значения: True и False. Над ними определены операции Or (или), And (и), Not (не). Кроме того, над всеми базовыми типами определены операции сравнения
(<, >, =, <=, >=, <>), которые возвращают результат типа Boolean. При этом
False < True.
Здесь:
1. <имя типа> – это идентификатор типа, который может быть определен как
до, так и после данного описания.
2. <перечислимый тип> ::= (<идентификатор 0> {,<идентификатор i>})
(i = 1, ..., N)
Возможны следующие операции над константами перечислимого типа:
Здесь <значение 1> и <значение 2> – константы одинакового типа, который
может быть одним из следующих: Integer, Char, Boolean, либо каким-то из
<перечислимых типов>. Если <значение 1> ? <значение 2>, то константы
<ограниченного типа> могут принимать любое значение из промежутка
[<значение 1>, <значение 2>]. Иначе множество констант этого типа пусто.
Над константами <ограниченного типа> допустимы те же операции, что и
над константами того типа, которому принадлежат <значение 1> и <значение
2>.
Константами <типа-последовательности>, описанного как Sequence Of <тип>, являются конечные последовательности констант типа <тип>. Константами <типа-последовательности>, описанного как Sequence (<поле> {, <поле>}), являются упорядоченные наборы из констант указанных типов (в том порядке, в котором они встречаются в описании). Однако при этом можно опускать те элементы, перед типами которых указано ключевое слово Optional. Константы <типа-последовательности> записываются следующим образом: {<Константа> {, <Константа>}}. Пустая последовательность обозначается символами { }. Над <типами-последовательностями> определена операция конкатенации <тип 1>@<тип 2>, результатом которой является новый тип, все константы которого получаются дописыванием к произвольной константе-последовательности <типа 1> справа константы-последовательности <типа 2>. К образованным таким способом новым типам опять можно применять операцию конкатенации. Аналогично, операция конкатенации определена и для констант
рассматриваемых типов. Кроме того, если для констант каждого из типов из
Константами <типа-множества>, описанного как Set Of <тип>, являются конечные множества констант указанного типа <тип>. В случае описания Multi Set Of <тип> это будут конечные мультимножества (т.е. множества, в которых элементы могут повторяться более одного раза). Константами <типа-множества>, описанного как Set (<тип> {, <тип>}) являются конечные мультимножества, полученные взятием произвольных констант указанных в описании типов (по одной константе каждого типа с учетом кратности). Константы <типа-множества> записываются следующим образом: {<Константа> {, <Константа>}}. Пустое множество обозначается символами { }. Над <типами-множествами> возможны следующие операции
(результатом которых является, как легко заметить, опять некоторый <тип-множество>): Plus (объединение), Minus (разность), Mul (пересечение).
Например, константы типа A Mul B – это те (мульти-) множества, которые
одновременно являются константами типа A и константами типа B. Эти же
операции определены (с учетом кратности элементов) и для констант <типов-множеств>. Например, {1, 2, 2} Minus {2, 3} = {1, 2}, {3, 3, 5} Mul {3, 5, 5} =
{3, 5}.
Определения этих операций см. выше.
Комментарий – это последовательность символов любой длины,
начинающаяся с символов // и заканчивающаяся символами перевода строки.
Комментарии могут располагаться в любом месте программы и должны
опускаться при разборе.
|
Страница: 1 2 >> [Всего задач: 8]
Назовем пустотой последовательность пробелов между соседними словами в строке, а также от начала строки до первого слова в ней и от последнего слова в строке до конца строки. Проблема, стоящая перед жюри, состоит в том, что научный руководитель сборов Владимир Михайлович Кирюхин отказывается читать текст, если сумма кубов длин пустот по всем строкам не минимальна. Помогите жюри расположить отчет на листе бумаги так, чтобы В.М. Кирюхин согласился его прочесть и утвердить результаты сборов. Для достижения требуемого расположения текста на бумаге разрешается
заменять произвольную пробельную последовательность (т.е. непустую
последовательность подряд идущих пробелов и/или символов перевода строки)
любой другой пробельной последовательностью.
<Дата> <Дата> + <Сдвиг> <Дата> - <Сдвиг> <Дата> - <Дата> Здесь <Дата> задается в одном из следующих трех форматов: А) дд.мм.гггг (например, 21.06.1998 ). В этой записи день и месяц задаются в точности двумя десятичными цифрами, год – ровно четырьмя. Б) д месяца г года (например, 21 июня 1998 года ). В этом формате могут присутствовать ведущие нули (например, 01 июня 198 года ). В) сегодня – текущая дата, установленная в компьютере. <Сдвиг> задается в виде [L лет ] [M месяцев ] [N недель ] [D дней ]. Квадратные скобки здесь означают, что некоторые из указанных четырех составных частей могут опускаться (но не все сразу). Слова «лет», «месяцев», «недель», «дней» склоняются по правилам русского языка: 1 год, 5 лет, 2 месяца, 5 месяцев и т.д. Значением выражений первых трех типов является дата. В случае
выражения первого типа значением является сама <Дата>. В случае выражений
второго и третьего типа вычисление искомой даты происходит следующим
образом: сначала прибавляется (либо вычитается) L лет, затем M месяцев, после
чего N недель и, наконец, D дней. Если в течение этого процесса получается
несуществующее число месяца, то берется последнее число этого месяца (см.
пример). Результатом выражения четвертого типа является количество дней
между двумя указанными датами.
Имеются два шаблона. Требуется найти строку минимальной длины,
которая удовлетворяет обоим шаблона, либо выдать сообщение, что такой
строки не существует.
Всего существует три вида запросов: SizeInBytes(<Имя типа>) – определить, какое количество байт памяти занимает переменная указанного типа; SizeInBits(<Имя типа>) – найти количество бит, необходимых для хранения переменной указанного типа при условии, что для каждого элемента этой переменной отводится минимально возможное число бит, способных закодировать все возможные значения этого элемента; <Имя типа>($<Последовательность 16-х цифр>) – по дампу (т.е. содержимому) участка памяти, занимаемому переменной указанного типа, определить значения всех элементов этой переменной. Напишите программу, которая вводит описания типов данных и обрабатывает заданную последовательность запросов. Описания типов не будут содержать типов-указателей, типов-файлов, типов-объектов и процедурных типов. Процесс разработки Вашей программы постройте по следующей схеме:
Базовые типы данных Имеются несколько базовых типов данных: Integer, Char, Boolean и String. Константы этих типов записываются следующим образом. Константа типа String – это последовательность (длиной от 0 до 255) символов, заключенная либо в апострофы (▓), либо в двойные кавычки ("). При этом, если ограничители – апострофы, то внутри них апостроф удваивается, а кавычка нет. Аналогично, внутри кавычек двойная кавычка удваивается, а апостроф нет. В качестве символов будут использоваться ASCII-символы с кодами от 32 до 255. Единственная допустимая операция над строками – конкатенация (+). Константа типа Char – это константа типа String длины 1. Определена
операция Ord(<символ>), возвращающая ASCII-код заданного символа
Константы типа Boolean могут иметь только два значения: True и False. Над ними определены операции Or (или), And (и), Not (не). Кроме того, над всеми базовыми типами определены операции сравнения
(<, >, =, <=, >=, <>), которые возвращают результат типа Boolean. При этом
False < True.
Здесь:
1. <имя типа> – это идентификатор типа, который может быть определен как
до, так и после данного описания.
2. <перечислимый тип> ::= (<идентификатор 0> {,<идентификатор i>})
(i = 1, ..., N)
Возможны следующие операции над константами перечислимого типа:
Здесь <значение 1> и <значение 2> – константы одинакового типа, который
может быть одним из следующих: Integer, Char, Boolean, либо каким-то из
<перечислимых типов>. Если <значение 1> ? <значение 2>, то константы
<ограниченного типа> могут принимать любое значение из промежутка
[<значение 1>, <значение 2>]. Иначе множество констант этого типа пусто.
Над константами <ограниченного типа> допустимы те же операции, что и
над константами того типа, которому принадлежат <значение 1> и <значение
2>.
Константами <типа-последовательности>, описанного как Sequence Of <тип>, являются конечные последовательности констант типа <тип>. Константами <типа-последовательности>, описанного как Sequence (<поле> {, <поле>}), являются упорядоченные наборы из констант указанных типов (в том порядке, в котором они встречаются в описании). Однако при этом можно опускать те элементы, перед типами которых указано ключевое слово Optional. Константы <типа-последовательности> записываются следующим образом: {<Константа> {, <Константа>}}. Пустая последовательность обозначается символами { }. Над <типами-последовательностями> определена операция конкатенации <тип 1>@<тип 2>, результатом которой является новый тип, все константы которого получаются дописыванием к произвольной константе-последовательности <типа 1> справа константы-последовательности <типа 2>. К образованным таким способом новым типам опять можно применять операцию конкатенации. Аналогично, операция конкатенации определена и для констант
рассматриваемых типов. Кроме того, если для констант каждого из типов из
Константами <типа-множества>, описанного как Set Of <тип>, являются конечные множества констант указанного типа <тип>. В случае описания Multi Set Of <тип> это будут конечные мультимножества (т.е. множества, в которых элементы могут повторяться более одного раза). Константами <типа-множества>, описанного как Set (<тип> {, <тип>}) являются конечные мультимножества, полученные взятием произвольных констант указанных в описании типов (по одной константе каждого типа с учетом кратности). Константы <типа-множества> записываются следующим образом: {<Константа> {, <Константа>}}. Пустое множество обозначается символами { }. Над <типами-множествами> возможны следующие операции
(результатом которых является, как легко заметить, опять некоторый <тип-множество>): Plus (объединение), Minus (разность), Mul (пересечение).
Например, константы типа A Mul B – это те (мульти-) множества, которые
одновременно являются константами типа A и константами типа B. Эти же
операции определены (с учетом кратности элементов) и для констант <типов-множеств>. Например, {1, 2, 2} Minus {2, 3} = {1, 2}, {3, 3, 5} Mul {3, 5, 5} =
{3, 5}.
Определения этих операций см. выше.
Комментарий – это последовательность символов любой длины,
начинающаяся с символов // и заканчивающаяся символами перевода строки.
Комментарии могут располагаться в любом месте программы и должны
опускаться при разборе.
Страница: 1 2 >> [Всего задач: 8] |
© 2004-...
МЦНМО
(о копирайте)
|
Пишите нам
|