01/10/2018, 09:23

Hỏi về lệnh return trong hàm

Nếu dùng kiểu bool thì làm sao để hàm có thể trả về cả 2 giá trị true và false vậy. Em thử mãi mà nó chỉ trả về giá trị của lệnh return đầu tiên. Mọi người hướng dẫn em với.

Khoa NTA viết 11:38 ngày 01/10/2018

Tại sao phải trả về cả true và false? Bạn có thử nghĩ về câu hỏi này hơi khó hiểu không? Chả lẽ một hàm nào đó có kết quả vừa đúng và sai đồng thời?
Nếu là một vấn đề khác, bạn tìm hiểu về kiểu return mảng hoặc struct nhé.

Black viết 11:33 ngày 01/10/2018

Vd: if(a!=0) {s=a/2; return true;}
else return false;
thì nó luôn trả về giá trị true .
Em muốn khi a=0 thì nó trả về giá trị false thì phải sửa sao ạ.

Khoa NTA viết 11:27 ngày 01/10/2018

Đoạn code bình thường mà bạn, a=0 thì trả về false mà, đâu có sai chỗ nào đâu nhỉ?

Black viết 11:32 ngày 01/10/2018

Vậy anh thử xem giúp em sao cái hàm cuối của em nó luôn trả về giá trị true là sao vây.

#include "stdio.h"
#include "math.h"
void nhap(float &x,int &n);
bool tinh(float x,int n,float &s);
void inmenu(int &k)
{
	printf("\n1.Nhap\n2.Tinh\n3.Thoat");
	do{
		printf("\nBan chon muc nao:     ");
		scanf("%d",&k);
	}while(k<1 || k>3);
}
int main()
{
	int n,chon,dk=0;
	float s,x;
	do
	{inmenu(chon);
	switch(chon)
	{
		case 1:{nhap(x,n); dk=1;
			break;
		}
		case 2:
			{if(dk)
			{
			if(tinh(x,n,s)==true) printf("\nS=%.2f",s);
			else printf("\nKhong co S"); break;
			}else {
			printf("\nNhap muc 1 truoc");
			break;
		         }
			}
		case 3: return 0;
	}
	}while (chon!=3);
}
void nhap(float &x,int &n)
{
	printf("Nhap x: "); scanf("%f",&x);
	printf("Nhap n: "); scanf("%d",&n);
}
bool tinh(float x,int n,float &s)
{
	int i,k=1;
	float s1=0;
	for(i=2;i<=n;i++)
	s1+=pow(-1,(i+1))/i;
	if(s1+x>0)
	{s=sqrt(x+s1); return true;}
	else return false;
}

Đây là chương tính tính:
S=căn của (x-1/2+1/3-…+((-1)^(n+1))/n)

Khoa NTA viết 11:26 ngày 01/10/2018

Mình không nhận xét về thuật toán của bạn vì mình đang hơi lười với lại code hơi xấu, mình ngán đọc xin lỗi về điều đó. Mình cũng phải đính chính là C không có kiểu reference nên đây là xăng pha nhớt C và C++ (điều này quá quen thuộc với nhiều người nhưng mình không thích điều này).
Khi mình chèn thêm 1 số lệnh printf thì mình nhận thấy được là chỉ cần x > 1 thì nó luôn trả về true, vì giá trị cuối của s1 luôn không đạt đến -1. Bạn có thử khi x = -1 hay nhỏ hơn chưa?

Black viết 11:25 ngày 01/10/2018

Em chạy được rồi thank .

Bài liên quan
0