Hướng dẫn làm bài tập và thực hành 6 trang 103 SGK Tin học 11Hai thủ tục CatDan(s1,s2) và CanGiua(s) sẽ được dùng trong một chương trình để làm một dòng chữ chạy trên màn hình. Đề bài Hướng dẫn làm bài tập và thực hành 6 trang 103 SGK Tin học 11 Lời giải chi tiết 1. Mục đích, yêu cầu - Rèn luyện các thao tác xử lí xâu, kĩ năng tạo hiệu ứng chữ chạy trên màn hình; - Nâng cao kĩ năng viết, sử dụng chương trình con. 2. Nội dung a) Hai thủ tục CatDan(s1,s2) và CanGiua(s) sẽ được dùng trong một chương trình để làm một dòng chữ chạy trên màn hình. - Thủ tục CatDan(s1,s2) tạo nên xâu s2 từ xâu s1 nhận đầu vào sao cho s2 chính là trạng thái tiếp theo nếu hình dung s1 dịch sang trái một vị trí trong chuyển dịch vòng. Ta chỉ cần khai báo s1 là tham số giá trị, nhưng s2 phải khai báo là tham số biến. - Thủ tục CanGiua(s) thêm một số dấu cách ở đầu một xâu s sao cho khi đưa ra màn hình dòng chữ của xâu s nằm giữa màn hình. Nếu khai báo s là tham số biến thì thủ tục này không có hiệu lực gì vì lệnh đưa s ra màn hình không nằm trong thủ tục này. b) Chương trình làm một dòng chữ chạy trên màn hình. Nó sử dụng hai thủ tục mà chúng ta đã tìm hiểu ở câu a). Trong chương trình: - Thủ tục chuẩn gotoxy(x,y) chuyển con trỏ màn hình đến vị trí cột x dòng y trên màn hình; - Thủ tục delay(n) dừng trạng thái của màn hình trong n miligiây. - Hàm chuẩn keypressed không có tham số trả ra giá trị true khi có một phím được gõ. Khi chạy chương trình trên với dòng chữ '....Mung nghin nam Thang Long — Ha Noi!' Kết quả chương trình có dạng như hình 72 dưới đây: c) Để giải quyết bài toán tổng quát hơn (xâu chữ chạy ở dòng bất kỳ do chương trình chính quy định). Chúng ta cần lưu ý một số điểm sau: Nhiệm vụ của thủ tục Chuchay(s, dong) thực hiện, về cơ bản là nhiệm vụ mà chương trình ở câu b) đã làm, chỉ khác là chương trình ở câu b) luôn cho dòng chữ chạy ở dòng 12, còn thủ tục Chuchay(s, dong) có tham số dong quy định dòng nào trên màn hình xảy ra chuyển động của chữ. Từ ý nghĩa sử dụng tham số dong ta thấy chỉ cần khai báo nó là tham số giá trị. Như vậy, thủ tục Chuchay(s, dong) chỉ viết khác thân chương trình ờ câu b) vài chỗ. Chẳng hạn: procedure Chuchay(s1:Str79; dong:byte); var s2 : Str79; stop:boolean; begin clrscr; cangiua(s1); clrscs; stop: = false; while not(stop) do begin gotoxy(1,dong); write(s1); delay(100); (*Dung 100 miligiay*) Catdan(s1,s2); s1:=s2 ; stop:=keypressed; end; end; - Thủ tục Chuchay (s, dong) có sử dụng hai thủ tục Catdan(s1,s2) và CanGiua(s). Do vậy, chương trình sử dụng thủ tục ChuChay vẫn có hai thủ tục đó trong phần khai báo chương trình con, phải đặt phía trên phần khai báo thủ tục ChuChay. - Thân chương trình sử dụng thủ tục ChuChay đơn giản vì chỉ cần gọi thủ tục này làm việc. Tất nhiên trước đó cần xác định giá trị của xâu chữ cần chạy (xác định giá trị của biến s) và xác định chữ chạy ở dòng nào trên màn hình (xác định tham số thực sự cho tham số dong khi gọi thủ tục ChuChay). Chương trình chính có thêm biến dong thuộc kiểu byte (thực tế số nguyên dương không vượt quá số dòng của màn hình). Chương trình: Program Xau_chu_chay_o_dong_bat_ky; uses crt; type Str79 = string[79]; var s1, s2: Str79; dong: byte; stop: boolean; procedure CatDan(s1: Str79; var s2: Str79); begin s2:= copy(s1,2,length(s1)-1)+s1[1] ; end; procedure CanGiua(var s:str79); var i, n: integer; begin n:= length(s); n:= (80-n)div 2; for i:=1 to n do s:=' '+S; end; procedure Chuchay(s1:Str79; dong:byte); var s2: Str79; stop: boolean; begin clrscr; cangiua(s1); clrscr; stop:= false; while not(stop) do begin gotoxy(1,dong); write(s1); delay(100); (*Dung 100 miligiay*) Catdan(s1,s2); s1:=s2; stop:=keypressed; end ; end. clrscr; vrite('Nhap xau chu:'); readln(s1); vrite('Nhap đong xuat hien:'); readln(dong); ChuChay(s1, dong); readln END Khi chạy chương trình trên, giả sử ta nhập vào xâu: ' Xin chao cac ban ! ' thì ngay sau đó sẽ xuất hiện một dòng yêu cầu ' Nhap dong Xuat hien:' của xâu vừa nhập vào (chẳng hạn, ở dòng 15)(Hình 73)
Kết quả của chương trình sẽ là một dòng chữ chạy ở dòng 15 trên màn hình có dạng như hình 74 dưới đây:
HocTot.Nam.Name.Vn
|