Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 14
  1. #1
    Tham gia
    11-09-2007
    Location
    Hồ Chí Minh
    Bài viết
    155
    Like
    0
    Thanked 0 Times in 0 Posts

    Giải phương trình bậc hai

    Mọi người xem giùm đi,tui viết sao nó ra kết wã sai.
    Ai bít làm chỉ zới, mà cho hỏi luôn,cái hàm lấy căn bậc hai trong C là gì zậy?
    Thanks
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    main()
    {
    	clrscr();
    	int a,b,c;     		//delta = b*b-4*a*c
    	printf("ax^2+bx+c=0\n");//in ra phuong trinh bac hai
    	printf("nhap a:"); scanf("%d",&a);
    	printf("nhap b:"); scanf("%d",&b);
    	printf("nhap c:"); scanf("%d",&c);
    	if(a==0)
    		if(b==0)
    			if(c==0)
    			printf("phuong trinh luon dung\n");
    			else
    			printf("phuong trinh vo nghiem\n");
    		else
    		printf("\nx=%d",-b/a);
    	else
    		if((b*b-4*a*c)<0)
    		printf("phuong trinh vo nghiem");
    		if((b*b-4*a*c)==0)
    		printf("x1=x2=%d",-b/(2*a));
    		else
    		{printf("x1=%d",(-b-sqrt(b*b-4*a*c))/(2*a));
    		printf("\nx2=%d",(-b+sqrt(b*b-4*a*c))/(2*a));}
    
    	getch();
    }
    Quote Quote

  2. #2
    Tham gia
    11-09-2007
    Location
    Hồ Chí Minh
    Bài viết
    155
    Like
    0
    Thanked 0 Times in 0 Posts
    Nhờ mọi người tìm lỗi giúp
    Ai bít giải thì chỉ giùm đi

  3. #3
    Tham gia
    30-11-2007
    Location
    UIT
    Bài viết
    267
    Like
    0
    Thanked 0 Times in 0 Posts
    Nhìn mấy cái if else của bạn đau cả mắt . Thứ 2 hàm main lên có kiểu trả về void cũng được . Thứ 3 các câu lện if else lên có ngoặc phân rõ và chia trường hợp đơn giản trước cho dễ xử lý . Lên dùng các biến tạm như trong trường hợp này là delta , x,x1,x2 có kiểu float là phù hợp !! Bài này là căn bản bạn xem lại !!
    Được sửa bởi vtienuit lúc 22:51 ngày 16-03-2008

  4. #4
    Tham gia
    15-09-2004
    Bài viết
    14
    Like
    0
    Thanked 0 Times in 0 Posts
    xem lại phần làm tròn và ép kiểu trong C. Kết quả của bạn sai là do ép kiểu tự động sẽ làm tròn trong phép khai căn và phép chia /(2*a)
    Thử đổi a, b, c thành kiểu float xem sao?

  5. #5
    Tham gia
    12-11-2007
    Bài viết
    134
    Like
    0
    Thanked 0 Times in 0 Posts
    Làm kiểu này đi bạn ơi


    #include<stdio.h>
    #include<conio.h>
    #include<math.h>

    double delta(float a,float b,float c)
    {
    return b*b-4*a*c;
    }
    main()
    {
    float a,b,c;
    printf("GIAI PHUONG TRINH BAC HAI DUNG HAM\n");
    printf("Nhap cac gia tri tuong ung cua he so\n");
    printf("a , b , c = ");
    scanf("&f","%f","%f",&a,&b,&c);
    printf("Ket qua tren man hinh\n");

    if (delta(a,b,c)<0)
    {
    printf("Phuong trinh vo nghiem thuc\n");
    }

    if(delta(a,b,c)==0)
    {
    printf("Phuong trinh co nghiem kep\n");
    printf("x1 = x2 = %f",-b/(2*a));
    }
    if (delta(a,b,c)>0)
    {
    printf("Phuong trinh co 2 nghiem phan biet la\n");
    printf("x1 = %f",(-b-sqrt(delta(a,b,c)))/(2*a));
    printf("x2 = %f",(-b+sqrt(delta(a,b,c)))/(2*a));
    }
    }

  6. #6
    Tham gia
    11-09-2007
    Location
    Hồ Chí Minh
    Bài viết
    155
    Like
    0
    Thanked 0 Times in 0 Posts
    Thanks mọi người.
    Cách làm của mình rắc rối thật!
    Thanks superman2007 nhìu lắm!

  7. #7
    Tham gia
    29-12-2007
    Bài viết
    15
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi superman2007 View Post
    Làm kiểu này đi bạn ơi


    #include<stdio.h>
    #include<conio.h>
    #include<math.h>

    double delta(float a,float b,float c)
    {
    return b*b-4*a*c;
    }
    main()
    {
    float a,b,c;
    printf("GIAI PHUONG TRINH BAC HAI DUNG HAM\n");
    printf("Nhap cac gia tri tuong ung cua he so\n");
    printf("a , b , c = ");
    scanf("&f","%f","%f",&a,&b,&c);
    printf("Ket qua tren man hinh\n");

    if (delta(a,b,c)<0)
    {
    printf("Phuong trinh vo nghiem thuc\n");
    }

    if(delta(a,b,c)==0)
    {
    printf("Phuong trinh co nghiem kep\n");
    printf("x1 = x2 = %f",-b/(2*a));
    }
    if (delta(a,b,c)>0)
    {
    printf("Phuong trinh co 2 nghiem phan biet la\n");
    printf("x1 = %f",(-b-sqrt(delta(a,b,c)))/(2*a));
    printf("x2 = %f",(-b+sqrt(delta(a,b,c)))/(2*a));
    }
    }
    bạn ơi cách của bạn làm hay đó. nhưng chẳng may a=0 phuong trinh trở về phương trình bậc 1 thì sao.

    [=========> Bổ sung bài viết <=========]

    Quote Được gửi bởi ngoctam1011 View Post
    Mọi người xem giùm đi,tui viết sao nó ra kết wã sai.
    Ai bít làm chỉ zới, mà cho hỏi luôn,cái hàm lấy căn bậc hai trong C là gì zậy?
    Thanks
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    main()
    {
    	clrscr();
    	int a,b,c;     		//delta = b*b-4*a*c
    	printf("ax^2+bx+c=0\n");//in ra phuong trinh bac hai
    	printf("nhap a:"); scanf("%d",&a);
    	printf("nhap b:"); scanf("%d",&b);
    	printf("nhap c:"); scanf("%d",&c);
    	if(a==0)
    		if(b==0)
    			if(c==0)
    			printf("phuong trinh luon dung\n");
    			else
    			printf("phuong trinh vo nghiem\n");
    		else
    		printf("\nx=%d",-b/a);
    	else
    		if((b*b-4*a*c)<0)
    		printf("phuong trinh vo nghiem");
    		if((b*b-4*a*c)==0)
    		printf("x1=x2=%d",-b/(2*a));
    		else
    		{printf("x1=%d",(-b-sqrt(b*b-4*a*c))/(2*a));
    		printf("\nx2=%d",(-b+sqrt(b*b-4*a*c))/(2*a));}
    
    	getch();
    }
    cách của bạn làm được đó nhưng sửa lại phần tính dlta cho nó khỏe. mình chỉ sửa lại tí xíu thôi nghen rồi tham khảo:
    bạn đặt
    delta=b*b-4ac
    sau đó thay b*b-4ac bằng delta cho nó dể
    Được sửa bởi jbminhtan lúc 22:33 ngày 06-04-2008 Reason: Bổ sung bài viết

  8. #8
    Tham gia
    24-10-2007
    Location
    Bình Định
    Bài viết
    106
    Like
    0
    Thanked 1 Time in 1 Post
    Bài trên của bạn mô tả cách dùng các lệnh if lồng nhau, tôi thấy dùng bài "Giải phương trình bậc 2" là ổn rồi. Tuy nhiên, bạn vẫn chưa nắm rõ cách thức hoạt động của If - Control Flow cùng với việc sử dụng chưa chính xác các cấu trúc dữ liệu nên dẫn tới sai thôi. Tôi xin mạn phép được đưa ra ý kiến riêng như sau:
    1. Chỗ sau đây:
    Code:
    if(a==0)
    		if(b==0)
    			if(c==0)
    			printf("phuong trinh luon dung\n");
    			else
    			printf("phuong trinh vo nghiem\n");
    		else
    		printf("\nx=%d",-b/a);
    thì khi thực hiện tới dòng cuối cùng, giá trị của a phải là 0 (trường hợp phương trình bậc nhất). Như vậy, bạn coi thử chia cho a có được không hen!

    2.Còn khi thực hiện trong phần này:
    Code:
    else
    		if((b*b-4*a*c)<0)
    			printf("phuong trinh vo nghiem");
    		if((b*b-4*a*c)==0)
    			printf("x1=x2=%lf",-b/(2*a));
    		else
    		{
    			printf("x1=%d",(-b-sqrt(b*b-4*a*c))/(2*a));
    			printf("\nx2=%d",(-b+sqrt(b*b-4*a*c))/(2*a));
    		}
    Bạn nhìn thử xem, chương trình có hoạt động như bạn mong muốn không. Tôi mô tả thế này nhé: Cái else ngoài cùng, chỉ thực hiện đến khi gặp dấu ; đầu tiên thôi. Nhưng bạn mong muốn là nó phải bao toàn bộ đoạn code trên, ứng với trường hợp phương trình bậc 2. Như vậy, có lẽ bạn phải đặt thêm dấu {} cho phần else ngoài cùng đó hen.

    3. Còn chỗ này, hàm sqrt có dạng như sau: double sqrt(double). Nghĩa là nó nhận vào một giá trị double và trả về một giá trị double. Việc nhận giá trị double là ổn rồi, vì bạn truyền cho nó kiểu int, thì tự động, trình biên dịch sẽ chuyển thành double. Còn vì nó trả về double, nên bạn dùng toán tử %d (dành cho kiểu decimal integer) thì có ổn không? Tôi đề xuất dùng %lf thay cho %d.

    Theo tôi, bạn cứ dùng giải thuật trên của mình. Giải thuật đó có giá trị hơn các giải thuật khác. Với lại chú ý, nên khai báo thêm biến, gán giá trị các biểu thức cho nó, để cải thiện tốc độ làm việc của chương trình.

    Chúc bạn thành công. Nếu ai thấy mình sai chỗ nào, hay thiếu chỗ nào thì chỉ dùm hen. Cảm ơn.

  9. #9
    Tham gia
    27-12-2007
    Bài viết
    52
    Like
    0
    Thanked 0 Times in 0 Posts
    Hôm trước các bác trên 4rom đều ý kiến rồi,chắc bạn này vào sau quá ta, và cả nhà cũng nhất trí cao là như vậy, những bài cơ bản không lên viết quá nhiều, và cũng không lên phân tích quá nhiều như vầy. Đấy là ý kiến của tập thể, no phải của mình .

  10. #10
    Tham gia
    24-10-2007
    Location
    Bình Định
    Bài viết
    106
    Like
    0
    Thanked 1 Time in 1 Post

    Cần chú ý !

    Quote Được gửi bởi chuot_jery View Post
    Hôm trước các bác trên 4rom đều ý kiến rồi,chắc bạn này vào sau quá ta, và cả nhà cũng nhất trí cao là như vậy, những bài cơ bản không lên viết quá nhiều, và cũng không lên phân tích quá nhiều như vầy. Đấy là ý kiến của tập thể, no phải của mình .
    Anh vui lòng nói rõ hơn đi anh. Không hiểu rõ lắm ý của anh nữa.
    Tại vì em thấy bài về phương trình bậc hai này nằm ở trang nhất của subforum C++ nên vào đóng góp chút ý kiến cỏn con của em thôi (và có ghi chú sãn là nếu có gì thiếu xót, mong được những người như anh đóng góp ý kiến, nhưng đóng góp ý kiến về chủ để này, còn chuyện khác, thì vui lòng đừng đả động đến). Còn chuyện các bác trên 4rum đã "thống nhất" như thế nào, thì em chịu, không hiểu nữa.

    Em chỉ có ý tốt là phân tích thuật toán và cấu trúc của If - Control Flow thôi mà. Tại em thấy ý kiến đó chưa ai nói. Chưa ai nói tức là có người còn chưa hiểu. Em không dám nói là em hiểu cặn kẽ, nhưng em hiểu hơn thì em nói để người chưa hiểu họ hiểu thêm thôi mà, làm gì mà anh chỉ trích em như vậy?

    Anh chuotjery thông cảm cho em nghen, em cũng còn dở lắm, nên cũng ráng tham gia gởi bài cho hiểu biết thêm thôi. Còn anh Pro rồi, thì chỉ cho em với. Cảm ơn anh hen!

Trang 1 / 2 12 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •