1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

Phương trình bậc 3 hoàn chỉnh^^

Thảo luận trong 'Lập trình' bắt đầu bởi Dê con, 4 Tháng một 2010.

  1. Dê con New Member

    Số bài viết: 1,272
    Đã được thích: 1
    Điểm thành tích: 0
    Cuối cùng củng giải xong, mệt quá >"<
    Mã:
    // ptb333.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #define pi 3.141592654
    
    void main(void)
    {    
        double a,b,c,d,x1,x2,x3,delta,pdelta,k,ak,sk;  //pdelta la can bac 3 cua delta
        printf("nhap A\n");scanf("%lf",&a);_flushall();
        printf("nhap B\n");scanf("%lf",&b);_flushall();
        printf("nhap C\n");scanf("%lf",&c);_flushall();
        printf("nhap D\n");scanf("%lf",&d);_flushall();
        if(a==0.0){
            if(b==0.0)
                if(c==0.0){
                    if(d==0.0)
                        printf("phuong trinh bac 2 vo so nghiem");
                    else
                        printf("phuong trinh vo nghiem");
                }    
                else{
                x1=-d/c;
                printf("phuong trinh co mot nghiem x=%2f",x1);
                }
            else
            {
                delta=c*c-4*b*d;
                if (delta<0)
                    printf("pt b2 vo nghiem");
                else{
                    x1=(-c+sqrt(delta))/(2*b);
                    x2=(-c-sqrt(delta))/(2*b);
                    printf("pt co 2 nghiem x1=%0.2f,\n x2=%0.2f",x1,x2);
                }
            }
        }
        else
        {    delta = b*b-3*a*c;
            if (delta >0)
                        pdelta=pow(delta,1.0/3);
            else
                pdelta = -pow(fabs(delta),1.0/3);
            
            
            k=(9*a*b*c-2*b*b*b-27*a*a*d)/(2*sqrt(pow(fabs(delta),3)));
            if (delta >0)
            {
                if (fabs(k)<=1)//phuong trinh co 3 nghiem
                {
                    x1= (2*pow(delta,1.0/2)*cos((acos(k)/3))-b)/(3*a);
                    x2= (2*pow(delta,1.0/2)*cos((acos(k)/3)-(2*pi/3))-b)/(3*a);
                    x3= (2*pow(delta,1.0/2)*cos((acos(k)/3)+(2*pi/3))-b)/(3*a);
                    printf("Phuong trinh co 3 nghiem x1= %lf; x2= %lf ; x3= %lf",x1,x2,x3);
                }
                else
                {
                    // phuong trinh co 1 nghiem duy nhat
                    ak= fabs(k);
                    sk= sqrt(k*k-1);
                    if ((ak-sk)<0)
                        x1= (((sqrt(delta)*fabs(k))/(3*a*k))*(pow((ak+sqrt(k*k-1)),1.0/3)-pow(fabs(sk),1.0/3)));
                    else
                        x1= (((sqrt(delta)*fabs(k))/(3*a*k))*(pow((ak+sqrt(k*k-1)),1.0/3)+pow(fabs(sk),1.0/3)));
                    printf("Phuong trinh co 1 nghiem thuc duy nhat %lf ",x1);
                }
            }
            else if (delta ==0)
                    { //Phuong trinh co 1 nghiem kep
                    if (((b*b*b)-(27*a*a*d)) <0)
                        x1= (-b-pow(fabs((b*b*b)-(27*a*a*d)),1.0/3))/(3*a);
                    else
                        x1= (-b+pow(fabs((b*b*b)-(27*a*a*d)),1.0/3))/(3*a);
                    printf("Phuong trinh co 1 nghiem kep duy nhat %lf ",x1);
            }
    
            
    
            else if (delta<0) //delta < 0 thi phuong trinh co 1 nghiem duy nhat
            {
                sk=(k-sqrt(k*k+1));
                if (sk < 0)
                    x1= (sqrt(fabs(delta))/(3*a))*(pow((k+sqrt(k*k+1)),1.0/3)-pow(fabs(sk),1.0/3))-(b/(3*a));
                else
                    x1= (sqrt(fabs(delta))/(3*a))*(pow((k+sqrt(k*k+1)),1.0/3)+pow(fabs(sk),1.0/3))-(b/(3*a));
                printf("Phuong trinh co 1 nghiem thuc duy nhat %lf ",x1);
            }
        printf ("\n");
        _getch();
        return;
    }
    
    }
  2. nglehien Member

    Số bài viết: 52
    Đã được thích: 0
    Điểm thành tích: 6
    Bác Alex, post code thì đưa vào mục code đi. để z sao nhìn cho nổi
    Mã:
    [I]Cuối cùng củng giải xong, mệt quá >"<[/I]
    // ptb333.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #define pi 3.1416
    
    void main(void)
    {    
        double a,b,c,d,x1,x2,x3,delta,pdelta,k,ak,sk;  //pdelta la can bac 3 cua delta
        printf("nhap A\n");scanf("%lf",&a);_flushall();
        printf("nhap B\n");scanf("%lf",&b);_flushall();
        printf("nhap C\n");scanf("%lf",&c);_flushall();
        printf("nhap D\n");scanf("%lf",&d);_flushall();
        if(a==0.0){
            if(b==0.0)
                if(c==0.0){
                    if(d==0.0)
                        printf("phuong trinh bac 2 vo so nghiem");
                    else
                        printf("phuong trinh vo nghiem");
                }    
                else{
                x1=-d/c;
                printf("phuong trinh co mot nghiem x=%2f",x1);
                }
            else
            {
                delta=c*c-4*b*d;
                if (delta<0)
                    printf("pt b2 vo nghiem");
                else{
                    x1=(-c+sqrt(delta))/(2*b);
                    x2=(-c-sqrt(delta))/(2*b);
                    printf("pt co 2 nghiem x1=%0.2f,\n x2=%0.2f",x1,x2);
                }
            }
        }
        else
        {    delta = b*b-3*a*c;
            if (delta >0)
                        pdelta=pow(delta,1.0/3);
            else
                pdelta = -pow(fabs(delta),1.0/3);
            
            
            k=(9*a*b*c-2*b*b*b-27*a*a*d)/(2*sqrt(pow(fabs(delta),3)));
            if (delta >0)
            {
                if (fabs(k)<=1)//phuong trinh co 3 nghiem
                {
                    x1= (2*pow(delta,1.0/2)*cos((acos(k)/3))-b)/(3*a);
                    x2= (2*pow(delta,1.0/2)*cos((acos(k)/3)-(2*pi/3))-b)/(3*a);
                    x3= (2*pow(delta,1.0/2)*cos((acos(k)/3)+(2*pi/3))-b)/(3*a);
                    printf("Phuong trinh co 3 nghiem x1= %lf; x2= %lf ; x3= %lf",x1,x2,x3);
                }
                else 
                {
                    // phuong trinh co 1 nghiem duy nhat
                    ak= fabs(k);
                    sk= sqrt(k*k-1);
                    if ((ak-sk)<0)
                        x1= (((sqrt(delta)*fabs(k))/(3*a*k))*(pow(ak,1.0/3)-pow(fabs(sk),1.0/3)));
                    else 
                        x1= (((sqrt(delta)*fabs(k))/(3*a*k))*(pow(ak,1.0/3)+pow(fabs(sk),1.0/3)));
                    printf("Phuong trinh co 1 nghiem thuc duy nhat %lf ",x1);
                }
            }
            else if (delta ==0)
                    { //Phuong trinh co 1 nghiem kep
                    if (((b*b*b)-(27*a*a*d)) <0)
                        x1= (-b-pow(fabs((b*b*b)-(27*a*a*d)),1.0/3))/(3*a);
                    else
                        x1= (-b+pow(fabs((b*b*b)-(27*a*a*d)),1.0/3))/(3*a);
                    printf("Phuong trinh co 1 nghiem kep duy nhat %lf ",x1);
            }
    
            
    
            else if (delta<0) //delta < 0 thi phuong trinh co 1 nghiem duy nhat
            {
                sk=(k-sqrt(k*k+1));
                if (sk < 0)
                    x1= (sqrt(fabs(delta))/(3*a))*(pow((k+sqrt(k*k+1)),1.0/3)-pow(fabs(sk),1.0/3));
                else 
                    x1= (sqrt(fabs(delta))/(3*a))*(pow((k+sqrt(k*k+1)),1.0/3)+pow(fabs(sk),1.0/3));
                printf("Phuong trinh co 1 nghiem thuc duy nhat %lf ",x1);
            }
        printf ("\n"); 
        _getch();
        return; 
    }
    
    }         
  3. Dê con New Member

    Số bài viết: 1,272
    Đã được thích: 1
    Điểm thành tích: 0
  4. spkt_099100 Member

    Số bài viết: 949
    Đã được thích: 0
    Điểm thành tích: 16
  5. spkt_099100 Member

    Số bài viết: 949
    Đã được thích: 0
    Điểm thành tích: 16
    đâu có chạy được.nó hiện ra cái gì đâu ko à.nhập xong a b c d là press anykey luôn!!hic hic!coi lại coi Quí!
  6. nglehien Member

    Số bài viết: 52
    Đã được thích: 0
    Điểm thành tích: 6
    Bác Alex nhầm ở chổ
    else if (delta =0) nên chương trình không chạy được ah.
    Phải là delta==0
  7. kid_pro Member

    Số bài viết: 208
    Đã được thích: 6
    Điểm thành tích: 18
    Cac bạn nên xem lại thuật toán. trong chương trình cải cách bây giờ ở phổ thông trung học có thuật giải hay hơn và đơn giản hơn.chúc anh em thành công
  8. không Member

    Số bài viết: 405
    Đã được thích: 0
    Điểm thành tích: 16
  9. Dê con New Member

    Số bài viết: 1,272
    Đã được thích: 1
    Điểm thành tích: 0
    Thuật toán này mình lấy từ wiki, ai thấy sai gì sửa típ nhé^^.
    Quái lạ, ở nhà chạy rất chính xác mới dám post chứ! lạ nhỉ?
  10. Dê con New Member

    Số bài viết: 1,272
    Đã được thích: 1
    Điểm thành tích: 0
  11. langthang2711 New Member

    Số bài viết: 41
    Đã được thích: 0
    Điểm thành tích: 0
    Kỹ năng chém gió của bác này quả là tuyệt vời! =))
  12. 09910007 New Member

    Số bài viết: 58
    Đã được thích: 0
    Điểm thành tích: 0
  13. Dê con New Member

    Số bài viết: 1,272
    Đã được thích: 1
    Điểm thành tích: 0
  14. loveinfo.nhoc New Member

    Số bài viết: 13
    Đã được thích: 0
    Điểm thành tích: 0
    Mình nhớ khai thằng này ra là Mr Đức gõ đầu ngay
    Mã:
    #define pi 3.141592654
    .. Nhớ có lần ổng kêu khai kiểu đó không phải VIP code ! hơ hớ !
    Mà code trên viết trên VC-6.0 hay sao thế ! Test thử trên BC thấy vài lỗi, sau khi rút ruột bớt một số "tiền dư" và bù lỗ vào thằng #include "stdio.h" thì em nó chạy ngon lành !:D... Code được ! Có điều nó bảo thừa 1 thằng khai báo không cần thiết là sao ta :-??... Có ai thấy nó không ! hic
    Mã:
    'pdelta' is assigned avalue that is never used
  15. Dê con New Member

    Số bài viết: 1,272
    Đã được thích: 1
    Điểm thành tích: 0
  16. phuquy New Member

    Số bài viết: 2
    Đã được thích: 0
    Điểm thành tích: 0
    Hôm trước mình có thấy 1 CODE giải PTB3 cũng hay. Thấy cũng gọn. Không biết là CODE of huynh nào. xin mạo mụi post lên. of Huynh nào bên SPKT CNTT ah!.:d:d:d:d
    Với lại bài của Alex.... dài quá. Đề là giải phương trình bậc 3,chứ đâu có nói biện luận đâu. Mình nghĩ cái này hơi thừa
    Mã:
    #include "stdafx.h"
    #include <math.h>
    #define pi 4.0*atan(1.0)
    #include <conio.h>
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        double dDelta,dK,temp;
        double da,db,dc,dd;
        double dx1,dx2,dx3;
        printf("Nhap he so A.n");scanf_s("%lf",&da);_flushall();
                while(da==0){
                    printf("nhap lai a (a khac 0)");scanf_s("%lf",&da);_flushall();
                }
        printf("Nhap he so B");scanf_s("%lf",&db);_flushall();
        printf("Nhap he so C");scanf_s("%lf",&dc);_flushall();
        printf("Nhap he so D");scanf_s("%lf",&dd);_flushall();
    
    //tính Delta
        dDelta=db*db-3.0*da*dc;
    
    // Tim nghiem thuc.TH1
        if (dDelta==0){
            if(pow(db,3)-27.0*da*da*dd<0)
                dx1=(-db-pow(fabs(db*db*db-27*da*da*dd),1.0/3))/(3*da);
            else 
                dx1=(-db+pow(fabs(db*db*db-27*da*da*dd),1.0/3))/(3*da);
            printf("phuong trinh co 1 thuc x=%f",dx1);
            printf(".n");
        }
    //tính hệ số K
        dK=(9*da*db*dc-2*pow(db,3)-27*da*da*dd)/(2*sqrt(pow(abs(dDelta),3)));
    
    // Tim nghiem thuc.TH2
        if(dDelta<0){
            if(dK-sqrt(dK*dK+1)>0)
                temp=pow(fabs(dK-sqrt(dK*dK+1)),1.0/3);
            else
                temp=-pow(fabs(dK-sqrt(dK*dK+1)),1.0/3);
    
            dx1=(sqrt(fabs(dDelta))/(3*da))*(pow(dK+sqrt(dK*dK+1),1.0/3)+temp)-db/(3*da);
            printf("phuong trinh co 1 thuc x=%f",dx1);
        }
        if(dDelta>0)
            if(fabs(dK)>1){
                dx1=(fabs(dK)*sqrt(abs(dDelta))/(3.0*da*dK))*(pow(fabs(dK)+
                    sqrt(dK*dK-1),1.0/3)+pow(fabs(dK)-sqrt(dK*dK-1),1.0/3))-
                                                                db/(3.0*da);
                printf("phuong trinh co nghiem 1 thuc x=%f",dx1);
            }
            else{
                dx1=(2.0*sqrt(dDelta)*cos(acos(dK)/3.0)-db)/(3.0*da);
                dx2=(2.0*sqrt(dDelta)*cos(acos(dK)/3.0-(2.0*pi)/3.0)-db)/(3.0*da);
                dx3=(2.0*sqrt(dDelta)*cos(acos(dK)/3.0+(2.0*pi)/3.0)-db)/(3.0*da);
                printf("phuong trinh co 3 nghiem thuc.n x1=%3f x2=%3f x3=%3f",
                                                                        dx1,dx2,dx3);
            }
        _getch();
        return 0;
    } 
    
  17. Dê con New Member

    Số bài viết: 1,272
    Đã được thích: 1
    Điểm thành tích: 0
  18. spkt_099100 Member

    Số bài viết: 949
    Đã được thích: 0
    Điểm thành tích: 16

Chia sẻ trang này