• Khung trình chiếu

Bài tập: In ra dòng chữ hiển thị trên bảng LED tại giây thứ T

Các mã nguồn được viết bằng ngôn ngữ Pascal
Gửi hồi đáp
Ảnh đại diện người dùng
huynhbuutam
Nhà sáng lập
Nhà sáng lập
Các bài viết: 114
Đã gia nhập lúc: T3 31 Th8, 2021 22:04
Địa điểm: Trường THCS Châu Lăng
Tên thật: Huỳnh Bửu Tâm

Bài tập: In ra dòng chữ hiển thị trên bảng LED tại giây thứ T

Bài viết bởi huynhbuutam »

Giả định có một bảng đèn LED có thể hiện thị tối đa 10 kí tự, mỗi giây, nội dung hiển thị sẽ dịch chuyển từ phải sang trái 1 kí tự.
Viết chương trình chỉ ra nội dung sẽ hiển thị trên bảng LED tại giây thứ T được nhập từ bàn phím.
Chương trình ví dụ:

Mã: Chọn tất cả

Nhap S: TamIT
Nhap T: 13
Ket qua hien thi: IT     Tam

Mã nguồn:

Mã: Chọn tất cả

Uses Crt;
Var S, Bang : AnsiString;
	i, x, Time : LongInt;
Begin
	ClrScr;
	// Khởi tạo bảng (chạy chữ) gồm 10 kí tự trống
	Bang := '          ';
	Write('Nhap S: '); ReadLn(S);
	Write('Nhap T: '); ReadLn(Time);
	// Nếu xâu nhập vào ít hơn 10 kí tự thì bổ sung thêm các khoảng trống cho đủ 10 kí tự
	If (Length(S) < 10) Then Begin x := 10 - Length(S); For i := 1 To x Do S := S + ' '; End;
	// Nếu thời gian lớn hơn độ dài của xâu nhập vào
	If Time > Length(S) Then
		Begin
			// Vì vị trí của các kí tự hiển thị trên bảng (chạy chữ) sẽ trở lại như cũ
			// sau khoảng thời gian bằng độ dài của xâu
			Time := Time Mod Length(S);
			// Điền vào bảng (chạy chữ) từ cuối về đầu
			For i := 10 DownTo 1 Do
				// Nếu vị trí chuẩn bị lấy kí tự trong xâu nhập vào là hợp lệ (vị trí > 0)
				// Ở đây ta không xét trường hợp vị trí > Length(S)
				// vì i-10 chắc chắn <= 0
				// còn Time thì nhỏ hơn hoặc bằng Length(S) - Xem dòng lệnh ở hàng 17
				If (Time+i-10 > 0)
				Then Bang[i] := S[Time+i-10]
				// Ở vế ngược lại này, vì Time+i-10 <= 0
				// nên Length(S)+Time+i-10 sẽ < Length(S)
				// Còn i-10 thì không thể thấp hơn -9 (i chạy từ 10 xuống 1 - Xem hàng 19)
				// mà Length(S) lại >= 10 (Xem hàng 11)
				// Do đó, Length(S)+Time+i-10 sẽ > 0
				Else Bang[i] := S[Length(S)+Time+i-10];
		End
	Else // Lệnh dưới đây mang ý nghĩa tương tự như trên
			For i := 10 DownTo 1 Do
				If (Time+i-10 > 0)
				Then Bang[i] := S[Time+i-10];
	// In ra bảng (chạy chữ)
	WriteLn('Ket qua hien thi: ', Bang);
	ReadLn;
End.

Gửi hồi đáp
  • Similar Topics
    Các hồi đáp
    Lượt xem
    Bài viết cuối