Задача 1 – Лишние скобки
Необходимо написать функцию, которая из вводимой строки, содержащей запись арифметического выражения, удаляет лишние скобки. Скобки считаются лишними, если их отсутствие не влияет на значение выражения, либо их использование недопустимо. Выражение содержит только переменные, состоящие из латинских букв, знаки четырех операций (+, –, * и /) и круглые скобки.
Результат работы программы
Исходное выражение: ((a+b))*(d-f)
Постфиксная форма: ab+df-*
Инфиксная форма: (a+b)*(d-f)
Пример PHP–кода:
Задача 2 – Анаграммы
Во входном файле (или строковом параметре функции) содержится строка длиной не более 255 символов, в которой через один или несколько пробелов следуют слова. Найти все группы анаграмм (слов, составленных из одних и тех же символов) в этой строке и вывести на устройство вывода (или в файл) их каждую с новой строки, все слова должны идти через пробел в порядке, в котором они встречаются в строке. При этом допускается выводить одинаковые слова в одной строке анаграмм. Слова состоящие из разного количества одинаковых букв анаграммами не являются.
Пример:
Входная строка: «123 456 231 546 231 312 4556» Результат: 123 231 231 312 456 546 4556
Результат работы программы
123 456 231 546 231 312 4556123 231 231 312
456 546
4556
Пример PHP–кода:
'; foreach ($r as $ritem){ // формируем строки анаграмм $cur = $ritem; for ($i=0; $i<$max; $i++){ if ( $rez[ $i ] == $cur ){ echo $arr[ $i ] . ' '; } } echo '
'; }
Задача 3 – Драконова ломаная
Драконова ломаная N-го порядка строится посредством сворачивания N раз пополам полоски бумаги в одном направлении и от одной точки, с последующим разворачиванием каждого угла в 90 градусов. Проекция такой полоски на плоскость и будет искомой ломаной. (На рисунке справа показан порядок изгибания полоски для получения ломаной 1 и 2-го порядка, на рисунке слева полоски отражающие ломаные 3 и 4-го порядка). Требуется реализовать алгоритм построения ломаной N-го порядка в виде процедуры, создающей и заполняющей булевыми значениями (0/1) одномерный массив определенной размерности, содержащий направления поворотов ломаной. (На рисунке слева приведены ломаные 1,2 и 3 порядков и соответствующие им результирующие массивы. Стартовая точка ломаных помечена. Поворот по часовой стрелке кодируется 0 (нулем), поворот против часовой стрелки кодируется 1 (единицей).
Для решения задач допускается использование произвольного языка программирования, позволяющего объявлять линейные массивы и адресовать элементы массива по индексу. Пример: А=Массив[Х]; В=А[i]; А[j] = NOT А[i]; Для лучшего осознания задачи рекомендуется использовать реквизит (полоску бумаги), например оторвав ее по линии от верхней части страницы.
Результат работы программы
Не рекурсивный ( с массивом )
Рекурсивный ( без массива )
Использованы два алгоритма:
- Не рекурсивный. Как в задании - формируем массив поворотов а потом по нему рисуем линию.
- Рекурсивный. Не формирует массив (можно дополнительно вызвать функцию формирования массива), а сразу рисует линию. Данный алгоритм нашёл в интернете на Delphi и переделал не много изменив под JavaScript и HTML5.
Задача 4 – Запрос
В базе данных имеются две похожих таблицы с данными (таб_А и таб_Б) представленных ниже:
Таблица таб_А | |||
ТипЗаявки | Ссылка | Состояние | Дата |
Внутр.Задача | Внутренняя задача 000000043 | Назначена | 22.01.2013 11:24:12 |
Внутр.Задача | Внутренняя задача 000000043 | Принята | 24.01.2013 17:35:22 |
Внутр.Задача | Внутренняя задача 000000043 | Завершена | 24.01.2013 17:35:29 |
Внутр.Задача | Внутренняя задача 000000043 | Одобрена | 27.01.2013 8:59:47 |
Внутр.Задача | Внутренняя задача 000000056 | Назначена | 28.11.2012 12:16:52 |
Внутр.Задача | Внутренняя задача 000000056 | Принята | 28.11.2012 12:29:03 |
Внутр.Задача | Внутренняя задача 000000056 | Завершена | 28.11.2012 12:29:06 |
Внутр.Задача | Внутренняя задача 000000056 | Одобрена | 28.11.2012 12:30:12 |
Таблица таб_Б | |||
ТипЗаявки | Ссылка | Состояние | Дата |
ЗаявкаИТ | Заявка ИТ 000000018 | Назначена | 10.01.2013 18:18:39 |
ЗаявкаИТ | Заявка ИТ 000000398 | Назначена | 11.02.2013 9:39:58 |
ЗаявкаИТ | Заявка ИТ 000000398 | Принята | 11.02.2013 14:34:03 |
ЗаявкаИТ | Заявка ИТ 000000447 | Назначена | 14.02.2013 17:20:46 |
ЗаявкаИТ | Заявка ИТ 000000474 | Назначена | 15.02.2013 10:32:52 |
ЗаявкаИТ | Заявка ИТ 000000474 | Принята | 17.02.2013 10:32:11 |
ЗаявкаИТ | Заявка ИТ 000000474 | Завершена | 17.02.2013 12:26:04 |
ЗаявкаИТ | Заявка ИТ 000000475 | Назначена | 16.02.2013 17:14:30 |
ЗаявкаИТ | Заявка ИТ 000000475 | Назначена | 16.02.2013 18:14:30 |
ЗаявкаИТ | Заявка ИТ 000000475 | Принята | 17.02.2013 10:41:48 |
ЗаявкаИТ | Заявка ИТ 000000475 | Завершена | 17.02.2013 12:26:08 |
Необходимо составить запрос, возращаюший набор данных в виде:
ТипЗаявки | Ссылка | Назначено_дата | Завершена_дата |
Внутр.Задача | Внутренняя задача 000000043 | 22.01.2013 11:24:12 | 24.01.2013 17:35:29 |
Внутр.Задача | Внутренняя задача 000000056 | 28.11.2012 12:16:52 | 28.11.2012 12:29:06 |
ЗаявкаИТ | Заявка ИТ 000000018 | 10.01.2013 18:18:39 | |
ЗаявкаИТ | Заявка ИТ 000000398 | 11.02.2013 9:39:58 | |
ЗаявкаИТ | Заявка ИТ 000000447 | 14.02.2013 17:20:46 | |
ЗаявкаИТ | Заявка ИТ 000000474 | 15.02.2013 10:32:52 | 17.02.2013 12:26:04 |
ЗаявкаИТ | Заявка ИТ 000000475 | 16.02.2013 18:14:30 | 17.02.2013 12:26:08 |
Запрос к таблицам в синтаксисе MSSQL Server
SELECT a.tipZayavki as [ТипЗаявки], a.ssilka as [Ссылка], a.data as [Назначено_дата], b.data as [Завершена_дата] FROM ( SELECT tipZayavki,ssilka, MAX(data) as data FROM tab_A WHERE sostoyanie = 'Назначена' GROUP BY tipZayavki,ssilka ) a LEFT JOIN (SELECT * FROM tab_A WHERE sostoyanie = 'Завершена') b ON (a.ssilka = b.ssilka) UNION SELECT a.tipZayavki as [ТипЗаявки], a.ssilka as [Ссылка], a.data as [Назначено_дата], b.data as [Завершена_дата] FROM ( SELECT tipZayavki,ssilka, MAX(data) as data FROM tab_B WHERE sostoyanie = 'Назначена' GROUP BY tipZayavki,ssilka ) a LEFT JOIN (SELECT * FROM tab_B WHERE sostoyanie = 'Завершена') b ON (a.ssilka = b.ssilka)
Результат работы программы
Для тестирования взят за основу MSSQL Server 2000. Сформируем таблицы и выполним на них запрос. Результаты представлены на рисунке ниже.
Далее, для наглядности, подключим наш запрос на вывод в каком-либо приложении. В нашем случае использована среда Delphi 7. Результат представлен на рисунке ниже.