Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2020, 21:33   #1
Alpha.Icon
Новичок
Джуниор
 
Регистрация: 01.11.2020
Сообщений: 1
По умолчанию Подскажите правильность реализации задачи про шаблоны

Вот условие. Ниже приыеду свою задумку, но как я понимаю она не правильная. Подскажите как лучше это сделать
Реализовать функцию f (x), что возвращает целое значение по следующим
правилами:
1. Для натуральных (целых положительных) чисел n, f (n) = n! mod 164
2. отрицательных чисел n, f (n) = n 3 mod 264
3. Для действительных чисел d, f (d) = [exp (1 / sin (d))] mod 364
4. Для текстовых строк s, f (s) = количество гласных букв английского языка в строке s
5. Для пары p = (a, b), f (p) = f (b) f (a) mod 564
6. Для списка v = [v 1, ..., vk], f (v) = (f (v 1) f (v 2) + f (v 2) f (v 3) + ... + f (v k- 1) f (vk)) mod 764
7. Для всех остальных значений f (x) = 1642
Код:
#include <iostream>
#include <cmath>
#include<math.h>
using namespace std;
template<class T, class U>
int f(T data) {
    int res=0;
    if (is_same<U, int>::value){
        int n=data;
        if (n > 0) {
            res = 1;
            for (int i = 1; i <= n; i++) {
                res = res * i;
            }
            res = res % 164;
            return res;
        }
    }
    else if (is_same<U, int>::value && data< 0) {
        int n = data;
        if (n < 0) {
                res = n * n * n;
            res = res % 264;
            return res;
        }
    }
    else if (is_same<U, double>::value) {
        double d=data;
        double r;
        d = exp(1/sin(d));
        res = fmod(d, 364);
        return res;
    }
    else if (is_same<U, string>::value)
    {
        string text = data;
        char dictionary[] = "aeiouy";
        for (int i = 0; i < 5;i++) {
            for (int j = 0; j < strlen(text); j++)
            {
                if (dictionary[i] == text[j]) {
                    res = res + 1;
                }
            }
        }
        return res;
    }
 
}
 
int main()
{
    int n=6;
   cout<< f<int, int>(n)<<endl;
   n = -6;
   cout << f<int, int>(n)<<endl;
   double d = 543.43242;
   cout << f<double, double>(d) << endl;
   string s="lavrov";
   cout << f<string, string>(s) << endl;
}
Alpha.Icon вне форума Ответить с цитированием
Старый 02.11.2020, 17:49   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Постановка задачи, конечно, бредовая, но Ваш подход, мягко говоря, странный.
Правильно, я полагаю, через явное инстанцирование шаблона
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
про литературу НОСОК 51 Помощь студентам 0 30.09.2020 09:21
реализации задачи svsvsv Фриланс 0 25.10.2016 15:14
Подскажите детали реализации проекта ASP .NET MVC GreenWizard Общие вопросы по программированию, компьютерный форум 1 21.05.2016 21:29
Подскажите технологии/средства для реализации вебсервиса programmist51 PHP 2 09.01.2016 20:15
Подскажите где можно найти задачи по C++, что бы задачи были начиная от простого и постепенно усложнялись. Тимох Общие вопросы C/C++ 1 12.09.2015 21:50