Nhằm giúp các bạn học pascal tốt hơn, nâng cao khả năng tư duy, suy luận tạo tiền đề cho việc học các ngôn ngữ lập trình phức tạp hơn sau này. Mình sẽ post các bài tập pascal cơ bản để các bạn theo dõi và học hỏi. Theo đó, ở mỗi bài viết mình sẽ post 5 bài tập cơ bản vào các tên bài viết cụ thể như Một số bài tập Pascal cơ bản – Phần 1, Một số bài tập Pascal cơ bản – Phần 2,… Mức độ bài tập sẽ khó dần theo các chương. Hi vọng những bài tập này sẽ giúp bạn rèn luyện kiến thức pascal của mình tốt hơn.
BÀI TẬP PASCAL CƠ BẢN PHẦN 1
Bài 1: Tính tổng chỉ sổ cột hàng chẵn trong mảng 2 chiều
*Đề: Lập chương trình nhập mảng 2 chiều m hàng n côt. tính và in ra màn hình tổng các phần tử có chỉ số hàng chẵn, chỉ số cột lẹ M, N được nhập từ bàn phím.
*Hướng dẫn:
Var a:array[1..100,1..100] of integer;
i,j,m,n:integer;
Begin
Write('Nhap so hang va cot');readln(m,n);
For i:=1 to m do
For j:=1 to n do
begin
write('A[',i,',',j,']=');readln(a[i,j]);
end;
i:=2;j:=1;
While i<=m do
begin
While j<=n do
begin
write('A[',i',',j,']='a[i,j],' '); j:=j+2;
end;
i:=i+2;
end;
Readln;
End.
Bài 2: Đếm số ký tự chữ và số
*Đề: Viết ct nhập vào xâu có cả chữ và số, rồi cho xuất ra có bao nhiêu kí tự chữ và bao nhiêu kí tự số.
*Hướng dẫn:
var s: string;cs,cc,i: integer;
begin
write('Nhap mot xau ky tu: ');
readln(s);
cs:=0;
cc:=0;
for i:=1 to length(s) do
begin
if (s[i] in ['0'..'9']) then cs:=cs+1;
if s[i] in ['A'..'Z'] + ['a'..'z'] then cc:=cc+1;
end;
write('So cac ki tu la chu so:',cs:2,' So cac ki tu la chu cai:',cc:4);
readln
end.
Bài 3: Tìm ước chung lớn nhất và bội chung nhỏ nhất pascal
*Đề: Tìm ước chung lớn nhất và bội chung nhỏ nhất pascal
*Hướng dẫn:
Cách 1: Dưới đây là thuật toán tìm UCLN bằng cách trừ đi nhau, được trình bày trong SGK tin học 10.
var x,y,UCLN,BCNN:integer;
begin
readln(x,y);
BCNN:=x*y;
While x<>y do If x>y then x:=x-y else y:=y-x;
UCLN:=x;
BCNN:=BCNN div UCLN;
write(UCLN,' ',BCNN);
end.
Cách 2: Thuật toán Euclide: Ngoài cách tìm UCLN như trên. Các bạn có thể sử dụng cách chia lấy dư (mod), chương trình sẽ tối ưu do phải thực hiện ít phép tính hơn.
Ý tưởng: UCLN của 2 số x, y cũng là UCLN của 2 số y và x mod y, vậy ta sẽ đổi x là y, y là x mod y cho đến khi y bằng 0. Khi đó UCLN là x.
var x,y,UCLN,BCNN,t:integer;
begin
readln(x,y);
BCNN:=x*y;
t:= y mod x;
While t <> 0 do
Begin
t:= x MOD y;
x:= y;
y:= t;
End;
ucln:=x;
BCNN:=BCNN div UCLN;
write(UCLN,' ',BCNN);
end.
Cách 3: Tìm UCLN bằng cách dùng đệ quy: Đệ quy được hiểu đơn giản là sự gọi nhiều lần chương trình con trong chương trình. Thực sự, đối với bài toán đơn giản, không ai sử dụng đệ quy vì sẽ làm phức tạp vấn đề và làm chương trình trở nên rắc rối, phải thực hiện nhiều phép tính hơn. Tuy nhiên, nếu bắt buộc phải dùng đệ quy, các bạn có thể tham khảo cách làm dưới đây:
function ucln(x,y:integer):integer;
begin
if x = y then
ucln:=x
else if x > y then
ucln:=ucln(x mod y,y)
else
ucln:=ucln(x, y mod x);
end;
var x,y:integer;
begin
readln(x,y);
write('Ước chung lớn nhất là: ', UCLN(x,y), ' Bội chung nhỏ nhất là: ', (x*y) div UCLN(x,y));
end.
Bài 4: Tuổi cha tuổi con
*Đề: Nhập từ bàn phím tuổi cha và con (hiện tại tuổi cha lớn hơn 2 lần tuổi con và tuổi cha hơn tuổi con ít nhất là 25). Đưa ra màn hình câu trả lời cho câu hỏi “Bao nhiêu năm nữa thì tuổi cha gấp đôi tuổi con”?
*Hướng dẫn:
uses crt;
var tcha,tcon,nam,kq:byte;
begin
write('nhập tuổi con:');readln(tcon);
write('nhập tuổi cha gấp ba lần tuổi con và ít nhất lớn hơn tuổi con 25:');readln(tcha);
repeat
nam:=nam+1;
tcon:=tcon+1:
tcha:=tcha+1;
until tcha=2*tcon;
kq:=nam;
writeln('vậy sau ',kq,' năm thì tuổi cha gấp 2 tuổi con');
readln;
end.
Bài 5: Kiểm tra cấp số cộng
*Đề: Nhập dãy số gồm N số nguyên (N<100). Xác định xem đó có phải dãy số có tính chất là cấp số cộng hay không.
*Hướng dẫn:
uses crt;
Var
A:array[1..100] of integer;
i,n,d: integer;
CS: boolean;
BEGIN
clrscr;
repeat
Write(' Nhap vao so nguyen duong N <=100 : ');
readln(N);
Until (n>1) and (n<=100);
For i:=1 to n do
begin
repeat
write('A[',i,'] = ');
readln(A);
until abs(A)<=1000;
end;
d:=abs(A[2]-A[1]);
CS:=True;
For i:=2 to n do
IF (abs(A-A[i-1])<>d) then
begin
CS:=False;
break;
end;
IF CS then writeln('Day la cap so cong ')
else writeln(' Day ko phai la cap so cong ');
readln;
END.
Một số bài tập Pascal cơ bản - Phần 1
0 nhận xét:
Đăng nhận xét
Click to see the code!
To insert emoticon you must added at least one space before the code.