银广夏事件影响:对于输入的方程系数,求二元一次方程组的解.

来源:百度文库 编辑:高考问答 时间:2024/04/29 00:46:13
用PASCAL 编程怎么做?

刚在上一个问题上答完, 给你再贴过来吧.

可以用高斯约旦(Gauss-Jordan)法进行进行消元. 对任意的N元一次方程组都可以解. 我以前回答过, 见http://zhidao.baidu.com/question/1196720.html.

只不过那里只讲了做法, 没有具体用算法实现. 要用pascal编程也简单, 把各系数存入一个二维数组中(对于二元一次方程组, 数组大小为 3 * 2, 三元一次方程组为 4 * 3, 等等), 然后按所介绍的方法进行就可以了.

下面是我刚刚编完的, 请参考一下:

program SolveEquation;
const //为数组的行数与列数, 你可以修改它以适应其它元数的方程组
Rows = 2;
Cols = 3;
var
C: array[1..Rows, 1..Cols] of Real; //系数及常数项
R1, R2: Real;
m,n,i: Integer;
begin
// 输入
Writeln('The Equation is ax + by = c:');
Write(' Input the coefficients (a, b, c) of the 1st equation: ');
Readln(C[1,1], C[1,2], C[1,3]);
Write(' Input the coefficients (a, b, c) of the 2nd equation: ');
Readln(C[2,1], C[2,2], C[2,3]);

//高斯消元
for n := 1 to Rows do
begin
R1 := C[n,n];
for m := 1 to Cols do C[n,m] := C[n,m] / R1; //使每个方程对角线上的系数为1
for i := 1 to Rows do if i <> n then //依次对其它方程的第n项进行消元
begin
R2 := C[i,n];
for m := 1 to Cols do C[i,m] := C[i,m] - C[n,m]*R2;
end;
end;

Writeln('The result is:');
Writeln(' x = ', C[1,3], ' y = ', C[2,3]);
Readln;
end.

其实解二元一次方程组可以简单一些, 这个程序主要是为了演示一下高斯消元
注释使用了双斜杠, 这种C++风格的注释老的版本的pascal编译器不认识 (Free pascal和Delphi认识), 如果编译时出错, 把它们删掉

使用高斯消元法。