Hướng dẫn ôn tập Lập trình Pascal cơ bản
CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU
BT_02_13
Nhập vào 3 cạnh a, b, c của tam giác ABC.
a) Tính diện tích tam giác.
b) Tính độ dài các đường cao
c) Tính độ dài các đường trung tuyến
d) Tính bán kính đường tròn ngoại tiếp.
HƯỚNG DẪN
a) Tính diện tích theo công thức Hê-rông:
)cp)(bp)(ap(pS
−−−=
với
)cba(
2
1
p
++=
b) Tính đường cao ứng với cạnh a theo công thức:
a
S2
hah
2
1
S
aa
=⇒=
c) Tính độ dài đường trung tuyến ứng với cạnh a theo công thức:
2
ac2b2
m
begin
write('Nhap 3 canh cua tam giac ');
readln(a,b,c);
p := (a+b+c)/2;
S := sqrt(p*(p-a)*(p-b)*(p-c));
R := (a*b*c)/(4*S);
ha := 2*S/a;
hb := 2*S/b;
hc := 2*S/c;
ma := sqrt(2*sqr(b)+2*sqr(c)-sqr(a))/2;
mb := sqrt(2*sqr(a)+2*sqr(c)-sqr(b))/2;
mc := sqrt(2*sqr(a)+2*sqr(b)-sqr(c))/2;
Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội
1
Hướng dẫn ôn tập Lập trình Pascal cơ bản
writeln('Thong tin ve tam giac: ');
writeln('Dien tich S = ', S:0:5);
writeln('Ban kinh duong tron ngoai tiep R = ', R:0:5);
writeln('Do dai cac duong cao: ');
writeln(' xuong canh a: ha = ', ha:0:5);
writeln(' xuong canh b: hb = ', hb:0:5);
writeln(' xuong canh c: hc = ', hc:0:5);
writeln('Do dai cac duong trung tuyen:');
writeln(' xuong canh a: ma = ', ma:0:5);
writeln(' xuong canh b: mb = ', mb:0:5);
writeln(' xuong canh c: mc = ', mc:0:5);
readln;
end.
BT_02_06:
Nhập 2 số thực x,y, tính rồi in ra màn hình biểu thức:
end.
Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội
2
Hướng dẫn ôn tập Lập trình Pascal cơ bản
BT_02_07:
Lập chương trình tính chu vi và diện tích đường tròn theo bán kính của nó.
HƯỚNG DẪN
Ta cần nhập vào bán kính R của đường tròn rồi tính chu vi và diện tích của nó theo công
thức toán:
R2C
π=
và
2
RS
π=
. Hằng số π được định nghĩa sẵn trong Pascal với tên chuẩn
là pi.
Ta cần khai báo 3 biến thực R, C và S. Thực hiện việc nhập R rồi tính C, S theo các công
thức trên. Sau đó in ra chúng.
Chương trình mẫu:
program BT_03_07;
var
r,c,s : real;
begin
writeln('Chuong trinh tinh chu vi va dien tich hinh tron.');
write('Nhap vao ban kinh r = ');
readln(r);
c := 2 * pi * r;
s := pi * sqr(r);
writeln('Chu vi C = ',c:0:4);
Viết chương trình giải phương trình bậc nhất ax+b=0.
HƯỚNG DẪN
Thuật toán có được theo cách giải trong môn toán:
Nếu a<>0 thì có một nghiệm là x= - b/a,
ngược lại (a=0) thì
nếu b<>0 thì vô nghiệm,
ngược lại (b<>0) thì có mọi số đều là nghiệm.
Rõ ràng là chúng ta có thể dùng lệnh if, và trong trường hợp này <câu lệnh> của if lại là một
lệnh if:
readln(a,b );{ nhập hệ số }
if a=0 then
if b=0 then
writeln('Moi so thuc deu la nghiem')
else
writeln('Phuong trinh vo nghiem')
else
writeln('Phuong trinh co nghiem duy nhat x = ',-b/a:0:5);
Toàn văn chương trình:
program VD_03_02;
var
a,b : real;
begin
writeln('Chuong trinh giai phuong trinh bac nhat ax+b=0 ');
writeln('Nhap hai he so ');
readln(a,b);
if a=0 then
if b=0 then
writeln('Moi so thuc deu la nghiem')
else
writeln('Phuong trinh vo nghiem')
∆±−
=
.
Toàn văn chương trình:
program VD_03_03;
var
a, b, c, d : real;
x1, x2 : real;
begin
writeln('Chuong trinh giai phuong trinh bac hai a*x*x+b*x+c=0');
write('Nhap he so a,b,c: ');
readln(a,b,c);
d := sqr(b) - 4*a*c ;
if d<0 then
writeln('Phuong trinh vo nghiem.');
if d=0 then
writeln('Phuong trinh co nghiem kep: x = ',-b/(2*a):0:5 );
if d>0 then
begin
x1 := (-b + sqrt(d))/(2*a);
x2 := -b/a - x1 ;
writeln('Phuong trinh co 2 nghiem phan biet:');
writeln('x1 = ',x1:0:5);
writeln('x2 = ',x2:0:5);
end;
readln;
end.
VD_03_06
Tính tổng các số tự nhiên từ 1 đến n với n nhập từ bàn phím.
HƯỚNG DẪN
for i := 1 to n do
s := s + i;
writeln('Ket qua: ',s);
readln;
end.
VD_03_07: Dãy số Fibônaxi được định nghĩa như sau:
≥∀+=
==
3)n( fff
1f 1,f
2-n1-nn
21
Viết chương trình in ra các số Fibônaxi với từ 1 đến 20.
HƯỚNG DẪN
Ta dễ dàng tìm ra cách tính: cho i chạy từ 3 đến 20 rồi tính fi theo định nghĩa: fi=fi
-
1
+fi
-2
. Đặt biến f0, f1, f2 đại diện cho fi, fi
-1
, fi
-2
ứng với mỗi giá trị của i, thế thì ta có thể
viết đoạn chương trình tính như sau:
f1 := 1;
f2 := 1;
−
+
=
nn
n
f
2
51
2
51
5
1
).
Toàn văn chương trình:
program VD_03_07;
const
n = 20;
var
i, f0, f1, f2 : integer;
begin
writeln('Chuong trinh tinh cac so Fibonaxi tu 1 den ',n);
f1 := 1;
n
, ta có công thức truy hồi sau:
=
=
.a t t
1 t
1-nn
0
Như vậy cho i chạy từ 1 đến n và tính công thức trên ta sẽ tính t
n
. Cấu trúc for dùng cài đặt
rất thích hợp.
Đoạn chương trình như sau:
t := 1;
for i := 1 to n do t := t * a;
Biến t đại diện cho ti ứng với mỗi i trong lệnh for. Trong câu lệnh t := t * a; biến t ở bên trái
là ti, giá trị t ở bên phải là giá trị trước đó của t, tức là ti
-1
. Câu lệnh viết đúng theo công thức
truy hồi. Xong vòng for i=n và t chính là giá trị tn = an. Ta thông báo kết quả.
Toàn văn chương trình:
program VD_03_08;
var
n,i : integer;
a,t : real;
begin
writeln('Chuong trinh tinh a^n, a thuc, n tu nhien.');
=
=
.ngg
1g
1-nn
0
Và như vậy tương tự VD_03_06 và VD_03_08 ta cũng có chương trình tính như sau:
program VD_03_09;
var
n, i, g : integer;
begin
writeln('Chuong trinh tinh n! ');
write('Nhap (n<8): ');
readln(n);
g := 1;
for i := 1 to n do g := g * i;
writeln('Ket qua: ',n,'! = ',g);
readln;
end.
VD_03_10
Tính gần đúng số e theo công thức chuỗi:
n!
1
...
3!
1
2!
1
1!
+=
==
==
−
.ree
n
r
n
1
.rr
1.r 1,e
n1-nn
1n
1-nn
00
Và từ đó ta có thể viết đoạn chương trình tính dùng vòng lặp for như sau:
Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội
8
Hướng dẫn ôn tập Lập trình Pascal cơ bản
e := 1; r := 1;
for i := 1 to n do begin
r := r / i;
e := e + r;
end;
100
3
35
100
tg
tntd
tgtntd
Từ phương trình thứ hai ta có 5td≤100 và 3tn≤100, suy ra 1≤ td ≤ 20 và 1≤ tn ≤ 33. Số trâu
già: tg=(100-td-tn) phải chia hết cho 3 (vì số bó cỏ bọn trâu già ăn là số nguyên, bằng tg div
3).
Như vậy ta cần tìm các số td trong khoảng 1..20 và tn trong khoảng 1..33 sao cho: tg =(100 -
td - tn) chia hết cho 3 và 5*td + 3*tn + tg div 3 = 100.
Toàn văn chương trình:
program VD_03_14;
var
td,tn,tg : integer;
begin
writeln('Giai bai toan tram trau tram co.');
for td := 1 to 20 do
for tn := 1 to 33 do begin
tg := 100 - td -tn;
if (tg mod 3=0) and (5*td + 3*tn + (tg div 3)=100) then
Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội
9