Nói với bạn trẻ yêu Toán và Tin học
Lê Mạnh Dũng
Cách đây 30 năm, chúng tôibằng lứa tuổi bạn trẻ bây giờ, mơ ước được cắp sách tới trường
học tập nóichung và học toán nói riêng. Nói là mơ ước là điều đúng, bởi ngày ấy cả nước
tacó chiến tranh, miền Bắc chống chiến tranh phá hoại của giặc Mỹ, miền Nam tiếnhành
cuộc chiến tranh giải phóng dân tộc khỏi xâm lược Mỹ và bè lũ tay sai.Tuổi trẻ chúng tôi
ngày ấy có hai nhiệm vụ: cầm súng bảo vệ tổ Quốc và học tậpđể sau này xây dựng đất
nước. Còn ở lại học tập chúng tôi ra sức rèn luyện trítuệ của mình. Khi lên đường ra trận,
chúng tôi hoàn thành nhiệm vụ của ngườilính. Trên đường ra trận ngày ấy, ngoài ba lô,
khẩu súng của người lính, chúngtôi còn có những bài thơ hay, những bài toán khó theo
bước chân người lính vốnlà học sinh, sinh viên ngày ấy. Mấy chục năm qua, nhưng những
suy nghĩ về làmtoán ngày ấy, cho đến làm toán, làm tin học của ngày hôm nay, vẫn là nỗi
niềmđam mê của chúng tôi, mặc dù chúng tôi bây giờ không còn trẻ nữa! Bài viết
nàychúng tôi muốn gửi đến bạn trẻ lòng nhiệt tình của chúng tôi học toán thời đãqua và
học toán cùng với tin học của ngày hôm nay!
Ngày ấy, khi chúng tôi học vềphương trình bậc hai, với thuật giải rõ ràng, tìm được
nghiệm cụ thể, nhưngtrong lòng vẫn chưa hết băn khoăn: kỳ lạ thật, lúc thì có nghiệm hữu
tỷ, lúcthì có nghiệm vô tỷ (chưa căn). Suy nghĩ này dẫn chúng tôi phải nghiên cứu kỹvề
biệt số detal của phương trình bậc hai (có nghiệm hữu tỷ khi detal là sốchính phương, có
nghiệm vô tỷ thì ngược lại). Những suy nghĩ này về sau giúpích cho chúng tôi rất nhiều
trong lập trình một số bài toán.
Đúng là làm đi làm lại mộtcông việc như giải phương trình bậc hai với các hệ số đã cho,
thật là buồn tẻ.Ngày ấy chúng tôi mơ ước có được máy nào đó thay cho công việc tính toán
tẻnhạt của mình. Bạn giờ đây có thể tin học hoá bài toán giải phương trình bậc2 này bằng
nhiều cách khác nhau: sử dụng các chương trình tin học có sẵn trêncác máy tính, kể cả máy
tính bỏ túi, hoặc tự mình viết chương trình bằng mộtngôn ngữ lập trình cụ thể! Nhưng
ngày ấy, cách đây hơn 30 năm, cho dù trí tưởngtượng của chúng tôi có phong phú như thế
nào, thậm chí có nằm mơ, chúng tôicũng không thể hình dung được tin học của ngày hôm
nay! Ngày ấy, làm sao có thểnghĩ đến thuật ngữ: Tin học, vi tính rồi đến xa lộ thông tin
như ngày nay!Bạn trẻ bây giờ thật hạnh phúc!
Viết chương trình giải phươngtrình bậc hai, đưa ra các nghiệm thực là điều đơn giản. Chỉ
đượcnghiệm hay không, thành công hay thất bại, phụ thuộc rất nhiều vào các hệ số đãcho
của bài toán! Bạn may mắn thì thành công, bạn không may mắn thì thất bại!Chả dấu gì
bạn, ngày còn học phổ thông, cứ gặp giải phương trình bậc 3 là tôithấy nản lòng rồi, vì tôi
đâu có được thuật giải về loại này! Bạn đã gặp bàitoán này chưa: chứng minh rằng:
là nghiệm của phương trình :x
3
+ 2x
2
+ 3x + 4 (*)
x chứa nhiều lớp căn thế này,làm bạn nản lòng chăng
Nói tóm lại, đúng là ácmộng nếu bạn không được trang bị tốt về kiến thức giải phương
trình bậc 3 màvẫn phải đương đầu với nó!
Sách giáo khoa phổ thôngkhông đề cập đên thuật giải tổng quát phương trình bậc 3, có lẽ
do sự phức tạpcủa thuật giải. Bạn có thể tìm thấy thuật giải chúng ở một số sách chuyên
khảo.Tiện bài viết này tôi cũng xin nêu tóm tắt thuật giải để bạn đọc tiện theo dõi:
Phương trình bậc 3 tổng quátcó dạng: ax
3
+ b'x
2
+ c'x + d' = 0 (a khác 0); a, b', c',d' thuộc R)
Chia cả hai vế của phươngtrình trên cho a, được:
x
3
+ bx
2
+ cx + d = 0 (1)
(2)
Đặt được phương trìnhbậc 3 khuyết x
2
: X
Begin
If a > 0 then Sqrt3 := exp(ln(a)/3)
else if a = 0 then sqrt := 0
else sqrt3 := - exp(ln(-a)/3);
End;
Function Arccos(x:real):real;
var tg, k : real;
Begin
If x = 0 then Arccos := pi/2
else
begin
tg := sqrt(1 - x*x)/abs(x);
If x > 0 then Arccos := arctan(tg) else Arccos := pi arctan(tg);
end;
End;
Procedure Bac2(a,b,c:real);
var bs:real;
Begin
bs:=b*b - 4*a*c;
If bs >= 0 then
begin
Writeln(' x= ',(-b-sqrt(bs))/(2*a):3:w);
Writeln(' x= ',(-b+sqrt(bs))/(2*a):3:w);
end;
End;
Procedure Bac3(a,b,c,d:real);
var p, q, m, t, k,x1,x2,x3:real;
Begin
b:=b/a; c:=c/a; d:=d/a; a:=1;
p:=c-b*b/3;
else
begin {1}
Writeln('Nghiem:');
If d<>0 then Bac3(a,b,c,d)
else {d = 0}
begin {2}
Writeln('x= 0');
If c<>0 then Bac2(a,b,c)
else {c = 0}
If b<>0 then Writeln('x= ',-b/a: 3:w);
end; {2}
end; {1}
Readln;
END.
Chương trình Pascal giảiphương trình bậc 3 - Phiên bản 2:
ProgramGiai_phuong_trinh_bac3; {Phien ban 2}
h = 10E + 8;
a, b, c, d: longint;
FunctionU (x, y: longint): longint; {Tim uoc so chung lon nhat}
Begin
if y = 0 then U:= x
else U:= U(y, x MOD y);
End;
FunctionScp(n: longint): boolean; {Tim so chinh phuong}
vark: longint;
Begin