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.