Рекомендации к программе.
1. Реализация алгоритма должна быть максимально эффективна. Следует, насколько это возможно, не использовать рабочих объектов, требующих больших ресурсов памяти. 2. Подпрограмма должна обрабатывать ошибки входной информации, адекватно реагировать на отсутствие требуемого решения, а возможно, и на его неоднозначность. В связи с тем, что в используемом языке программирования для этого нет специальных средств, рекомендуем для этих целей возвращаемый код признака результата. 3. Следует подготовить несколько файлов для наиболее полного тестирования программы, в том числе на «вырожденных» данных. 4. Тестирующая программа может быть составлена так, чтобы одновременно можно было хранить несколько таблиц различных размеров. При этом, конечно, предполагается один и тот же метод хранения табличных данных в памяти. Для выполнения данного задания рекомендуются организовать структуры, содержащие поля: число строк, число столбцов, указатель на таблицу. Возможны следующие способы реализации: · Создать динамический массив из этих структур. · Организовать список из этих структур.
Требования к программе.
Основные требования: 1. Данные хранятся в виде динамической таблицы, организованной с помощью столбца указателей на строки (или строки указателей на столбцы – в зависимости от алгоритма). Описаны типы «указатель на таблицу» и «указатель на строку (столбец) таблицы». 2. Основные вычисления оформлены в виде подпрограммы, не содержащей операций ввода-вывода. Параметры подпрограммы: указатель на таблицу (по значению), фактические размеры таблицы (по значению), основной результат – по ссылке, код завершения по ссылке или в качестве основного выхода функции. Подпрограмма содержит описание спецификации (в виде комментария под заголовком). 3. Фактические размеры таблицы указываются пользователем. Заполнение таблицы осуществляется тремя способами (по выбору пользователя) с клавиатуры (простейший последовательный ввод элементов), случайным образом и из типизированного (бинарного) файла (с проверкой существования файла). 4. Работа тестирующей программы организована в виде простейшего меню, позволяющего создавать таблицу, выполнять ее обработку, показывать результат, сохранять таблицу в файл и заканчивать работу. Предполагается, что можно последовательно обработать несколько таблиц, не выходя из программы. При создании новой таблицы старая уничтожается. 5. Алгоритм реализован без создания вспомогательной таблицы. 6. В подпрограмме выполняется проверка входных параметров на допустимость. 7. Динамическая память для таблиц выделяется и освобождается корректно.
Дополнительные требования: 8. Проверка корректности ввода чисел (т.е. отсутствие фатального завершения программы при вводе недопустимых символов в числах). 9. Проверка наличия памяти при создании таблицы. 10. Все пункты меню представляют собой вызовы подпрограмм (например, для создания таблицы в динамической памяти или заполнения уже созданной таблицы случайными числами), оформленных по всем правилам (т.е. все объекты с которыми подпрограмма работает, должны передаваться через список формальных параметров). 11. Возможность работы с несколькими таблицами, указатели на которые хранятся в массиве. В меню добавляется выбор текущей таблицы (т.е. все действия выполняются с той таблицей, которая является текущей в данный момент). Если массив заполняется, то таблицы больше не создаются. 12. Расширение предыдущего пункта возможностью создания произвольного числа таблиц (пока памяти хватает). 13. Перед уничтожением таблицы (в том числе при выходе из программы) предлагается сохранить ее в файл.
Варианты задания №3. 1. Отыскать седловую точку таблицы, то есть положение и значение элемента, который является минимальным в строке и максимальным в столбце. 2. В таблице с монотонно возрастающими элементами в строках и столбцах определить положение заданного числа. 3. Найти элемент таблицы, встречающийся в каждой строке и каждом столбце. 4. Среди чисел заданной строки таблицы найти такое, которое принадлежит наибольшему количеству столбцов таблицы. 5. Подсчитать количество столбцов таблицы, каждый из которых составлен из попарно различных элементов. 6. Найти максимальный элемент таблицы, встречающийся более одного раза в каждой строке. 7. Найти минимальный элемент таблицы, встречающийся менее трех раз в каждом столбце. 8. Найти строку таблицы, содержащую самую длинную серию строгих локальных экстремумов таблицы. 9. Каждый элемент таблицы заменить на максимальный элемент строки и столбца, на пересечении которых он находится. 10. Каждый элемент таблицы заменить на сумму элементов всех строк и столбцов, кроме тех, на пересечении которых он находится. 11. В таблице обнулить элементы, стоящие в строках или столбцах, содержащих нули. 12. Найти две строки таблицы, скалярное произведение которых максимально. 13. Вычислить максимальную среди сумм абсолютных величин элементов строк таблицы и номер строки, на которых максимум достигается. 14. Среди минимальных элементов строк таблицы найти наибольший и его положение. 15. На пересечении строк и столбцов, сумма элементов которых положительна, найти максимальный элемент и его положение. 16. Найти значение и положение в таблице элемента, для которого сумма элементов, лежащих не выше и не левее его, максимальна.
|