БлогNot. 5 олимпиадных задач в MathCAD

5 олимпиадных задач в MathCAD

...точней, задачи не привязаны именно к MathCAD, они алгоритмические, но многие вещи, такие как сортировка, обратное упорядочение вектора или извлечение подматрицы (строки, столбца, подвектора) в MathCAD как раз очень удобно и естественно делать.

Везде предполагается, что системная переменная ORIGIN (начало индексации строк и столбцов матриц/векторов) установлена в 1:

ORIGIN:=1

а индексация символов строк выполняется с нуля (по умолчанию).

1. Поворот квадратной матрицы на 90, 180 или 270 градусов. Подобная задача есть тут. В MathCAD "ручной" пересчёт индексов не нужен - ведь есть оператор извлечения столбца (а в версиях Prime - и строки). Достаточно написать функцию поворота матрицы на 90 градусов по часовой стрелке и вызвать её нужное число раз:

Поворот квадратной матрицы в MathCAD
Поворот квадратной матрицы в MathCAD

2. В массиве D отсортировать в обратном порядке элементы с индексами от L до K включительно. Проверка допустимости индексов не производится, а вот то, что индекс может совпадать с номером первого или последнего элемента - учитывается.

Обратная сортировка части массива в MathCAD
Обратная сортировка части массива в MathCAD

3. Из элементов заданного целочисленного вектора X сформировать вектор Y, в котором элементы отсортированы в порядке невозрастания количества одинаковых элементов.

Сортировка в порядке невозрастания количества одинаковых элементов (MathCAD)
Сортировка в порядке невозрастания количества одинаковых элементов (MathCAD)

Сначала по входному массиву X формируется матрица C, состоящая из 2 столбцов. В первом столбце хранятся уникальные значения элементов или знак "бесконечность", если элемент встречается в массиве неоднократно, во втором - число повторений уникального элемента. Затем матрица C "сжимается" исключением строк, в которых есть "бесконечность", затем полученная после сжатия 2-столбцовая матрица D сортируется по возрастанию элементов второго столбца (частота повторения), потом, в соответствии с частотами, формируется вектор Y, являющийся ответом. При "ручной" алгоритмизации этот алгоритм был бы сильно избыточным, для MathCAD - сойдёт.

4. Представить заданное четное число N (N>2) в виде суммы 2 простых чисел (проверка гипотезы Гольдбаха). Реализация на C++ есть здесь. В MathCAD особых отличий не будет - функция Simple проверяет, простое ли число, а Goldbah для заданного чётного натурального n ищет пару простых чисел (i, n-i).

Проверка гипотезы Гольдбаха в MathCAD
Проверка гипотезы Гольдбаха в MathCAD

5. Вывести только те цифры заданных натуральных чисел A и B, которые встречаются в каждом из чисел. Например, при A=73, B=3871 ответ = (3 7), при A=99 и B=77 ответ=(пусто)

Поскольку в MathCAD есть обычные методы работы со строками и преобразования типов данных "строка" - "число", задача довольно тривиальна.

Цифры, которые встречаются в каждом из двух натуральных чисел, решение в MathCAD
Цифры, которые встречаются в каждом из двух натуральных чисел, решение в MathCAD

 Скачать эти примеры в архиве .zip с файлом формата .xmcd (MathCAD 15) (51 Кб)

17.05.2014, 17:42 [13616 просмотров]


теги: алгоритм mathcad

К этой статье пока нет комментариев, Ваш будет первым