Помощь - Поиск - Пользователи - Календарь
Полная версия: Арифметические вычисления ( С++)
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Jaxx
Написать программу с использованием перегруженной функции calc (выполняет 4 простейших арифметических действий для 2 целочисленных значений типа float и double)

Не имею понятия, что есть перегруженная функция, в С++ ничего не понимаю, а надо крайне-крайне срочно... Спасайте учебу, избавляйте от армейских сапогов
volvo
Цитата
выполняет 4 простейших арифметических действий
blink.gif Так что именно должна выполнять функция calc()? Все четыре действия сразу, или какое-то одно из них, или ей надо передавать флажок, какое именно действие производить?

Цитата
для 2 целочисленных значений типа float и double
blink.gif С каких пор float/double стали целочисленными?

Цитата
Не имею понятия, что есть перегруженная функция
Это несколько функций с одним именем, различающихся типом/количеством параметров (функции, различающиеся только типом результата, не могут быть перегруженными), при вызове функции по имени, компилятор находит наиболее подходящую функцию из перегруженных (по типам параметров) и вызывает именно ее... Так понятнее? Вот теперь, зная это, перечитай свой вопрос, и пойми, что для решения задачи явно не хватает данных... Уточняй задание.
Jaxx
Функция должна выполнять вычисления определенного типа, то есть, к примеру, либо сложение, либо вычитание на выбор. На вид должно выйти примерно так:

Код

Арифметические операции с типом float
Введите первое число:
Введите второе число:
Введите оператор (+,-,/,*):
Результат:

Арифметические операции с типом double
Введите первое число:
Введите второе число:
Введите оператор(+,-,/,*):
Результат:


Добавлено через 11 мин.
Добрые люди подмогнули, и вот что вышло:


#include <stdio.h>

float calc(float , float , char );
double calc(double, double, char );

float calc(float a, float b, char op)
{
printf("\nFloat \n");
switch(op)
{
case '+': return a+b;
case '-': return a-b;
case '/': return a/b;
case '*': return a*b;
}
return 0;
}



double calc(double a, double b, char op)
{
printf("\nDouble \n");
switch(op)
{case '+': return a+b;
case '-': return a-b;
case '/': return a/b;
case '*': return a*b;
}
return 0;
}

int floatit()
{
float a,b;
char op;

printf("Vvedite pervoe chislo (Float):");
scanf("%f", &a);
printf("\nVVedite vtoroe chislo (Float):");
scanf("%f", &b);

printf("\nVvedite operator:");
scanf("%s", &op);


printf("%f\n", calc(a,b,op));

return 0;


}


int
doubleit()
{
double a,b;
char op;

printf("Vvedite pervoe chislo (Double):");
scanf("%f", &a);
printf("\nVVedite vtoroe chislo (Double):");
scanf("%f", &b);

printf("\nVvedite operator:");
scanf("%s", &op);


printf("%f\n", calc(a,b,op));

return 0;


}



int main()
{
int menu;


printf("\nViberete neobhodimiy tip dannih:\n 1 - float\n 2 - double\nmenu>");

scanf("%i", &menu);

switch(menu)

{
case 1: floatit();
break;
case 2: doubleit();
}

return 0;
}



Но что-то за проблемы с вычислением данных типа double, всегда выдает 0
volvo
Тебе "добрые" люди не подсказали, что
1) твоя программа к С++ не имеет никакого отношения, а написана на чистом С?
2) при работе с данными типа double форматная строка меняется на "%lf" вместо "%f" (если уж использовать scanf/printf)?
3) деление на 0 надо ловить, и предотвращать?
Jaxx
Нет, к сожалению, ничего не сказали... Насчет деления на ноль - надо наверное отлавливать. Сделать условие, если введен 0, то попросить пользователя ввести другое число
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.