Kết hợp TOán và Tin
Nói với bạn trẻ yêu Toán và Tin họcLê Mạnh DũngCá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: Procedure 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)UCLN (15,3) = 3 (a = 15; b = 3; UCLN = 3)Sau cùng bạn có thể viết thêmthủ tục sau để xử lý cách biểu diễn nghiệm (trong Pascal không hỗ trợ ký hiệucăn thức bậc hai, bậc 3, dấu gạch ngang phân số ):Procedure Xuly (a, b :interge; c: string);với ví dụ: x1 = 2/3 (a = 2; b= 3; c= x1)Bạn sắp xếp lại các chươngtrình con trên để được một chương trình giải phương trình bậc hai hoàn chỉnh(bạn có thể tham khảo chương trình này ở số báo tháng 6 (21), với bài viết Thiết kế, xây dựng thư viện của người sử dụng chứa các hàm, thủ tục tự tạo ). Bạ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ăngNó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 = 0Ta giải phương trình(2) bằng công thức;ĐặtNếu delta>0 (2) có 1nghiệm đơn: Nếu (2) có 3 nghiệmTừ 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! Sau đây là toàn bộ chươngtrình bằng Pascal (phiên bản 1):ProgramGiai_phuong_trinh_bac3; {Phien ban 1}Label tieptuc;var a,b,c,d: real;w:byteFunction Sqrt3(a:real):real;BeginIf a > 0 then Sqrt3 := exp(ln(a)/3)else if a = 0 then sqrt := 0else sqrt3 := - exp(ln(-a)/3);End;Function Arccos(x:real):real;var tg, k : real;Begin If x = 0 then Arccos := pi/2else 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; Beginbs:=b*b - 4*a*c;If bs >= 0 thenbeginWriteln(' 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;Beginb:=b/a; c:=c/a; d:=d/a; a:=1;p:=c-b*b/3;q:=d+2*b*b*b/27 - b*c/3;k:=q*q+4*p*p*p/27;If k > 0 then beginx1:= 2*sqrt3((-p+sqrt(k))/2) + sqrt3((-q-sqrt(k))/2) - b/3;Writeln('x= ',x1: 3:w);endelsebegint:=3*sqrt(3)*q/(2*p*sqrt(-P)); m:=arccos(t);x1:= 2*sqrt3(-p/3)*cos(m/3) - b/3;x2:= 2*sqrt3(-p/3)*cos((m+2*pi)/3) - b/3;x3:= 2*sqrt3(-p/3)*cos((m-2*pi)/3) - b/3;Writeln('x= ',x1: 3:w);Writeln('x= ',x2: 3:w);Writeln(' x= ',x3: 3:w);end;End;BEGINWriteln('CHUONG TRINH GIAI PHUONG TRINH BAC 3');Writeln('ax^3 + bx^2 + cx + d = 0 voi a <> 0'));tieptuc;Writeln('Vao du lieu a, b, c, d = '); Readln(a, b, c, d);Writeln('Vao so thap phan can lay ='); Readln(w);If a = 0 then beginWriteln('Vao lai du lieu a<>0 ');goto tieptuc;endelsebegin {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}Beginif y = 0 then U:= xelse U:= U(y, x MOD y);End;FunctionScp(n: longint): boolean; {Tim so chinh phuong}vark: longint;Begin k:= round (sqrt (n));if k * k = n then Scp:= trueelse Scq:= false;End;ProceduceRutgon (p, q: longint); {Rut gon phan so}varpl, ql, k: longint;Beginpl:= abs (p); ql:= abs (q);k:= U (p1, q1);if p1 mod q1=0 thenwrite (p1 div q1)elsewrite (p1 div k,' /', q1 div k);End;ProceduceXuli1 (p, q: longint);Beginif ((p>0) and (q>0)) or ((p<0)and(q<0)) thenbeginwrite ('+'); Rutgon (p,q);end elsebeginwrite ('-'); Rutgon (p,q);end; End;ProceduceXuli2 (p, q: longint);Beginif ((p>0) and (q>0)) or ((p<0)and (q<0)) thenbeginwrite('-'); Rutgon(p, q);end elsebeginwrite ('+'); Rutgon (p, q);end;End;ProceduceXuli3 (p, q: longint);Beginif ((p>0) and(q>0)) or ((p<0) and(q<0)) thenbeginwrite ('-'); Rutgon(p, q);end elseRutgon(p, q);End;ProceduceBac1(a, b: longint);var m,n: longint;Beginm:= abs(a); n:= abs(b); [...]... 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 :x 3 + 2x 2 + 3x . 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à. trẻ yêu Toán và Tin họcLê Mạnh DũngCá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