Kết hợp TOán và Tin
Trang 1Nó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ỉ cần bạn có kiến thứcsơ cấp về lập trình bằng ngôn ngữ như Pascal chẳng hạn, là bạn có thể viết đượcdễ dàng Nhưng nếu bạn muốn viết chương trình giải phương trình bậc hai, đưa racác nghiệm đúng, kể cả trường hợp chứa căn thức, là điều không dễ dàng nữa!Bạn phải giải quyết hàng loạt vấn đề nảy sinh: như trên đã nói, để tách biệtlúc có nghiệm hữu tỷ, lúc
có nghiệm vô tỷ, bạn phải làm cho máy tính hiểu đượcdetal (r)khinào là số chính phương, khi nào là số không chính phương Muốn vậy bạn phảiviết chương trình con về điều này, chẳng hạn: ta có thể đặt tên thủ tục:
Trang 2Procedure Can(a:integer; varb, c: integer);
ví dụ:
Khi c = 1 thì a là số chínhphương, suy ra phương trình có nghiệm hữu tỷ
Khi c khác 1 thì a không làsố chính phương, suy ra phương trình có nghiệm vô tỷ
Tiếp theo, bạn phải viếtchương trình con để rút gọn phân số, chẳng hạn thủ tục sau:
Procedure Rutgon(a,b:integer; var c, d : integer);
với ví dụ:
Liên quan đến rút gọn phân số(bạn không thể để phân số dưới dạng chưa tối giản), là việc tìm ước số chunglớn nhất của hai số nguyên, vì vậy bạn lại phải viết chương trình con dạng hàm,chẳng hạn như:
Function UCLN (a, b:interger): interger;
với ví dụ: UCLN (6,4) = 2(a=6; b = 4; UCLN = 2)
Trang 3Bạn đã được học qua phổthông? Bạn đã gặp giải phương trình bậc ba? Bạn không có được thuật giải tửtế như phương trình bậc hai? Bạn phải mò mẫm dự đián nghiệm bằng các phươngpháp đặc biệt, rồi phân tách chúng thành dạng tích để tìm nghiệm? Bạn tìm
đượ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 :x3 + 2x2 + 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: ax3 + b'x2 + 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:
x3 + bx2+ cx + d = 0 (1)
(2)
Đặt được phương trìnhbậc 3 khuyết x2: X3 + pX+ q = 0
Ta giải phương trình(2) bằng công thức;
Đặt
Nếu delta>0 (2) có 1nghiệm đơn:
Trang 4Nếu (2) có 3 nghiệm
Từ các nghiệm của (2) ta suyra các nghiệm của (1)
Dựa vào thuật giải phươngtrình bậc 3 trên, bạn có thể viết được chương trình giải phương trình bậc 3 vớicác nghiệm số thực với tuỳ chọn số chữ số thập phân gần đúng, kể cả căn thứchay dạng lượng giác
Vì bài báo có hạn, nên chúngtôi không thể phân tích hết các bước giải Chỉ xin nêu ra 2 chương trình (phiênbản 1 và phiên bản 2 sau) để bạn đọctham khảo:
Với phiên bản 1, bạn có thểtìm nghiệm dễ dàng một phương trình bậc 3 với các hệ số thực tuỳ chọn, số chữsố thập phân của nghiệm cũng tuỳ chọn
Với phiên bản 2, bạn có thểtìm các nghiệm đúng của phương trình bậc 3 với các hệ số nguyên dưới dạng sốhữu tỷ, căn thức bậc 3 hoặc dạng lượng giác; bạn đọc dễ dạng hiểu được bài toánchúng tôi đã nêu ở (*) và nếu cần, bạn còn có vô vàn bài toán tương tự như thế,bởi sự tuyệt vời của các chương trình Tin học: giải quyết tức thời và hàng loạtcác bài toán trong nháy mắt !
Bạn đọc thân mến! Bằng lòngnhiệt tình suốt 30 năm qua, băngd kết quả của 2 phiên bản 1
và 2, giờ đây tôicó thể ăn ngon ngủ yên mà không gặp ác mộng khi giải phương trình bậc 3nữa, vì tôi đã giải được trọn vẹn bài toán Giải phương trình bậc 3 tổng quát bằng Tin học Tôi nghĩ rằng có niềm tin và lòng ham mê khoa học, nhất định côngsức ta bỏ ra sẽ được đền bù! Chúc các bạn trẻ thành công!
Trang 5Sau đây là toàn bộ chươngtrình bằng Pascal (phiên bản 1):ProgramGiai_phuong_trinh_bac3; {Phien ban 1}
Trang 6else
begin
t:=3*sqrt(3)*q/(2*p*sqrt(-P));
Trang 7Writeln('Vao du lieu a, b, c, d = '); Readln(a, b, c, d);
Writeln('Vao so thap phan can lay ='); Readln(w);
Trang 11if b mod a=0 then
x1:=x div U(x, y);
y1:=y div U(x, y);
a1:=a div y;
b1:=(b+a1*x) div y;
c1:=(c+b1*x) div y;
End;
ProceduceBac2 (a, b, c: longint);
vari, j, dem, x, y, x1, y1, bs, t, a1, b1, c1: longint;
Trang 12else if a-b+c=0 then
begin writeln('x= -1'); Bac1 (a, c);inc(dem); endelse
begin
for i:= -abs (c) to abs (c) do
for j:= 1 to abs (a) do
if (a*i*i + b*i*j + c*j*j=0) then
writeln('x = ', xdiv y);
Chia (a, b, c, d, x1,y1, a1, b1, c1);
Trang 13writeln ('x = -',abs(x1),'/', abs(y1));
Chia (a, b, c, d, x1,y1, a1, b1, c1);
Trang 14writeln('x= - can (' , bs div 4,' )');
writeln( x= + can (' , bs div 4,' )' );
end;
end;
end else
begin
writeln ('x= (' ,-b,' - can (' , bs,' ):' , 2*a);
writeln ('x= (',-b,' + can (' , bs,'):' , 2*a);
ProceduceBac3 (a, b, c, d: longint);
vari, j, dem, x1, y1, a1, b1, c1, x, y: longint;
Trang 15writeln ('x=', x div y);
Chia (a, b, c, d, x1, y1, a1, b1,c1);
Trang 16q2:= 27*a*a*a; write('q1=', q1,' /', q2,'='); Xuli1(q1, q2);
f1:=27*a*ă27*a*a*d*d - b*b*c*c + 4*b*b*b*d - 18*a*b*c*d + 4*a*c*c*c);f2:=729*sqr(a*a*a);
write('Delta=', fi,'/', f2,'='); Xuli1(f1, f2);
Trang 17write('x= can3(('); Xuli3(q1, 2*q2); write('+ can2('); Rutgon(f1, 4*f2);write('))+ can3(('); Xuli3(q1, 2*q2); write('- can2('); Rutgon(f1, 4*f2);write('))'); Xuli2(b, 3*a);
endelse
begin
write('x= can3(('); Xuli3(q1, 2*q2); write ('+ can2('); Rutgon(f1, 4*f2);write(')) + can3(('); Xuli3(q1, 2*q2); write ('- can2('); Rutgon(f1, 4*f2);write('))');
Trang 18write(') '); if b<>0 thenXuli2 (b, 3*a);
Trang 19write('Voi cos', chr(224), ' = ' ); Xuli1(3*q1*p2*1, 2*q2*p1);write(') can2('); Rutgon(1, p1);
Trang 20writeln(' CHUONGTRINH GIAI PHUONG TRINH BAC 3' );
writeln(' Dangax^3 + bx^2 + cx + d = 0 voi a, b, c, d la cac so nguyen ');write(' Vaodu lieu a, b, c, d = ' ); readln(a, b, c, d);
Trang 21end;End;readlnEND.