Bài 5 : Viết chương trình nhập một xu kí tự , sau đĩ chỉ ra xem xu đĩ cĩ phải l xu đối xứng khơng xu đối xứng l xu cĩ cc kí tự giống nhau v đối xứng nhau qua điểm giữa xu , ví dụ ‘ABBA’
Trang 1BÀI TẬP CHƯƠNG 4: CẤU TRÚC DỮ LIỆU MẢNG
Writeln('He co nghiem duy nhat :');
Writeln('x=', x:0:2, ' ; y=', y:0:2);
For j := 2 To 9 Do a[i, j] := i*j ;
Writeln(' Bang cuu chuong : ') ; Writeln ;
For i := 1 To 10 Do
For j := 2 to 9 do Write ( j:4 , 'x' , i:2 , '=' , a[i , j]:2) ;
Trang 2Writeln ('Trung bàinh cong bàimh phuong cac so '
+ 'nguyen tu m den n la: ', tb:12:2);
Write ('Nhap cac kich thuoc cua mang hai chieu : ') ;
Write (' So hang m = ') ; Readln(m) ;
Write (' So cot n = ') ; Readln(n) ;
Writeln (' Nhap cac phan tu cua mang : ') ;
Trang 3an = an-1 + an-2 Viết chương trình tính 20 số Fibonaci đầu tin v đưa ra kết quả vo một mảng 20 phần tử
an = 2an-1 + an-2 ( n > 2 )
Hy lập chương trình tính v gn gi trị của dy vo bàiến mảng
Var a : Array [1 100] Of Word ;
Trang 4if a[i,k]=ba then d:=true;
if i>1 then for k:=1 to i-1 do
if a[k,j]=ba then d:=true;
Trang 5Gotoxy(9*j-1, 2*i+4); Read(a[i, j]);
Gotoxy(9*j-1, 2*i+4); ClrEol; Write(a[i, j]:6);
End;
Readln;
END
Bài 9 :
a a. Viết chương trình nhập dữ liệu từ dy đối xứng vo mảng một chiều
b b. Viết chương trình nhập dữ liệu l ma trận đối xứng vo mảng hai chiều
a) Var a: array [1 100] of integer;
n, i: byte;
Begin
Write('Nhap so phan tu cua day doi xung:');
Readln(n);
Writeln('Nhap cac phan tu cua day:');
For i:=1 to (n+1) div 2 do
Trang 6Write(' Cho mot xau ki tu : '); Readln(s);
For ch:= 'A' to 'Z' do A[ch]:=0;
For i:=1 to length(s) do
Trang 7b b Mỗi một nhĩm cc dấu chấm liền nhau bằng một dấu chấm
c c Một nhĩm cc dấu chấm đứng liền nhau bằng dấu ba chấm
a ) Var S: string;
i: byte;
BEGIN
Write(' Cho mot xau ki tu S = '); Readln(S);
For i:=1 to length(S) do
If S[i] = '!' then S[i]:= '.';
Write( ' Chuoi sau khi da bàien doi la : ', S);
Trang 8While i< length(S) do
If (S[i]='.')and(S[i+1]='.') then Delete(S,i,1)
Trang 9Write(' Cho mot xau ki tu : '); Readln(S);
i:= pos('aa', S); {tìm vị trí xu con 'aa' trong S}
If i<>0 then Writeln(' Ton tai "aa" tai vi tri ', i)
Else Writeln(' Khong ton tai ') ;
Readln;
END
Bài 4 :
Cho số tự nhin n v dy cc kí tự S1 , S2 , … , Sn Bàiết rằng trong dy cĩ ít nhất một dấu phẩy Hy tìm số
tự nhin i sao cho :
a a Si l dấu phẩy đầu tin
b b Si l dấu phầy cuối cng
a )
Var S: string;
i: integer;
BEGIN
Write('Cho mot xau S co dau ",": '); Readln(S);
i:= pos(',', S); (* vị trí của dấu ',' trong S *)
If i<> 0 then Write(' Vi tri thoa man la: ', i);
Trang 10While (i>=1)and(S[i] <> ',' ) do i:=i -1;
If i>=1 then Write('So thu tu thoa man la: ', i)
Else Write('Khong ton tai.');
Readln;
END
Bài 5 :
Viết chương trình nhập một xu kí tự , sau đĩ chỉ ra xem xu đĩ cĩ phải l xu đối xứng khơng ( xu đối xứng
l xu cĩ cc kí tự giống nhau v đối xứng nhau qua điểm giữa xu , ví dụ ‘ABBA’ hoặc ‘ABCBA’ )
If dx then Write(' St la xau doi xung ')
Else Write(' St khong phai la xau doi xung ') ;
For j:=1 to i-1 do if (S[j]=S[i]) then t:=true;
If not t then dem:= dem+1;
End;
Trang 11Write('So ki tu khac nhau cua xau S la: ', Dem);
Write('Cho mot xau ky tu: '); Readln(S);
For i:=1 to length(S) do
If S[i] in ['a' 'z'] then S[i]:= Upcase(S[i]);
Write('Chuoi sau khi da bàien doi la: ', S);
Readln;
END
Bài 8 :
Họ tn một học sinh được nhập từ bn phím Bạn hy viết chương trình điều chỉnh lại cc kí tự đầu của cc
từ đơn trong tn của học sinh ấy trở thnh chữ in hoa
If Hoten[1] in Chu then Hoten[1]:=Upcase(Hoten[1]);
For i:=2 to len do
If (Hoten[i-1]=#32)and(Hoten[i] in Chu) then
While (S[length(S)] = #32) do Delete(S,length(S),1);
Write('Chuoi sau khi da bàien doi la: ', S);
Trang 12Function Card(S: Tap): byte;
Var i,n: byte;
Trang 142 2 Sua chua
3 3 Loai bo
4 4 Nhap them
5 5 Thoat
Lua chon cua ban : _
Sau đĩ đợi g phím Chương trình phải đợi cho tới khi phím g vo l một trong cc chữ số 1 5 hoặc cc chữ ci đầu của cc tuỳ chọn thì thơng bo phím g vo hợp lệ v kết thc chương trình Trong chương trình phải dng một tập hợp để kiểm tra việc nhập gi trị cho bàiến từ bn phím
Trang 15Else If ch<>#13 then Write(#7);
Until not(ch in ['a' 'z']);
Writeln('Cac phan tu cua tap hop la:');
Until not(ch in ['a' 'z']);
Writeln('Cac phan tu con lai cua tap hop la:');
For ch:='a' to 'z' do
Trang 16If ch in tap then Write(ch,' ');
Tuổi : một số nguyn hai chữ số
Lớp : một xu hai chữ số v một chữ ci viết hoa
Hy lập chương trình nhập từ bn phím danh sch một lớp 15 học sinh vo một mảng bản ghi Sau đĩ hiển thị danh sch ln mn hình , mỗi người một dịng
Writeln('Thong tin hoc sinh thu ',i);
Write('Cho ho lot : '); Readln(ds[i].holot);
Write('Cho ten : '); Readln(ds[i].ten);
Write('Cho tuoi : '); Readln(ds[i].tuoi);
Write('Cho lop : '); Readln(ds[i].lop);
Tuổi : một số nguyn hai chữ số
Lớp : một xu hai chữ số v một chữ ci viết hoa
Trang 17Một file bản ghi chứa một danh sch một lớp gồm 20 học sinh Hy lập chương trình hiển thị danh sch ln
Tuổi : một số nguyn hai chữ số
Khối : một số nguyn hai chữ số
Trang 19Một file bản ghi chứa một danh sch học sinh PTTH , thơng tin về mỗi học sinh ngồi cc trường Họđệm ,
Tn , Tuổi , Lớp giống như cc bài trn cịn cĩ thm trường Điểm chứa điểm trung bình của học sinh trong năm học Hy lập chương trình :
a a Hiển thị ln mn hình danh sch những học sinh giỏi nhất của trường l những bạn cĩ điểm trung bình
từ 8.0 trở ln v cao nhất trong khối
b b Lập danh sch học sinh trong năm học mới , bàiết một học sinh cĩ điểm trung bình từ 5.0 trở ln thì được ln lớp Ch ý : lớp 10A ln lớp 11A , lớp 11A ln 12A Kết quả chứa trong file
(* Khen thuong va len lop *)
Trang 20l: string;
Begin
max10:=0; max11:=0; max12:=0;
For i:=1 to n do With ds[i] do
Begin
l:=copy(lop,1,2);
If (l='10')and(diem>max10)and(diem>8.0) then max10:=diem
Else If (l='11')and(diem>max11)and(diem>8.0) then max11:=diem
Else If (l='12')and(diem>max12)and(diem>8.0) then max12:=diem;
End;
Writeln('Hoc sinh gioi nhat khoi 10 : ');
For i:=1 to n do With ds[i] do
If (copy(lop,1,2)='10')and(diem>=max10) then
Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1);
Writeln('Hoc sinh gioi nhat khoi 11 : ');
For i:=1 to n do With ds[i] do
If (copy(lop,1,2)='11')and(diem>=max11) then
Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1);
Writeln('Hoc sinh gioi nhat khoi 12 : ');
For i:=1 to n do With ds[i] do
If (l='10')and(diem>=5.0) then lop:='11'+lop[3]
Else If (l='11')and(diem>=5.0) then lop:='12'+lop[3]
Else If (l='12')and(diem>=5.0) then lop:='DTN';
End;
Assign(f,'bai4n.dat'); Rewrite(f);
For i:=1 to n do With ds[i] do
If lop<>'DTN' then Write(f,ds[i]);
Cho file bản ghi f chứa dữ liệu về kho sch , dữ liệu về mỗi cuốn sch được chứa trong một bản ghi gồm
3 trường mang thơng tin về :
Họ tn tc giả : một xu 26 kí tự
Tn sch : một xu 40 kí tự
Năm xuất bản : một số nguyn 4 chữ số
Trang 21Hăy lập chương trình nhập dữ liệu vo kho sch , sau đĩ tìm ra :
Những cuốn sch của một tc giả cho trước xuất bản vo một năm cho trước
Những cuốn sch cĩ tn cho trước
Write('Cho ten tac gia : '); Readln(M.tacgia);
Write('Cho nam xuat ban : '); Readln(M.NamXB);
i:=1;
While (i<=n)and((ds[i].tacgia<>tacgia)or(ds[i].namXB<>namXB)) do i:=i+1;
If (i>n) then Writeln('Khong tim duoc')
While (i<=n)and(ds[i].tensach<>ten) do i:=i+1;
If (i>n) then Writeln('Khong tim duoc')
Trang 22Writeln('2 Tim kiem theo ten sach');
Tổng số cc ngy lễ v tổng số cc ngy nghỉ lễ trong năm
Tổng số cc ngy lễ v tổng số cc ngy nghỉ lễ trong quí 1 , quí 2 , …
Trang 23Writeln('So ngay le trong nam : ',n);
Writeln('Tong so ngay nghi le trong nam : ',snn);
Writeln;
Writeln('So ngay le trong qui 1 : ',tsq1);
Writeln('Tong so ngay nghi le trong qui 1 : ',snnq1);
Writeln('So ngay le trong qui 2 : ',tsq2);
Writeln('Tong so ngay nghi le trong qui 2 : ',snnq2);
Writeln('So ngay le trong qui 3 : ',tsq3);
Writeln('Tong so ngay nghi le trong qui 3 : ',snnq3);
Writeln('So ngay le trong qui 4 : ',tsq4);
Writeln('Tong so ngay nghi le trong qui 4 : ',snnq4);
Trang 24For j:=2 to (N div i) do a[i*j]:=false;
Repeat Inc(i) Until a[i] or (i>N);
(* Ghi v đọc file of String *)
Trang 25Bạn hy viết chương trình cho php đọc dữ liệu từ bn phím v ghi thm vo cuối một tệp cc bản ghi
(* Doc v ghi vo cuối tệp cc bản ghi *)
Cho một văn bản chứa trong một text file f Trong văn bản , tính từ tri sang phải , từ trn xuống dưới ,
kí tự # l kí hiệu xố đi một từ đứng ngay trước nĩ nếu cĩ Ví dụ ‘#Ta#oi di ngu#h###hoc’ cĩ nghĩa l ‘Toi
di hoc’ Bạn hy viết chương trình sửa lại file f theo quy ước trn
Trang 26Procedure Copyfile(fi1,fi2: string);
Var nread,nbuf: word;
buf: array [1 1024] of byte;
Cch 1 : Kiểm tra xem số lượng cc dấu ‘ ( dấu mở v dấu đĩng ) cĩ bằng nhau khơng ?
Cch 2 : Kiểm tra xem số lượng cc từ Begin v End cĩ bằng nhau khơng ?
(* Dem (') v 'Begin' , 'End' *)
Uses Crt;
Const fi='C8_6.txt';
Trang 27Function Dem(c: string): integer;
Var n,l: integer; f: text; S: string;
Write(' So luong cac dau ( va ) ');
If Dem('(')<>Dem(')') then Writeln('khong bang nhau.')
Else Writeln('bang nhau.');
Write(' So luong cac tu Begin va End ');
If Dem('End')<>Dem('Begin') then Writeln('khong bang nhau.')
Else Writeln('bang nhau.');
Readln;
END
Bài 7 :
Cho một file text Hy viết chương trình đếm xem file text trn chứa bao nhiu từ
( Ch ý : theo quy định , cc từ cch nhau bởi một hay nhiều dấu cch )
Trang 28Cho một file text Viết chương trình loại bỏ cc khoảng trống thừa bn trong file text ny
(* Cat khoang trong thua *)
While (s[1]=' ')and(Length(s)>0) do Delete(s,1,1);
While (s[Length(s)]=' ')and(Length(s)>0) do Delete(s,Length(s),1);
While (Length(s)>0)and(pos(' ',s)<>0) do Delete(s,pos(' ',s),1);
Trang 29Write('Vi tri ban ghi can go bo: '); Readln(k);
p:=l; For i:=3 to k do p:=p^.next; (* Tìm vị trí đầu *)
If k=1 then l:=q Else p^.next:=q;
Trang 30p:=l; For i:=3 to k do p:=p^.next; (* Tim vi tri *)
If k>1 then Cat(p^.next) Else Cat(l); {Cat - Noi}
Trang 31p:=l; For i:=2 to k do p:=p^.next; tenk:=p^.name;
p:=l; For i:=2 to j do p:=p^.next; tenj:=p^.name;
p:=l; For i:=2 to k do p:=p^.next; p^.name:=tenj;
p:=l; For i:=2 to j do p:=p^.next; p^.name:=tenk;
Trang 32SetFillStyle(1,4);
For x:=1 to GetMaxX do
Begin
y:=round(x*tl);
Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
(GetMaxX+x) div 2,(GetMaxY+y) div 2);
Vẽ hình chữ nhật như trn , kích thước điều khiển được Nếu g phím + thì hình lớn ln , g phím – thì nhỏ
đi , g Enter thì dừng chương trình
(* Hình chữ nhật kích thước điều khiển được *)
Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
(GetMaxX+x) div 2,(GetMaxY+y) div 2);
Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
(GetMaxX+x) div 2,(GetMaxY+y) div 2);
If (c='+')and(x<GetMaxX) then Inc(x)
Else If (c='-')and(y>0) then Dec(x);
y:=round(x*tl);
SetFillStyle(1,4);
Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
(GetMaxX+x) div 2,(GetMaxY+y) div 2);
Until c=#27;
CloseGraph;
END
Bài 3 :
Một bn cờ vua hiển thị trn mn hình Nếu đặt một con hậu ( hình trịn mu đỏ ) vo một ơ bằng cch nhập
tn ơ , chẳng hạn a5 , thì cc ơ bị con hu khống chế sẽ được tơ mu xanh Bạn hy lập chương trình thực hiện cc yu cầu trn
Trang 33(* Phạm vi kiểm sốt của Con hậu *)
Trang 34Hiển thị một hình chữ nhật trn mn hình , vị trí cĩ thể điều khiển được bằng bn phím G cc phím mũi tn
để dịch chuyển hình đĩ theo cc hướng tương ứng
Trang 35(* dieu khien vi tri cua hinh vuong *)
Repeat Until KeyPressed;
c:=ReadKey; If c=#0 then c:=ReadKey;
If y>440 then y:=0;
If y<0 then y:=440;
Size 16
Size 24
Size 32
Trang 36Size 40
Trang 37(* To mau Ngoi nha *)