[Số học] – Các thuật toán về số học

Các thuật toán về số học sẽ giúp bạn làm quen với thuật toán đơn giản, thường gặp để bạn dể dàng tiếp cận, làm quen với cách trình bày thuật toán.

Một số bài toán số học cơ bản gồm:

  • Giải phương trình bậc 2
  • Tính tổng n số nguyên đầu tiên
  • Tính và in ra n số trong dãy Fibonacci
  • In tam giác ngược

Phần này sẽ giúp bạn rèn luyện câu lệnh điều kiện và câu lệnh lặp trong lập trình.

Bài 1: Viết chương trình nhập vào 3 số a,b,c và tìm nghiệm của phương trình bậc 2: ax2 + bx + c = 0.

Về lý thuyết

Về mặt lý thuyết chúng ta đều biết cách giả phương trình bậc 2 như sau:

  • Nếu a = 0 thì phương trình sẽ trở thành bx+c=0, chúng ta đã giải ở phần trước.
  • Nếu a<>0, tính delta = b2 – 4*a*c
  • Nếu delta<0, phương trình vô nghiệm
  • Nếu delta =0 thì phương trình sẽ có một nghiệm kép x=-b/2a
  • Nếu delta>0 thì phương trình có 02 nghiệm x1 = (-b + sqrt(delta))/2a, x2 = (-b - sqrt(delta) )/2a

Phân tích các bước

  • Đầu vào: nhập các giá trị a, b và c
  • Đầu ra: Tính ra nghiệm x

Các bước thực hiện:

Nhập vào các giá trị a, b và c

Kiểm tra a

   Nếu a =0

      Kiểm tra b

        Nếu b=0

          Kiểm tra c

            Nếu c=0 Thông báo phương trình có vô số nghiệm

            Nếu c<>0 thông báo phương trình vô nghiệm

        Nếu b<>0

            Thông báo phương trình có 1 nghiệm x=-c/b

    Nếu a<>0, tính delta

        Kiểm tra delta

        Nếu delta <0 Thông báo phương trình vô nghiệm

        Nếu delta =0 Thông báo phương trình có một nghiệm kép x=-b/2a

        Nếu delta >0  Thông báo phương trình có 02 nghiệm phương trình có 02 nghiệm x1 = (-b + sqrt(delta))/2a, x2 = (-b -sqrt(delta))/2a

Cách biểu diễn thuật toán

Trong trường hợp này, tôi sử dụng ngôn ngữ giả.

Declare int a,b,c

        Double delta  

Input a,b,c

If a=0 then

     If b =0 then

          If c=0 then

              Print ‘Phương trình có vô số nghiệm’

          Else

              Print ‘Phương trình vô nghiệm’

     Else

          Print ‘Phương trình có nghiệm x=%f’,-c/b

Else

     delta = b*b – 4*a*c

     If delta <0

          Print ‘Phương trình vô nghiệm’

     Else If delta = 0

              Print ‘Phương trình có một nghiệm kép x=%f’,-b/2a

          Else

              Print ‘Phương trình có 02 nghiệm x1= %f, x2=%f”, -b + sqrt(delta)/2*a, -b - sqrt(delta)/2*a

Biểu diễn thuật toán bằng chương trình Java

import static java.lang.Math.sqrt;

public class QuadraticEquation {

public static void main(String[] args) {
    int a=1, b=2, c=1;
    quardraticEquationFunction(a, b, c);
}

// Ham giai phuong trinh bac 2
static void quardraticEquationFunction(int a, int b, int c){
   double delta;
   if(a==0)
       if(b==0)
           if(c==0)
               System.out.println("Phuong trinh co vo so nghiem");
           else
               System.out.println("Phuong trinh vo nghiem");
       else
           System.out.println("Phuong trinh co mot nghiem x=" + -c/b);
   else{
       delta=b*b-4*a*c;
       if(delta<0)
           System.out.println("Phuong trinh vo nghiem");
       else if(delta==0)
           System.out.println("Phuong trinh co mot nghiep ke x= " + -b/(2*a));
       else
           System.out.format("Phuong trinh co 02 nghiem x1= %.2f%n va x2 = %.2f%n ",
               (-b + sqrt(delta))/2*a, (-b - sqrt(delta))/2*a);
    }
}
}

Bài tiếp: Thuật toán tính tổng một dãy số

Bài trước: Cơ bản về thuật toán

Đối tác tuyển dụng