Chương trình giả lập máy tính casio fx bằng C++

Tình hình là em có cái đề BT như sau, các anh chị giúp em phần từ 6,7,8,9 với ạ
Xây dựng ứng dụng mô phỏng máy tính bỏ túi Casio với các chức năng chính như sau:

  1. Tính n! (n nguyên dương).
  2. Giải phương trình: 𝐴𝑥 + 𝐵 = 0.
  3. Giải phương trình: 𝐴𝑥
    2
  • 𝐵𝑥 + 𝐶 = 0.
  1. Tính căn bậc hai của một số nguyên dương nhập từ bàn phím.
  2. Giải phương trình bậc 3
  3. Giải phương trình bậc nhất 2 ẩn
  4. Giải phương trình bậc nhất 3 ẩn
  5. Tính a^n chỉ dùng phép ‘+’ hoặc ‘-‘, a và n bất kỳ nhưng không đồng thời bằng 0.
  6. Tìm ước chung lớn nhất và bội chung nhỏ nhất của hai số nguyên dương được nhập từ
    bàn phím.

6: giải phương trình bậc 2 => nhập a, b, c tìm điều kiện đặc biệt ( trong toán ấy), rồi kiểm tra delta, nếu delta = 0, delta >0 hoặc delta <0 thì tùy điều kiện tính tiếp.

hàm lấy số mũ, hàm lấy căn, sử dụng math.h

7
. => Cái này quên công thức rồi, mình lười tìm lại quá.

2^ 3 = 2 * 2 * 2 = 8 = 2 + 2 + 2 + 2 —> Hiểu chưa.
hay > 3 ^ 3 = 3 * 3 * 3 = 27 = (3 + 3 + 3) * 3

1 Like

bài 6 :

 #include <stdio.h>
    #include <math.h>
    void main()
    {
    float a, b, c, delta;
     
    printf("\nGiai phuong trinh bac hai AXý + BX + C = 0");
    printf("\nCho biet ba he so A B C : ");
    scanf("%f%f%f", &a, &b, &c);
     
    delta = b * b - 4 * a * c;
    if (delta<0)
    printf("Phuong trinh vo nghiem");
    else if (delta == 0)
    printf("Phuong trinh co nghiem kep x1 = x2 = %f", -b/(2*a));
    else
    {
    printf("Phuong trinh co hai nghiem phan biet\nx1 = %f", (-b + sqrt(delta))/(2*a));
    printf("\nx2 = %f", (-b - sqrt(delta))/(2*a));
    }
    
 }

Mình code = C bạn edit lại = C++ đi

2 Likes

bài này thiếu kiểm tra điều kiện đặc biệt, nếu ở lớp 9 thì delta < 0 thì vô nghiệm, nhưng ở lớp 13 thì < 0 thì ra nghiệm phức :smiley:

Tks, bạn, nhưng câu 6 là , HỆ phương trình 2 ẩn :smiley: chứ không phải cái pt bậc 2 :smiley:

hệ phương trình 2 ẩn, ví dụ như

3a + 4b = 10
4a + 10b = 30

giống thế đó à?

1 Like

uhm dạng vậy đó còn câu kế là dạng 3 ẩn

Edit lại đề bài : Giải phương trình bậc nhất 2 ẩn chứ không phải Giải hệ phương trình bậc 2 ( 2 cái khác nhau nhé)

cho 4 biến hoặc dùng 1 struct (nếu chưa học struct thì thôi dùng 6 biến). Các biến này tượng trưng cho a1 b1 c1 và a2 b2 c2.

Cách làm theo bài bên trên:

3a + 4b = 10 => 4b = 10/3a => b = (10/3a)/4 (điều kiện 1)
4a + 10b = 30 => 4a + 10 * ( (10/3a)/4 )= 30 (điều kiện 2)

Giải điều kiện 2 [ 4a + 10 * ( (10/3a)/4 )= 30 ] ta có được số a, áp dụng số a ta có được số b => đáp số là a và b, còn cách code thì bác tự code đi, đơn giản mà :smiley: hệ phương trình 3 ẩn thì có 3 phương trình, dần áp dụng vào rồi làm thôi.

Đó là cách đơn giản nhất, còn nếu xét điều kiện a =0, b =0 hoặc c =0 hay a1; b1 hay c1 bằng 0 nữa. Nói chung là để “tối ưu hóa” thì cần nhiều cái lắm :smiley:, làm đơn giản trươccs thôi

1 Like

Lâu quá không đụng vào nó nên quên :smiley: tks bro

Hơi dài, nhưng anh có thể tham khảo, em mới lớp 9 nên chỉ có bấy nhiêu trường hợp này thôi (a, b hay c = 0, delta < 0, …), em code = C, nhưng toàn code cơ bản nên chắc C++ vẫn đc (Visual của em code C++ xài printf vẫn chạy)

void SpecialCases(float a, float b, float c)
{
    float g1, g2;
    if(a + b + c == 0) {
        g1 = 1;
        g2 = c/a;
        printf("x1 = %.2f\n", g1);
        printf("x2 = %.2f\n", g2);
    }
    if(a - b + c == 0) {
        g1 = -1;
        g2 = -c/a;
        printf("\nx1 = %.2f\n", g1);
        printf("\nx2 = %.2f\n", g2);
    }
}

void aEqual0(float a, float b) // when a = 0
{
    float t;
    if(a == 0) {
        if(b == 0)
            printf("x in R\n");
        else
            printf("x in empty\n");
    } else {
        t = -b/a;
        printf("x = %.1f\n", t);
    }
}

void bEqual0(float a, float b, float c) // When b = 0
{
    float x1, x2;
    if(c/b <= 0) {
        x1 = sqrt(-c/a);
        x2 = -sqrt(-c/a);
        printf("x1 = %.2f\n", x1);
        printf("\nx2 = %.2f\n", x2);
    } else
        printf("x in empty\n");
}

void cEqual0(float a, float b)// when c = 0
{
    float y1, y2;
    y1 = 0;
    y2 = -b/a;
    printf("x1 = %.2f\n", y1);
    printf("\nx2 = %.2f\n", y2);
}

void FullEquation(float a, float b, float c)
{
    float delta, z1, z2;
    delta = pow(b, 2) - (4 * a * c);
    if(delta < 0)
        printf("x in empty\n");
    if(delta == 0) {
        z1 = -b/(2*a);
        printf("x1 = x2 = %.2f\n", z1);
    }
    if(delta > 0) {
        printf("equation has 2 roots\n");
        z1 = (-b - sqrt(delta))/(2 * a);
        z2 = (-b + sqrt(delta))/(2 * a);
        printf("x1 = %.2f\n", z1);
        printf("x2 = %.2f\n", z2);
    }
}

void SecondEquationSolve(float a, float b, float c)
{
    if(a + b + c == 0|| a - b + c == 0)
        {
        SpecialCases(a, b, c);

    }
    else if(a == 0) {
        aEqual0(b, c);

    }
    else if(b == 0) {
        bEqual0(a, b, c);

    }
    else if(c == 0) {
        cEqual0(a, b);

    }else
        FullEquation(a, b, c);
}


void SecondEquation()
{
    float a, b, c;
    printf("Input a, b and c\n");
    // Input a
    printf("a = ");
    scanf("%f", &a);
    // Input b
    printf("b = ");
    scanf("%f", &b);
    // Input c
    printf("c = ");
    scanf("%f", &c);
    // Solve
    SecondEquationSolve(a, b, c);
}

void FirstEquation()
{
    float a, b;
    //Input
    printf("Input a, b\n");
    //Input a
    printf("a = ");
    scanf("%f", &a);
    //Input b
    printf("b = ");
    scanf("%f", &b);
    aEqual0(a, b);
}

Đối với bài giải phương trình bậc 3 thì bạn cần viết một hàm tìm nghiệm trong 1 khoảng cho trước :wink: từ đó bạn chia các trường hợp dựa vào đạo hàm và chia khoảng ra. Sau đó, áp dụng hàm để giải thôi.
Hàm tìm nghiệm trong khoảng bạn có thể google

em viết thành công rồi này

Nếu bạn muốn code phương trình bậc ba thì để lại gmail lại (code C#WDF) tại code mình dài không dán vào đây được

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