Tải bản đầy đủ (.pdf) (48 trang)

■ Bài tập Pascal/ Free Pascal 01 đến 16 ■ Có bài giải (từ đơn giản đến nâng cao)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (943.03 KB, 48 trang )

Bài tập Pascal – Từ cơ bản đến nâng cao
Bài 1.01 – Xin chào
(Các lệnh WriteLn và ReadLn)
Bạn hãy nhập họ tên của một người và in ra màn hình câu chúc mừng người đó.
Var
HoTen: String;
Begin
WriteLn('Hay nhap ho va ten');
ReadLn(HoTen);
WriteLn('Xin chuc mung ban ', HoTen);
ReadLn;
End.

Để xoá màn hình kết quả của các lần chạy chương trình trước đó (bấm Ctrl-F9), ta cần đưa thêm lệnh
xoá màn hình ClrScr và dùng thư viện Crt chứa lệnh này
Uses Crt;
Var
HoTen: String;
Begin
ClrScr;
WriteLn('Hay nhap ho va ten');
ReadLn(HoTen);
WriteLn('Xin chuc mung ban ', HoTen);
ReadLn;
End.

Bài 1.02 – Các phép toán
(Lệnh If điều_kiện then thực_hiện_lệnh)
Bạn hãy nhập vào hai số nguyên (Integer) và một phép toán (Char) rồi in ra màn hình kết quả của phép
toán.
Uses Crt;


Var
a, b: Integer;
pt: Char;
Begin
ClrScr;
WriteLn('Hay nhap so thu nhat');
ReadLn(a);

Biên soạn: Th.s Nguyễn Anh Việt

Trang 1


Bài tập Pascal – Từ cơ bản đến nâng cao
WriteLn('Hay nhap so thu hai');
ReadLn(b);
WriteLn('Hay nhap phep toan (+ – * /)');
ReadLn(pt);
If pt = '+' then
WriteLn(a, pt,
Else If pt = '-'
WriteLn(a, pt,
Else If pt = '*'
WriteLn(a, pt,
Else If pt = '/'
WriteLn(a, pt,
ReadLn;
End.

b, '

then
b, '
then
b, '
then
b, '

= ', a+b) {Chú ý: Trước Else phải bỏ dấu ;}
= ', a-b)
= ', a*b)
= ', a/b :5:2); {In kết quả có dạng xxxxx.xx}

Bài 1.03 – Tính Luỹ thừa
(Vòng lệnh For Tên_biến := 1 to n do thực_hiện_lệnh)
Bạn hãy nhập vào cơ số a và số mũ n (Integer) rồi in ra màn hình kết quả của phép toán an.
Uses Crt;
Var
a, n, i: Integer; {Số nguyên nhỏ}
lt: LongInt; {Số nguyên lớn}
Begin
ClrScr;
WriteLn('Hay nhap co so');
ReadLn(a);
WriteLn('Hay nhap so mu');
ReadLn(n);
lt := 1;
For i:=1 to n do
lt := lt * a;
WriteLn(a, ' luy thua ', n, ' = ', lt);
ReadLn;

End.

Bài 1.04 – Tính Giai thừa
(TD : 5! = 1 . 2 . 3 . 4 . 5 = 120)
Bạn hãy nhập vào số n (Integer) rồi in ra màn hình kết quả của phép toán giai thừa n!

Biên soạn: Th.s Nguyễn Anh Việt

Trang 2


Bài tập Pascal – Từ cơ bản đến nâng cao
Uses Crt;
Var
n, i: Integer;
gt: LongInt;
Begin
ClrScr;
WriteLn('Hay nhap so n');
ReadLn(n);
gt := 1;
For i := 2 to n do
gt := gt * i;
WriteLn(n, ' giai thua = ', gt);
ReadLn;
End.

Bài 1.05 – Tính Tổng Sn từ 1 đến n
(TD : S5 = 1+2+ 3+ 4+ 5 = 15)
Bạn hãy nhập vào số n (Integer) rồi in ra màn hình kết quả của phép toán Cộng từ 1 đến n

Bài 1.06 – Tính Tổng Cn từ 1 đến n
(TD : C5 =2+ 4 = 6)
Bạn hãy nhập vào số n (Integer) rồi in ra màn hình kết quả của phép toán Cộng các số chẵn từ 1 đến n
Chú ý: a là số chẵn nếu a mod 2 = 0, trong đó mod là phép toán chia lấy số dư. TD: 5 mod 3=2
Bài 1.07 – Tính Tổng Ln từ 1 đến n
(TD : L5 =1+ 3+5 = 9)
Bạn hãy nhập vào số n (Integer) rồi in ra màn hình kết quả của phép toán Cộng các số lẻ từ 1 đến n
Chú ý: a là số lẻ nếu a mod 2 = 1

Biên soạn: Th.s Nguyễn Anh Việt

Trang 3


Bài tập Pascal – Từ cơ bản đến nâng cao
Function là hàm do người lập trình tự tạo để thực hiện một chức năng nào đó, TD:
Function GiaiThua(k: Integer): LongInt;
là hàm dùng để tính giai thừa của một số k và trả về giá trị giai thừa của K
Function GiaiThua(k: Integer): LongInt;
Var
GTGT: LongInt;
Begin
GTGT := 1;
For i := 1 to k do
GTGT := GTGT * i;
GiaiThua := GTGT;
End;

Bài 2.01 – In ra giá trị giai thừa của mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và tính giai thừa của từng số trong dãy đó.

(Dãy 1, 4, 7, 5, 2 => In ra 1, 24, 5040, 120, 2)
Var
A: Array [1..10] of Integer;
i, n: Integer;
Function GiaiThua(k: Integer): LongInt;
Var
GTGT: LongInt;
Begin
GTGT := 1;
For i := 1 to k do
GTGT := GTGT * i;
GiaiThua := GTGT;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;

Biên soạn: Th.s Nguyễn Anh Việt

Trang 4


Bài tập Pascal – Từ cơ bản đến nâng cao
{In ra giá trị giai thừa}
For i := 1 to n do

Write(GiaiThua(A[i]):6);
ReadLn;
End.

Bài 2.02 – In ra giá trị luỹ thừa 2 của các phần tử trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và tính luỹ thừa 2 của từng số trong dãy đó.
(Dãy 1, 4, 7, 5, 2 => In ra 1, 16, 49, 25, 4)
Var
A: Array [1..10] of Integer;
i, n: Integer;
Function LuyThua(a, k: Integer): LongInt;
Var
GTLT: LongInt;
Begin
GTLT := 1;
For i := 1 to k do
GTLT := GTLT * a;
LuyThua := GTLT;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{In ra giá trị luỹ thừa 2}
For i := 1 to n do
Write(LuyThua(A[i], 2):6);

ReadLn;
End.

Procedure cũng tương tự như Function, có thể có đối số, nhưng không giá trị trả về. TD:
Procedure NhanDoiMang;
Biên soạn: Th.s Nguyễn Anh Việt

Trang 5


Bài tập Pascal – Từ cơ bản đến nâng cao
Procedure NhanDoiMang;
Begin
For i := 1 to n do
A[i] := A[i] * 2;
End;

Bài 2.03 – In ra giá trị nhân đôi của các phần tử trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và nhân đôi từng số trong dãy đó.
(Dãy 1, 4, 7, 5, 2 => In ra 2, 8, 14, 10, 4)
Var
A: Array [1..10] of Integer;
i, n: Integer;
Procedure NhanDoiMang;
Begin
For i := 1 to n do
A[i] := A[i] * 2;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');

ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{Nhân đôi các phần tử của mảng}
NhanDoiMang;
{In dãy số}
For i := 1 to n do
Write(A[i]:4);
End;
WriteLn;
ReadLn;
End.

Biên soạn: Th.s Nguyễn Anh Việt

Trang 6


Bài tập Pascal – Từ cơ bản đến nâng cao
Bài 2.04 – In ra giá trị nhân 4 của các phần tử trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và nhân 4 từng số trong dãy đó. Chỉ được sử dụng Procedure
NhanDoiMang như trong Bài 03.
(Dãy 1, 4, 7, 5, 2 => In ra 4, 16, 28, 20, 8)
Bài 2.05 – In ra số nguyên tố trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và in ra các số nguyên tố trong dãy đó. Số nguyên tố là các số chỉ chia
hết cho 1 và chính nó như 2, 3, 5, 7, 11, 13, …
(Dãy 1, 4, 7, 5, 23 => In ra 7, 5, 23)

Var
A: Array [1..10] of Integer;
i, n, Dem: Integer;
Function NguyenTo(k: Integer): Boolean; {Boolean: Chỉ có True và False}
Var
j: Integer;
Begin
If (k <= 0) or (k = 1) then begin NguyenTo := False; Exit; End;
For j := 2 to Trunc(Sqrt(k)) do
If k mod j = 0 then begin NguyenTo:= False; Exit; End;
NguyenTo := True;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{In ra các số nguyên tố }
For i := 1 to n do
If NguyenTo(A[i]) then Begin Write(A[i]:3); Dem := Dem + 1; End;
If Dem = 0 then WriteLn('Khong co so nguyen to nao');
ReadLn;
End.

Biên soạn: Th.s Nguyễn Anh Việt

Trang 7



Bài tập Pascal – Từ cơ bản đến nâng cao
Đệ quy là các Function hay Procedure gọi lại chính nó trong bản thân của hàm hay thủ tục, TD:
Function GiaiThua(k: Integer): LongInt;
là hàm đệ quy dùng để tính giai thừa của một số k và trả về giá trị giai thừa của K
Function GiaiThua(k: Integer): LongInt;
Begin
If k = 1 then GiaiThua := 1
Else GiaiThua := GiaiThua(k-1) * k;
End;

Bài 3.01 – In ra giá trị giai thừa của mảng 1 chiều bằng đệ quy
Bạn hãy nhập một dãy số nguyên và tính giai thừa của từng số trong dãy đó.
(Dãy 1, 4, 7, 5, 2 => In ra 1, 24, 5040, 120, 2)
Var
A: Array [1..10] of Integer;
i, n: Integer;
Function GiaiThua(k: Integer): LongInt;
Begin
If k = 1 then GiaiThua := 1
Else GiaiThua := GiaiThua(k-1) * k;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);

End;
{In ra giá trị giai thừa}
For i := 1 to n do
Write(GiaiThua(A[i]):6);
ReadLn;
End.

Biên soạn: Th.s Nguyễn Anh Việt

Trang 8


Bài tập Pascal – Từ cơ bản đến nâng cao
Bài 3.02 – In ra giá trị luỹ thừa 2 của các phần tử trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và tính luỹ thừa 2 bằng đệ quy của từng số trong dãy đó.
(Dãy 1, 4, 7, 5, 2 => In ra 1, 16, 49, 25, 4)
Var
A: Array [1..10] of Integer;
i, n: Integer;
Function LuyThua(a, k: Integer): LongInt;
Begin
If k = 1 then LuyThua := a
Else LuyThua := LuyThua(a, k-1) * a;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);

ReadLn(A[i]);
End;
{In ra giá trị luỹ thừa 2}
For i := 1 to n do
Write(LuyThua(2, A[i]):6);
ReadLn;
End.

Procedure cũng tương tự như Function, có thể có đối số nhưng không có giá trị trả về. TD:
Procedure NhanMang(k: Integer);
Procedure NhanMang(k: Integer);
Begin
For i := 1 to n do
A[i] := A[i] * k;
End;

Bài 3.03 – In ra giá trị nhân 3 của các phần tử trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và nhân đôi từng số trong dãy đó.
(Dãy 1, 4, 7, 5, 2 => In ra 3, 12, 21, 15, 6)
Biên soạn: Th.s Nguyễn Anh Việt

Trang 9


Bài tập Pascal – Từ cơ bản đến nâng cao

Var
A: Array [1..10] of Integer;
i, n: Integer;
Procedure NhanMang(k: Integer);

Begin
For i := 1 to n do
A[i] := A[i] * k;
End;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i := 1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{Nhân 3 các phần tử của mảng}
NhanMang(3);
{In dãy số}
For i := 1 to n do
Write(A[i]:4);
End;
WriteLn;
ReadLn;
End.

Bài 3.04 – In ra giá trị nhân 7 của các phần tử trong mảng 1 chiều
Bạn hãy nhập một dãy số nguyên và nhân 7 từng số trong dãy đó.
(Dãy 1, 4, 7, 5, 2 => In ra 7, 28, 49, 35, 14)
Bài 3.05 – In ra số siêu nguyên tố có 4 chữ số
Bạn hãy tìm các số siêu nguyên tố có 4 chữ số. Số siêu nguyên tố là các số nguyên tố và khi bỏ đi các
chữ số bên phải thì nó cũng là số nguyên tố như 3137 (3137, 313, 31, 3 đều là số nguyên tố)
(In ra 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393)


Biên soạn: Th.s Nguyễn Anh Việt

Trang 10


Bài tập Pascal – Từ cơ bản đến nâng cao
Var
A: Array [1..10] of Integer;
i, n, Dem: Integer;
Function NguyenTo(k: Integer): Boolean; {Boolean: Chỉ có True và False}
Var
j: Integer;
Begin
If (k <= 0) or (k = 1) then begin NguyenTo := False; Exit; End;
For j := 2 to Trunc(Sqrt(k)) do
If k mod j = 0 then begin NguyenTo:= False; Exit; End;
NguyenTo := True;
End;
Function SieuNguyenTo(k: Integer): Boolean;
Begin
SieuNguyenTo: = True;
While k > 0 do begin
If not NguyenTo(k) then begin
SieuNguyenTo:= False;
Exit;
End;
k := k div 10;
End;
End;
Begin

{In ra các số Siêu nguyên tố có 4 chữ số}
For i := 1000 to 9999 do
If SieuNguyenTo(i) then Begin Write(i:5); Dem := Dem + 1; End;
If Dem = 0 then WriteLn('Khong co Sieu so nguyen to nao');
ReadLn;
End.

Biên soạn: Th.s Nguyễn Anh Việt

Trang 11


Bài tập Pascal – Từ cơ bản đến nâng cao
Bài 4.01 – Mảng 1 chiều
(Mảng A: Array [1..10] of Integer là dãy chứa 10 Số nguyên từ A[1] đến A[10] )
Bạn hãy nhập một dãy số nguyên và tính Tổng các số trong dãy đó.
Var
A: Array [1..10] of Integer;
I, n, Tong: Integer;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{Tính tổng dãy số}
Tong := 0;
For i:=1 to n do

Tong := Tong + A[i];
{In ra Tổng dãy số}
WriteLn('Tong cua day so la ', Tong);
ReadLn;
End.

Bài 4.02 – Max : Số lớn nhất của dãy số
(Dãy 1, 4, 7, 5, 2 có Số lớn nhất là 7, nằm ở vị trí 3)
Bạn hãy nhập một dãy số nguyên và tìm Số lớn nhất cùng với vị trí của nó trong dãy đó.
Var
A: Array [1..10] of Integer;
i, n, ViTri, Max: Integer;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);
{Nhập dãy số}
For i:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{Tìm số lớn nhất và vị trí}
Max := A[1];

Biên soạn: Th.s Nguyễn Anh Việt

Trang 12


Bài tập Pascal – Từ cơ bản đến nâng cao
ViTri := 1;

For i:=2 to n do
If Max < A[i] then begin
Max := A[i];
ViTri := i;
End;
{In ra Số lớn nhất và vị trí}
WriteLn('So lon nhat cua day so la ', Max, ', tai vi tri ', ViTri);
ReadLn;
End.

Bài 4.03 – Min : Số nhỏ nhất của dãy số
(Dãy 1, 4, 7, 5, 2 có Số nhỏ nhất là 1, nằm ở vị trí 1)
Bạn hãy nhập một dãy số nguyên và tìm Số nhỏ nhất cùng với vị trí của nó trong dãy đó.
Bài 4.04 – Max chẵn: Số chẵn lớn nhất của dãy số
(Dãy 1, 4, 7, 5, 2 có Số chẵn lớn nhất là 4, nằm ở vị trí 2)
Bạn hãy nhập một dãy số nguyên và tìm Số chẵn lớn nhất cùng với vị trí của nó trong dãy đó.
Bài 4.05 – Max lẻ: Số lẻ lớn nhất của dãy số
(Dãy 1, 4, 7, 5, 2 có Số lẻ lớn nhất là 7, nằm ở vị trí 3)
Bạn hãy nhập một dãy số nguyên và tìm Số lẻ lớn nhất cùng với vị trí của nó trong dãy đó.
Bài 4.06 – Tổng các số chẵn
(Dãy 1, 4, 7, 5, 2 có tổng các số chẵn là 6)
Bạn hãy nhập một dãy số nguyên và tìm Tổng các số chẵn trong dãy đó.
Bài 4.07 – Tìm các số chính phương (là bình phương của một số)
(Dãy 1, 4, 7, 5, 9 có các số chính phương là 1, 4, 9)
Bạn hãy nhập một dãy số nguyên và in ra các số chính phương trong dãy đó.
Chú ý: Số k là số chính phương khi TRUNC(SQRT(k)) = SQRT(k)
Trunc là hàm dùng để cắt bỏ số lẻ, TD: Trunc(3.1) = 3
Sqrt là hàm lấy căn bậc 2, TD: Sqrt(4) = 2
Var
A: Array [1..10] of Integer;

i, n, Dem: Integer;
Begin
WriteLn('Hay nhap so phan tu cua day so');
ReadLn(n);

Biên soạn: Th.s Nguyễn Anh Việt

Trang 13


Bài tập Pascal – Từ cơ bản đến nâng cao
{Nhập dãy số}
For i:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i);
ReadLn(A[i]);
End;
{Tìm số chính phương}
For i:=1 to n do
If TRUNC(SQRT(A[i])) = SQRT(A[i]) then begin
WriteLn(A[i], ' la so chinh phuong');
Dem := Dem+1;
End;
ReadLn;
If Dem = 0 then
WriteLn('Khong co so chinh phuong nao trong day');
End.

Bài 4.08 – Tìm các số chính phương chẵn
(Dãy 1, 4, 7, 16, 9 có các số chính phương chẵn là 4, 16)
Bạn hãy nhập một dãy số nguyên và in ra các số chính phương chẵn trong dãy đó.


Biên soạn: Th.s Nguyễn Anh Việt

Trang 14


Bài tập Pascal – Từ cơ bản đến nâng cao
Bài 5.01 – Mảng 2 chiều
(Mảng 2 chiều A: Array [1..10, 1..10] of Integer là mảng chứa tối đa 10 dòng, mỗi dòng có tối đa 10 số
nguyên từ A[1,1] đến A[10,10] )
Bạn hãy nhập một mảng số nguyên và tính Tổng các số trong mảng đó.
Var
A: Array [1..10] of Integer;
i, j, m, n, Tong: Integer;
Begin
WriteLn('Hay nhap so dong cua mang');
ReadLn(m);
WriteLn('Hay nhap so cot cua mang');
ReadLn(n);
{Nhập mảng 2 chiều}
For i:=1 to n do
For j:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i, j);
ReadLn(A[i, j]);
End;
{In ra mảng 2 chiều}
For i:=1 to m do begin
For j:=1 to n do
Write(A[i, j]:3);
WriteLn;

End;
{Tính tổng các phần tử của mảng}
Tong := 0;
For i:=1 to n do
For j:=1 to m do
Tong := Tong + A[I, j];
{In ra Tổng các số trong mảng}
WriteLn('Tong cac so cua mang la ', Tong);
ReadLn;
End.

Bài 5.02 – Max : Số lớn nhất của mảng
(Mảng 1 4 7
5 2 9
8 1 3
có Số lớn nhất là 9, nằm ở vị trí dòng 2 cột 3)
Bạn hãy nhập một mảng số nguyên và tìm Số lớn nhất cùng với vị trí của nó trong mảng đó.
Biên soạn: Th.s Nguyễn Anh Việt
Trang 15


Bài tập Pascal – Từ cơ bản đến nâng cao
Var
A: Array [1..10] of Integer;
i, j, m, n, Max, VT_dong, VT_cot: Integer;
Begin
WriteLn('Hay nhap so dong cua mang');
ReadLn(m);
WriteLn('Hay nhap so cot cua mang');
ReadLn(n);

{Nhập mảng 2 chiều}
For i:=1 to n do
For j:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i, j);
ReadLn(A[i, j]);
End;
{In ra mảng 2 chiều}
For i:=1 to m do begin
For j:=1 to n do
Write(A[i, j]:3);
WriteLn;
End;
{Tìm Số lớn nhất của mảng}
Max := A[1,1];
For i:=1 to n do
For j:=1 to m do
If Max < A[i,j] then begin
Max := A[i,j];
VT_dong := i;
VT_cot := j;
End;
{In ra Số lớn nhất và vị trí}
WriteLn('So lon nhat = ', Max, ', o dong ', VT_dong, ' cot ', vt_cot);
ReadLn;
End.

Bài 5.03 – Max : Số lớn nhất trong mỗi dòng của mảng
(Mảng 1 4 7
5 2 9
8 1 3

có các Số lớn nhất dòng 7, 9 và 8)
Bạn hãy nhập một mảng số nguyên và tìm Số lớn nhất cùng với vị trí của nó trong mảng đó.
Biên soạn: Th.s Nguyễn Anh Việt

Trang 16


Bài tập Pascal – Từ cơ bản đến nâng cao
Var
A: Array [1..10] of Integer;
i, j, m, n, Max, VT_dong, VT_cot: Integer;
Begin
WriteLn('Hay nhap so dong cua mang');
ReadLn(m);
WriteLn('Hay nhap so cot cua mang');
ReadLn(n);
{Nhập mảng 2 chiều}
For i:=1 to n do
For j:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i, j);
ReadLn(A[i, j]);
End;
{In ra mảng 2 chiều}
For i:=1 to m do begin
For j:=1 to n do
Write(A[i, j]:3);
WriteLn;
End;
{Tìm Số lớn nhất từng dòng của mảng}
For i:=1 to n do begin

Max := A[i,1];
For j:=1 to m do
If Max < A[i,j] then begin
Max := A[i,j];
VT_dong := i;
VT_cot := j;
End;
WriteLn('So lon nhat = ', Max, ', o dong ', VT_dong, ' cot ', vt_cot);
End;
ReadLn;
End.

Bài 5.04 – Đường chéo chính của Ma trận vuông
(Mảng 1 4 7
5 2 9
8 1 3
có các số trên đường chéo chính là 1, 2 và 3)
Bạn hãy nhập một ma trận vuông và tìm các số trên đường chéo chính.
Var
A: Array [1..10] of Integer;
i, j, m, n: Integer;

Biên soạn: Th.s Nguyễn Anh Việt

Trang 17


Bài tập Pascal – Từ cơ bản đến nâng cao
Begin
WriteLn('Hay nhap so dong, cot cua ma tran vuong');

ReadLn(n);
{Nhập ma trận vuông}
For i:=1 to n do
For j:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i, j);
ReadLn(A[i, j]);
End;
{In ra ma trận vuông}
For i:=1 to n do begin
For j:=1 to n do
Write(A[i, j]:3);
WriteLn;
End;
{Tìm các số trên đường chéo chính}
WriteLn('Cac so tren duong cheo chinh la:');
For i:=1 to n do
For j:=1 to n do
If i = j then
Write(A[i,j]:3);
WriteLn;
ReadLn;
End.

Bài 5.05 – Đường chéo phụ của Ma trận vuông
(Mảng 1 4 7
5 2 9
8 1 3
có các số trên đường chéo phụ là 7, 2 và 8)
Bạn hãy nhập một ma trận vuông và tìm các số trên đường chéo phụ.
Var

A: Array [1..10] of Integer;
i, j, m, n: Integer;
Begin
WriteLn('Hay nhap so dong, cot cua ma tran vuong');
ReadLn(n);
{Nhập ma trận vuông}
For i:=1 to n do
For j:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i, j);

Biên soạn: Th.s Nguyễn Anh Việt

Trang 18


Bài tập Pascal – Từ cơ bản đến nâng cao
ReadLn(A[i, j]);
End;
{In ra ma trận vuông}
For i:=1 to n do begin
For j:=1 to n do
Write(A[i, j]:3);
WriteLn;
End;
{Tìm các số trên đường chéo phụ}
WriteLn('Cac so tren duong cheo phu la:');
For i:=1 to n do
For j:=1 to n do
If i+j = n+1 then
Write(A[i,j]:3);

WriteLn;
ReadLn;
End.

Bài 5.06 – Số lớn nhất trên đường chéo phụ của ma trận vuông
(Mảng 1 4 7
5 2 9
8 1 3
có số lớn nhất trên đường chéo phụ là 8)
Bạn hãy nhập một ma trận vuông và tìm số lớn nhất trên đường chéo phụ.
Bài 5.07 – Số nhỏ nhất trên đường chéo chính của ma trận vuông
(Mảng 2 4 7
5 1 9
8 1 3
có số nhỏ nhất trên đường chéo chính là 1)
Bạn hãy nhập một ma trận vuông và tìm số nhỏ nhất trên đường chéo chính.
Bài 5.08 – Tìm Số lớn nhất trên mỗi dòng của ma trận vuông và đổi vị trí ra đầu dòng
(Mảng 2 4 7
7 4 2
5 1 9
=> 9 1 5
8 1 3
8 1 3
)
Bạn hãy nhập một ma trận vuông và đổi các số lớn nhất ra đầu dòng.

Biên soạn: Th.s Nguyễn Anh Việt

Trang 19



Bài tập Pascal – Từ cơ bản đến nâng cao
Bài 6.01 – String (Chuổi)
(Ch: String là mảng ngầm chứa các Ký tự, TD: Ch=’abc’ thì Ch[1]=’a’, Ch[2]=’b’, Ch[3]=’c’ )
Bạn hãy nhập một chuổi và in ra chuổi đảo ngược của chuổi đó. TD: 'abcd' => 'dcba'
Var
Ch: String;
i: Integer;
Begin
WriteLn('Hay nhap chuoi');
ReadLn(Ch);
{In chuổi đã nhập}
WriteLn('Chuoi da nhap la:');
For i:=1 to Length(Ch) do Write(Ch[i]); {Length('abc') = 3}
WriteLn;
{In chuổi đảo ngược}
WriteLn('Chuoi dao nguoc la:');
For i:= Length(Ch) downto 1 do Write(Ch[i]);
WriteLn;
ReadLn;
End.

Bài 6.02 – Đếm số từ của Chuổi
(Chuổi Nguyen Van An có 3 từ)
Bạn hãy nhập một Chuổi và đếm số từ trong chuổi đó.
Var
Ch: String;
i: Integer;
Begin
WriteLn('Hay nhap chuoi');

ReadLn(Ch);
{In chuổi đã nhập}
WriteLn('Chuoi da nhap la ', Ch);
{Đếm số từ trong chuổi = Số ký tự trống '_' + 1}
For i:= 1 to Length(Ch) do
If Ch[i] = ' ' then Inc(SoTu); {Inc: Ham tang gia tri của bien len 1}
WriteLn('So tu trong chuoi la ', SoTu + 1);
ReadLn;
End.

Biên soạn: Th.s Nguyễn Anh Việt

Trang 20


Bài tập Pascal – Từ cơ bản đến nâng cao
Nhưng nếu nhập vào các chuổi sai như _Nguyen_Van_An, Nguyen_Van_An_ hay Nguyen_ _Van_An
thì chương trình sẽ chạy sai. Chương trình đúng xử lý được các trường hợp nhập sai như trên là:
Var
Ch: String;
i, BD, SoTu: Integer;
Begin
WriteLn('Hay nhap chuoi');
ReadLn(Ch);
{In chuổi đã nhập}
WriteLn('Chuoi da nhap la ', Ch);
{Tìm vị trí ký tự hợp lệ đầu tiên ở đầu chuổi, TD: '_ _abc' => BD = 3}
BD := 1;
While Ch[BD] = ' ' do Inc(BD);
{Đếm số từ trống trong chuổi từ vị trí bắt đầu BD}

For i:= BD to Length(Ch) do begin
If (Ch[i]= ' ') and (Ch[i+1]= ' ') then Continue;
If (Ch[i] = ' ') and (i < Length(Ch)) then Inc(SoTu);
End;
WriteLn('So tu trong chuoi la ', SoTu + 1);
ReadLn;
End.

Bài 6.03 – Chuổi đối xứng
(Các chuổi abccba hay abcba đều là chuổi đối xứng)
Bạn hãy nhập một chuổi và kiềm tra xem chuổi đó có đối xứng hay không.
TD: abcba => Chuoi doi xung, abcbd => Chuoi khong doi xung
Var
Ch: String;
i: Integer;
DoiXung: Boolean;
Begin
WriteLn('Hay nhap chuoi');
ReadLn(Ch);
{Xác định chuổi đối xứng hay không}
DoiXung := True;
For i:=1 to Length(Ch) div 2 do {Số lần so sánh=độ dài chuổi/2 bỏ số lẻ}
If Ch[i] <> Ch[n+1-i] then begin DoiXung := False; Break; End;
If DoiXung = True then
WriteLn('Chuoi ', Ch, ' doi xung') Else WriteLn('Chuoi ', Ch, ' khong
doi xung');
ReadLn;
End.

Biên soạn: Th.s Nguyễn Anh Việt


Trang 21


Bài tập Pascal – Từ cơ bản đến nâng cao
Bài 6.04 – Chuổi chữ thường abc thành chuổi chữ in hoa ABC
Víết chương trình nhập một chuổi chữ thường, in thành chuổi chữ in hoa.
Chú ý:
- Dùng hàm Ord() để lấy thứ tự của ký tự (Ord(‘a’) = 97, Ord(‘b’) = 98, …)
- Trừ cho 32 để biến thành chữ in hoa (97 – 32 = 65 => A, 98 – 32 = 66 => B, …)
- Dùng hàm Chr() để trả về ký tự (Chr(65)= ‘A’, Chr(66) = ‘B’, …)
Var
Ch: String;
i: Integer;
Begin
WriteLn('Hay nhap chuoi');
ReadLn(Ch);
{In ra chuổi chữ in hoa}
For i:=1 to Length(Ch) do
Ch[i] = Chr(Ord(Ch[i]) – 32);
WriteLn('Chuoi doi thanh chu in hoa la ', Ch);
ReadLn;
End.

Bài 6.05 – Chuổi chữ in hoa ABC thành chữ thường abc
Víết chương trình nhập một chuổi chữ in hoa, in thành chuổi chữ thường.
Chú ý:
- Dùng hàm Ord() để lấy thứ tự của ký tự (Ord(‘A’) = 65, Ord(‘B’) = 66, …)
- Cộng với 32 để biến thành chữ thường (65 + 32 = 97 => a, 66 + 32 = 98 => b, …)
- Dùng hàm Chr() để trả về ký tự (Chr(97)= ‘a’, Chr(98) = ‘b’, …)

Bài 6.06 – Chuổi chữ thường abc thành chữ in hoa đảo ngược CBA
Víết chương trình nhập một chuổi chữ thường, TD : Nhập chuổi 'abcd', in thành chuổi chữ hoa đảo ngược
'DCBA'.
Bài 6.07 – Số lần xuất hiện của Ký tự trong chuổi (ký tự T xuất hiện 5 lần trong chuổi Trường
PTTH chuyên Lý Tự Trọng)
Viết chương trình đếm số lần xuất hiện của một ký tự trong chuổi, TD : Nhập ký tự 'T' và chuổi 'Truong
PTTH chuyen Ly Tu Trong' sẽ in ra 'Ky tu T xuat hien trong chuoi Truong PTTH chuyen Ly Tu Trong
5 lan'.
Var
Ch: String; KT: Char;
I, Dem: Integer;
Begin
WriteLn('Hay nhap chuoi');
ReadLn(Ch);

Biên soạn: Th.s Nguyễn Anh Việt

Trang 22


Bài tập Pascal – Từ cơ bản đến nâng cao
WriteLn('Nhap Ky tu can tim');
ReadLn(KT);
{Đếm số lần xuất hiện}
For i:=1 to Length(Ch) do
If Ch[i] = KT then Inc(Dem);;
WriteLn('Ky tu ', KT, ' xuat hien trong chuoi ', Ch, ' ', Dem, ' lan');
ReadLn;
End.


Biên soạn: Th.s Nguyễn Anh Việt

Trang 23


Bài tập Pascal – Từ cơ bản đến nâng cao
Bài 7.01 – Đổi chỗ số lớn nhất đường chéo chính và số nhỏ nhất đường chéo phụ
(Mảng 1 4 7
1 4 7
5 2 9 => 5 3 9
8 1 3
8 1 2
có Số lớn nhất đường chéo chính là 3, số nhỏ nhất đường chéo phụ là 2)
Bạn hãy nhập một ma trận vuông, tìm và đổi chỗ số lớn nhất trên đường chéo chính và số nhỏ nhất trên
đường chéo phụ trong ma trận đó.
Var
A: Array [1..10] of Integer;
i, j, n, t: Integer;
Max, Min, SLN_VT_dong, SLN_VT_cot, SNN_VT_dong, SNN_VT_cot: Integer;
Begin
WriteLn('Hay nhap so dong/ cot cua mang');
ReadLn(n);
{Nhập ma trận vuông}
For i:=1 to n do
For j:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i, j);
ReadLn(A[i, j]);
End;
{In ma trận vuông}
For i:=1 to n do begin

For j:=1 to n do
Write(A[i, j]:3);
WriteLn;
End;
{Tìm Số lớn nhất trên đường chéo chính và vị trí}
Max := A[1,1];
For i:=1 to n do
For j:=1 to n do
If (i = j) and (Max < A[i,j]) then begin
Max := A[i,j];
SLN_VT_dong := i;
SLN_VT_cot := j;
End;
{Tìm Số nhỏ nhất trên đường chéo phụ và vị trí}
Max := A[1,n];
For i:=1 to n do
For j:=1 to n do
If (i + j = n + 1) and (Min > A[i,j]) then begin
Min := A[i,j];

Biên soạn: Th.s Nguyễn Anh Việt

Trang 24


Bài tập Pascal – Từ cơ bản đến nâng cao
SNN_VT_dong := i;
SNN_VT_cot := j;
End;
{Đổi vị trí}

T := A[SLN_VT_Dong, SLN_VT_Cot];
A[SLN_VT_Dong, SLN_VT_Cot] := A[SNN_VT_Dong, SNN_VT_Cot];
A[SNN_VT_Dong, SNN_VT_Cot] := t;
{In ma trận vuông kết quả}
For i:=1 to n do begin
For j:=1 to n do
Write(A[i, j]:3);
WriteLn;
End;
ReadLn;
End.

Bài 7.02 – Tìm số lớn nhất trên vòng ngoài cùng của ma trận
(Mảng 1 4 7
5 2 9 => 9 là số lớn nhất trên vòng ngoài cùng
8 1 3
Bạn hãy nhập một ma trận vuông, tìm số lớn nhất trên vòng ngoài cùng trong ma trận đó.
Var
A: Array [1..10] of Integer;
i, j, n, t, Max : Integer;
Begin
WriteLn('Hay nhap so dong/ cot cua mang');
ReadLn(n);
{Nhập ma trận vuông}
For i:=1 to n do
For j:=1 to n do begin
WriteLn('Hay nhap phan tu thu ', i, j);
ReadLn(A[i, j]);
End;
{In ma trận vuông}

For i:=1 to n do begin
For j:=1 to n do
Write(A[i, j]:3);
WriteLn;
End;
{Tìm Số lớn nhất trên vòng ngoài cùng}
Max := A[1,1];
For i:=1 to n do

Biên soạn: Th.s Nguyễn Anh Việt

Trang 25


×