Bài thực hành số 1 : Tính hiệu quả của trình thông dịch và biên dịch Mục tiêu sinh viên cần đạt được



tải về 32.25 Kb.
Chuyển đổi dữ liệu30.08.2016
Kích32.25 Kb.
#29195
MÔN : NHẬP MÔN ĐIỆN TOÁN

Bài thực hành số 4.1 : Tính hiệu quả của trình thông dịch và biên dịch

Mục tiêu sinh viên cần đạt được:

  • Thấy rõ việc sử dụng trình thông dịch và trình biên dịch cùng các tính chất của chúng.

1. Chạy VB 6.0, cửa sổ hiển thị như sau :




2. Chọn button "Open" để tạo Project mới theo dạng "Standard EXE", cửa sổ thiết kế Form ứng dụng ban đầu như sau :


3. Thiết kế Form có 2 đối tượng : 1 button và 1 Listbox như hình dưới đây. Để vẽ 1 đối tượng giao diện, dời chuột về icon miêu tả nó trong cửa sổ Toolbox bên trái, chọn icon, dời chuột về vị trí cần vẽ trong Form rồi vẽ nó. Chọn đối tượng Button, đặt tên cho nó là btnStart, caption cho nó là Start như hình dưới đây :


4. Tương tự, chọn đốitượng ListBox và đặt tên cho nó là lbOutput. Ấn kép chuột vào button để tạo thủ tục xử lý sự kiện Click chuột cho nó rồi viết đoạn code VB sau đây :

Private Type SYSTEMTIME

wYear As Integer

wMonth As Integer

wDayOfWeek As Integer

wDay As Integer

wHour As Integer

wMinute As Integer

wSecond As Integer

wMilliseconds As Integer

End Type

Private Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)

Private Declare Function GetTickCount Lib "kernel32" () As Long
Const MAX = 7

Dim songhiem As Integer

Dim hang(MAX + 1) As Integer
' kiem tra xem co the dat con hau o vi tri h,c ?

' tra ve TRUE neu duoc, FALSE neu khong

Private Function testvitri(ByVal h As Integer, ByVal c As Integer) As Boolean

Dim c1 As Integer

Dim h1 As Integer

' xem co con hau nao nam o hang h ?

For c1 = 0 To c - 1

If hang(c1) = h Then

testvitri = False

Exit Function

End If

Next c1


' co con hau nao nam tren duong cheo tren trai - duoi phai

c1 = c - 1: h1 = h - 1

While (c1 >= 0) And (h1 >= 0)

If hang(c1) = h1 Then

testvitri = False

Exit Function

End If

h1 = h1 - 1: c1 = c1 - 1



Wend

' xem co con hau nao nam tren duong cheo tren phai - duoi trai

c1 = c - 1: h1 = h + 1

While (c1 >= 0) And (h1 <= MAX)

If hang(c1) = h1 Then

testvitri = False

Exit Function

End If


h1 = h1 + 1: c1 = c1 - 1

Wend


testvitri = True

End Function


' Tim vi tri hang cho con hau o cot c

Private Function timvitri(ByVal c As Integer) As Integer

Dim h As Integer

Dim hmin As Integer

hmin = hang(c) + 1

For h = hmin To MAX ' thu hang h

If testvitri(h, c) Then

timvitri = h

Exit Function

End If


Next h

timvitri = -1

End Function
' In kïët quaã con maä ài trïn baân cúâ

Private Sub InKetqua()

Dim h As Integer, c As Integer

Dim buf As String

songhiem = songhiem + 1

lbOutput.AddItem "Caách ài thûá : " & songhiem

For h = 0 To MAX

' Hiïín thõ haâng lûúái ngang baân cúâ

buf = ""

For c = 0 To MAX

buf = buf & "+---"

Next c


lbOutput.AddItem buf & "+"

' Hiïín thõ nöåi dung haâng thûá h baân cúâ

buf = ""

For c = 0 To MAX

If hang(c) = h Then

buf = buf & "| x "

Else

buf = buf & "| "



End If

Next c


lbOutput.AddItem buf & ("|")

Next h


' Hiïín thõ haâng lûúái ngang baân cúâ cuöëi cuâng

buf = ""


For c = 0 To MAX

buf = buf & "+---"

Next c

lbOutput.AddItem buf & "+"



End Sub
Private Sub btnStart_Click()

Dim h As Integer, c As Integer

Dim stime As Long

Dim etime As Long

' xoa listbox

lbOutput.Clear

' ghi nhan thoi diem bat dau chay giai thuat

stime = GetTickCount

songhiem = 0

' khoi dong trang thai xuat phat

For c = 0 To MAX

hang(c) = -1

Next c

songhiem = 0



' bat dau dat con hau vao vi tri 0,0

hang(0) = 0

' bat dau tim con hau cho cot thu hai (1)

c = 1


Lap:

While c <= MAX

' tim con hau cho cot c

h = timvitri(c)

If h >= 0 Then 'tim duoc

hang(c) = h

c = c + 1

GoTo tieptuc

End If

' tim khong duoc



If c > 0 Then

hang(c) = -1

c = c - 1

GoTo tieptuc

End If

' het cach --> dung chuong trinh



lbOutput.AddItem "So nghiem la " & songhiem

'thu chay them 1 thoi gian nua

For h = 1 To 10000

For c = 1 To 10000

h = h: c = c

Next c


Next h

' ghi nhan thoi diem ket thuc chay giai thuat

etime = GetTickCount

diff = etime - stime

'hien thi tong thoi gian chay

lbOutput.AddItem "Chuong trinh chay ton " & diff & " ms"

Exit Sub

tieptuc:


Wend

' tim duoc nghiem

InKetqua

c = c - 1

GoTo Lap

End Sub
5. Chọn menu File.Save Project As..., cửa sổ sau sẽ hiển thị :




6. Duyệt hệ thống file và chọn thư mục lưu các file của Project ứng dụng.
7. Chọn menu Run.Start để chạy ứng dụng, Khi cửa sổ ứng dụng hiển thị, dời chuột về button Start rồi click chuột trên nó để chạy giải thuật "xếp 8 con hậu trên bàn cờ sao cho chúng không thể ăn nhau". Đợi 1 lúc, cửa sổ ứng dụng sẽ hiển thị kết quả như sau :

8. Dời marker trên scrollbar của Listbox về dưới đáy Listbox để hiển thị nội dung cuối cùng của Listbox như hình sau :


9. Bạn sẽ thấy số lượng thời gian chạy giải thuật.
10. Tiếp tục ấn button Start nhiều lần, mỗi lần quan sát và ghi nhận lại thời gian chạy.
11. Chọn menu File.Make Project1.exe, cửa sổ sau sẽ hiển thị :

12. Duyệt hệ thống file về thư mục chứa Project rồi ấn button OK để máy lưu file khả thi tương ứng vào thư mục tương ứng.


13. Chạy trình Windows Explorer, duyệt tìm thư mục chứa Project ứng dụng, chọn nó để hiển thị các file trong Project. Dời chuột về file Project1.exe, ấn kép chuột vào nó để chạy ứng dụng, cửa sổ sau sẽ hiển thị :


14. Dời chuột về button Start rồi click chuột trên nó để chạy giải thuật "xếp 8 con hậu trên bàn cờ sao cho chúng không thể ăn nhau". Đợi 1 lúc, cửa sổ ứng dụng sẽ hiển thị kết quả như sau :


15. Dời marker trên scrollbar của Listbox về dưới đáy Listbox để hiển thị nội dung cuối cùng của Listbox như hình sau :


16. Bạn sẽ thấy số lượng thời gian chạy giải thuật.
17. Tiếp tục ấn button Start nhiều lần, mỗi lần quan sát và ghi nhận lại thời gian chạy.
18. So sánh các giá trị thời gian chạy ứng dụng ở bước 10 và ở bước 17. Lý giải vì sao giá trị thời gian ở bước 17 nhỏ hơn nhiều so với ở bước 10, từ đó thấy rõ ưu điểm của trình biên dịch so với trình thông dịch.
19. Bây giờ đóng cửa sổ VB 6.0, chọn Start.All Program.Accessories.Command Prompt để mở cửa sổ hàng lệnh như sau :

20. Nhập thử lần lượt các lệnh sau :

cd \


dir /w

type Form.bas



...

và quan sát kết quả xử lý từng lệnh mà bạn nhập vào. Bạn thử nghĩ xem có thể dùng trình biên dịch các lệnh trong trường hợp này không ? Hay là cách khả thi duy nhất là dùng trình thông dịch để dịch chạy từng lệnh ngay sau khi người dùng nhập vào ?








tải về 32.25 Kb.

Chia sẻ với bạn bè của bạn:




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương