01/10/2018, 09:31

Giúp em sửa lỗi sử dụng phép lấy căn "sqrt" ạ

Em có bài giải phương trình bậc 2:

#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;

int main ()	{
	int a, b, c, de;
	cout <<" Nhap vao 3 bien abc: ";
	cin >> a >> b >> c;
	de = b*b - 4*a*c;
	cout<<" Delta = "<< de << endl;
	if (de = 0)
	{	cout<< " Phuong trinh nghiem kep x1 = x2 = "<< -b/(2*a) << endl; }
	else if (de > 0)
	{	cout<<" Nghiem x1 = "<< (-b+ sqrt(de))/2a << endl;
	cout<<" Nghiem x2 = "<< (b+ sqrt(de))/2a << endl; }
	else 
		cout<<" Phuong vo nghiem";

	system ("pause");
	return 0;
}

Mọi người giúp em lỗi này với ạ:
-error C2668: ‘sqrt’ : ambiguous call to overloaded function
-could be 'long double sqrt(long double)
-or ‘float sqrt(float)’
-or ‘double sqrt(double)’

Gió viết 11:39 ngày 01/10/2018

Lỗi nó báo là phải dùng sqrt cho kiểu số thực, trong khi de là số nguyên, Nên để các biến kia là kiểu số thực

rogp10 viết 11:42 ngày 01/10/2018

Còn lỗi if(de = 0)

Lỗi trên là do thực chất có đến 3 hàm sqrt bây giờ phải chọn một. Nhưng kiểu int có thể ép lên cả 3 kiểu, vậy là ambiguous.

Trần Hoàn Võ viết 11:46 ngày 01/10/2018

Nhiều lỗi quá!
vài thứ mình thấy đc:

  1. if (de = 0) -> == not =
  2. (-b+ sqrt(de))/2a -> 2*a chứ k phải 2a
  3. theo mình k cần thiết phải system(“pause”);
  4. cout<<" Phuong vo nghiem"; - > nên endl ở cuối chạy c.trình cho gọn gàng
    Còn về lỗi sqrt thì trên máy mình k bị lỗi gì cả chạy vẫn rất mượt, trong trường hợp có thể thử lại như sau:

cout<<" Nghiem x1 = "<< (-b+ sqrt( (double)(de) ) )/2a << endl;

Nếu có sai sót mong thông cảm.

Long Lê viết 11:44 ngày 01/10/2018

thanks mọi người, chỉ cần để biến de vào kiểu số thực “float de;” là chạy được

Trần Hoàn Võ viết 11:33 ngày 01/10/2018

thanks thì ngừoi thật việc thật luôn nói miệng làm gì bạn ơi nút love kia

Bài liên quan
0