Nơi trao đổi thông tin Văn Lang
Chào mừng bạn đến với nơi trao đổi thông tin của chúng tôi !
Hãy đăng nhập hoặc đăng kí tài khoản để trải nghiệm nhiều điều thú vị tại đây !
Thân ái !
Nơi trao đổi thông tin Văn Lang
Chào mừng bạn đến với nơi trao đổi thông tin của chúng tôi !
Hãy đăng nhập hoặc đăng kí tài khoản để trải nghiệm nhiều điều thú vị tại đây !
Thân ái !
Nơi trao đổi thông tin Văn Lang
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.
Nơi trao đổi thông tin Văn Lang

Nơi trao đổi thông tin, tăng cường hợp tác, giải đáp những vướng mắc khi học lập trình Pascal
 
Trang ChínhTìm kiếmLatest imagesĐăng kýĐăng Nhập

 

 Bài tập xâu (3)

Go down 
Tác giảThông điệp
Admin
Admin
Admin


Posts : 121
Danh tiếng : 6
Join date : 10/11/2014
Age : 22

Bài tập xâu (3) Empty
Bài gửiTiêu đề: Bài tập xâu (3)   Bài tập xâu (3) Icon_minitime16/1/2015, 06:05

1 ) Tạo một dòng chữ chạy từ phải sang trái trong một hình chữ nhật trên màn hình ( để quảng cáo )

2 ) Nhập từ bàn phím xâu kí tự S . Thông báo có bao nhiêu loại kí tự chữ cái ‘a’ ..’z’ , ‘A’..’Z’ chứa trong xâu S và số lượng của mỗi loại .

3 ) Nhập xâu kí tự S ( coi như 1 dòng chữ ) chỉ gồm các loại kí tự chữ cái ‘a’ ..’z’ , ‘A’..’Z’ và chữ số ‘0’..’9’ . Một từ là 1 nhóm các kí tự liên tiếp nhau không chứa kí tự #32 .
a) Hãy thông báo S có bao nhiêu từ .
b) Nhập từ bàn phím 1 từ , thông báo số lần gặp từ này trong xâu S.

4 ) Một xâu kí tự được gọi là đối xứng (Palindrome) nếu nó không thay đổi khi ta đảo ngược thứ tự các kí tự của xâu . Thí dụ ‘able was I ere I saw elba’ . Nhập từ bàn phím một xâu , thông báo nó có phải là xâu Palindrome hay không .


5 ) Cho File ‘Leutrai.txt’ có số dòng không hạn chế , mỗi dòng chỉ gồm các kí tự dấu chấm ‘.’ và chữ số ‘1’. Các chữ số ‘1’ tạo thành các tam giác cân , như hình vẽ bên có 5 “lều trại”
..............1................1.............1
...........1 1 1...........111.............
........1 1 1 1 1.....................1....
........................................1 1 1.
..................1.............................

Hãy thông báo số “lều trại “của file .
( Số 1 đứng riêng lẻ một mình cũng coi như 1 lều )


6 ) Nhập xâu S và số 1<=i <= length(S) . Không dùng thủ tục delete , copy xâu ,hãy chuyển xâu con gồm i kí tự ở đầu xâu S về cuối xâu với số phép chuyển đổi các kí tự càng ít càng tốt .
Thí dụ :
S=‘TRANVANTHANH’ và i=4 --> S=‘VANTHANHTRAN’

Gợi ý : Dùng các tính chất của phép đối xứng : dx(dx(A)+dx(B)) = B + A

7 ) Nhập mảng A các xâu kí tự . Mỗi xâu là họ tên của 1 học sinh trong lớp em .Nhập N là số học sinh của lớp . Tạo mảng B các xâu kí tự , sao cho B[i] được hình thành từ A[i] bằng cách nối tên , sau đó là đệm và cuối cùng là họ của học sinh A[i] . Sắp xếp tăng dần các phần tử của mảng A theo khoá là giá trị phần tử tương ứng của mảng B . Qui ước “Tên” là từ cuối cùng trong họ tên , “Họ” là từ đầu tiên trong họ tên , các từ còn lại là “Đệm” của họ tên .
{Hạn chế : Họ tên không có dấu } .

8 ) Nhập một số nhỏ hơn 1000. Trình bày dòng chữ cho biết giá trị của số đó .
Thí dụ : 605 : Sau tram linh nam
615 : Sau tram muoi lam
625 : Sau tram hai muoi lam

9 ) Dùng xâu kí tự để xây dựng các phép toán : cộng ,trừ với số lớn .

10 ) ( Đề thi chọn đội tuyển quốc gia 1990 - Vòng 2 , bài 5)
Dùng xâu kí tự để xây dựng các phép toán : nhân với số lớn .

11) Dùng xâu kí tự để xây dựng các phép toán : chia nguyên với số lớn .Hạn chế : số chia không quá 9 .

12 ) ( Đề thi Tin học quốc gia 1994 - Bảng A, vòng 1 , bài 1 câu b )
Dãy Fibonaci F1,F2,...Fn được định nghĩa :
F1=F2=1
Fn=Fn-1+Fn-2 ( n >2 )
Nhập xâu kí tự chữ số S ( không quá 200 chữ số ) . Phân tích số đã biểu diễn bằng xâu S thành tổng các số hạng của dãy Fibonaci.

13 ) ( Dựa theo đề thi Tin học quốc tế tại Hy lạp - Ngày 22-5-1991 Bài S-terms )
Một xâu kí tự A được gọi là S_Từ nếu :
+ A chỉ gồm các loại kí tự ‘S ‘, ’(‘ và ’)’
+ Xâu A=‘S’ là một S_Từ
+ Nếu A¬1,A2 là S_Từ thì xâu A=‘(‘+A1+A2+’)’ là S_Từ
Xâu S_Từ được gọi là có độ dài N nếu số kí tự ‘S’ trong nó đúng bằng N
a) Nhập N từ bàn phím ( 1 N  Cool .Hiển thị lên màn hình tổng số các S_Từ có độ dài N .
b) Xây dựng File Text : ‘S_TU.OUT’ chứa toàn bộ các S_Từ có độ dài N ( N đã nhập ở câu a ) . Mỗi dòng chứa 1 S_Từ
Thí dụ : N=4
Kết quả câu a ) : 5
Kết quả câu b) : (S((SS)S))
(S(S(SS)))
(((SS)S)S)
((S(SS))S)
((SS)(SS))

14 ) Lập ma phương bậc chẵn khác n >2 . Thuật toán “Tạo mẫu và phép đối xứng” .

15 ) Xét xâu nhị phân ( chứa các kí tự ‘0’ và ‘1’ ) . Xâu nhị phân S gọi là không lặp bậc L nếu mọi xâu con độ dài L của nó khác nhau từng đôi một . Xâu nhị phân không lặp bậc L được gọi là xâu kết thúc ( bậc L ) , nếu việc bổ sung vào bên phải hoặc bên trái nó kí tự nhị phân {0,1} bất kì sẽ làm mất tính không lặp . Xây dựng thuật toán và viết chương trình để xác định xâu nhị phân không lặp kết thúc bậc L có độ dài ngắn nhất với L cho trước . ( Đề thi chọn đội tuyển Tin học quốc gia 1989 - Vòng 1 , bài 3 . Do điều kiện năm 1989 , đề bài còn cho phép : không nhất thiết thực hiện chương trình trên máy )








Phần bài chữa

Bài 1

Uses Crt;
Const S = 'Truong PTTH Chuyen ban Le Quy Don Ha dong * ';
Var i,L : Integer;
Procedure Khung;
Var i : Integer;
Begin
Gotoxy(16,Cool;Write(#218);
Gotoxy(17,Cool;For i:=17 to 63 do Write('-');
Gotoxy(64,Cool;Write(#191);
Gotoxy(16,12);Write(#192);
Gotoxy(17,12);For i:=17 to 63 do Write('-');
Gotoxy(64,12);Write(#217);
End;
Begin
Clrscr;
L := length(S);
i := 0;
Repeat
Khung;
Inc(i);
S := copy(S,2,L-1)+copy(S,1,1);
Gotoxy(18,10);Clreol;
Write(S);
Delay(100);
Until (i>200) or KeyPressed;
End.

Bài 2 & 3 :

Uses Crt;
Var D : Array['0'..'z'] of Integer;
tong_tu,demtu : Integer;
tunhap : String;
Procedure Doc_Dem;
Const Fi = 'demkitu.txt';
Var F : Text;
S,tu : String;
i,k,t : Byte;
j : Char;
tt : Boolean;
Begin
Demtu := 0;
Write('Nhap tu can dem : ');
Readln(tunhap);
Writeln('File da cho la : ');
FillChar(D,Sizeof(D),0);
Assign(F,Fi);
{$I-} Reset(F); {$I+}
If IoResult<>0 then
Begin
Writeln('Loi File ');
Readln;
Halt;
End;
While not SeekEof(F) do
Begin
Readln(F,S);
Writeln(S);
{ Dem tung ki tu }
For i:=1 to length(S) do
For j:='0' to 'z' do
If (S[i]= j) then Inc(D[j]);
{ Dem tu }
S :=' '+S;
For i:=1 to length(S)-1 do
If (S[i]=' ') and (S[i+1]<>' ') then
Begin
Inc(tong_tu);
{ Dem tu da nhap }
k := i+1;
t := 1;
tt := True;
While (t<=length(Tunhap)) and tt do
If S[k]=Tunhap[t] then
Begin
Inc(k);Inc(t);
End
Else tt := False;
If t>Length(tunhap) then Inc(demtu);
End;
End;
Close(F);
End;
Procedure Hien_so_luong_ki_tu;
Var i : Char;
Begin
For i:='0' to 'z' do
If (i in ['0'..'9']) or (i in ['A'..'Z']) or (i in ['a'..'z']) then
If (D[i]>0) then Write(i:2,' :',D[i]:2,' ');
End;
BEGIN
Clrscr;
Doc_Dem;
Writeln('Ket qua ');
Hien_so_luong_ki_tu;
Writeln;
Writeln('Tong so tu la : ',tong_tu);
Writeln('So tu " ',tunhap,'" trong File la : ',demtu);
Readln;
END.

Bài 4 :
Uses Crt;
Var S : String;
i,L,N : Integer;
TT : Boolean;
Begin
Clrscr;
Writeln('Nhap mot xau ki tu ');
Readln(S);
i:=1 ;
TT := True;
L := Length(S) ;
N := L div 2;
While TT and (i<=N) do
Begin
If S[i]=S[L-i+1] then Inc(i)
Else TT := False;
End;
If i>N then Writeln('Xau ',S,' la doi xung ')
Else Writeln('Xau ',S,' khong doi xung ');
Readln;
END.

Bài 5 :
Uses Crt;
Const Fi = 'DemLeu.txt';
Var F : Text;
A,B : String;
i,Leu : Integer;
BEGIN
Clrscr;
A:='';
For i:=1 to 80 do A:=A+ '.';
Assign(F,Fi);
Reset(F);
Leu:=0;
While not seekeof(F) do
Begin
Readln(F,B);
Writeln(B);
B:='.' + B + '.';
For i:=2 to length(B)-1 do
If (B[i-1]= '.') and (B[i+1]='.') and( B[i]='1')
and(A[i]='.') then Inc(Leu);
A:=B;
End;
Close(F);
Writeln('so Leu la : ', Leu);
Readln
END.

Bài 6 :
{ có thể dễ dàng giải bài này nếu dùng một số hàm và thủ tục chuẩn để xử lý String . Cụ thể chỉ cần vài lệnh sau :
phu := copy(S,1,i);
Delete(S,1,i);
S := S + phu

Nhưng khi xử lý mảng : chuyển i phần tử đầu của mảng về cuối mảng thì phải thực hiện chuyển dần từng phần tử của mảng , nếu không có thuật toán tốt thì phải thực hiện quá nhiều phép toán đơn vị . Dưới đây giới thiệu một phương pháp tốt giải quyết bài toán này , dựa vào tính chất của phép đối xứng mảng }

Uses Crt;
Var S : String;
i,n : Byte;
Procedure DX(i,j : Byte);
Var L,r : Byte;
coc : Char;
Begin
L := i;
R := j;
While L<R do
Begin
coc := S[L];
S[L] := S[R];
S[R] := coc;
Inc(L);
Dec(R);
End;
End;
Procedure Chuyen;
Begin
DX(1,i);
DX(i+1,n);
DX(1,n);
End;
Procedure Nhap;
Begin
Write('Nhap xau S = ');
Readln(S);
N := Length(S);
Write('Nhap so phan tu can chuyen tu dau trai sang phai, i= ');
Readln(i);
End;
Procedure Hien;
Begin
Writeln('Xau S sau khi chuyen ',i,' phan tu dau trai ve dau phai ');
Writeln(S);
End;
BEGIN
Clrscr;
Nhap;
Chuyen;
Hien;
Readln;
END.

Bài 7 :

Uses Crt;
Const Max = 50;
Type Str48 = String[48];
Str7 = String[7];
Mang= Array[1..Max] of Str48;
m2 = Array[1..6] of Str7;
Var A,B : Mang;
C : M2;
ss : Integer;
Procedure Nhap;
Const Fi = 'Lop.txt';
Var F : Text;
i : Integer;
Begin
Assign(F,Fi);
Reset(F);
i := 0;
While not SeekEof(F) do
Begin
Inc(i);
Readln(F,A[i]);
End;
SS := i;
Close(F);
End;

Procedure Sach(Var S : Str48);
Begin
While (S<>'') and (S[1]=' ') do Delete(S,1,1);
While (S<>'') and (S[Length(S)]=' ') do Delete(S,Length(S),1);
End;
Procedure Nan(Var S : Str48);
Var i : Integer;
Begin
Sach(S);
S := ' '+S;
For i:=1 to length(S)-1 do
If (S[i]=' ') and (S[i+1]<>' ') then S[i+1] := Upcase(S[i+1]);
Sach(S);
End;
Function PosP(S : Str48) : Integer;
Var i : Integer;
TT : Boolean;
Begin
i:=length(S);
TT := True;
While (i>= 1) and TT do
If S[i]<>' ' then Dec(i) Else TT := False;
If i>=1 then PosP := i-1;
End;
Procedure BoXung(Var S : Str7);
Begin
While (S<>'') and (S[1]=' ') do Delete(S,1,1);
While (S<>'') and (S[Length(S)]=' ') do Delete(S,Length(S),1);
While length(S)<=6 do S := S+' ';
End;
Procedure TaoB;
Var i,pt,pp,L,j : Integer;
phu : Str48;
Begin
For i:=1 to ss do
Begin
Nan(A[i]);
L := Length(A[i]);
pp := PosP(A[i]);
C[6] := Copy(A[i],PP+1,L-pp); { C[6] là Tên }
Boxung(C[6]);
phu := Copy(A[i],1,pp);
For j:=1 to 5 do
Begin
Sach(phu);
phu := phu+' ';
pt := Pos(' ',phu);
C[j] := Copy(phu,1,pt);
Boxung(C[j]);
phu := Copy(phu,pt+1,L);
End;
B[i] := C[6];
For j:=5 downto 1 do B[i] := B[i]+C[j];
Writeln(B[i]);
End;
End;
Procedure Sap;
Var i,j : Integer;
p : Str48;
Begin
Writeln('*** Danh sach da sap tang : ');
For i:=1 to SS-1 do
For j := i+1 to SS do
Begin
If B[i]>B[j] then
Begin
p := B[i];
B[i] := B[j];
B[j] := p;
p := A[i];
A[i] := A[j];
A[j] := p;
End;
End;
End;
Procedure Hien;
Var i : Integer;
Begin
For i:=1 to ss do
Begin
Writeln(A[i]);
If i mod 24 =0 then Readln
End;
End;
BEGIN
Clrscr;
Nhap;
TaoB;
Sap;
Hien;
Readln;
END.

Bài 8 :
Uses Crt;
Type Str4 = String[4];
Var S : Array [1..9] of Str4;
x : 0..999;
kq : String;
Procedure Nhap;
Begin
Repeat
Clrscr;
Write('Nhap vao so duong nguyen <1000 ');
{$I-} Readln(x);{$I+}
Until (IoResult=0) and (x>0) and (x<1000);
S[1] := 'MOT '; S[2] := 'HAI '; S[3] := 'BA ';
S[4] := 'BON '; S[5] := 'NAM '; S[6] := 'SAU ';
S[7] := 'BAY '; S[8] := 'TAM '; S[9] := 'CHIN';
End;
Procedure Chuyen;
Var dv,ch,tr : Byte;
Begin
dv := x mod 10;
ch := (x div 10) mod 10;
tr := x div 100;
kq := '';
If tr>0 then Kq := Kq+S[tr]+' trăm';
If (ch=0) and (dv>0) then
If (tr=0) then kq := kq+S[dv]
Else Kq := Kq+' LINH '+S[dv];
If ch=1 then Kq := Kq+' mười ';
If ch>1 then Kq := Kq+S[ch]+' mươi ';
If (ch>0) and (dv<>5) and (dv>0) then kq := kq+ s[dv];
If (ch>0) and (dv=5) then kq := kq+' lăm ';
Writeln(kq);
End;
BEGIN
Nhap;
Chuyen;
Readln;
END.

Bài 9 :

{Chu y nhap tu ban phim xau chi co the dai toi 127 }
Uses Crt;

Var A,B,C : String;
L : Integer;
Ch : Char;
Procedure Nhap;
Var i : Integer;
Begin
Writeln('Nhap so thu nhat : ');Readln(A);
Writeln('Nhap so thu hai : ');Readln(B);
End;
Procedure Sua;
Var i: Integer;
Begin
L := Length(A);
If L<Length(B) then L:= Length(B);
While Length(A) < L do A := '0'+A;
While Length(B) < L do B := '0'+B;
C := ''; For i := 1 to L do C := '0'+C;
End;
Procedure Cong(A,B : String;Var C : String);
Var nho,phu,i : Integer;
Begin
Nho := 0;
For i:= L downto 1 do
Begin
phu := Ord(A[i])+Ord(B[i])-96+ nho;
C[i] := Char((phu mod 10)+48);
nho := phu div 10;
End;
If nho>0 then C :='1'+C;
End;
Procedure Tru(A,B : String; Var C : String);
Var nho,phu,i : Integer;
Begin
Nho := 0;
For i:= L downto 1 do
Begin
phu := Ord(A[i])-( Ord(B[i])+nho );
nho := Ord(phu<0);
If nho=1 then Inc(phu,10);
C[i] := Char((phu mod 10) + 48);
End;
End;
Procedure Hien;
Begin
Writeln(' '+A);
Writeln(' '+B);
If Length(C)>L then Writeln(C) Else Writeln(' '+C);
End;
Procedure LamCong;
Begin
Cong(A,B,C);
Hien;
End;
Procedure LamTru;
Begin
If A>=B then Tru(A,B,C) Else
Begin
Tru(B,A,C);
C := ‘-’+C;
End;
Hien;
End;
BEGIN
Clrscr;
Nhap;
Sua;
Writeln('Cong hay tru (C/T) ');
Readln(ch);
If Upcase(ch)='C' then LamCong;
If Upcase(ch)='T' then LamTru;
Readln;
END.

Bài 10 :
Uses Crt;
Var A,B,C : String;
L,LA,LB : Integer;
TT : Boolean;
Procedure Nhap;
Begin
Writeln('Nhap so thu nhat : ');Readln(A);
Writeln('Nhap so thu hai : ');Readln(B);
LA := Length(A);
LB := Length(B);
L := LA+LB;
While (Length(A) < L) do A := '0'+A;
While (Length(B) < L) do B := '0'+B;
End;
Procedure Cong(A,B : String;Var C : String);
Var LL,nho,phu,i : Integer;
Begin
C := '';
For i := 1 to L do C := '0'+C;
Nho := 0;
For i:= L downto 1 do
Begin
phu := Ord(A[i])-96+ Ord(B[i]) + nho;
C[i] := Char((phu mod 10) + 48);
nho := phu div 10;
End;
End;
Procedure Nhan;
Var nho,phu,k : Integer;
D : String;
Procedure Nhan1(k : Integer;A,B : String;Var D : String);
Var nho,phu,i : Integer;
Begin
Nho := 0;
D := '';
For i:=1 to L do D :='0'+D;
For i := L downto L-LA+1 do
Begin
Phu := (Ord(A[i])-48)*(Ord(B[k])-48) + nho;
nho := phu div 10;
D[k-(L-i)] := Char((phu mod 10) + 48);
End;
End;
Begin
Nho := 0;
C := '';
For k := 1 to L do C := '0'+C;
For k := L downto L-LB+1 do
Begin
Nhan1(k,A,B,D);
Cong(C,D,C);
End;
End;
Procedure Hien;
Var i : Integer;
Begin
i := 1;
While A[i]='0' do Begin A[i]:=' ';Inc(i);End;
Writeln(A);
i := 1;
While B[i]='0' do Begin B[i]:=' ';Inc(i);End;
Writeln(B);
i := 1;
While C[i]='0' do Begin C[i]:=' ';Inc(i);End;
Writeln(C);
End;
BEGIN
Clrscr;
Nhap;
Nhan;
Hien;
Readln;
END.

Bài 11:
Uses crt;
Var Bichia,Thuong : string;
i,sochia,nho : Byte;
Procedure Nhap;
Var x,y : Integer;
ch:char;
Begin
clrscr;
Bichia:='';
Write(' Cho so bi chia ');
Repeat
ch:=Readkey;
If ch in ['0'..'9'] then
Begin
Bichia := Bichia+ch ;
Write(ch);
End
Until (ch=#13) ;
Writeln;
Write(' Nhap so chia <10 la : ');
x := Wherex;
y := Wherey;
Repeat
{$I-}Gotoxy(x,y); ClrEol;Readln(sochia); {$I+}
Until (Ioresult=0) and (sochia<10) and (sochia>0);
Writeln;
End;
Procedure Divtay;
Var i,phu : Byte;
Begin
Nho:=0; Thuong:='';
For i:=1 to Length(bichia) do
Begin
Phu := Ord(Bichia[i])-48+ Nho*10;
Thuong := Thuong+Chr((Phu div Sochia)+48);
Nho := Phu mod Sochia;
If Thuong[1]='0' then Delete(Thuong,1,1);
End;
End;
Procedure Hien;
Begin
Clrscr;
Writeln(Bichia,' Chia cho ',Sochia);
Writeln(Bichia,' MOD ',Sochia,' = ',Nho);
While (Thuong<>'') and (Thuong[1]='0') do Delete(Thuong,1,1);
If Thuong='' then Thuong := '0';
Writeln(Bichia,' DIV ',sochia,' = ',Thuong);
Gotoxy(20,23);Write(' ESC ---> THOAT ');
End;
BEGIN
Repeat
Nhap;
Divtay;
Hien;
Until Readkey=#27;
END.

Bài 12:
Uses Crt;
Var F1,F2,S : String;
Procedure Nhap;
Var Ch : Char;
Begin
S := '';
Writeln('Nhap so nguyen duong (toi da 200 chu so ) S = ');
Repeat
Ch := ReadKey;
If Pos(Ch,'0123456789')>0 then
Begin
S := S + ch;
Write(ch);
End;
Until ch = #13;
Writeln;
F1 := '1';
F2 := '1';
End;
Procedure Sap(Var X,Y : String);
Var L : Integer;
Begin
L := Length(X);
If Length(Y)>L then L := Length(Y);
While Length(X)<L do X := '0'+X;
While Length(Y)<L do Y := '0'+Y;
End;
Function Cong(X,Y : String) : String;
Var nho,phu,i : Integer;
C : String;
Begin
C := '';
nho := 0;
Sap(X,Y);
For i := Length(X) downto 1 do
Begin
phu := Ord(X[i])+Ord(Y[i])-96+nho;
nho := phu div 10;
C := Char((phu mod 10) + 48)+C;
End;
If nho=1 then C := '1'+C;
Cong := C;
End;
Function Tru(X,Y : String) : String;
Var nho,phu,i : Integer;
C : String;
Begin
C := '';
nho := 0;
Sap(X,Y);
For i := Length(X) downto 1 do
Begin
phu := Ord(X[i])-Ord(Y[i])-nho;
nho := Ord(phu<0);
If nho = 1 then Inc(phu,10);
C := Char((phu mod 10) + 48)+C;
End;
Tru := C;
End;
Procedure Timthuan(S : String; Var F1,F2 : String) ;
Var F3 : String;
Begin
Repeat
F3 := Cong(F1,F2);
F1 := F2;
F2 := F3;
Sap(F2,S);
Until F2>S;
End;
Procedure TimNguoc(Var S,F1,F2 : String) ;
Var F0 : String;
Begin
Repeat
F0 := Tru(F2,F1);
F2 := F1;
F1 := F0;
Sap(F0,S);
Until F0<=S;
End;
Procedure XuLy;
Begin
Writeln(S,' = ');
TimThuan(S,F1,F2);
Repeat
While (Length(F1)>1) and (F1[1]='0') do Delete(F1,1,1);
Writeln(F1,' ');
S := Tru(S,F1);
While (Length(S)>1) and (S[1]='0') do Delete(S,1,1);
If S>'0' then Timnguoc(S,F1,F2);
Until S = '0';
End;
BEGIN
Clrscr;
Nhap;
XuLy;
Readln
END.

Bài 13 :
Uses Crt;
Const Max = 13;
Output = 'S_tu.out';
Nhap = 'T.txt';
Type PT = String[3*Max-2];
Var N : Byte;
Tro : Array[0..Max] of Longint;
F2 : Text;
F : File of PT;
Procedure Lam;
Var i,j : Byte;
p1,p2,k : Longint;
ST,s1,s2 : PT;
Procedure Doc(p1,p2:Longint;var s1,s2:Pt);
Begin
Seek(F,p1);
Read(F,s1);
Seek(F,p2);
Read(F,s2);
End;
Procedure Ghi(p:Longint;var s:Pt);
Begin
Seek(F,p);
Write(F,s);
End;
Begin
Tro[0]:=0;
Tro[1]:=1;
ST:='S';
Seek(F,1);
Write(F,ST);
k:=1;
For i:=2 to N do { Lan luot xay dung cac S_tu gom i ki tu S }
Begin
For j:=1 to i div 2 do{ Chon cac S_tu co j ki tu S ( j <= i div 2 ) }
If j=i-j then
Begin {p1 cho Tim S_tu co j ki tu S }
For p1:=Tro[j-1]+1 to Tro[j] do
{ Chi can xet p2 trong doan S_tu co j ki tu S va p2 o doan tren p1 }
{ de tao S_tu tu cac S_tu S1 va S2 ma S1<>S2 }
For p2:=p1+1 to Tro[j] do
Begin
Inc(k);
Doc(p1,p2,s1,s2);
ST:='('+S1+S2+')';
Ghi(k,ST);
Inc(k);
ST:='('+S2+S1+')';
Ghi(k,ST);
End;
{ Tao S_tu tu cac S_tu S1 va S2 ma S1=S2}
For p1:=Tro[j-1]+1 to Tro[j] do
Begin
Inc(k);
Doc(p1,p1,s1,s2);
ST:='('+S1+S2+')';
Ghi(k,ST);
End;
End
Else { p1 vi tri S_tu co j ki tu S }
{ p2 vi tri S-tu co i-j ki tu S }
For p1:=tro[j-1]+1 to tro[j] do
For p2:=tro[i-j-1]+1 to tro[i-j] do
Begin
Inc(k);
Doc(p1,p2,s1,s2);
ST:='('+S1+S2+')';
Ghi(k,ST);
Inc(k);
ST:='('+S2+S1+')';
Ghi(k,ST);
End;
Tro[i]:=k;
End;
{ Ghi cac S_tu co N ki tu S vao File }
For k:=Tro[N-1]+1 to Tro[N] do
Begin
Seek(F,k);
Read(F,ST);
Writeln(F2,ST);
End;
Writeln(F2,'Tong So = ',Tro[N]-tro[N-1]);
Writeln('Tong So = ',Tro[N]-tro[N-1]);
End;
BEGIN
Clrscr;
Write('Nhap N = ');
Readln(N);
Assign(F2,output);
Rewrite(F2);
Assign(F,nhap);
Rewrite(F);
Lam;
Erase(F);
Close(F);
Close(F2);
END.

Bài 14 :
Uses Crt;
Const Max = 18;
Var n,k : Byte;
S : String;
M : Array[1..Max,1..Max] of Integer;
Procedure Init;
Var i,j : Byte;
Begin
Repeat
Write('Nhap cap cua ma phuong chan (n<=18; n<>2) : ');
Readln(n);
Until (Ioresult=0) and (not odd(n)) and (n<>2) and(n<=18);
For i:=1 to n do
For j:=1 to n do M[i,j] := (i-1)*n+j;
k := n div 2;
End;
Procedure Hien;
Var i,j : Byte;
Begin
For i:=1 to n do
Begin
For j:=1 to n do Write(M[i,j]:4);
Writeln;
End;
Writeln;
End;
Procedure Taomau;
Var i : Byte;
Begin
For i:=1 to k div 2 do S := S+'T';
If odd(k) then { k le } S := S+'DN';
While length(S)<k do S := S+'B';
End;
Procedure Tam(i,j : Byte);
Var coc : Integer;
Begin
coc := M[i,j];
M[i,j] := M[n-i+1,n-j+1];
M[n-i+1,n-j+1] := Coc;
coc := M[n-i+1];
M[n-i+1,j] := M[i,n-j+1];
M[i,n-j+1] := coc;
End;
Procedure Doc(i,j : Byte);
Var coc : Integer;
Begin
coc := M[i,j];
M[i,j] := M[i,n-j+1];
M[i,n-j+1] := coc;
End;
Procedure Ngang(i,j : Byte);
Var coc : Integer;
Begin
coc := M[i,j];
M[i,j] := M[n+1-i,j];
M[n+1-i,j] := Coc;
End;
Procedure Xuly(i : Byte);
Var j : Byte;
Begin
For j:=1 to k do
Case S[j] of
'T' : Tam(i,j);
'D' : Doc(i,j);
'N' : Ngang(i,j);
End;
End;
Procedure QuayS;
Begin
S := S[length(S)]+copy(S,1,length(S)-1);
End;
Procedure Work;
Var i : Byte;
Begin
For i:=1 to k do
Begin
Xuly(i);
QuayS;
End;
End;
Function Test : Boolean;
Var i,j : Byte;
Tong,phu : Integer;
Ok : Boolean;
Begin
Tong := (n*n+1)*(n div 2);
Ok := True;
i := 1;
While (i<=n) and Ok do
Begin
Phu := 0;
For j:=1 to n do phu := phu + M[i,j];
Writeln('Dong ',i,' = ',phu,' ');
If phu <> tong then ok := False Else Inc(i);
End;
Ok := True;
j := 1;
While (j<=n) and Ok do
Begin
Phu := 0;
For i:=1 to n do phu := phu + M[i,j];
Writeln('Cot ',j,' = ',phu,' ');
If phu <> tong then Ok := False Else Inc(j);
End;
Ok := True;
phu := 0;
For i:=1 to n do phu := phu+M[i,i];
Writeln('Duong cheo chinh = ',phu,' ');
If phu <> tong then Ok := False;
Ok := True;
phu := 0;
For i:=1 to n do phu := phu+M[i,n-i+1];
Writeln('Duong cheo phu = ',phu,' ');
If phu <> tong then Ok := False;
Test := Ok;
End;
BEGIN
Clrscr;
Init;
Hien;
Taomau;
Work;
Hien;
If test then Writeln('Dung la ma phuong ')
Else writeln('Khong la ma phuong ');
Readln;
END.

Bài 15
Uses Crt;
Const max = 255;
Var L : byte;
S : string;
Procedure Nhap;
Begin
Repeat
Gotoxy(10,Cool;
Write(' Bac cua xau nhi phan khong lap : ');
{$i-} Readln(L); {$i+}
Until (ioresult=0) and (L>=1);
End;
Procedure Tao_xau;
Var Ok : Boolean;
Function Kt1(st:string) : Boolean;
Var i,j : Byte;
Begin
Kt1:= true;
If length(st) >=L then
For i := 1 to Length(st)-L do
For j := i+1 to Length(st)-L+1 do
If copy(st,i,L) = copy(st,j,L) then
Begin
Kt1 := false;
Exit;
End;
End;
Function Kt2:Boolean;
Begin
Kt2:=false;
If not Kt1('0'+S) and not Kt1('1'+S) and not Kt1(S+'1')
and not Kt1(S+'0') then Kt2:=true;
End;
Procedure Tim(Var s : string);
Var i,k : Byte;
S1 : String;
Ok1 : Boolean;
Begin
k := 1;
S1 := '';
Repeat
Ok1 := kt1(S+'0');
If not OK1 then S := S+'1' Else S := S +'0';
Until Kt2;
Clrscr;
Gotoxy(10,12);
Write('Xau nhi phan khong lap co bac ',L,' ngan nhat : ');
Gotoxy(10,13); Write(s);
Ok := False;
End;
Begin
S := '';
Ok := true;
Tim(s);
End;

BEGIN
Repeat
Clrscr;
Nhap;
Tao_xau;
Gotoxy(10,20);
Write(' ESC to quit');
Until Readkey=#27;
END.
Về Đầu Trang Go down
https://forumpascalvanlang.forumvi.com
 
Bài tập xâu (3)
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Nơi trao đổi thông tin Văn Lang  :: Bài tập :: Xâu kí tự-
Chuyển đến