You are on page 1of 16

BÀI TẬP PASCAL ÔN THI HỌC SINH GIỎI

4.1 Viết chương trình nhập vào 2 số nguyên, kiểm tra xem chúng có phải là ước của nhau không
Program bt4_1;
Var a,b:integer;
Begin
write('nhap a,b:');
readln(a,b);
if (a mod b) = 0 then writeln(b,' la uoc cua ',a)
else writeln(b,' khong la uoc cua ',a);
if (b mod a) = 0 then writeln(a,' la uoc cua ',b)
else writeln(a,' khong la uoc cua ',b);
readln;
End.
4.2 Viết chương trình giải hệ phương trình:

{ax+by=e¿¿¿¿
Program bt4_2;
Var a,b,c,d,e,f,dt,dx,dy,x,y:real;
Begin
write('nhap a,b,c,d,e,f:');
readln(a,b,c,d,e,f);
dt:=a*d-b*c;
dx:=b*f-e*d;
dy:=a*f-c*e;
if dt<>0 then
begin
x:=dx/dt;
y:=dy/dt;
writeln('ptr co nghiem x,y',x:10:2,y:10:2);
end;
if dt=0 then
if (dx=0) and (dy=0) then writeln('ptr vo so nghiem');
if (dx=0) and (dy<>0) then writeln('ptr vo nghiem');
readln;
End.
4.3 Viết chương trình nhập vào 3 số nguyên a, b, c. Kiểm tra xem 3 số đó có thỏa mãn:
- Là 3 cạnh của 1 tam giác thường
- Là 3 cạnh của 1 tam giác cân
- Là 3 cạnh của 1 tam giác đều
- Không là 3 cạnh của 1 tam giác
Program bt4_3;
Var a,b,c:integer;
Begin
write('nhap a,b,c:');
readln(a,b,c);
if (a>0) and (b>0) and (c>0) and (a+b>c) and (b+c>a) and (a+b>c) then
if (a=b) and (b=c) then writeln('la tam giac deu')
else
if (a=b) or (b=c) or (a=c) then writeln('la tam giac can')
else writeln('la tam giac thuong')
else writeln('khong la 3 canh cua tam giac');
readln;
End.
4.4 Viết chương trình nhập vào họ tên, điểm văn, điểm tóan, điểm anh văn của 1 học sinh. Sau đó
in ra màn hình: họ tên, điểm trung bình, xếp lọai của học sinh đó (trên 1 dòng). Cho biết:
- Điểm trung bình: (điểm văn + điểm tóan + điểm anh văn) / 3
- Xếp loại: Giỏi, nếu điểm trung bình >= 9.0
Khá, nếu 7.0 <= điểm trung bình < 9.0
Trung bình, nếu 5.0 <= điểm trung bình < 7.0
Yếu, nếu điểm trung bình < 5.0
Program bt4_4;
Var hoten:string[37];
dv,dt,dnn:byte;
dtb:real;
xl:string[15];
Begin
write('nhap ho ten:');
readln(hoten);
write('nhap diem toan, diem van, diem ngoai ngu:');
readln(dt,dv,dnn);
dtb:=(dt+dv+dnn)/3;
if dtb>=9.0 then xl:='Gioi';
if (dtb>=7.0) and (dtb<9.0) then xl:='Kha';
if (dtb>=5.0) and (dtb<7.0) then xl:='Trung binh';
if dtb<5.0 then xl:='Yeu';
writeln('Ho ten:',hoten:25,'Diem TB:',dtb:10:2,'Xep loai:',xl:20);
readln;
End.
4.5 Viết chương trình nhập vào tháng, năm rồi tính số ngày của tháng. Biết năm nhuần là năm
chia hết cho 4 và nếu nó chia hết cho 100 thì cũng phải chia hết cho 400

Program bt4_5;
Var ngay,thang,nam:integer;
Begin
write('nhap thang:');
readln(thang);
write('nhap nam:');
readln(nam);
case thang of
1,3,5,7,8,10,12:ngay:=31;
4,6,9,11:ngay:=30;
2:if nam mod 4 <> 0 then ngay:=28
else if (nam mod 100= 0)and(nam mod 400<>0)then ngay:=28
else ngay:=29;
end;
writeln('thang',thang,'nam',nam,'ngay',ngay);
readln;
End.
4.6 Viết chương trình nhập vào ký tự. Nếu là ký tự thường thì in ra ký tự hoa tương ứng, nếu là ký
tự hoa thì in ra ký tự thường tương ứng, nếu là các ký tự khác thì in ra chính nó
Program bt4_6;
Var kt:char;
Begin
write('nhap vao ky tu:');
readln(kt);
case kt of
'A'..'Z':kt:=chr(ord(kt)+32);
'a'..'z':kt:=chr(ord(kt)-32);{hoac 'a'..'z':kt:=upcase(kt);}
end;
writeln('ky tu da doi la:',kt);
readln;
End.
5.1 Viết chương trình nhập vào một số nguyên dương n, tìm tất cả các ước số của n
Program bt5_1;
Var i,n:integer;
Begin
write('nhap n:');
readln(n);
writeln('cac uoc cua ',n,'la:');
for i:=1 to n do
if (n mod i)=0 then write(i:6);
readln;
End.

assign(f,'data.out'); rewrite(f);
// vi du minh sẽ viết ra file "abc"
writeln(f,'abc');
close(f);
5.2 Viết chương trình tính tổng S=1+2+…….+n, với n là số nguyên dương được nhập từ bàn phím.
Program bt5_2;
Var s,i,n:integer;
Begin
write('nhap n:');
readln(n);
s:=0;
for i:=1 to n do s:=s+i;
writeln('tong s=',s);
readln;
End.
5.3 Viết chương trình tính tổng S=-1+2-3+…….+(-1)n+n, với n là số nguyên dương được nhập từ
bàn phím.
Program bt5_3;
Var s,i,n:integer;
Begin
write('nhap n:');
readln(n);
s:=0;
for i:=1 to n do
if (i mod 2)=0 then s:=s+i
else s:=s-i;
writeln('tong s=',s);
readln;
End.

5.4 Viết chương trình tính tổng S= √ 1+ √2+...+ √n−1+√ n , với n là số nguyên dương được nhập từ
bàn phím.
Program bt5_4;
Var i,n:integer;
s:real;
Begin
write('nhap n:');
readln(n);
s:=0;
for i:=1 to n do s:=sqrt((n-i+1)+s);
writeln('ket qua s=',s:10:2);
readln;
End.
5.5 Viết chương trình tính tổng S=12+22+………+n2, với n là số nguyên dương được nhập từ bàn
phím
Program bt5_5;
Var s:real;
i,n:integer;
Begin
write('nhap n:');
readln(n);
s:=0;
for i:=1 to n do s:=s+exp(2*ln(i));
writeln('tong',n,'so nguyen duong binh phuong=',s:10:2);
readln;
End.
5.6 Viết chương trình tính tổng bình phương của n số lẻ dương đầu tiên.
{VD: n=4 thì tính (1*1)+(3*3)}
Program bt5_6;
Var s:real;
i,n:integer;
Begin
write('nhap n:');
readln(n);
s:=0;
for i:=1 to n do
if i mod 2 <> 0 then s:=s+exp(2*ln(i))
else writeln('khong tinh');
writeln('tong s=',s:10:2);
readln;
End.
5.7 Viết chương trình tính tổng bình phương của n số lẻ dương đầu tiên.
{VD:n=3 thi tinh (1*1)+(3*3)+(5*5)}
var i,n,s:integer;
begin
write('nhap n=');
readln(n);
s:=1;
for i:=2 to 2*n-1 do if i mod 2 = 0 then s:=s+sqr(i+1);
writeln('s= ',s);
readln
end.
5.11 Viết chương trình nhập vào 1 số nguyên rồi đếm số các chữ số của số đó
(VD: 1999 có 4 chữ số)
Program bt5_11;
Var n:longint;
dem:byte;
Begin
write('nhap n:');
readln(n);
dem:=0;
write('so ',n,' co ');
repeat
n:=n div 10;
dem:=dem+1;
until n=0;
writeln(dem,' chu so');
readln;
End.
5.12 Viết chương trình nhập vào 1 số nguyên rồi in ra số đảo ngược của số đó.
Program bt5_12;
Var n:integer;
f:text;
Begin
write('nhap n:');
readln(n);
repeat
write(n mod 10);
n:=n div 10;
until n=0;
readln;
assign(f,'data.out'); rewrite(f);
writeln(f,n);
close(f);
End.
5.13 Viết chương trình nhập vào 2 số nguyên a, b. Tìm ước số chung lớn nhất của chúng
Program bt5_13;
Var r,a,b:integer;
Begin
write('nhap a,b:');
readln(a,b);
while b<>0 do
begin
r:=a mod b;
a:=b;
b:=r;
end;
writeln('uoc so chung lon nhat cua a, b la: ',a);
readln;
End.
5.14 Viết chương trình nhập vào số nguyên dương n. Kiểm tra xem số n có là số nguyên tố không.
Program bt5_14;
Var i,n:integer;
Begin
write('nhap n:');
readln(n);
i:=2;
while n mod i <> 0 do i:=i+1;
if i=n then writeln(n,' la so nguyen to')
else writeln(n,' khong phai la so nguyen to');
readln;
End.
5.15 Viết chương trình nhập vào 1 số nguyên dương n. Kiểm tra xem n có phải là số hòan thiện
không.
Program bt5_15;
Var n,t,i:integer;
Begin
write('nhap n:');
readln(n);
t:=0;
for i:=1 to n-1 do
if n mod i = 0 then t:=t+i;
if t=n then writeln(n,' la so hoan thien')
else writeln(n,' khong phai la so hoan thien');
readln;
End.
5.17 Viết chương trình tìm tất cả các số có 3 chữ số abc sao cho abc = a3+b3+c3
Program bt5_17;
Var a,b,c:longint;
Begin
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
if 100*a+10*b+c=a*a*a+b*b*b+c*c*c then writeln(a,b,c);
readln;
End.
5.18 Viết chương trình tìm tất cả các số có 3 chữ số sao cho tổng tất cả các chữ số bằng tích của
chúng. VD: a+b+c = a*b*c
Program bt5_18;
Var a,b,c:longint;
Begin
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
if a+b+c=a*b*c then writeln(a,b,c);
readln;
End.
5.19 Có 3 loại tờ giấy bạc 500đ, 200đ, 100đ. Viết chương trình tìm tất cả các phương án để có được
số tiền 1700đ từ 3 loại giấy bạc trên
Program bt5_19;
Var a,b,c:integer;
Begin
for a:=0 to 3 do
for b:=0 to 8 do
for c:=0 to 17 do
if a*500+b*200+c*100=1700 then
writeln('so to 500:',a,'; so to 200:',b,'; so to 100:',c);
readln;
End.
5.20 Viết chương trình giải bài toán đố sau:
Trăm trâu trăm cỏ
Trâu đứng ăn nằm
Trâu nằm ăn ba
Ba trâu già ăn một
Hỏi có bao nhiêu trâu đứng, trâu nằm, trâu già?
Program bt5_20;
Var x,y,z:integer;
Begin
for x:=0 to 20 do
for y:=0 to 33-x do
for z:=0 to 100-x-y do
if x+y+z=100 then
writeln('so trau dung:',x,'; so trau nam:',y,'; so trau gia:',z);
readln;
End.
6.2 Viết 1 hàm kiểm tra 1 số nguyên x có phải là số nguyên tố không? Ứng dụng hàm này hãy tìm:
a. Số nguyên tố nhỏ nhất có 3 chữ số.
program bt6_2a;
var i:integer;
function snt(n:integer):boolean;
var i:integer;
begin
i:=2;
while n mod i <> 0 do i:=i+1;
if n=i then snt:=true
else snt:=false;
end;
begin
i:=100;
while (not snt(i)) do i:=i+1;
writeln('snt nho nhat co 3 chu so la:',i);
readln;
end.
b. Số nguyên tố lớn nhất có 3 chữ số.
program bt6_2b;
var i:integer;
function snt(n:integer):boolean;
var i:integer;
begin
i:=2;
while n mod i <> 0 do i:=i+1;
if n=i then snt:=true
else snt:=false;
end;
begin
i:=999;
while (not snt(i)) do i:=i-1;
writeln('snt lon nhat co 3 chu so la:',i);
readln;
end.
6.3 Viết 1 hàm kiểm tra 1 số nguyên x có phải là số chính phương không? Ứng dụng hàm này hãy
in ra màn hình các số chính phương nhỏ hơn 100
program bt6_3;
var i:integer;
function scp(x:integer):boolean;
begin
if sqrt(x)=round (sqrt(x))then scp:=true
else scp:=false;
end;
begin
for i:=1 to 99 do
if scp(i) then writeln(i,'la scp');
readln;
end.
6.4 Viết 1 hàm tính n! Áp dụng hàm này viết chương trình tính:
e = 1 + 1/1! + 1/2! +……+ 1/n!
program bt6_4;
var i,n:integer;
e:real;
function gt(n:integer):longint;
begin
if n=1 then gt:=1
else gt:=gt(n-1)*n;
end;
begin
write('nhap n:');
readln(n);
e:=1;
for i:=1 to n do e:=e+1/gt(i);
writeln('tong e=',e:10:2);
readln;
end.
8.1 Viết chương trình nhập vào một dãy các số nguyên và in max, min của dãy (không sắp xếp
dãy).
Program bt8_1;
Var a: array[1..100] of integer;
i, n, max, min: integer;
Begin
write('Cho biet so phan tu cua day : ');
readln(n);
for i:=1 to n do
begin
write('a[',i,'] = ');
readln(a[i]);
end;
max:=a[1];
min:=a[1];
for i:=2 to n do
begin
if max<a[i] then max:=a[i];
if min>a[i] then min:=a[i];
end;
writeln('max = ',max);
writeln('min = ',min);
readln;
End.
8.2 Viết chương trình nhập vào một dãy các số nguyên, và sắp xếp dãy theo thứ tự giảm dần, in kết
quả ra màn hình.
Program bt8_2;
Var a: array[1..100] of integer;
i, j, n, t : integer;
Begin
write('Cho biet so phan tu cua day : ');
readln(n);
for i:=1 to n do
begin
write('a[',i,'] = ');
readln(a[i]);
end;
for i:=1 to n-1 do
for j:=1 to n-i do
if a[j]<a[j+1] then
begin
t:=a[j];
a[j]:=a[j+1];
a[j+1]:=t;
end;
for i:=1 to n do writeln(a[i]:5);
readln;
End.
8.4 Viết chương trình nhập vào một dãy các số nguyên, và nhập trị x, rồi tìm phần tử đầu tiên trong
dãy có trị bằng x.
Program bt8_4;
Var a:array[1..100] of integer;
i, n, x : integer;
Begin
write('Cho biet so phan tu cua day : ');
readln(n);
for i:=1 to n do
begin
write('a[',i,'] = ');
readln(a[i]);
end;
write('Cho biet tri can tim : ');
readln(x);
i:=1;
while (a[i]<>x) and (i<=n) do i:=i+1;
if i>n then writeln('khong co tri ',x,' trong day')
else writeln('phan tu dau tien co tri = ',x,' la : a[',i,']');
readln;
End.
8.5 Viết chương trình nhập vào một dãy các số nguyên, và nhập trị x, rồi đếm xem trong dãy có mặt
bao nhiêu số x ?
Program bt8_5;
Var a:array[1..100] of integer;
i, n, x, dem : integer;
Begin
write('Cho biet so phan tu cua day : ');
readln(n);
for i:=1 to n do
begin
write('a[',i,'] = ');
readln(a[i]);
end;
write('Cho biet tri x can dem : ');
readln(x);
dem:=0;
for i:=1 to n do if a[i]=x then dem:=dem+1;
writeln('co ',dem,' phan tu ',x,' trong day');
readln;
End.
8.6 Viết chương trình nhập vào một dãy các số nguyên, và đếm số các số dương, âm, bằng không
của dãy.
Program bt8_6;
Var a:array[1..100] of integer;
i, n, demam, demduong, demkhong : integer;
Begin
write('Cho biet so phan tu cua day : ');
readln(n);
for i:=1 to n do
begin
write('a[',i,'] = ');
readln(a[i]);
end;
demam:=0;
demduong:=0;
demkhong:=0;
for i:=1 to n do
if a[i]<0 then demam:=demam+1
else if a[i]>0 then demduong:=demduong+1
else demkhong:=demkhong+1;
writeln('co ',demam,' so am trong day');
writeln('co ',demduong,' so duong trong day');
writeln('co ',demkhong,' so khong trong day');
readln;
End.
8.7 Viết chương trình nhập vào một dãy các số nguyên, tính tổng bình phương các số dương trong
dãy.
Program bt8_7;
Var a: array[1..100] of integer;
i, n, s : integer;
Begin
write('Cho biet so phan tu cua day : ');
readln(n);
for i:=1 to n do
begin
write('a[',i,'] = ');
readln(a[i]);
end;
s:=0;
for i:=1 to n do
if a[i]>0 then s:=s+a[i]*a[i];
writeln('Tong binh phuong cac so duong trong day s= ',s);
readln;
End.
8.8 Viết chương trình nhập vào một dãy, kiểm tra xem dãy có đối xứng không ?
Program bt8_8;
Var a: array[1..100] of integer;
i, n: integer;
Begin
write('cho biet so phan tu cua day :');
readln(n);
for i:=1 to n do
begin
write('nhap a[',i,']=');
readln(a[i]);
end;
i:=1;
while (a[i]=a[n-i+1]) and (i<=n div 2) do i:=i+1;
if i> n div 2 then writeln('Day doi xung')
else writeln('Day khong doi xung');
readln;
End.
Bài 1. Viết CT in ra màn hình các số nguyên từ 1 đến 100 sao cho cứ 10 số thì xuống dòng
Program bai1;
var i:byte;
Begin
for i:=1 to 100 do
begin
write(i:3);
if i mod 10=0 then writeln;
end;
Readln
End.
Bài 2. Viết CT in ra màn hình bảng cửu chương
Program bai2;
Uses crt;
Var i,j:byte;
Begin
Clrscr;
for i:=1 to 10 do
for j:=2 to 10 do
begin
write(j:2,'*',i:2,'=',i*J:2,' ');
if j=10 then writeln;
end;
Readln
End.
Bài 3. Viết CT tìm lời giải cho các bài toán sau
a. Trong giỏ vừa thỏ vừa gà, 100 cái cẳng, 43 cái đầu. Hỏi mấy gà, mấy thỏ?
Program bai3;
Uses crt;
Var ga,tho:byte;
Begin
Clrscr;
for ga:=1 to 43 do
begin
tho:=43 - ga;
if 4*tho+2*ga=100 then writeln('so ga va tho la: ',ga,' ',tho);
end;
Readln
End.
b.Vừa gà vừa chó bó lại cho tròn, 36 con , 100 chân chẵn. Hỏi nhiêu gà, nhiêu chó?
Program bai3b;
Var ga,cho:byte;
Begin
for ga:=1 to 36 do
begin
cho:=36 - ga;
if 4*cho+2*ga=100 then write('so ga va cho la: ',ga,' ',cho);
end;
Readln
End.
Bài 4. Viết chương trình nhập vào hai số nguyên dương và xét xem hai số đó có nguyên tố cùng
nhau hay không?
Program sntcungnhau;
Uses crt;
Var x,y: integer;
Function UCLN(a,b: integer): integer ;
Var r : integer ;
begin
while b<>0 do begin
r := a mod b;
a := b;
b := r;
end;
UCLN := a;
end;
Begin
clrscr;
write('nhap vao so x:');readln(x);
write('nhap vao so y:');readln(y);
if ucln(x,y) = 1 then writeln(x,' va ', y, 'la 2 snt cung nhau')
else writeln(x, 'va', y, 'ko la snt cung nhau');
Readln;
End.

Bài 5. Viết chương trình tìm và in ra màn hình tất cả hoán vị của 12345
(Ví dụ: 12345 12354 12435…).
Program hoanvi;
Uses crt;
Var a,b,c,d,e,dem,d1:integer;
Begin
clrscr;
writeln('Ban doi ti nhe!');
dem:=0; d1:=0;
for a:=1 to 5 do
for b:=1 to 5 do
for c:=1 to 5 do
for d:=1 to 5 do
for e:=1 to 5 do
begin
if (a<>b) and (a<>c) and (a<>d) and (a<>e) and (b<>c)and (b<>d)and
(b<>e)and (c<>d)and (c<>e) and (d<>e) then
writeln(a,b,c,d,e);
d1:=d1+1;
end;
writeln('co ',d1,' so hoan vi cua so 12345');
Readln;
End.
Bài 6. 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"?
Program tuoichatuoicon;
Var a,b,t :integer;
Begin
Repeat
writeln('nhap tuoi cha');
readln(a);
writeln('nhap tuoi con');
readln(b);
Until (a-b)>=25;
t:=a-2*b;
writeln('tuoi cha gap doi tuoi cha sau ',t,' nam');
readln;
End.

You might also like