Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Giải phương trình bậc hai

  1. #1
    Ngày gia nhập
    02 2010
    Bài viết
    1

    Mặc định Giải phương trình bậc hai

    Em mới học C được mấy ngày Đây là bài tập của em, em đã làm xong và chạy được nhừng em chưa biết nó đã là tối ưu nhất hay chưa với cả em cũng không biết làm thế nào để kết quả hiển thị ra kiểu như 1.5 thay vì 1.56789! Mong được mọi người giúp đỡ!
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    float a, b, c, d, x1, x2, z;
    void nhap()
    {
         printf("Giai phuong trinh bac hai");
         printf("\nNhap a: ");
         scanf("%f", &a);
         printf("Nhap b: ");
         scanf("%f", &b);
         printf("Nhap c: ");
         scanf("%f", &c);
         }
    void xuly()
    {
         d=b*b-4*a*c;
         x1=(-b-sqrt(d))/(2*a);
         x2=(-b+sqrt(d))/(2*a);
         z=(sqrt(-d))/(2*a);
         if(a==0)
         {if(b==0)
         {if(c==0) printf("Phuong trinh da cho co vo so nghiem");
         else printf("Phuong trinh da cho vo nghiem");}
         else printf("Phuong trinh da cho co nghiem x=%f", -c/b);}
         else
         {if(d<0) printf("Phuong trinh da cho co nghiem x1=%f+%fi x2=%f-%fi", -b/2*a, z, -b/2*a, z);
         if(d==0) printf("Phuong trinh da cho co nghiem kep x=%f", -b/2*a);
         if(d>0) printf("Phuong trinh da cho co nghiem x1=%f x2=%f", x1, x2);}
         }
         
    int main()
    {
         nhap();
         xuly();
         printf("\nNhan phim bat ky de ket thuc chuong trinh");
         getch();
         }

  2. #2
    Ngày gia nhập
    12 2011
    Nơi ở
    TP HCM
    Bài viết
    3

    Giả sử:
    printf("%m.nf",x);
    -Lệnh này sẽ in ra m chữ số trước dấu thập phân và n số sau dấu thập phân.
    Có gì sai mong các bạn chỉ bảo

  3. #3

    nếu cậu muốn hỏi tối ưa chưa thì sau khi tính được delta thì khoang tính x1 x2 và z ! cho nó lồng vào tính khi if thỏa ! thế mới đỡ ram làm việc ! còn theo lời bạn cauberong thì đúng đấy

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Trước khi bạn thấm nhuần cách sử lý số thực thì cách làm việc trên con toán số thực chưa thể đúng chứ đừng nói đến tối ưu.

    Quy luật này tôi thấy 99% bạn đăng bài lên đây đều mắc phải. Hình như giáo trình không có dạy toán số thực?

    Số thực không thể so sánh bằng toán tử ==, bỏi vì chúng không chín xác. Trong khi làm toán số thực, ta chỉ có thể ước lượng một số được coi là zero bằng cách so sánh xem số ấy có nhỏ hơn một số rất nhỏ mà ta chấp nhận là sai số. Tương tự, ta chỉ có thể ước lượng hai số coi như bằng nhau nếu trị giá nổi (absolute) của hiệu số hai số trên được coi là zero theo phương pháp trên.

  5. #5
    Ngày gia nhập
    01 2012
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Trước khi bạn thấm nhuần cách sử lý số thực thì cách làm việc trên con toán số thực chưa thể đúng chứ đừng nói đến tối ưu.

    Quy luật này tôi thấy 99% bạn đăng bài lên đây đều mắc phải. Hình như giáo trình không có dạy toán số thực?

    Số thực không thể so sánh bằng toán tử ==, bỏi vì chúng không chín xác. Trong khi làm toán số thực, ta chỉ có thể ước lượng một số được coi là zero bằng cách so sánh xem số ấy có nhỏ hơn một số rất nhỏ mà ta chấp nhận là sai số. Tương tự, ta chỉ có thể ước lượng hai số coi như bằng nhau nếu trị giá nổi (absolute) của hiệu số hai số trên được coi là zero theo phương pháp trên.
    đoạn code em viet = class co noi dung sau:
    class phuongtrinhb2
    {
    private:
    float a, b, c, delta, x1, x2, x;
    public:
    void nhap_ptb2();
    void xuat_ptb2();
    void delta_ptb2();

    };

    void phuongtrinhb2::delta_ptb2()
    {
    if(a==0)
    {
    if(b==0)
    {
    if(c==0)
    cout<<"Phuong trinh da cho co vo so nghiem";
    else
    cout<<"Phuong trinh da cho vo nghiem";
    }
    else
    {
    x=-c/b;
    cout<<"Phuong trinh da cho co nghiem x= " << x;
    }
    }
    else
    {
    delta=(b * b)-(4* a * c);
    if(delta>=0)
    {
    if(delta==0)
    {
    x = -b/(2*a);
    cout<<"\nphuong trinh co nghiem kep x = x1 = x2 = "<< x;
    }
    else
    {
    x1= (-b + sqrt(delta))/(2*a);
    x2= (-b - sqrt(delta))/(2*a);
    cout<<"\nphuong trinh co 2 nghiem phan biet";
    cout<<"\n x1 = "<< x1;
    cout<<"\n x2 = "<< x2;
    }
    }
    else
    {
    cout<<"\nphuong trinh vo nghiem";
    }
    }
    };

    void main()
    {
    phuongtrinhb2 p1;
    p1.nhap_ptb2();
    p1.xuat_ptb2();
    p1.delta_ptb2();
    getch();
    }

    anh co thể cho em hỏi nếu dùng nghiệm x1, x2, x để làm 1 động tác khác
    ví dụ gán 1 biến float t = p1.x1;
    thì em phải thao tác ntn?
    nếu hàm trả về thay void phuongtrinhb2::delta_ptb2() bằng float thì phải return ntn?
    vì theo em thay void = float thì chỉ return dc 1 lần trong khi ở đây em muốn dùng cả p1.x2 hoặc p1.x hoặc p1.delta và cả 3 tham số truyền vào là a,b,c là p1.a, p1.b, p1.c thì phải thay đổi khai báo private ntn vậy anh?
    mong anh giúp đỡ

  6. #6
    Ngày gia nhập
    01 2012
    Bài viết
    24

    Mặc định Giải phương trình bậc hai

    C không cho return multiple results, chỉ có return struct hoặc là cái hàm giải phương trình của bạn phải nhận vào pointer tới nơi chứa kết quả.
    Tuesday 03 January 2012
    Battery Level, 69%

  7. #7
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    C Code:
    1. int phuongtrinhb2::delta_ptb2(float &x1, float &x2)
    2. {
    3.   if (vô nghiệm) return 0;
    4.   if (vô số nghiệm) return 3; // bất cứ số gì lớn hơn 2
    5.   if (nghiệm đơn)
    6.   {
    7.     x1 = x2 = nghiệm đơn;
    8.     return 1;
    9.   }
    10.   if (nghiệm đôi)
    11.   {
    12.     x1 = nghiệm 1;
    13.     x2 = nghiệm 2;
    14.     return 2;
    15.   }
    16. }

    tb. thường thì viết code giải như vầy trong C++, người ta không dùng hàm đối tượng mà viết một hàm lớp (static). Hàm static này nhận 5 tham số, 3 tham đầu là a, b, c (khong sợ lẫn lộn vì hàm static không biết thuộc tính không static) và hai tham biến cuối là x1, x2.
    Hàm đối tượng vẫn nhận 2 tham biến x1, x2 và gọi hàm lớp trên, và đặt 3 thuộc tính a, b, c làm biến

    C Code:
    1. static int phuongtrinhb2::delta_ptb2(float a, float b, float c, float &x1, float &x2)
    2. {
    3.  /* code giải pt ở đây. Các biến a, b, c không sợ lẫn lộn vì hàm static không biết thuộc tính không static */
    4. }
    5.  
    6. int phuongtrinhb2::delta_ptb2(float &x1, float &x2)
    7. {
    8.   return phuongtrinhb2::delta_ptb2(a, b, c, float &x1, float &x2);
    9. }

    Làm như thế, người ta sẽ được cái lợi là có thể lập đối tượng để giải hay chỉ cần dùng tên class, gọi hàm ra giải thẳng luôn đều được cả.
    Đã được chỉnh sửa lần cuối bởi VoTichSu : 07-01-2012 lúc 11:13 PM.

  8. #8
    Ngày gia nhập
    02 2010
    Bài viết
    1

    Em xin cảm ơn mọi người!

Các đề tài tương tự

  1. Cung cấp giấy ik plus, Paper One, Plus A+, Double A, Giấy Thái Lan, Giấy Bãi Bằng, bìa màu, băng dính, mica các loại
    Gửi bởi dungptvietthanh trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 07-06-2013, 04:05 PM
  2. Chung cư Đại Thanh giảm sốc 10tr/vnđ cho các căn hộ. giảm và liên tục giảm…!!
    Gửi bởi lanthanh91 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 09-10-2012, 10:27 AM
  3. Trả lời: 0
    Bài viết cuối: 06-08-2012, 07:01 PM
  4. Trả lời: 0
    Bài viết cuối: 04-08-2012, 03:08 PM
  5. Trả lời: 0
    Bài viết cuối: 24-05-2012, 04:04 PM

Quyền hạn của bạn

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