为啥我的 pascal 程序以错误 207 退出

Posted

技术标签:

【中文标题】为啥我的 pascal 程序以错误 207 退出【英文标题】:Why my pascal program exited with Error 207为什么我的 pascal 程序以错误 207 退出 【发布时间】:2021-06-12 17:30:17 【问题描述】:

我正在尝试编写一个程序来找到这样的矩阵的行列式:

program determinan;
uses crt;
type
        arr=array of array of real;
var
        mat:arr;
        uk:byte;
procedure ukuran(var x:arr;var n:byte);
        begin
                write('Masukkan ukuran matriks : ');readln(n);
                setlength(x,n+1,n+1);
        end;
procedure masuk(var x:arr;n:byte);
        var
                i,j:byte;
        begin
                writeln('Masukkan elemen matriks : ');
                for i:= 1 to n do
                for j:= 1 to n do
                begin
                        write('E(',i,',',j,'):');
                        read(x[i,j]);
                end;
        end;
procedure tulis(x:arr;n:byte;nama:string);
        var
                i,j:byte;
        begin
                writeln('Matriks ',nama,' : ');
                for i:= 1 to n do
                begin
                        for j:=1 to n do
                                write(x[i,j]:0:0,' ');
                        writeln;
                end;
        end;
procedure segitiga(var x:arr;n:byte);
        var
                i,j,k:byte;
                nano :real;
        begin
                for i:=1 to n-1 do
                for j:=i+1 to n do
                begin
                        nano:=x[j,i]/x[i,i];
                        for k:=i to n do x[j,k]:=x[j,k]-nano*x[i,k];
                end;
        end;
function determinan(x:arr;n:byte):real;
        var
                i:byte;
        begin
                determinan:=1;
                for i:=1 to n do
                        determinan:=determinan*x[i,i];
        end;
begin
        clrscr;
        writeln('-----------------------------');
        writeln('Program Menghitung Determinan');
        writeln('-----------------------------');
        ukuran(mat,uk);
        masuk(mat,uk);writeln;
        tulis(mat,uk,'asal');writeln;
        segitiga(mat,uk);
        tulis(mat,uk,'segitiga atas');writeln;
        writeln('Determinan : ',determinan(mat,uk):0:0);
        readkey;
end.

但是,如果我输入带有元素 (1,1,1;1,1,1;1,1,1) 的 3x3 矩阵,它将退出并出现错误 207。如果我尝试输入矩阵,也会发生这种情况相同的列元素。但是,它没有发生在 2x2 矩阵中。请告诉我这种行为的原因是什么,因为我无法资助它

【问题讨论】:

使用调试器并跟踪错误点。 如果你用FPC then your runtime error #207 means "invalid floating point operation"编译它。阅读文档是必须的。 另外,如果您希望我们为您提供帮助,那么让我们尽可能轻松地帮助您当然符合您的最大利益。这包括将“ukuran”、“masuk”、“tulis”、“segitiga”等词翻译成英文! for i:= 1 to n... - 但是你使用动态数组,它们是从零开始的 请不要标记垃圾邮件。您显然不想同时在标准 Pascal、Delphi 和 Free Pascal 下编译和运行此代码。仅添加实际应用于您的帖子的标签。使用误导性标签既浪费您的时间,也浪费我们的时间。删除那些不适用于您的帖子的内容。 【参考方案1】:

这一行: nano:=x[j,i]/x[i,i]; x[i,i] 可能等于 0,在帕斯卡中如果你将一个数字除以 0 ,它将返回错误 207 您的代码应该是这样的: if (x[i,i] 0) 然后 nano:=x[j,i]/x[i,i];

【讨论】:

以上是关于为啥我的 pascal 程序以错误 207 退出的主要内容,如果未能解决你的问题,请参考以下文章

为啥 CoUninitialize 在退出时会导致错误?

"SQL SERVER,错误:207" 如何解决

用vs2019编写c语言程序,明显语法错误为啥不回报错,没有加return 0;

为啥我应该没有错时却出现链接错误

为啥我会收到“无效的列名”?消息 207 级别 16 状态 1 第 14 行

为啥 Matlab 独立应用程序退出并出现错误“TooManyOutputs”?