void sum(a,b) Невозможно преобразовать аргумент 1 из " comp" в "a"
#include <iostream>
#include <cmath>
void sum(struct a, struct b);
void mult(struct a, struct b);
void divis(struct a, struct b);
using namespace std;
struct comp {
float Re;
float Im;
};
int main() {
setlocale(LC_ALL, "rus");
comp a;
comp b;
cout << "\t\tПервое комплексное число\n";
cout << "Введите действительную часть: ";
cin >> a.Re; cout << endl;
cout << "Введите мнимую часть: ";
cin >> a.Im; cout << endl;
if (a.Im > 0) {
cout << "\tZ = " << a.Re << " + " << a.Im << endl;
}
else {
cout << "\tZ = " << a.Re << " - " << abs(a.Im) << "i" << endl;
}
cout << endl << "\t\tВторое комплексное число\n";
cout << "Введите действительную часть: ";
cin >> b.Re; cout << endl;
cout << "Введите мнимую часть: ";
cin >> b.Im; cout << endl;
if (b.Im > 0) {
cout << "\tZ = " << b.Re << " + " << b.Im << endl;
}
else {
cout << "\tZ = " << b.Re << " - " << abs(b.Im) << "i" << endl;
}
cout << ("Введите знак действия который хотите совершить -, +, *, /");
char znak;
cin >> znak;
if (znak == '-' || znak == '+')
cout << "Ответ: "; sum(a, b);
if (znak == '/')
cout << "Ответ: "; divis(a, b);
if (znak == '*')
cout << "Ответ: "; mult(a, b);
}
void sum(comp a,comp b) {
float RE = a.Re + b.Re;
float IM = a.Im + b.Im;
cout << "Ответ: ";
if (IM < 0) {
cout << RE << " - " << abs(IM) << "i\n";
}
else
cout << RE << " + " << IM << "i\n";
}
void mult(comp a, comp b) {
float RE = a.Re * b.Re - a.Im*b.Im;
float IM = a.Re * b.Im + b.Re * a.Im;
if (IM < 0)
cout << RE << " - " << abs(IM) << "i\n";
else
cout << RE << " + " << IM << "i\n";
}
void divis(comp a, comp b) {
float RE = (a.Re * b.Re + a.Im * b.Im) / (a.Im * a.Im + a.Re * a.Re);
float IM = (a.Re * b.Im - b.Re * a.Im) / (a.Im * a.Im + a.Re * a.Re);
if (IM < 0)
cout << RE << " - " << abs(IM) << "i\n";
else
cout << RE << " + " << IM << "i\n";
}
Ответы (2 шт):
Автор решения: Павел Ериков
→ Ссылка
void sum(struct a, struct b);
Означает, что функция принимает 2 аргумента. Первый аргумент типа a, второй аргумент типа b, а вы хотите передавать в эту функция структуру comp.
В прототипе функции можно писать только тип аргумента, то есть так:
void sum(comp, comp);
Можно писать названия аргументов, но это не обязательно:
void sum(comp a, comp b);
Ну или же так:
void sum(struct comp a, struct comp b);
Но это больше стиль си. (Я лично ни разу не видел такое в коде на c++)
Так же ваши функции не знают о структуре comp. Для этого вы можете или структуру comp определить выше всех прототипов функций, которые её используют. Или так же написать прототип для структуры, например после uncludeов, но главное перед функциями использующие эту структуру:
struct comp;
Автор решения: ТарасПрогер
→ Ссылка
struct comp
{
float Re;
float Im;
};
void sum(comp a, comp b);
void mult(comp a, comp b);
void divis(comp a, comp b);