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)’

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

2 Likes

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

Lỗi trên là do thực chất có đến 3 hàm sqrt :smiley: 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.

2 Likes

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.

2 Likes

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

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

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?