Thực hành: công thức Heron

Tính diện tích tam giác theo công thức Heron (Hê rông). Đây là bài thực hành giúp cho những người mới bắt đầu tiếp cận ngôn ngữ lập trình C.

1. Yêu cầu

Viết chương trình tính diện tích tam giác (s) theo công thức Heron (Hê rông) khi biết độ dài ba cạnh của nó (a, bc).

 với là nửa chu vi.

Kết quả chạy chương trình sẽ có thể như sau:


Hình 1

2. Ý tưởng

Nhận xét ban đầu

  • Để lưu độ dài 3 cạnh của tam giác, ta cần 3 biến kiểu số thực (float cũng tạm đủ sử dụng).
  • Để lưu diện tích tam giác (s), cũng cần một biến kiểu số thực (float luôn cũng được).
  • Trong quá trình tính toán, để cho tiện (đỡ phải viết công thức rườm ra), ta nên tạo thêm một biến khác để lưu nữa chu vi của tam giác. Để cho đồng bộ, cũng nên kiểu float luôn.

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

  1. Khai báo các thư viện cần sử dụng và hàm main().
  2. Hiển thị Lời chào giới thiệu chương trình, có thể là: "Chuong trinh tinh dien tich tam giac theo cong thuc Heron..."
  3. Khai báo đồng thời khởi tạo giá trị ban đầu cho 3 biến a, b, c.
  4. Khai báo biến p, sau đó tính p theo công thức .
  5. Khai báo biến s, sau đó tính s theo công thức .
  6. Xuất giá trị của a, b, c ra màn hình, ví dụ: "Tam giac co do dai ba canh lan luot la: a = 3, b = 4, c = 3.5".
  7. Xuất giá trị của  p ra màn hình, ví dụ: "Co nua chu vi la p = 3.25".
  8. Xuất giá trị của s ra màn hình, ví dụ: "Co dien tich la s = 5.08".
  9. Dừng màn hình để xem kết quả.

3. Cài đặt

Ta sẽ lần lượt cài đặt theo các bước ở trên. Chỉ có một chú ý rằng, để tính diện tích s ta cần sử dụng phép toán khai căn bậc 2. Trong C, không có phép toán này, nhưng may mắn là C lại có cách khác giúp ta tính được căn bậc 2, dưới dạng hàm. Cụ thể là hàm sqrt (viết tắt của square root, nghĩa là căn bậc 2) trong thư viện math.h. Do vậy, trước khi sử dụng hàm này, ta cần khai báo thư viện bằng chỉ thị #include <math.h>.

  1. Cần khai báo 3 thư viện: stdio.h, conio.hmath.h (3 dòng).
  2. Sử dụng hàm printf để hiển thị lời chào (1 dòng).
  3. Để khai báo biến a kiểu số thực (float) đồng thời khởi gán giá trị ban đầu là 3, dòng lệnh sẽ như sau:
    float a = 3;
    Hoàn toàn tương tự cho 2 biến bc. Để hoàn thành bước 3, cần 3 dòng lệnh.
  4. Để tính p, chỉ cần sử dụng các toán tử + ( ) / (trên số thực) và =.
  5. Khi tính s theo công thức Heron, chỉ cần chú ý cách sử dụng hàm sqrt để tính căn bậc 2. Như ví dụ dưới đây, dòng lệnh để khai báo và tính giá trị của số thực u (kiểu double) theo giá trị của 2 số thực xy theo công thức sẽ như sau:
    double u = sqrt(x*x+y*y);
    Ta hoàn toàn có thể "bắt chước" theo để tính s :-)
  6. (xem bước 8)
  7. (xem bước 8)
  8. Để xuất giá trị của một số thực ra màn hình cho dễ nhìn (ví dụ, với số 3.5, sẽ hiển thị 3.50 thay vì 3.500000), ta cần chú ý ở điểm sau:
    Thay vì sử dụng %f (thì sẽ hiển thị 3.500000), ta nên sử dụng %.2f (nghĩa là sẽ chỉ hiển thị 2 chữ số sau dấu chấm thập phân, nghĩa là 3.50).
  9. Quá đơn giản, sử dụng hàm getch() trong thư viện conio.h (đây chính là lý do phải khai báo #include <conio.h> trong phần đầu của chương trình).

4. Biên dịch (compile) và Debug chương trình (tức, cho chương trình chạy từ từ)

Thực hiện lần lượt từng bước sau:

  1. Kiểm tra xem bộ phím nóng đang sử dụng là gì. Nếu không phải là "Visual Studio 2005" thì đặt lại theo giá trị bộ phím nóng này.
  2. Biên dịch chương trình bằng cách kích chọn BuildBuild Solution, hoặc nhấn phím F6. Nếu có lỗi thì phải tìm cách sửa (chú ý thông báo lỗi ở cửa sổ Error List), ngược lại (có dòng Build succeeded ở góc trái và dưới cùng của Visual Studio, nghĩa là đã biên dịch thành công), mời bạn sang bước tiếp theo.
  3. Mở cửa sổ Watch 1 và đưa cố định vào phía bên trái màn hình sau đó nhập tên các biến a, b, c, psvào, như hình sau:


    Hình 2

  4. Sử dụng phím F10 để chạy từng lệnh. Chạy xong lệnh nào thì chú ý giá trị các biến ở cửa sổ Watch 1 và cửa sổ chạy của chương trình.

Chúc mọi người suôn sẻ :-)

Bình luận (8)

Viết Bình luận
  • lê hữu dương
    thầy ơi

    sao ảnh mờ thế thầy em k đọc được :(

  • Tho
    sua dum e loi nay thay oi

    The variable 'c' is being used without being defined

     

  • @Giang

    ctr cua e ntn?

  • giang
    giang
    em chay thu chuong trinh heron nay rui ma sao chua nhap so vao ma han da chay ra ca tang the thay,em khong hiu sao hit
  • @Hao

    The variable 'c' is being used without being initialized nghĩa là biến 'c' (đang được sử dụng) không khởi tạo giá trị! Nghĩa là em quên dòng khởi gán giá trị cho c.

  • Hao
    loi
    Thầy ơi ct của em đã có khai báo biến c. Khi f7 kiểm tra lỗi thì máy cũng báo là không có lỗi. Nhưng khi f5 để chạy ct thì nó lại bị lỗi này: Run-Time Check Failure #3 - The variable 'c' is being used without being initialized. là sao thầy?!
  • @Vu

    T là mờ đi đó mà :)

  • nguyen van vu
    em hoj xj
    cua so watch sao nhjn ko ro noj thay.hjx phan cong thuc heron thay hj

Viết Bình luận

Họ tên Bắt buộc
Email Bắt buộc
Tiêu đề Bắt buộc
Kiểu bình luận
Nội dung
Nhập mã được hiển thị: