Chào các bạn, hôm nay mình sẽ hướng dẫn cách để viết chương trình giải phương trình bậc hai. Đây là một chương trình cơ bản, ở môn toán cấp 2 cũng đã giúp ta có được thuật toán để giải bài này.
Thuật toán : Phương trình bậc 2 có dạng :
Như ta đã biết cách giải thuần túy nhất của phương trình bậc 2 này là sử dụ Delta (Đen ta).
Đầu tiên ta xác định các biến cần gọi để mà khai báo, đó là :
- a,b,c lần lượt là các hệ số
- x1, x2 lần lượt là các nghiệm của phương trình
- d là delta
Tất cả chúng tôi điều để ở kiểu real (kiểu số thực)
Trong bài này, chúng ta nhập lần lượt các hệ số cũng được, nhưng ở đây tôi nhập 1 lúc 3 hệ số và đòi hỏi phải sử dụng đến REPEAT .... UNTIL để đặt điều kiện là a luôn khác 0 (vì nếu a = không thì nó trở về phương trình bình thường rồi).
REPEAT
write('Nhap cac he so a, b, c: ');
readln(a,b,c);
UNTIL a<>0;
Sau đó thì ta tiếp tục gán giá trị delta theo công thức (Bê bình trừ bốn a xê)
d:=sqr(b)-4*a*c;
- Nếu delta < 0 thì phương trình vỡ nợ
- Nếu delta > 0 thì có 2 nghiệm trai gái
- Nếu delta = 0 thì sinh đôi
Trước tiên ta sẽ kiểm tra delta < 0 ???
Sau đó ta mới kiểm tra trường hợp ngược lại, trong trường hợp ngược lại nó đã bao gồm cả > và =. Để thuận tiện ta sử dụng chương trình con được kẹp bởi BEGIN .... END; nhớ là ; nha.
IF d<0 THEN write('Phuong trinh vo nghiem!')
ELSE
BEGIN
x1:=(-b-sqrt(d))/(2*a);
x2:=(-b+sqrt(d))/(2*a);
IF d=0 THEN writeln('Phuong trinh co nghiem kep x = ',x1:5:1)
ELSE writeln('Phuong trinh co 2 nghiem phan biet: ',x1:5:1,x2:5:1);
END;
PROGRAM ptb2;
USES crt;
VAR a,b,c,x1,x2,d:REAL;
BEGIN
clrscr;
REPEAT
write('Nhap cac he so a, b, c: ');
readln(a,b,c);
UNTIL a<>0;
d:=sqr(b)-4*a*c;
IF d<0 THEN write('Phuong trinh vo nghiem!')
ELSE
BEGIN
x1:=(-b-sqrt(d))/(2*a);
x2:=(-b+sqrt(d))/(2*a);
IF d=0 THEN writeln('Phuong trinh co nghiem kep x = ',x1:5:1)
ELSE writeln('Phuong trinh co 2 nghiem phan biet: ',x1:5:1,x2:5:1);
END;
readln;
END.