小问题在Pascal,你能帮忙吗?

时间:2011-01-10 19:16:36

标签: pascal

我用pascal写这个程序 要求用户输入两个数组和常数值,即K. 程序muli K与数组。 然后将答案保存在新数组中 并在新数组中执行一些操作 加法<<工作得很好 减法<<也工作 但是Multi<<<<<<<我试图要求用户输入一个新阵列并执行Muti但仍然存在问题。 也 我希望重复这些操作,直到用户按下退出<<<我无法做到这一点,因为我对pascal并不完美。

如果你能帮助我,我将不胜感激

这是我的代码

program BST6;

const maxN=100;maxM=100;
type mat=array[1..maxN,1..maxM]of integer;
var A,B,c:mat;
    n,m,l,s,i,j,k:integer;
    ch : char;

procedure readMat(var A:mat;var m,n:integer);
begin
for i:=1 to m do
    for j:=1 to n do
        begin
        write('mat[',i,',',j,']=');
        readln(A[i,j]);
        end;
end;

procedure writeMat(A:mat;m,n:integer);
begin
for i:=1 to m do
    begin
    for j:=1 to n do
        write(a[i,j]:4);
    writeln;
    end;
end;

function multK(A:mat;k:integer):mat;
begin
for i:=1 to n do
    for j:=1 to m do
        begin
        B[i,j]:= K*A[i,j];
        end;
multK:=B;
end;

function minus(A,B:mat):mat;
begin
for i:=1 to m do
    for j:=1 to n do
        C[i,j]:=A[i,j]-B[i,j];
minus:=C;
end;

function plus(A,B:mat):mat;
begin
for i:=1 to m do
    for j:=1 to n do
        C[i,j]:=A[i,j]+B[i,j];
plus:=C;
end;

function mult(A,B:mat;m,l,n:integer):mat;
begin
for i:=1 to m do
    for j:=1 to n do
        for k:=1 to l do
            c[i,j]:=c[i,j]+A[i,k]*B[k,j];
mult:=C;
end;

begin
write('input m<=',maxM,'.. m=' );readln(m);
write('input n<=',maxN,'.. n=');readln(n);
readMat(A,m,n);
writeln('input the const K');readln(k);
B:=multK(A,K);
writeln('The matrix A : ');
writeMat(A,m,n);
writeln('The matrix B=K*A : ');
writeMat(B,m,n);
writeln('choose the operation + , - or * ');
readln(ch);


case ch of
'+' : c:=plus(A,B);
'-' : c:=minus(A,B);
'*' : begin
      writeln('input m<=',maxM,'input l<=',maxN);readln(m,l);readMat(A,m,l);
      writeln('input l<=',maxN);readln(n);readMat(B,l,n);
      c:=mult(A,B,m,l,n);
      end;

end;
writeMat(c,m,n);
readln;
end.

1 个答案:

答案 0 :(得分:1)

首先,全局一个字母变量与具有相同名称的函数参数发生冲突是疯狂的。

为什么multK将全局变量B修改为副作用?
为什么minus将全局变量C修改为副作用?
为什么全局整数和索引变量一样? 并且mult更糟糕:它不仅修改C作为副作用,而且它假设C预先包含有意义的值。我认为它需要事先将C初始化为全零。

我的猜测是你的一些副作用以奇怪的方式干扰。但我不想考虑它。首先重构代码。特别要了解如何以及何时使用局部变量。