Tải bản đầy đủ (.docx) (18 trang)

BÀI tập lớn môn kỹ THUẬT lập TRÌNH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (432.99 KB, 18 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
──────── * ───────

BÀI TẬP LỚN
MÔN: KỸ THUẬT LẬP TRÌNH

<NHÓM PE01>

Sinh viên thực hiện : Nguyễn Tiến Thành(20092434)
Nguyễn Phúc Quang(20092089)
Lê Anh Tiến(20092698)
Nguyễn Công Bình(20093380)
Cát Huy Thành(20092409)
Lớp

: THCN – KSCLC– K54

Giáo viên hướng dẫn : TS. Vũ Thị Hương Giang

Hà Nội, tháng 5 năm 2012


Kỹ thuật lập trình

MỤC LỤC

2
Nhóm PE01 - Lớp KSCLC-K54



Kỹ thuật lập trình

LỜI NÓI ĐẦU
Ngày nay, khi đất nước ta đang trên đà phát triển mạnh, rất nhiều nhà cao tầng
đã mọc lên trên khắp đất nước để đáp ứng với xu hướng công nghiệp hóa, hiện
đại hóa của đất nước. Với các nhà nhiều tầng có chiều cao lớn thì việc trang bị
thang máy là bắt buộc để phục vụ việc đi lại trong tòa nhà. Nếu vấn đề vận
chuyển người trong những tòa nhà này không được giải quyết thì các dự án xây
dựng các tòa nhà cao tầng không thành hiện thực. Hơn thế, việc trang bị thang
máy sẽ giúp cho việc di chuyển trong tòa nhà trở nên dễ dàng và thuận tiện hơn
rất nhiều.
Tuy vậy, thang máy là một thiết bị vận chuyển đòi hỏi tính an toàn nghiêm ngặt,
nó liên quan trực tiếp đến tài sản và tính mạng con người. Vì vậy yêu cầu chung
đối với thang máy khi thiết kế, chế tạo, lắp đặt, vận hành, sử dụng và sửa chữa là
phải tuân thủ một cách nghiêm ngặt các yêu cầu về kỹ thuật an toàn được quy
định trong các tiêu chuẩn, quy trình, quy phạm.
Dựa trên nhu cầu và mong muốn của mọi người trong tòa nhà, chúng em xin
được phát triển phần mềm quản lý thang máy để ứng dụng cho tòa nhà D6
trường đại học Bách Khoa Hà Nội. Phần mềm được xây dựng dựa trên nền tảng
của hệ thống thang máy của thư viện Tạ Quang Bửu trường đại học Bách Khoa
Hà Nội
Nhóm PE01-THCN-KSCLC-K54

3
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

PHÂN CÔNG THÀNH VIÊN TRONG NHÓM

Công việc trong nhóm được phân ra làm nhóm nhỏ hơn để mọi người có thể trợ giúp
nhau cùng làm việc hiệu quả hơn.
Các nhóm nhỏ:
i. Nguyễn Tiến Thành, Nguyễn Công Bình: các bạn này phụ trách việc mô tả bài
toán và xây dựng biểu đồ IPO cho bài toán. Hạn nộp là trong 1 tuần và các bạn
đã hoàn thành đúng thời hạn.
ii. Cát Huy Thành: bạn này thực hiện nhiệm vụ thiết kế chương trình. Hạn nộp là 1
tuần và bạn cũng đã hoàn thành đúng thời hạn.
iii. Nguyễn Phúc Quang, Lê Anh Tiến: các bạn này phụ trách việc thiết kế giải
thuật và cài đặt chương trình. Hạn nộp là trong 2 tuần và các bạn đã hoàn thành
đúng hạn.

4
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

CHƯƠNG 1. PHÂN TÍCH YÊU CẦU VÀ THIẾT KẾ
GIẢI PHÁP
1.1. Mô tả yêu cầu bài toán
Hệ thống thang máy cho tòa nhà D6 sẽ áp dụng cho các tầng 2, 3, 4, 5. Trong
quá trình thang máy hoạt động, nếu buồng thang đang ở một vị trí nào đó khác
với tầng mà hành khách vừa gọi, thang sẽ di chuyển đến tầng đó theo thứ tự ưu
tiên như sau :







Nếu thang di chuyển cùng chiều với lệnh gọi thang và di chuyển ngang
qua tầng mà hành khách khách đang đứng gọi, thì khi đến tầng dược gọi,
thang sẽ dừng lại và đón khách.
Nếu thang đang di chuyển theo chiều ngược với chiều hành khách muốn
đi, hoặc cùng chiều nhưng không đi ngang qua, thì sau khi đáp ứng hết các
nhu cầu của chiều đó, thang sẽ quay trở lại đón khách.
Nếu buồng thang đang ở ngay tại tầng mà hành khách vừa gọi, buồng
thang sẽ mở cửa đón khách.

Khi đã vào bên trong buồng thang, muốn đến tầng nào, khách ấn nút chỉ định
tầng đó, thang máy sẽ lập tức di chuyển và tuần tự dừng tại các tầng mà nó đi
qua. Cửa buồng thang và cửa tầng được thiết kế đóng mở tự động. Khi buồng
thang di chuyển đến một tầng nào đó, sau khi ngừng hẳn, cửa buồng thang và
cửa tầng sẽ tự động mở để khách có thể ra (vào) buồng thang, sau vài giây cửa
sẽ tự động đóng lại. Sau đó thang máy sẽ thực hiện lệnh tiếp theo.

5
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

1.2. Biểu đồ IPO
1.2.1. Chức năng 1
Nhận lệnh của người dùng từ ngoài thang
INPUT
Vị trí các tầng có yêu
cầu gọi thang và hướng
mà người dùng muốn di

chuyển

PROCESS

OUTPUT

Đọc và lưu trữ vào mảng Mảng gồm các tầng yêu
len[] hay mảng xuong[] cầu phân riêng theo
hướng mà người dùng
muốn di chuyển

1.2.2. Chức năng 2
Nhận lệnh của người dùng từ trong thang
INPUT
Vị trí tầng mà người
dùng muốn đến

PROCESS

OUTPUT

Đọc vị trí tầng mà người Mảng trong[] thỏa điều
dùng muốn đến và dùng kiện:
các hàm để so sánh điều
• trong[i] = 1 khi
kiện và đưa ra được
có người muốn ra
mảng trong[] phù hợp
tầng i
với yêu cầu của người

dùng
• trong[i] = 0 khi
không có người
muốn ra ở tầng i

1.2.3. Chức năng 3
Di chuyển thang máy
INPUT
Vị trí tầng và điểm đến
của thang máy

PROCESS
Thay đổi liên tục vị trí
tầng để tiến dần đến
điểm đến của thang máy

6
Nhóm PE01 - Lớp KSCLC-K54

OUTPUT
Vị trí tầng bằng với
điểm đến


Kỹ thuật lập trình

1.3. Thiết kế chương trình

Người dùng gọi
thang từ tầng i


Thang 1 có độ ưu
tiên cao hơn
Đúng

Sai

Thang 1 đến đón
khách

Thang 2 đến đón
khách

Thang 1 đưa khách
đến điểm khách
muốn, trên đường
đi sẽ đón thêm các
khách khác muốn
đi theo cùng chiều
di chuyển của
thang

Thang 2 đưa khách
đến điểm khách
muốn, trên đường
đi sẽ đón thêm các
khách khác muốn
đi theo cùng chiều
di chuyển của
thang


1.4.
Có người gọi thang

Sai
Thang đứng yên và
đợi lệnh gọi tiếp
theo

7
Nhóm PE01 - Lớp KSCLC-K54

Đúng


Kỹ thuật lập trình

1

Thiết kế dữ liệu

Mô tả dữ liệu:
Các dữ liệu trong thang máy đều được sử dụng theo cấu trúc mảng.
Cụ thể:
Thang máy nhận tín hiệu vào từ các file text:
- BenNgoaiThang.txt
- BenTrongThang1.txt
- BenTrongThang2.txt
Các tín hiệu này được lưu ở 4 mảng:
Hai mảng lưu các tín hiệu gọi từ bên ngoài:

- Mảng len[i] với i là vị trí của tầng.
Giá trị của len[i] thể hiện trạng thái của tầng.
- Mảng xuong[i] với i là vị trí của tầng.
Giá trị của xuong[i] thể hiện trạng thái của tầng.
Hai mảng lưu các tín hiệu từ trong thang máy:
- Mảng trong1[i] với i là vị trí của tầng, lưu tín hiệu trong thang máy 1:
trong[i] = 1 khi có người muốn ra tầng i;
trong[i] = 0 khi không có người muốn ra ở tầng i;
- Mảng trong2[i] tương tự với thang máy thứ 2.

8
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

1.5. Thiết kế giải thuật
1.5.1. Giải thuật 1: Hai thang máy quét tín hiệu nhận điểm đến.
Ta sẽ ưu tiên cho thang 1 chọn điểm đến trước theo qui tắc:
• Khi thang máy đi lên, thang sẽ duyệt theo mảng len[],
trong1[]. Nếu điểm đến chọn từ mảng len[], sau khi chọn,
toàn bộ những phần tử có yêu cầu nằm trong quãng đường
chuyển động của mảng len[] sẽ gán giá trị là 1 (thể hiện tầng
đã nằm trong trách nhiệm của thang1). Giá trị mảng trong1[]
không thay đổi.
• Khi thang máy đi xuống, thang duyệt theo mảng xuong[] và
trong1[]. Giá trị của các mảng sau khi duyệt xong đặt tương
tự như trên.
Khi thang máy đứng yên. Thang máy sẽ quét cả 3 mảng len[],
xuong[], trong[]. Giá trị mảng sau khi duyệt đặt như trên.

Thang máy 2 duyệt như thang 1, khác ở chỗ: Thang máy 2 chỉ duyệt các
phần tử len[], xuong[] mà giá trị của nó bằng 3. Sau khi nhận điểm đến, giá trị
của phần tử đặt lại là 2.
Ví dụ:
7
6
5
4
3
2
1
Tần
g

3
3
3
3
3
L

X

Bảng 1

1
1
2
2
1


Bảng 2

Nếu tín hiệu váo như bảng 1.
Thang máy 1 đang đi lên, sẽ chọn
L X
tầng 2, 5,6. Giá trị sau khi chọn vẽ
ở bảng 2.
Thang máy 2 chọn các giá trị 3 còn lại sao cho phù hợp. Ở bảng trên, thang đã
biến đổi toàn bộ giá trị bên cột xuống sang giá trị 2.
Nhờ cách phân biệt giá trị này, các tín hiệu được lặp lại một cách hệ thống,
không bị lặp lại.

9
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

1.5.2. Giải thuật 2: Cách thang máy đón khách
Dựa vào tín giá trị của các mảng:
Đối với thang 1, khi đi lên, sẽ dừng ở các tầng mà len[] có giá trị bằng 1. Sau
mỗi lần dừng, giá trị len[]=0; hoặc sẽ dừng ở các tầng có tín hiệu trong1[] = 1,
cũng trả lại giá trị của nó bằng 0 sau khi dừng.
Thang 1 khi đi xuống cũng xét tương tự nhưng với mảng giá trị xuong[].
Đối với thang 2, xet điểm đón khách tương tự như thang 1. Khác ở chỗ: Giá trị
len[], xuong[] mà thang 2 phải dừng là 2. Sau khi dừng cũng đặt lại giá trị phần
tử về 0.
Nhờ cách đặt giá trị này, hai thang đã kết hợp với nhau để đón khách trọn vẹn,
không bỏ sót.

1.5.3.

Giải Thuật 3: Cách thang máy chuyển động

Thang máy chuyển động thực chất là chuỗi hiển thị các vị trí của tầng thông qua
hàm tienden(vị trí, điểm đến)
Hàm tienden trả lại giá trị là vị trí sao cho thang sẽ tiến dần điểm đến.
Quá trình cập nhật chọn lựa điểm đến, gán vị trí với hàm tiến đến đã tạo được lộ
trình đi cho thang máy.
Ưu điểm Cách chuyển động này giúp ta dễ dàng mở rộng về giao diện cho thang
máy, tăng chất lượng phần mềm.

10
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

CHƯƠNG 2. CÀI ĐẶT CHƯƠNG TRÌNH
2.1. Các kỹ thuật lập trình đã áp dụng
STT

Mô tả kỹ thuật / quy tắc

Các kỹ thuật
làm việc với
biến

1.
2.


3.
Các kỹ thuật
viết mã
chương trình
hiệu quả

1.
2.
3

Các kỹ thuật
thiết kế
chương trình

1.

2.

Mô tả đối tượng áp dụng
(hàm, biến, biểu thức, câu
lệnh) và phạm vi áp dụng
Khai báo biến với tên gọi Biến địa phương và biến
mang tính chất dễ nhớ
toàn cục trong chương trình
Sử dụng biến trung gian
Áp dụng cho các biến đếm
hoặc dùng để lưu trữ lại giá
trị của một biến khác mà ta
không muốn thao tác trực

tiếp trên biến đó
Sử dụng biến con trỏ
Áp dụng để lưu trữ giá trị
như trên một mảng
Gióng hàng hợp lý, thống Áp dụng trong toàn bộ
nhất
chương trình
Dùng các đoạn trống để
Áp dụng trong toàn bộ
đánh dấu phân cấp
chương trình
chương trình
Sử dụng () và các biểu
Áp dụng trong toàn bộ
thức dạng nguyên bản
chương trình
trong cấu trúc rẽ nhánh
Sử dụng các chương trình Các chương trình con chủ
con
yếu được gọi trong quá
trình xử lý hàm main() và
một số hàm cần thiết khác
Thiết kế chương trình
theo kiểu: top – down.
Chia bài toán thang máy
ra thành nhiều bài toán
nhỏ hơn : xử lí bên ngoài
thang, trong thang 1,
trong thang 2.
Tìm giải pháp cho từng

bài toán nhỏ đó rồi gộp
lại để xử lý bài toán
thang máy.


11
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

Các kỹ thuật
xây dựng
hàm/thủ tục

1. Tên các hàm mang tính
chất gợi nhớ và bắt đầu
bằng chữ in thường
2. Sử dụng dữ liệu có cấu
trúc để tăng tốc độ của
chương trình


Các kỹ thuật
bẫy lỗi và lập
trình phòng
ngừa

1. Dùng hàm bao gói
2. Dùng dữ liệu có cấu trúc

để đơn giản hóa tham số
đầu vào
3 Các hàm đều nhất quán
với nhau
4 Kiểm tra điều kiện biên
của các tham số đầu vào
1. Viết đầy đủ chú thích cho
các phần của chương
trình
2. Gióng hàng các cặp mở
đóng ngoặc cùng cấp

Phong cách
lập trình



12
Nhóm PE01 - Lớp KSCLC-K54

Áp dụng trong toàn bộ
chương trình
Áp dụng trong toàn bộ
chương trình


Kỹ thuật lập trình

2.2. Kết quả chương trình
Chức

năng
(đán
h số
theo
men
u từ
114)
1
2
3
4
5

Chữ ký (Khai báo chức
năng)

Nhận yêu cầu từ ngoài
thang
Nhận yêu cầu từ trong
thang
Cho thang chạy theo chiều
lên
Cho thang chạy theo chiều
xuống
Xử lý tình huống cần xét
đến sự ưu tiên khi có nhiều
lệnh gọi cùng lúc

13
Nhóm PE01 - Lớp KSCLC-K54


Tình trạng khi nộp bài
Người thực
( 0 : chưa làm
hiện : ai làm
1 : chưa chạy

2 : chạy thông và chưa bắt (X: cài đặt
hết ngoại lệ
Y: kiểm
3: chạy thông và có bắt hết
thử)
ngoại lệ)
3
3
3
3
3


Kỹ thuật lập trình

2.3. Giao diện chương trình
Ví dụ trường hợp: thang 1 chạy từ 2 lên 9 đến tầng 3 thì có người tàng 5 muốn lên, vào
thang, người này xuống tầng 8.

14
Nhóm PE01 - Lớp KSCLC-K54



Kỹ thuật lập trình

15
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Trong quá trình làm bài tập lớn. Chúng em đã rút ra được những điều rất tốt cho
bản thân và đồng thời cũng giúp ích cho môn học rất nhiều. Sau đây là một vài
điều mà chúng em tự đánh giá về quá trình làm bài tập lớn của nhóm mình:




Ưu điểm:
i. Chương trình rõ rang, dễ hiểu.
ii. Mô tả trực quan thao tác của người dùng khi ở trong thang và
ngoài thang.
iii. Có thể phát triển với số tầng tùy ý.
Nhược điểm:
i. Chương trình vẫn chạy trên nền console, chưa tích hợp đồ họa
để thân thiện với người dùng hơn.
ii. Vẫn còn một số chức năng phụ trợ chưa được thiết kế.

Hướng phát triển thêm của chương trình:
• Tích hợp giao diện đồ họa vào chương trình để thân thiện với

người dùng hơn.

• Thiết kế thêm một số tính năng phụ trợ như: đóng, mở cửa khẩn
cấp, giới hạn số người dùng đồng thời,…

16
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

TÀI LIỆU THAM KHẢO
[1]
[2]
[3]

Slide môn Kỹ thuật lập trình của cô Vũ Thị Hương Giang.
/>o/

17
Nhóm PE01 - Lớp KSCLC-K54


Kỹ thuật lập trình

PHỤ LỤC
Chương trình vẫn chưa được hoàn thiện như ý. Chúng em sẽ cố gắng hoàn thiện
thêm một số chi tiết vào buổi thuyết trình.

18
Nhóm PE01 - Lớp KSCLC-K54




×