Lp trình với câu trúc câp cao

Một phần của tài liệu bai giang hop ngu.pdf (Trang 46 - 52)

execute true branch statements END IF

3.5 Lp trình với câu trúc câp cao

Bài tốn : Viêt chương trình nhaĩc người dùng gõ vào mt dịng vn bạn . Tređn 2 dòng tiêp theo in ra ký tự viêt hoa đaău tieđn và ký tự viêt hoa cuơi cùng theo thứ tự alphabetical . Nêu người dùng gõ vào mt ký tự thường , máy sẽ thođng báo ‘No capitals’

Kêt qụa cháy chương trình sẽ như sau :

Type a line of text :

TRUONG DAi HOC DALAT

First capital = A Last capital = U

Đeơ giại bài tốn này ta dùng kỹ thut lp trình TOP-DOWN , nghĩa là chia nhỏ bài tốn thành nhieău bài tốn con . Cĩ theơ chia bài tốn thành 3 bài tốn con như sau :

1. Xuât 1 chui ký tự ( lời nhaĩc) 2. Đĩc và xử lý 1 dịng vaín bạn 3. In kêt qụa

Bước 1: Hin dâu nhaĩc .

Bước này cĩ theơ mã hố như sau : MOV AH,9 ; hàm xuât chui

LEA DX,PRMOPT ;lây địa chư chui vào DX INT 21H ; xuât chuoêi

Chương 3 : Các lnh laịp và rẽ nhánh 40 PROMPT DB ‘Type a line of text :’,0DH,0AH,’$’

Bước 2 : Đĩc và xử lý mt dịng vn bạn

Bước này thực hieơn haău hêt các cođng vic cụa chương trình : đĩc các ký tự từ bàn phím , tìm ra ký tự đaău và ký tự cuơi , nhaĩc nhở người dùng nêu ký tự gõ vào khođng phại là ký tự hoa .

Cĩ theơ biu din bước này bởi thut tốn sau : Read a character

WHILE character is not a carrige return DO IF character is a capital (*)

THEN

IF character precedes first capital Then

first capital= character End_if

IF character follows last character Then

last character = character End_if

END_IF

Read a character END_WHILE

Trong đĩ dịng (*) cĩ nghĩa là đieău kin đeơ ký tự là hoa là đieău kin AND IF ( ‘A’<= character ) AND ( character <= ‘Z’)

Bước 2 cĩ theơ mã hố như sau :

MOV AH,1 ; đĩc ký tự INT 21H ; ký tự tređn AL WHILE :

;trong khi ký tự gõ vào khođng phại là CR thì thực hieơn CMP AL,0DH ; CR?

JE END_WHILE ;yes, thoát ; nêu ký tự là hoa

CMP AL,’A’ ; char >=‘A’?

JNGE END_IF ;khođng phại ký tự hoa thì nhạy đên END_IF CMP AL,’Z’ ; char <= ‘Z’?

JNLE END_IF ; khođng phại ký tự hoa thì nhạy đên END_IF ; thì

Chương 3 : Các lnh laịp và rẽ nhánh 41 ; nêu ký tự naỉm trước biên FIRST ( giá trị ban đaău là‘[‘ : ký tự sau Z )

CMP AL,FISRT ; char < FIRST ? JNL CHECK_LAST; >=

; thì ký tự viêt hoa đaău tieđn = ký tự

MOV FIRST,AL ; FIRST=character ;end_if

CHECK_LAST:

; nêu ký tự là sau biên LAST ( giá trị ban đaău là ‘@’: ký tự trước A) CMP AL,LAST ; char > LAST ?

JNG END_IF ; <= ;thì ký tự cuơi cùng = ký tự

MOV LAST, AL ;LAST = character ;end_if END_IF : ; đĩc mt ký tự INT 21H ; ký tự tređn AL JMP WHILE_ ; laịp END_WHILE:

Các biên FIRST và LAST được định nghĩa như sau trong đốn sơ liu : FIRST DB ‘[ $‘ ; ‘[‘ là ký tự sau Z

LAST DB ‘@ $ ’ ; ‘@’ là ký tự trước A

Bước 3 : In kêt qụa

Thut tốn

IF no capital were typed THEN

display ‘No capital’ ELSE

display first capital and last capital END_IF

Bước 3 sẽ phại in ra các thođng báo :

• NOCAP_MSG nêu khođng phại chữ in

• CAP1_MSG chữ in đaău tieđn

• CAP2_MSG chữ in cuơi cùng

Chúng được định nghĩa như sau trong đốn sơ lieơu .

NOCAP_MSG DB 0DH,0AH,‘No capitals $’ CAP1_MSG DB 0DH,0AH, ‘First capital= ’ FIRST DB ‘[ $ ’

Chương 3 : Các lnh laịp và rẽ nhánh 42 LAST DB ‘@ $’

Bước 3 cĩ theơ mã hố như sau : ;in kêt quạ

MOV AH,9 ; hàm xuât ký tự

; IF khođng cĩ chữ hoa nào được nhp thì FIRST =‘[’ CMP FIRST,’[’ ; FIRST=‘[’ ?

JNE CAPS ; khođng , in kêt qụa ;THEN LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG INT 21H LEA DX,CAP2_MSG INT 21H ; end_if

Chương trình cĩ theơ viêt như sau :

TITLE PGM3-1 : FIRST AND LAST CAPITALS .MODEL SMALL

.STACK 100h .DATA

PROMPT DB ‘Type a line of text’, 0DH, AH, ‘$’ NOCAP_MSG DB 0DH,0AH, ‘No capitals $’ CAP1_MSG DB 0DH,0AH, ‘First capital=’ FIRST DB ‘[ $’

CAP2_MSG DB ‘Last capital = ’ LAST DB ‘@ $’ .CODE MAIN PROC ; khởi táo DS MOV AX,@DATA MOV DS,AX ; in dâu nhaĩc

MOV AH,9 ; hàm xuât chui

LEA DX,PROMPT ;lây địa chư chui vào DX INT 21H ; xuât chuoêi

Chương 3 : Các lnh laịp và rẽ nhánh 43

;đĩc và xử lý 1 dịng vn bạn

MOV AH,1 ; đĩc ký tự INT 21H ; ký tự tređn AL WHILE :

;trong khi ký tự gõ vào khođng phại là CR thì thực hin CMP AL,0DH ; CR?

JE END_WHILE ;yes, thốt ; nêu ký tự là hoa

CMP AL,’A’ ; char >=‘A’?

JNGE END_IF ;khođng phại ký tự hoa thì nhạy đên END_IF CMP AL,’Z’ ; char <= ‘Z’?

JNLE END_IF ; khođng phại ký tự hoa thì nhạy đên END_IF ; thì

; nêu ký tự naỉm trước biên FIRST

CMP AL,FISRT ; char < FIRST ? JNL CHECK_LAST; >=

; thì ký tự viêt hoa đaău tieđn = ký tự

MOV FIRST,AL ; FIRST=character ;end_if

CHECK_LAST:

; nêu ký tự là sau biên LAST

CMP AL,LAST ; char > LAST ? JNG END_IF ; <=

;thì ký tự cuơi cùng = ký tự

MOV LAST, AL ;LAST = character ;end_if END_IF : ; đĩc mt ký tự INT 21H ; ký tự tređn AL JMP WHILE_ ; laịp END_WHILE:

;in kêt quạ

MOV AH,9 ; hàm xuât ký tự

; IF khođng cĩ chữ hoa nào được nhp thì FIRST =‘[‘ CMP FIRST,’[‘ ; FIRST=‘[‘ ?

JNE CAPS ; khođng , in kêt qụa ;Then

LEA DX,NOCAP_MSG INT 21H

CAPS:

Chương 3 : Các lnh laịp và rẽ nhánh 44 INT 21H LEA DX,CAP2_MSG INT 21H ; end_if ; dos exit MOV AH,4CH INT 21h MAIN ENDP END MAIN

Chương 4 : Các lnh dịch và quay 45

Một phần của tài liệu bai giang hop ngu.pdf (Trang 46 - 52)

Tải bản đầy đủ (PDF)

(108 trang)