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

Một số bài tập nâng cao NNLT Pascal

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 (378.44 KB, 237 trang )

Tuyển chọn một số bài toán tin cơ bản

Giới thiệu
Trong tài liệu này tuyển chọn một số bài toán tin cơ bản ở nhiều nguồn khác nhau. Nó thường xuất
hiện trong các kỳ thi học sinh giỏi các cấp.
Các bài tập trong tài liệu này tương đối đơn giản. Không sử dụng bất kỳ một thuật toán đặc biệt
(đệ quy - quay lui, quy hoạch động, tham lam ...) nào, mỗi bài có thể có nhiều cách giải khác nhau.
Nhằm mục đích ôn lại các loại cấu trúc dữ liệu đơn giản và mối tương quan giữa các cấu trúc này.
Nhằm hình thành tư duy lập trình bước đầu cho bạn đọc.
Để có thể tham khảo tốt nhất về tài liệu này các bạn cần đọc thêm kiến thức về chương trình con,
nhập xuất dữ liệu bằng tệp văn bản.
Nếu cảm thấy thú vị các bạn có thể tham khảo thêm một số tài liệu sau:
o Tuyển chọn 100 bài tập lập trình cơ bản (code pascal và c++).
o Tuyển chọn 50 bài toán đệ quy - quay lui - vét cạn (code pascal và c++).
o Tuyển chọn 50 bài toán quy hoạch động (code pascal và c++).
o Tuyển chọn 50 toán đồ thị (code pascal và c++).

Trần Văn Sĩ

Page 1


o

Tuyển chọn 20 bài toán về cấu trúc dữ liệu đặc biệt.
Cấu trúc cơ bản, If... Then... Else

Bài 1: Chữ số
Viết chương trình cho biết chữ số hàng nghìn, hàng trăm, hàng chục, hàng đơn vị của một số có 4
chữ số.
Dữ liệu vào: Lưu trong tệp ChuSo.inp một số nguyên dương có 4 chữ số.


Dữ liệu ra: Ghi vào tệp ChuSo.out có cấu trúc như ví dụ dưới đây.
Ví dụ:
ChuSo.inp
1234

ChuSo.out
Chu so hang nghin: 1 Chu so hang
tram: 2 Chu so hang chuc: 3

Chương trình:
Program ChuSo;
Var
f i , f o : text;
n,Nghin,Tram,Chuc,DonVi:integer;
Begin assign( f i , ' C h u S o . i n p ' ) ;
close( f i ) ;

reset( f i ) ; r e a d ( f i , n ) ;
n:=n mod 10 00;
n:=n mod 10 0;
DonVi:=n mod 10;

Nghin:=n div 1000;
Tram:=n div 100;
Chuc:=n
rewrite( f o ) ;

div

10;


assign( f o , ’ C h u S o . o u t ’ ) ;

writeln(fo,’Chu

so hang nghin:

’,Nghin);

writeln(fo,’Chu

s o hang t r a m : ’

writeln(fo,’Chu

s o hang chuc:’ , C h u c ) ;

writeln(fo,’Chu

s o hang don vi:

, Tr a m ) ;
’ , D o n Vi ) ;

close( f o ) ;
End.
Bài 2: Hình chữ nhật
Tính diện tích và chu vi hình chữ nhật
Dữ liệu vào: Lưu trong tệp Hcn.inp hai số nguyên dương (<104) thể hiện chiều dài và chiều rộng của
hình chữ nhật.

Dữ liệu ra: Ghi vào tệp Hcn.out chu vi và diện tích hình chữ nhật.
Ví dụ:
Hcn.out
Hcn.inp
56

22 30


Chương trình:
Program HCN;
Var
fi,fo:text;
a , b , C V, D t : l o n g i n t ;
Begin


assign( f i , ’ H c n . i n p ’ ) ;
reset( f i ) ;
read(fi,a,b);
close( f i ) ;
Dt:=a*b;
Cv:=(a+b)*2;
assign( f o , ’ H c n . o u t ’ ) ;
rewrite( f o ) ;
w r i t e ( f o , C v, ’ ’ , D t ) ;
close( f o ) ;
End.
Bài 3: Tam giác
Kiểm tra ba số nguyên có thể tạo thành 3 cạnh của một tam giác hay không? Nếu có thì tính chu vi

và diện tích của tam giác đó.
Dữ liệu vào: Lưu trong tệp Tamgiac.inp ba số nguyên dương (<104).
Dữ liệu ra: Ghi vào tệp Tamgiac.out với cấu trúc như sau:
+ Nếu ba số nguyên không tạo thành 3 cạnh của tam giác thì ghi “No”.
+ Nếu tạo thành thì ghi ra chu vi và diện tích của tam giác.
Ví dụ:
Ta m g i a c . i n p
2 3 4
Ta m g i a c . i n p
2 3 6

Ta m g i a c . o u t
9 2.90
Ta m g i a c . o u t
No

Chương trình:
Program Tamgiac;
Var

fi,fo: text;
a , b , c , C V: l o n g i n t ;
Dt,p: real;
K t : boolean;

Begin assign( f i , ’ Ta m g i a c . i n p ’ ) ;
reset( f i ) ; r e a d ( f i , a , b , c ) ;
close( f i ) ;
if (a+b>c)and(b+c>a)and(c+a>b)then Kt:=true else Kt:=false;
i f ( k t = t r u e ) then Begin

Cv:=a+b+c; p : = C v / 2 ;
Dt:=sqrt(p*(p-a)*(p-b)*(p-c));
End;
assign( f o , ’ Ta m g i a c . o u t ’ ) ; rewrite( f o ) ;
i f ( K t = f a l s e ) then w r i t e ( f o , ’ N o ’ ) ; i f ( K t = t r u e ) then w r i t e ( f o , C v, ’
’ , D t : 4 : 2 ) ; close( f o ) ;


End.
Bài 4: Phương trình bậc hai.
Tìm nghiệm của phương trình bậc hai ax2+bx+c=0 (a^0).
Dữ liệu vào: Lưu trong tệp Ptb2.inp 3 số thực lần lượt là 3 hệ số a,b,c.
Dữ liệu ra: Ghi vào tệp Ptb2.out với cấu trúc như sau:
+ Ghi “Ptvn” nếu phương trình vô nghiệm.
+ Ghi hai nghiệm x1, x2 (nếu là nghiệm kép thì ghi hai lần).
Ví dụ:
Ptb2.inp
2 3 4
Ptb2.inp
2 4 2
Ptb2.inp
3 9 6

Ptb2.out
Ptvn
Ptb2.out
-1.00 -1.00
Ptb2.out
-1.00 -2.00


Chương trình:

x1:=(-b+sqrt(Delta))/(2*a);
x2:=(-b-sqrt(Delta))/(2*a);
End;
assign( f o , ’ P t b 2 . o u t ’ ) ;
rewrite( f o ) ;
i f ( D e l t a < 0 ) then w r i t e ( f o , ' P t v n ' ) ; i f ( D e l t a > = 0 ) then
Program P t b 2 ;
Var
fi,fo: text;
a,b,c,Delta:
longint;
x1,x2: real;
Begin assign( f i , ' P t b 2 . i n p ' ) ;
reset( f i ) ;
read(fi,a,b,c);
close( f i ) ;
Delta:=b*b4*a*c;
i f ( D e l t a > = 0 ) then
Begin
write(fo,x1:4:2,’
’,x2:4:2);
close( f o ) ;
End.
Bài 5: Karaoke
Một điểm kinh doanh dịch vụ KARAOKE mở cửa từ 9h00 đến 23h00 tất cả các ngày trong
tuần. Cách thức tính tiền của điểm KARAOKE này như sau:
+ Từ thứ 2 đến thứ 6: Từ 9h00 đến 14h00 giá 40.000đ/1 giờ, từ 14h00 đến 23h00 giá
50.000đ/1 giờ. Nếu khách hàng sử dụng nhiều hơn 3 giờ thì mỗi giờ tiếp theo sau giờ thứ 3 được giảm

giá 30% so với đơn giá.
+ Thứ 7, Chủ nhật: Giá 60.000đ/1 giờ.
Dữ liệu vào: Lưu trong tệp karaoke.inp với cấu trúc:


Tuyen chon mot so bài toan tin ca ban

+ Dòng thứ
nhất: Lưu một
số nguyên duy
nhất nằm trong
phạm vi từ 2
đến 8 cho biết
là ngày thứ
mấy trong tuần
(từ thứ hai đến
chủ nhật).
+ Dòng

Bùi Hong Dân

Page 6


Tuyen chon mot so bài toan tin ca ban

thứ hai: Lưu 2
số nguyên nằm
trong phạm vi
từ 9 đến 23. Số

nguyên thứ
nhất cho biết
giờ bắt đầu sử
dụng dịch vụ,
số nguyên thứ
hai cho biết giờ
kết thúc sử

Bùi Hong Dân

Page 7


Tuyen chon mot so bài toan tin ca ban

dụng dịch vụ.
Hai số nguyên
cách nhau một
khoảng trắng
và số nguyên
thứ hai luôn
lớn hơn số
nguyên thứ
nhất.
Dữ liệu ra:
Lưu vào

Bùi Hong Dân

Page 8



Tuyen chon mot so bài toan tin ca ban

tệp
karaoke.out
1 số
nguyên duy
nhất cho
biết số tiền
khách hàng
phải trả để
sử dụng
dịch vụ.
Yêu cầu: Viết

Bùi Hong Dân

Page 9


Tuyen chon mot so bài toan tin ca ban

chương trình
nhập dữ liệu từ
tệp karaoke.inp
và ghi kết quả
ra tệp
karaoke.out.
Ví dụ:

karaoke.inp
5
9 13

Bùi Hong Dân

karaoke.out
148000

Page 10


Tuyen chon mot so bài toan tin ca ban

Giải thích:
148000 =
(3*40000)+
(1*400001*30%*40000)
Chương
trình:
Program
Karaoke;
Va r

Bùi Hong Dân

Page 11


Tuyen chon mot so bài toan tin ca ban


f
i
,
f
o
:
t
e
x
t
;

Bùi Hong Dân

Page 12


Tuyen chon mot so bài toan tin ca ban

g
b
d
,
g
k
t
,
t
h

u

Bùi Hong Dân

Page 13


Tuyen chon mot so bài toan tin ca ban

,
t
g
:
b
y
t
e
;
t

Bùi Hong Dân

Page 14


Tuyen chon mot so bài toan tin ca ban

i
e
n

:
l
o
n
g
i
n
t
;

Bùi Hong Dân

Page 15


Tuyen chon mot so bài toan tin ca ban

Begin
assign( f i , '
karaoke.i
np'
)
;
r
e
s
e
t

Bùi Hong Dân


Page 16


Tuyen chon mot so bài toan tin ca ban

(
f
i
)
;
r
e
a
d
l
n

Bùi Hong Dân

Page 17


Tuyen chon mot so bài toan tin ca ban

(
f
i
,
t

h
u
)
;
r
e

Bùi Hong Dân

Page 18


Tuyen chon mot so bài toan tin ca ban

a
d
l
n
(
f
i
,
g
b
d
,

Bùi Hong Dân

Page 19



Tuyen chon mot so bài toan tin ca ban

g
k
t
)
;
c
l
o
s
e
(

Bùi Hong Dân

Page 20


Tuyen chon mot so bài toan tin ca ban

f
i
)
;
t
g
:

=
g
k
t

Bùi Hong Dân

Page 21


Tuyen chon mot so bài toan tin ca ban

g
b
d
;
if

Bùi Hong Dân

(
t
h
u
>
=

Page 22



Tuyen chon mot so bài toan tin ca ban

2
)
a
n
d
(
t
h
u
<

Bùi Hong Dân

Page 23


Tuyen chon mot so bài toan tin ca ban

=
6
)
t
h
e
n
B
e
g


Bùi Hong Dân

Page 24


Tuyen chon mot so bài toan tin ca ban

i
n
if
gkt<=14
then
if tg<=3 then
tien:=tg*40
000
lse
tien:=3

Bùi Hong Dân

e

Page 25


×