Bài 25. Viết chương trình Pascal Tạo chữ chạy tên màn hình
Program Chu_Chay;
Uses Crt;
Const
a='Nhom Tin hoc tre Thanh Dong nam 2022 ';
b='Truong THCS Thanh Dong - Binh Tan - Vinh Long ';
c=’Men chao quy thay co va cac ban gan xa';
d='Chan thanh cam on quy thay co va cac ban da ghe tham';
Function Lap(Kt:Char; N:Integer): String;
Var
Tam:String;
K:Integer;
Begin
Tam:=' ';
For K:=1 To N Do
Tam:=Tam+Kt;
Lap:=Tam;
End;
{--------------}
Procedure WriteXY(X,Y:Integer; St:String);
Begin
GotoXY(X,Y);
Write(St);
End;
{--------------}
Function Min(a,b:Integer):Integer;
Begin
If a < b Then
Min:=a
Else
Min:=b;
End;
{--------------}
Procedure Chuchay(St:String);
Var
k:Integer;
Tin:String;
Begin
Tin:=Lap(' ',68)+'<<' +St+' ';
For k:=1 To Length(Tin) Do
Begin
TextColor(k MOD 16);
WriteXY(6,8,Copy(Tin,k,Min(68,Length(Tin)-k+1)));
Delay(100);
End;
End;
{--------------}
Procedure Khung(x1,y1,x2,y2:Integer);
Var
k:Integer;
Begin
TextColor(14);
WriteXY(x1,y1,#201);
For k:=x1+1 To x2-1 Do
Write(#205);
Write(#187);
WriteXY(x1,y2,#200);
For k:=x1+1 To x2-1 Do
Write(#205);
Write(#188);
For k:=y1+1 To y2-1 Do
Begin
WriteXY(x1,k,#186);
WriteXY(x2,k,#186);
End;
End;
{--------------}
Begin
TextBackGround(1);
ClrScr;
TextColor(3+Blink);
GotoXY(30,4);
Writeln('NAM HOC 1999 -2000');
Khung(5,7,75,9);
Repeat
Chuchay(a);
Chuchay(b);
Chuchay(c);
Chuchay(d);
Until KeyPressed;
End.
Bài 26. Viết chương trình Pascal Tạo hiêu ứng cho chữ
Program Loang_mau;
Uses Crt;
Const
St=' Chao mung ban da den voi Turbo Pascal ';
Var k:Integer;
Procedure Mau(nen,chu:Integer);
Begin
TextBackGround(nen);
TextColor(chu);
End;
Begin
TextMode(C80);
TextBackGround(Black);
ClrScr;
For k:=2 To 23 Do
Begin
Mau(k Mod 8,(k+4) Mod 8 + 8);
GotoXY(1,k);
Write(St)
End;
Readln
End.
Bài 27. Viết chương trình Pascal Tìm và xóa các ký tự trùng nhau trong chuỗi
Program Tim_Xoa;
Var St,St1:String; Ch:Char; i,l,l1:Byte;
Begin
Writeln('TIM VA XOA CAC KY TU TRUNG NHAU TRONG CHUOI');
Writeln(' -----------------');
Writeln;
Write('-Nhap mot chuoi: ');
Readln(St);
St1:=St;
i:=1;
l:=Length(St);
While i <= l Do
Begin
i:=i+1;
If St[i]=St[i - 1] Then
Begin
Writeln('+Ky tu thu: ',i:2,' la: ',St[i],' bi trung lap');
Write('Ban co muon xoa ky tu nay khong (c/k)');
Readln(Ch);
If UpCase(Ch)='C' Then
Begin
Delete(St,i,1);
i:= i - 1;
End;
End;
End;
l1:=Length(St);
Writeln;
Writeln('+Chuoi ban dau : ',St1,' co: ',l:2,' ky tu');
Writeln(' Sau khi xoa ky tu trung nhau');
Writeln(' Chuoi con lai: ',St,' gom: ',l1:2,' ky tu');
Writeln;
Writeln(' Bam phim <Enter> de ket thuc');
Readln
End.
Bài 28. Viết chương trình Pascal Tìm chuỗi hai xuất hiên trong chuỗi một
Program Tim_chuoi_trong_chuoi;
Var
St1,St2:String;
i,sl:Integer;
Begin
Writeln('TIM CHUOI HAI XUAT HIEN TRONG CHUOI MOT');
Writeln(' --------------');
Writeln;
Write('-Chuoi thu nhat: ');
Readln(St1);
Write('-Chuoi thu hai : ');
Readln(St2);
sl:=0;
For i:=1 To Length(St1) Do
If St2 = Copy(St1,i,Length(St2)) Then
sl:=sl+1;
Writeln;
Writeln('+Chuoi thu 2 xuat hien: ',sl:2,' lan trong chuoi 1');
Writeln;
Writeln(' Bam phim <Enter> de ket thuc');
Readln
End.
Bài 29. Viết chương trình Pascal Kiểm tra chuỗi đối xứng
Program Chuoi_Doi_Xung;
Var
St:String;
l,i:Integer;
Dung:Boolean;
Begin
Writeln('KIEM TRA CHUOI DOI XUNG');
Writeln(' -------------');
Writeln;
Write('-Nhap chuoi: ');
Readln(St);
l:=Length(St);
Dung:=True;
For i:=1 To (l Div 2) Do
If St[i] <> St[l-i+1] Then
Dung:=False;
If Dung Then
Writeln('+Chuoi nay doi xung')
Else
Writeln('+Chuoi nay khong doi xung');
Readln
End.
Bài 30. Viết chương trình Pascal Kiểm tra ký tự trùng của hai xâu
Program Cung_Ky_Tu;
Var St1,St2:String;
Dung:Boolean;
i:Integer;
Begin
Writeln('KIEM TRA KY TU TRUNG CUA 2 CHUOI');
Writeln(' --------------');
Writeln;
Write('-Nhap chuoi 1: ');
Readln(St1);
Write('-Nhap chuoi 2: ');
Readln(St2);
Dung:=False;
If Length(St1)=Length(St2) Then
Begin
Dung:=True;
For i:= 1 To Length(St1) Do
If Pos(St1[i],St2) = 0 Then
Dung:=False
Else
Delete(St2,Pos(St1[i],St2),1);
End;
If Dung Then
Writeln('+Hai chuoi co cung cac ky tu')
Else
Writeln('+Hai chuoi co cac ky tu khac nhau');
Readln
End.
Bài 31. Viết chương trình Pascal Ngắt từng từ trong câu cho xuống dòng
Program Ngat_tu;
Var St:String;
Begin
Writeln('NGAT TUNG TU TRONG CAU');
Writeln(' --------------');
Writeln;
Write('-Nhap mot cau: ');
Readln(St);
Repeat
While (St[1] =' ') And (Length(St) <> 0) Do
Delete(St,1,1);
While (St[1] <> ' ') And (Length(St) <>0) Do
Begin
Write(St[1]);
Delete(St,1,1);
End;
Writeln;
Until Length(St)=0;
Readln
End.
Bài 32. Viết chương trình pascal để mã hoá và giải mã một xâu ký tự bằng cách đảo ngược các bit của từng ký tự trong xâu.
Uses crt;
Var st:string; {Hàm đảo bit ký tự c}
Function DaoBit(c:char):char;
Var n,i,s,bitcuoi,Mask:byte;
Begin
{Đổi ký tự sang số}
n:=ORD(c);
{s: kết quả đảo bit, Mask: mặt nạ dùng để bật bit thứ i}
s:=0; Mask:=128;
For i:=1 To 8 Do {duyệt qua 8 bit của n}
Begin
{Lấy bit cuối cùng của n: bit cực phải}
bitcuoi:=n AND 1;
n:=n shr 1; {loại bỏ bit cuối cùng: n:=n DIV 2}
{Bật bit thứ i lên: từ trái sang phải}
if bitcuoi=1 then s:=s OR Mask;
Mask:=Mask shr 1; { Mask:= Mask DIV 2}
End;
DaoBit:=CHR(s);
End;
Function MaHoa(st:string):string;
Var i:Byte;
Begin
{Đảo bit từng ký tự trong xâu st}
For i:=1 To Length(st) Do st[i]:=DaoBit(st[i]);
Mahoa:=st;
End;
Begin
Write(‘Nhap xau: ‘); Readln(st); st:=MaHoa(st);
Writeln(‘Xau sau khi ma hoa: ‘,st); Readln; st:=MaHoa(st);
Writeln(‘Xau sau khi giai ma: ‘,st);
Readln;
End.
Bài 33: Viết chương trình Pascal Mã hóa ký tự
Program Ma_hoa;
Var
St:String;
k:Integer;
i,n:Integer;
Begin
Writeln('CHUONG TRINH MA HOA');
Writeln(' -----------');
Write('-Nhap chuoi: ');
Readln(St);
Write('-Nhap ma so k: ');
Readln(k);
k:=k Mod 26;
For i:= 1 To Length(St) Do
Begin
n:=Ord(St[i]);
If (n >=97) And (n<=122) then
Begin
n:=n+k;
If n > 122 Then
n:=(n Mod 122) + 96;
End;
St[i]:=Chr(n);
End;
Writeln;
Writeln('+Sau khi ma hoa: ',St);
Writeln;
Writeln(' Bam phim <Enter> de ket thuc');
Readln
End.
Bài 34:Viết chương trình nhập vào một xâu ký tự từ bàn phím. Đổi xâu ký tự đó sang chữ in hoa rồi in kết quả ra màn hình. Ví dụ : Xâu abcdAbcD sẽ cho ra xâu ABCDABCD.
Uses Crt;
Var St:String;
i:Byte;
Begin
Clrscr;
Write(‘Nhap xau ki tu: ‘); Readln(St);
For i:=1 to length(St) do St[i]:=Upcase(St[i]);
Write(‘Xau in hoa la: ‘, St);
Readln;
End.
Bài 35: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Đổi xâu ký tự đó sang chữ thường rồi in kết quả ra màn hình. Ví dụ :Xâu abCdAbcD sẽ cho ra xâu abcdabcd.
Uses Crt;
Var St:String; i:Byte;
Begin
Clrscr;
Write(‘Nhap xau St: ‘); Readln(St);
For i:=1 to length(St) do
If St[i] IN [‘A’..’Z’] Then St[i]:=CHR(ORD(St[i])+32);
Write(‘Xau ket qua: ‘, St);
Readln;
End.
Bài tập 36: Viết chương trình đếm số ký tự chữ số trong một xâu ký tự được nhập vào từ bàn phím.
Uses Crt;
Var St:String;
i,d:Byte;
Begin
Clrscr;
Write(‘Nhap xau St: ‘); Readln(St);
For i:=1 to length(St) do
If St[i] IN [‘0’..’9’] Then d:=d+1;
Write(‘So ky tu chu so trong xau: ‘, d);
Readln;
End.
Bài 37: Viết chương trình nhập một xâu từ bàn phím. In ra xâu đó sau khi xóa hết các ký tự trắng thừa trong xâu. (Ký tự trắng thừa là các ký tự trắng đầu xâu, cuối xâu và nếu ở giữa xâu có 2 ký tự trắng liên tiếp nhau thì có 1 ký tự trắng thừa).
Uses Crt;
Var St:String;
Procedure XoaTrangThua(Var St:String);
Begin
While St[1]=#32 Do Delete(St,1,1);//Xóa các ký tự trắng ở đầu xâu
While St[Length(St)]=#32 Do Delete(St,Length(St),1); //Xóa các ký tự trắng ở cuối xâu
While POS(#32#32,St)<>0 Do Delete(St,POS(#32#32,St),1); //Xóa các ký tự trắng ở giữa xâu
End;
Begin
Clrscr;
Write(‘Nhap xau St: ‘); Readln(St);
XoaTrangThua(St);
Write(‘Xau sau khi xoa cac ky tu trang thua: ‘, St);
Readln;
End.
Bài 38: Viết chương trình liệt kê các từ của một xâu ký tự được nhập vào từ bàn phím, mỗi từ phải được viết trên một dòng.
Uses Crt;
Var St:String;
Procedure XoaTrangThua(Var St:String);
Begin
While St[1]=#32 Do Delete(St,1,1);
While St[Length(St)]=#32 Do Delete(St,Length(St),1);
While POS(#32#32,St)<>0 Do Delete(St,POS(#32#32,St),1);
End;
Begin
Clrscr;
Write(‘Nhap xau St: ‘); Readln(St);
XoaTrangThua(St);
St:=St+#32;
Writeln(‘Liet ke cac tu trong xau: ‘);
While POS(#32,St)<>0 Do
Begin
Writeln(Copy(St,1,POS(#32,St)));
Delete(St,1,POS(#32,St));
End;
Readln;
End.
Bài 39: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Tìm xâu đảo ngược của xâu đó rồi in kết quả ra màn hình. Ý tưởng:
- Nếu xâu St có 1 ký tự thì xâu đảo = St.
- Ngược lại: Xâu đảo = Ký tự cuối + Phần còn lại của xâu St.
Uses Crt;
Var St:String;
Function XauDao(St:String):String; //Giải thuật không đệ qui
Var S:String; i:Byte;
Begin
S:=' ';
For i:=Length(St) DowTo 1 Do S:=S+St[i];
XauDao:=S;
End;
Function DeQui(St:String):String; //Giải thuật đệ qui
Bài 40: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Thông báo lên màn hình các chữ cái có trong xâu và số lượng của chúng ( Không phân biệt chữ hoa hay chữ thường).
Ý tưởng:
- Dùng mảng dem với chỉ số là các chữ cái để lưu trữ số lượng của các chữ cái trong xâu.
- Duyệt qua tất cả các ký tự của xâu St: Nếu ký tự đó là chữ cái thì tăng ô biến mảng dem[St[i]] lên 1 đơn vị.
Uses Crt;
Var St:String;
dem: Array[‘A’..’Z’] Of Byte;
i:Byte;ch:Char;
Begin
Clrscr;
Write(‘Nhap xau St: ‘); Readln(St);
//Khởi tạo mảng
For ch:=’A’ To ‘Z’ Do dem[ch]:=0;
//Duyệt xâu
For i:=1 To Length(St) Do
If Upcase(St[i]) IN [‘A’..’Z’] Then Inc(dem[Upcase(St[i])]);
//Liệt kê các ký tự ra màn hình
For ch:=’A’ To ‘Z’ Do
If dem[ch]>0 Then Writeln(ch,’ : ’,dem[ch]);
Readln;
End.
Bài 41: Viết chương trình xóa các ký tự chữ số trong một xâu ký tự được nhập vào từ bàn phím.
Uses Crt;
Var St:String;
//Hàm POSNUM kiểm tra xem trong xâu St có ký tự chữ số hay không? Nếu có, hàm trả về vị trí đầu tiên của ký tự chữ số, ngược lại hàm trả về giá trị 0
Function POSNUM(St:String):Byte;
Var OK:Boolean; i:Byte;
Begin
OK:=False;
i:=1;
While (i<=Length(St)) AND (Not OK) Do
If St[i] IN [‘0’..’9’] Then OK:=True
Else i:=i+1;
If OK Then POSNUM:=i Else POSNUM:=0;
End;
Begin
Clrscr;
Write(‘Nhap xau St: ‘); Readln(St);
While POSNUM(St)<>0 Do Delete(St,POSNUM(St),1);
Write(‘Xau sau khi xoa: ‘,St);
Readln;
End.
Bài 42: Viết chương trình để mã hoá và giải mã một xâu ký tự bằng cách đảo ngược các bit của từng ký tự trong xâu.
Uses crt;
Var st:string;
//Hàm đảo bit ký tự c
Function DaoBit(c:char):char;
Var n,i,s,bitcuoi,Mask:byte;
Begin
//Đổi ký tự sang số
n:=ORD(c);
//s: kết quả đảo bit, Mask: mặt nạ dùng để bật bit thứ i