Методика сдачи и проверки этих задач точно такая же, как в заданиях на проектирование дроби: вы должны сдать на проверку только реализацию соответствующей функции (возможно и других необходимых вспомогательных функций), но без функции 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.