Tim kiếm

BÀI TOÁN TỔNG HỢP CHUYẾN ĐI

Khi chúng ta đã biết cách tính khoảng cách và hướng đi Locxo giữ hai điểm, thì ta có thể tính và lập thành bảng của một chuyến hành trình từ cảng này tới cảng khác bằng cách tính tổng khoảng cách trên các đoạn Locxo của tuyến hành trình, cũng như khoảng cách và hướng chạy trên mỗi đoạn, quãng đường còn lại khi chạy hết mỗi đoạn, đồng thời ta có thể tính toán được ETA ... 
I/ YÊU CẦU: 
Đây là bài toán nhằm nâng cao kỹ năng viết chương trình bằng phần mềm EXCEL. Yêu cầu sinh viên tự nghiên cứu và viết ở nhà.
- Viết chương trình tổng hợp một chuyến đi từ cảng A đến cảng B.
o Sau khi người sĩ quan hàng hải tính toán được tọa độ của các điểm trung gian chuyển hướng, người sử dụng sẽ tiến hành nhập tọa độ các điểm đó
o Chương trình sẽ tự động tính được khoảng cách và hướng đi Locxo trên từng đoạn, tính được tổng quãng đường từ cảng A đến cảng B 
o Nếu người sử dụng nhập vận tốc trung bình của tàu thì chương trình sẽ tính được ETA

II/ XÂY DỰNG CHƯƠNG TRÌNH TÍNH ĐỘ LỆNH ĐỊA TỪ

2.1 Tạo thư mục làm việc
Như bài tập 1. Chúng ta cũng nên lưu chung các File chương trình vào cùng một thư mục D:\DKTB

2.2 Viết chươngtrình
2.2.1 Lưu chương trình

- Khởi động phần mềm EXCEL, sau đó mở File mới.
- Nhắp chuột vào Menu File -> chọn mục Save. Khi đó trên màn hình xuất hiện một khung hội thoại Save As.
  Trong mục Save in: Chọn thư mục cần lưu File (DKTB)
 Trong mục File Name: Tổng hợp chuyến hành trình.
Có thể thiết kế chương trình như sau:










2.2.2 Viết chương trình 

Ta sử dụng các ô dành cho người dùng nhập dữ liệu là:
- Nhập giá trị tọa độ các điểm vào khối E7:O25
- Nhập giá trị vận tốc trung bình của tàu vào:K33
- Kết quả sẽ được cho bởi khối T7:AA25 và khối V33:AA33
Sau đây là chương trình chính của bài toán:
F7=(E7*60+G7) Tính vĩ độ điểm thứ nhất ra phút
Tương tự như vậy ta chỉ cần Copy ô F7 lần lượt dán vào các ô từ F9, F11, F13 đến F25 để đổi vĩ độ các điểm còn lại ra phút
Tính hiệu vĩ độ giữa hai điểm liên tiếp
F10=IF(I9=I7,ABS(F9-F7),ABS(F9+F7)) 
Tương tự như vậy ta Copy ô F10 dán vào các ô F12, F14, F16 đến F24
Tính vĩ độ tiến của điểm thứ nhất
H7=7915.7045*LOG(TAN(RADIANS((E7+G7/60)/2+45))) 
Ta tiến hành Copy ô H7 lần lượt dán vào các ô H9, H11, H13 đến H25 để tính vĩ độ tiến các điểm.
Tính hiệu vĩ độ tiến giữa hai điểm thứ nhất và thứ hai
H10=IF(I9=I7,ABS(F9-F7),ABS(F9+F7)) 
Copy ô H10, sau đó lần lượt dán vào các ô H12, H14, H16 đến H26 để tính hiệu vĩ độ tiến giữa hai điểm liên tiếp 
L7=K7*60+M7 Đổi kinh độ điểm thứ nhất ra phút
Tương tự Copy ô L7 lần lượt dán vào các ô L9, L11, L13 đến L25
Tính hiệu kinh độ giữa điểm thứ hai với điểm thứ nhất 
L10=IF(O9=O7,ABS(L9-L7),ABS(L9+L7)) 
Copy ô L10, sau đó lần lượt dán vào các ô L12, L14, L16 đến L26
Kết quả tính toán
S9=C7&C9 Ghi các đoạn Locxo giữa hai điểm
Copy ô S9, sau đó lần lượt dán vào các ô S11, S13, S15 đến S25
T9=H10 Cho hiệu vĩ độ tiến giữa điểm thứ hai và điểm thứ nhất
Copy ô T9, lần lượt dán vào các ô T11, T13, T15 đến T25 để tính hiệu vĩ độ tiến giữa hai điểm liên tiếp nhau.
V8=ATAN(L10/T9) Tính ra Radians của hướng đi đoạn thứ nhất
Copy ô V8 sau đó lần lượt dán vào các ô V10, V12, V14 đến V24
V9=TRUNC(DEGREES(V8)) Tính số độ của hướng đi đoạn thứ nhất
Copy ô V9, lần lượt dán vào các ô V11, V13, V15 đến V25
Tính số phút của hướng đi đoạn thứ nhất
W9=ROUND(((DEGREES(V8))-V9)*60,0)  
Copy ô W9, lần lượt dán vào các ô W11, W13, W15 đến W25
Y8=COS(V8) Tính Cos của hướng đi
Copy ô Y8 lần lượt dán vào các ô Y10, Y12, Y14 đến Y24
 Tính khoảng cách Locxo đoạn 1 từ điểm thứ nhất đến điểm thứ hai
Y9=F10/Y8 
Copy ô Y9, lần lượt dán vào các ô Y11, Y13, Y15 đến Y25 để tính khoảng cách giữa hai điểm liên tiếp khác.
 Tính tổng khoảng cách của cả chuyến đi
X28=Y9+Y11+Y13+Y15+Y17+Y19+Y21+Y23+Y25 
AA7=X28 
AA9=AA7-Y9
Copy ô AA9, lần lượt dán vào các ô AA11, AA13, đến AA23
Tính ETA
T30=X28/K33 Tính khoảng thời gian tàu hành trình từ cảng A đến B
T31=T30/24 Tính khoảng thời gian tàu hành trình ra ngày
V33 =TRUNC(T31) 
Tính khoảng thời gian là giờ
AB30=(T31-V33)*24 
Y33=TRUNC(AB30)
 Tính khoảng thời gian là phút
AB31 =(AB30-Y33)*60 
AA33 =ROUND(AB31,0)

2.3 Chạy thử chương trình và sửa lỗi.
Khi chạy thử chương trình ta sẽ nhận thấy một số sai sót như:
- Thứ nhất: Nếu người sử dụng nhập đủ cả 10 điểm thì chương trình sẽ chạy đúng, còn nếu chỉ nhập từ 2 đến 9 điểm thì phần kết quả tính toán sẽ mắc lỗi. Trong thực tế có thể người sử dụng chỉ nhập tọa độ của 2 điểm, hoặc một số điểm nhỏ hơn 10. Chính vì vậy để chỉnh sửa lại chương trình để đảm bảo hoàn thiện hơn. Cụ thể như sau:
F7 =IF(AND(E7="",AND(G7="",I7="")),"",E7*60+G7)
F9 =IF(AND(E9="",AND(G9="",I9="")),"",E9*60+G9)
F10 =IF(OR(F7="",F9=""),"",IF(I9=I7,ABS(F9-F7),ABS(F9+F7)))
H7=IF(AND(E7="",AND(G7="",I7="")),"",7915.7045*LOG(TAN(RADIANS((E7+G7/60)/2+45))))
H9=IF(AND(E9="",AND(G9="",I9="")),"",7915.7045*LOG(TAN(RADIANS((E9+G9/60)/2+45))))
L7=IF(AND(K7="",AND(M7="",O7="")),"",K7*60+M7)
L9=IF(AND(K9="",AND(M9="",O9="")),"",K9*60+M9)
L10=IF(OR(L7="",L9=""),"",IF(O9=O7,ABS(L9-L7),ABS(L9+L7)))
H10=IF(OR(H7="",H9=""),"",IF(I9=I7,ABS(H9-H7),ABS(H9+H7)))
T9=IF(H10="","",H10)
V8=IF(OR(L10="",T9=""),"",ATAN(L10/T9))
V9=IF(V8="","",TRUNC(DEGREES(V8)))
W9=IF(V8="","",ROUND(((DEGREES(V8))-V9)*60,0))
Y8=IF(V8="","",COS(V8))
Y9=IF(OR(F10="",Y8=""),"",F10/Y8)
AA9=IF(OR(AA7="",Y9=""),"",AA7-Y9)
F12=IF(AND(E11="",G11=""),"",IF(I11=I9,ABS(F11-F9),ABS(F11+F9)))
  sau đó Copy ô F12, lần lượt dán vào các ô F14, F16, F18 đến F26
H12=IF(AND(E11="",G11=""),"",IF(I11=I9,ABS(H11-H9),ABS(H11+H9)))
Copy ô H12 sau đó lần lượt dán vào các ô H14, H16, H18 đến H26.
L12=IF(AND(K11="",M11=""),"",IF(O11=O9,ABS(L11-L9),ABS(L11+L9)))
  Copy ô L12 rồi lần lượt dán vào các ô L14, L16, L18 đến L26
S11=IF(C11="","",C9&C11)
Copy ô S11 rồi lần lượt dán vào các ô S13, S15, S17 đến S25
T11=IF(H12="","",H12)
Copy ô T11, rồi lần lượt dán vào các ô T13, T15, T17 đến T25
V10=IF(OR(L12="",T11=""),"",ATAN(L12/T11))
Copy ô V10 sau đó lần lượt dán vào các ô V12, V14, V16 đến V26
V11=IF(V10="","",TRUNC(DEGREES(V10)))
Copy ô V11 sau đó lần lượt dán vào các ô V13, V15, V17 đến V25
W11 =IF(V10="","",ROUND(((DEGREES(V10))-V11)*60,0))
Copy ô W11 sau đó lần lượt dán vào các ô W13, W15, W17 đến W25
Y10 =IF(V10="","",COS(V10))
Copy ô Y10 sau đó lần lượt dán vào các ô Y12, Y14, Y16 đến Y24
Y11 =IF(OR(F12="",Y10=""),"",F12/Y10)
Copy ô Y10 sau đó lần lượt dán vào các ô Y13, Y15, Y17 đến Y25
X28=IF(Y11="",Y9,IF(Y13="",Y9+Y11,IF(Y15="",Y9+Y11+Y13,IF(Y17="",Y9+Y11+Y13+Y15,IF(Y19="",Y9+Y11+Y13+Y15+Y17,IF(Y21="",Y9+Y11+Y13+Y15+Y17+Y19,IF(Y23="",Y9+Y11+Y13+Y15+Y17+Y19+Y21,IF(Y25="",Y9+Y11+Y13+Y15+Y17+Y19+Y21+Y23,Y9+Y11+Y13+Y15+Y17+Y19+Y21+Y23+Y25))))))))
T30=IF(X28="","",X28/K33)
T31=IF(T30="","",T30/24)
V33=IF(T31="","",TRUNC(T31))
AB30=IF(OR(T31="",V33=""),"",(T31-V33)*24)
Y33=IF(AB30="","",TRUNC(AB30))
AB31=IF(OR(AB30="",Y33=""),"",(AB30-Y33)*60)
AA33=IF(AB31="","",ROUND(AB31,0))
- Thứ hai: Chương trình hạn chế ở chỗ nếu số điểm được nhập lớn hơn 10 thì chương trình không mở rộng được. Để khắc phục nhược điểm này có hai cách.
o Cách 1: Chia số lần nhập thành 10 điểm một
o Cách 2: Viết chương trình mở rộng tương tự như chương trình này với số điểm nhập nhiều lên.

2.4 Hoàn chỉnh giao diện và bảo vệ dữ liệu.
Sau khi hoàn thành việc viết chương trình, ta sẽ định dạng và thiết kế lại giao diện sao cho đẹp mắt. Để cho người sử dụng không thể nhìn thấy công thức trong các ô trung gian, ta chọn màu chữ cùng với màu nền tại các ô đó. Cuối cùng là phải tiến hành bảo vệ tất cả các ô trừ những ô dùng để nhập dữ liệu.  

Quảng cáo

Câu hỏi trắc nghiệm tin học căn bản và đáp án

1). Lệnh nào sau đây dùng để xóa màn hình ? A). CLS   B). CD C). TYPE  D). RD 2). Để bôi đen toàn bộ trang văn bản sử dụng lệnh nào sau đâ...

Học, học nữa, học mãi.
Kiến thức là vô tận không ai có thể nắm bắt được hết kho kiến thức của nhân lọai. Tôi với khả năng có hạn, cũng còn nhiều thứ tôi chưa biết. Nhưng với những gì đã biết, cũng xin chia sẻ với các bạn. Có thể với bạn là cũ và cũng có thể là mới, cùng với tinh thần cùng nhau học hỏi, cùng nhau phát triển. Tôi hy vọng đây là nơi chúng ta cùng học tập, chia sẻ, và cùng nhau phát triển.