01/10/2018, 11:57

Hỏi về hàm có nhiều tham số?

Em muốn hỏi về cách khai báo 1 hàm có nhiều tham số trong C++. Ví dụ, em viết được 1 chương trình giải phương trình bậc 2 rồi, nhưng làm sao để gọi nó lại để giải với 1 bộ số a,b,c bất kì. Em cảm ơn ạ.

rogp10 viết 14:08 ngày 01/10/2018

void ... (double a, double b, double c);

1 cặp số a,b,c bất kì

p/s: (a, b, c) gọi là ordered tuple (bộ số) nhé

Тханг viết 14:11 ngày 01/10/2018

em có đọc trong tài liệu thì thấy nếu kết quả trả về là 1 số thì sẽ có câu lệnh return. Nhưng trong trường hợp này, kết quả trả về có thể là vô nghiệm, 1 nghiệm hoặc 2 nghiệm. Vậy câu lệnh return sẽ thế nào ạ?
Ví dụ chương trình của em như thế này, muốn biến nó thành 1 hàm để gọi bất cứ lúc nào thì mình sẽ làm thế nào ạ? Và cách gọi lại hàm đó ra sao ạ

void main()
{
	float a,b,c,denta,x1,x2;
	cout<<"Nhap vao 3 so a,b,c: ";
	cin >>a>>b>>c;
	if (a==0)
	{if (b==0)
	{if (c==0)
	{cout<<"phuong trinh vo so nghiem";
	} 
	else
	{cout<<"phuong trinh co nghiem la 0";
	}
	} 
	else
	{cout<<"phuong trinh co nghiem duy nhat: x="<<c/b;
	}
	} 
	else
	{denta= b*b-4*a*c;
	if (denta<0)
	{cout<<"phuong trinh vo nghiem";
	} 
	else
	{if (denta>0)
	{cout<<"phuong trinh co 2 nghiem phan biet"<<endl;
	cout<<"x1="<<(-b+sqrt(denta))/2/a<<endl;
	cout<<"x2="<<(-b-sqrt(denta))/2/a;
	} 
	else
	{cout<<"phuong trinh co nghiem duy nhat: x="<<-b/2/a;
	}
	}
	}
		system("pause");
}
Trần Hoàn viết 14:08 ngày 01/10/2018

Nếu thế thì em phải làm cho kết quả trả về đa dạng hơn không phải là số. Có thể dùng kiểu double**, nếu kết quả là vô nghiệm hoặc vô số nghiệm thì trả về con trỏ null, nếu có nghiệm thì trả về dạng mảng 2 chiều (số phức), 1 chiều lưu phần thực, một chiều lưu phần ảo.

[details=Code]```
#include
using namespace std;
double** GiaiPhuongTrinhBac2(double a, double b, double c)
{
if (a == 0)
return NULL;
else
{
double** Output = new double*[2];
Output[0] = new double[2];
Output[1] = new double[2];
double delta = b * b - 4 * a * c;
if (delta >= 0)
{
Output[0][0] = (-b - sqrt(delta)) / (2 * a);
Output[1][0] = (-b + sqrt(delta)) / (2 * a);
}
else
{
Output[0][0] = -b / (2 * a);
Output[0][1] = -sqrt(-delta) / (2 * a);
Output[1][0] = -b / (2 * a);
Output[1][1] = sqrt(-delta) / (2 * a);
}
return Output;
}
}

void main()
{
cout << "Giai phuong trinh bac 2 “ax^2 + bx + c = 0"” << endl;
cout << "Nhap a: ";
double A;
cin >> A;
cout << "Nhap b: ";
double B;
cin >> B;
cout << "Nhap c: ";
double C;
cin >> C;
double** KetQua = GiaiPhuongTrinhBac2(A, B, C);
if (KetQua == NULL)
cout << “Phuong trinh can giai khong phai la phuong trinh bac 2”;
else
if (KetQua[0][1] == 0)
if (KetQua[0][0] == KetQua[1][0])
cout << "Phuong trinh co nghiem kep x1 = x2 = " << KetQua[1][0];
else
cout << "Phuong trinh co nghiem x1 = " << KetQua[0][0] << " va x2 = " << KetQua[1][0];
else
cout << "Phuong trinh co nghiem x1 = " << KetQua[0][0] << showpos << KetQua[0][1] << "i va x2 = " << KetQua[1][0] << showpos << KetQua[1][1] << “i” << endl;
delete[] KetQua;
system(“pause”);
}

Bài liên quan
0