Методика сдачи и проверки этих задач точно такая же, как в заданиях на проектирование дроби: вы должны сдать на проверку только реализацию соответствующей функции (возможно и других необходимых вспомогательных функций), но без функции main.
Реализуйте шаблон функции
template <typename T> int sign(T a)
возвращающей знак числа, то есть значение 1, -1 или 0.
Реализуйте шаблон функции
template <typename T> T gcd(T a, T b)
возвращающей наибольший общий делитель чисел a и b, в предположении, что T — целочисленный тип, числа a и b неотрицательные и неравны нулю одновременно.
Напишите нерекурсивную реализацию алгоритма Евклида (при помощи цикла while).
В этой задаче T может быть и значением типа char
(char
тоже целочисленный тип), при этом оператор взятия
остатка от деления для типа char
возвращает значение типа int
для аргументов типа char
, эти грабли
нужно обойти.
Реализуйте шаблон функции
template <typename T> void Swap(T & a, T & b)
меняющей значения двух переменных местами.
Реализуйте шаблон функции
template <typename T> T Max(vector<T> & a)
возвращающей значение наибольшего элемента в векторе a, в предположении, что вектор a не пуст.
Использование функций из заголовочного файла <algorithm>
запрещено.
Реализуйте шаблон оператора << для вывода вектора:
template <typename T> ostream & operator<<(ostream & out, vector<T> & a)
Элементы вектора разделяются пробелом, конец строки выводить не нужно, после последнего выведенного элемента выводить пробел не нужно.
Реализуйте шаблон функции
template <typename T> T max_int()
возвращающий максимальное целое число, которое можно записать в знаковом целочисленном типе T. Можно использовать битовые операции, представление о способе хранения целых чисел в памяти.
Реализуйте шаблон функции
template <typename T> T eps()
возвращающий машинное эпсилон для данного действительного типа T.