Tải bản đầy đủ (.doc) (8 trang)

BAI TAP PASCAL BOI DUONG HSGIOI HUYEN

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 (100.59 KB, 8 trang )

Bài tập Pascal BỒI DƯỢNG HỌC SINH GIỎI HUYỆN GV: Trần Minh Thọ
BÀI TẬP CƠ BẢN - Đáp án ++
1. Viết chương trình tính điểm trung bình 3 môn Toán, Lý , Hoá theo hệ số 2,1,1 sau đó xếp loại như sau:
a. Loại Giỏi : ĐTB >= 8.0 và không có môn nào dưới 6,5
b. Loại Khá : 6.5=<ĐTB < 8.0 và không có môn nào dưới 5
c. Loại Trung bình : 5.0 =<ĐTB < 6.5 và không có môn nào dưới 3.5
d. Loại Yếu : Còn lại.
program xep_loai_hoc_sinh;
uses crt;
var t,l,h,tbc, min:real;
xl:string;
begin
write('moi nhap diem toan,ly,hoa: ');
readln(t,l,h);
min:=l;
if min>t then min:=t;
if min>h then min:=h;
tbc:=(t*2+l+h)/4;
if (tbc>=8) and (min>=6.5) then xl:='Gioi';
else if (tbc>=6.5) and (min>=5)
then xl:=’Kha’;
else if (tbc>=5) and (min>=3.5)
then xl:='Trung binh'
else xl:='yeu';
writeln(‘Diem trung binh:’,tbc:0:1,’ Xep loai:’,xl);
readln;
end.
2. VCT nhập vào tháng, năm và cho biết tháng đó có bao nhiêu ngày?
var n,t,ngay:integer;
begin
write('nhap thang:');readln(t);


write('nhap nam:');readln(n);
case t of
1,3,5,7,8,10,12: ngay:=31;
4,6,9,11:ngay:=30;
2: if n mod 4 = 0 then ngay :=29
else ngay:=28;
end;
writeln('Thang:',t,' nam:',n,' co: ',ngay,' ngay');
readln;
end.
3. VCT tìm ước chung lớn nhất và bội chung nhỏ nhất của hai số nhập vào từ bàn phím?
var a,b,min,max,ucln:integer;
begin
write('moi nhap hai so can xac dinh: ');
readln(a,b);
max:=a;
min:=b;
if max mod min=0 then ucln:=min
else if min mod max=0 then ucln:=max
else
begin
repeat
if max>min then max:=max-min
else if max<min then min:=min-max;
until max=min;
ucln:=min;
end;
write('ucln ',ucln);
write('bcnn ',a*b/ucln:1:1);
readln;

end.
Bài tập Pascal BỒI DƯỢNG HỌC SINH GIỎI HUYỆN GV: Trần Minh Thọ
4. VCT giải hai bài toán cổ: 100 trâu 100 bó cỏ và vừa gà vừa chó 36 con 100 chân?
var d,n,g:integer;
begin
for d:=1 to 20 do
for n:=1 to 33 do
for g:=1 to 98 do
if d*5+n*3+g=100
then writeln('Trau dung:',d,' trau nam:',n,' trau gia:',g);
readln;
end.
-----
var i,j:integer;
begin
for i:=1 to 25 do
for j:=1 to 50 do
if (i*4+j*2=100) and (i+j=36) then writeln(i,' con cho, ',j,' con ga.');
readln;
end.
5. VCT xuất các số nguyên tố từ n đến m.(Dùng chương trình con)?
var j,n,m,i:integer;
function ktranto(x:integer):boolean;
begin
ktranto:=true;
for i:=2 to x -1 do
if x mod i=0 then ktranto:=false;
end;
begin
write('moi nhap n,m: ');

readln(n,m);
for j:=n to m do
if ktranto(j) then writeln(j);
readln;
end.
6. VCT xuất các số hoàn hảo từ n đến m.(Dùng chương trình con)?
var x,tu,j,i,n,m:integer;
function ktrahhao(x:integer):boolean;
begin
tu:=0;
ktrahhao:=false;
for i:=1 to x div 2 do
if x mod i=0 then tu:=i+tu;
if tu=x then ktrahhao:=true;
end;
begin;
write('moi nhap n,m: ');
readln(n,m);
for j:=n to m do
if ktrahhao(j) then writeln(j);
readln;
end.
7. VCT tạo một mảng số nguyên gồm n phần tử nhỏ hơn 1000. Sắp xếp mảng theo tứ tự tăng dần và giảm
dần.
const n=10;
var i,j,tam:integer;
a:array[1..n]of integer;
begin
randomize;
for i:=1 to n do a[i]:=random(1000);

for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]<a[j] then
begin
tam:=a[i];
a[i]:=a[j];
Bài tập Pascal BỒI DƯỢNG HỌC SINH GIỎI HUYỆN GV: Trần Minh Thọ
a[j]:=tam;
end;
for i:=1 to n do
writeln(a[i]);
readln;
end.
8. VCT đọc một số có 3 chữ số nhập vào từ bàn phím?
uses crt;
Var s:array[1..9] of string;
a,b,c,n:integer;
begin
clrscr;
repeat
write('nhap so nguyen n:');readln(n);
until (n>99)and(n<1000);
a:=n div 100;
b:=n div 10 mod 10 ;
c:=n mod 10;
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';
if (b=0)and(c=0) then write(s[a],'tram');
if (b=0)and(c<>0)then write(s[a],'tram linh',s[c]);
if (b<>0)and (c=0)then write(s[a],'tram',s[b],'muoi');
if (b<>0)and(c=5)then write(s[a],'tram',s[b],'lam');
if (b<>0)and(c<>0)and(c<>5)then write(s[a],'tram',s[b],'muoi',s[c]);
readln; end.
9. VCT sửa danh từ riêng bò nhập sai. (VD: TraN QuANG kHai  Tran Quang Khai)
uses crt;
var s:string;
i:integer;
begin
write('nhap mot danh tu rieng:');readln(s);
while s[1]=#32 do delete(s,1,1);
while s[length(s)]=#32 do delete(s,length(s),1);
while pos(#32#32,s)<>0 do delete(s,pos(#32#32,s),1);
for i:=1 to length(s) do
if (s[i]>=' A')AND(s[i]<='Z')then s[i]:=chr(ord(s[i])+32) ;
s[1]:=upcase(s[1]);
for i:=1 to length(s) do
if s[i]=#32then s[i+1]:=upcase (s[i+1]);
write('danh tu duoc sua lai la:',s);
readln; end.
10. VCT in ngược các từ của một xâu, mỗi từ in ra trên một dòng và xuất ra số ký tự của mỗi từ?
( vd: Tran Quang Khai  Khai : 4 ký tự
Quang : 5 ký tự
Tran : 4 ký tự

uses crt;
var s,s1,s2,t:string;
a:array[1..100] of string;
b:array[1..100] of integer;
i,j,k:integer;
begin
clrscr;
Bài tập Pascal BỒI DƯỢNG HỌC SINH GIỎI HUYỆN GV: Trần Minh Thọ
write(' Nhap xau s:');readln(s);
s:=s+' ';
for i:= 1 to length(s) do
if s[i]<>#32 then t:=t+s[i]
else begin
inc(j);
a[j]:=t;
t:='';
end;
for i:=1 to j do b[i]:=length(a[i]);
for k:=i downto 1 do writeln(a[k]:20,' :',b[k]:4,' ky tu');
readln;
end.
11. VCT tách một xâu S ra thành 4 xâu: S1: chứa các chữ cái in HOA, S2: chứa các chữ cái thường; S3 chứa
các số 09; S4 chứa các ký tự khác( :;><?/’”!@#$%^&*...)
uses crt;
var hoa,thuong,so:set of char;
s,s1,s2,s3,s4:string;
i:integer ;
begin
clrscr;
write('nhap xau s:');readln(s);

hoa:=['A'..'Z'];
thuong:=['a'..'z'];
so:=['0'..'9'];
for i:=1 to length(s) do
if s[i] in hoa then s1:=s1+s[i]
else if s[i] in thuong then s2:=s2+s[i]
else if s[i] in so then s3:=s3+s[i]
else s4:=s4+s[i];
writeln(s1:6);
writeln(s2:6);
writeln(s3:6);
writeln(s4:6);
readln;
end.
12. VCT làm thay đổi chức năng phím CAPLOCK, khi tắt caplock ta gõ chữ cái thì xuất hiện chữ cái hoa,
ngựơc lại khi bật đèn caplock ta gõ chữ cái thì xuất hiện chữ cái thường..
uses crt;
var hoa,thuong:string;
ch,t,h:char;
Begin
clrscr;
for t:='a'to'z'do thuong:=thuong+t;
for h:='A'to'Z'do hoa:=hoa+h;
repeat
ch:=readkey;
if pos(ch,thuong)<>0 then ch:=upcase(ch)
else if pos(ch,hoa)<>0 then ch:=chr(ord(ch)+32);
write(ch);
until ch=#13;
end.

13. VCT nhập các kí tự từ bàn phím không cho hiện ký tự này lên mà chỉ hiện các dấu ‘*’ như kiểu mật
khẩu. Hỏi có hiện mật khẩu không nếu có thì xuất mật khẩu vừa nhập ra.
uses crt;
var s:string;
ch,tl:char;
Begin
clrscr;
write('Nhap mat khau:');
Bài tập Pascal BỒI DƯỢNG HỌC SINH GIỎI HUYỆN GV: Trần Minh Thọ
repeat
ch:=readkey;
write('*');
s:=s+ch;
until ch=#13;
writeln;
write('Co hien mat khau khong(c/k):');readln(tl);
if upcase(tl)='C' then write(' Mat khau la:',s);
readln;
end.
14. VCT đổi một số <4000 ra số La Mã ( L :50; C:100; D:500; M:1000 - vd:2364  MMCCDLXIV)
var a,x,y,w,z:integer;
n: array [0..3] of string;
t: array [0..9] of string;
c: array [0..9] of string;
d: array [0..9] of string;
begin
n[1]:='C';n[2]:='CC';n[3]:='CCC';
t[1]:='M';t[2]:='MM';t[3]:='MMM';t[4]:='MD';
t[5]:='D';t[6]:='DM';t[7]:='DMM';t[8]:='DMMM';t[9]:='MC';
c[1]:='X';c[2]:='XX';c[3]:='XXX';c[4]:='XL';

c[5]:='L';c[6]:='LX';c[7]:='LXX';c[8]:='LXXX';c[1]:='XM';
d[1]:='I';d[2]:='II';d[3]:='III';d[4]:='IV';
d[5]:='V';d[6]:='VI';d[7]:='VII';d[8]:='VIII';d[1]:='IX';
{I$-}
repeat
write('moi nhap so: ');
readln(a);
until (a<4000) and (IOResult=0);
{I$+}
x:=a div 1000;
y:=a mod 1000 div 100;
w:=a mod 100 div 10;
z:=a mod 10;
write(n[x],t[y],c[w],d[z]);
readln;
end.
15. Viết chương trình điều chỉnh một số nguyên bò nhập sai từ bàn phím. Sau đó sẽ cho biết số nhập sai và số
đã sửa nếu người sử dụng yêu cầu.
Ví dụ: số nhập sai là: 23hdj43jj, chương trình sẽ sửa lại là:2343
var s,s1:string;
i,j:integer;
so:set of char;
tloi:char;
begin
readln(s);
so:=['0'..'9'];
for i :=1 to length(s) do if s[i]in so then s1:=s1+s[i];
write('Co hien so khong (c/k)');readln(tloi);
if upcase(tloi)<>'C' then write('Tam biet')
else if length(s1)<length(s)then write('Ban nhap so sai: ',s,' sua lai la:

',s1)
else write('Ban nhap so chinh xac:',s);readln;
end.
16. Nhập một xâu s bao gồm số và kí tự, in ra xâu đã sắp xếp số theo thứ tự tăng dần còn vò trí các kí tự vẫn
giữ nguyên?
Ví dụ: nhập: abc6ghj7kkkkk1hhhh9
Kết quả: abc1ghj6kkkkk7hhhh9
var a:array[1..100]of integer;

×