Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
unpapaicoconaut
0 / 0 / 0
Регистрация: 13.03.2014
Сообщений: 11
#1

На вход подается число (int или float) в зависимости от его типа провернуть над ним разные операции - C++

13.03.2014, 18:20. Просмотров 984. Ответов 20
Метки нет (Все метки)

Шаблоны функций (template)
Суть: на вход подается число (int или float) в зависимости от его типа провернуть над ним разные операции.
Собственно, не задалось самое начало, не могу понять, как через template получить со входа неизвестный тип переменной
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 18:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос На вход подается число (int или float) в зависимости от его типа провернуть над ним разные операции (C++):

Перевести массив цифр в число типа int или float - C++
Всем здрасти , а не подскажет ли кто часом, можно ли массив с цифрой в каждом злементе (a=1, a=3, a=7, a=n и.т.д) перевести в число типа...

Как число типа 2.88007e+018 привести в обычный int, float или просто вывести - C++
Тестирующая система говорит "Неправильный формат вывода". Программа считает числа фиббоначи, по формуле Бине (дается только n, найти...

Дано натуральное число. Произвести операции над его цифрами. - C++
Помогите решить задачи через цикл do _ while: 3) Дано натуральное число. Определить: а) количество цифр 3 в нем; б) сколько...

ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int) - C++
Какая то проблема с указателями,незнаю,не хочет щитать суму парних чисел в второй подпрограме.Извиниет за ошибки.Не владею руским.Помогите...

Как проверить вводилось ли число (типа double или float) в консоль - C++
Как проверить вводилось ли число (типа double или float) в консоль?

В зависимости от знака операции (+ или -) выполнить действия над двумя матрицами - Free Pascal
13.В зависимости от знака операции (+ или -) выполнить действия над двумя матрицами.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6467 / 3115 / 306
Регистрация: 04.12.2011
Сообщений: 8,590
Записей в блоге: 4
18.03.2014, 04:18 #16
unpapaicoconaut, странное задание. Интересно, как оно звучит в оригинале?
Если тип должен определяться форматом ввода, то видимо нужно принять строку и спарсить. Вот диковатый вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <Cmath>
#include<float.h>
using std::cin;
using std::cout;
using std::endl;
 
template <class T>
bool 
is_double(T some_number){
return fabs((double)some_number - (int)some_number) > DBL_EPSILON;
}
 
template <class T>
T foo(T x){
if(is_double(x)) return fabs((x - floor((double)x)));
else
return (int)x%2;
}
 
int main()
{
cout << "Enter the number" << endl;
char numb[32];
cin>>numb;
double some_number = atof(numb);
if( is_double(some_number) ) {
    cout << "double calls fraction" <<endl;
cout<<foo((double)some_number);
}
else{
    cout << "int calls int%2"<<endl;
    cout<<foo((int)some_number);
}
cout << endl;
system ( "pause" );
    return 0;
}
если предыдущий код воспринять серьезно (не дай бог конечно), то вот ещё шутка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
class BaseCl{
public:
int a;
BaseCl():a(0){}
BaseCl(int a_) :a(a_){}
virtual void show(){cout << a;}
virtual void input(){cin >> a;}
};
 
class DerivBaseCl : public BaseCl
{
public:
double a;
DerivBaseCl(double a_):a(a_){}
void show(){cout << a;}
void input(){cin >> a;}
};
 
int main()
{
BaseCl b(123);
DerivBaseCl c(1.23);
BaseCl *d;
 
int select_type = 0;
cout<<"int or double? int - 0, double - 1 ";
cin>>select_type;
if(!select_type) d = &b;
else d = &c;
d->input();
cout<<endl;
d->show();
 
cout<<endl;
 
//прикол крепчает:
cout<<d->a%3;//забавно, что при явном объявлении такое деление не скомпилируется, 
//а в данном случае, для double%int возвращает 0.  :D
cout << endl;
system ( "pause" );
    return 0;
}
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
18.03.2014, 12:34 #17
Такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <string>
#include <algorithm>
#include <stdexcept>
 
int main()
{
   while (true)
   {
      std::cout << "Enter number: -> ";
      std::string number;
      std::cin >> number;
 
      if (std::any_of(number.begin(), number.end(), isalpha) ||
          std::count(number.begin(), number.end(), '.') > 1  ||
          number.find(',') != std::string::npos)
      {
         std::cout << "BAD INPUT.\n";
         continue;
      }
 
      if (number.find('.') != std::string::npos) {
         std::cout << "Floating type:   ";
         try {
            long double ldval = std::stold(number);
            std::cout << ldval << "\n";
         }
         catch(const std::invalid_argument& e) {
            std::cerr << "Invalid argument. " << e.what() << "\n";
         }
      }
      else {
         std::cout << "Integer type:    ";
         try {
            long long llval = std::stoll(number);
            std::cout << llval << "\n";
         }
         catch(const std::out_of_range& e) {
            std::cerr << "Out of the range. " << e.what() << "\n";
         }
         catch(const std::invalid_argument& e) {
            std::cerr << "Invalid argument. " << e.what() << "\n";
         }
      }
   }
 
   return 0;
}
2
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6467 / 3115 / 306
Регистрация: 04.12.2011
Сообщений: 8,590
Записей в блоге: 4
18.03.2014, 13:34 #18
DiffEreD, красиво конечно. Вот если в моём варианте ввести 123e-3, то получим результат 0.123, что вполне логично.
0
DiffEreD
18.03.2014, 13:36
  #19

Не по теме:

Пускай ТС себе доработает.

0
IGPIGP
18.03.2014, 13:39
  #20

Не по теме:

Согласен. Тем более, что задание наверняка не предполагает, ничего из того, что тут деется.
Хотелось бы взглянуть на него в оригинале.

0
unpapaicoconaut
0 / 0 / 0
Регистрация: 13.03.2014
Сообщений: 11
10.04.2014, 15:50  [ТС] #21
Да, в задании предполагалось, что тип нужно спросить, я это не заметил и придумал кучу лишней работы)
Но, все равно, спасибо за советы
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 15:50
Привет! Вот еще темы с ответами:

Trunc() и Abs() (На вход программе подается вещественное число Х. Получить и вывести на экран целое значение Z) - Free Pascal
На вход программе подается вещественное число Х. Получить и вывести на экран целое значение Z: Z = -1, если Х&lt;0; Z = 1, если Х&gt;0; Z...

Перевод строки, содержащей число типа float, в число float - C (СИ)
Помогите разобраться, как строку, к примеру &quot;0.123&quot; перевести в переменную типа float...

Почему диапазон значений у типа float больше, чем у типа int, если они оба занимают 4 байта? - C++
Почему диапазон значений флоат больше чем у инта, если они оба занимают 4 байта? Вроде слышал что-то связанное с мантисой, но как это...

Задано число. Разместите в памяти последовательно все его цифры, используя указатели и операции над ними - C++
Задано натуральное число. Разместите в памяти последовательно все его цифры, используя указатели и операции над ними. Может кто помочь в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.04.2014, 15:50
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru