2011-01-10 34 views
-1

我寫此程序帕斯卡 ,其要求用戶輸入兩個陣列和恆定的值,其爲K 程序木裏K的陣列。 然後保存在新的數組 的答案,並在新的數組做一些操作 此外< <工作做好 減法< <也行 但在多< <我想要求用戶輸入一個新的數組的問題,做Muti但仍然有問題。 ALSO 我想這些操作反覆進行,直到用戶按下退出< < <,因爲我不是完美的與帕斯卡爾我不能做這個選擇。小問題在帕斯卡爾,你能幫忙嗎?

我將不勝感激,如果你能幫助我

這是我的代碼

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

首先,你有什麼問題?清楚說明。它是一個編譯錯誤還是某種運行時錯誤,在這兩種情況下具體是什麼?其次,你是否可以將這個縮減到更短,但仍然以相同的方式失敗?這不僅使任何人試圖幫助你更容易,但可能會幫助你看到問題。 – 2011-01-10 19:21:57

+0

muli op中的問題。如果你能幫助我,我正在等你。 – user570285 2011-01-10 19:36:14

回答

1

首先與函數參數碰撞具有相同的名稱是瘋了所有具有全球性的字母變量。

爲什麼multK將全局變量B修改爲副作用?
爲什麼minus修改全局變量C作爲sideeffect?
爲什麼全局整數與索引變量一樣?
mult更糟糕:它不僅修改C作爲sideeffect,但它假定C包含有意義的值提前。我認爲它需要預先初始化爲全0的C

我的猜測是一種奇特的方式你的一些副作用干擾。但我不想考慮它。首先重構你的代碼。特別學習如何以及何時使用局部變量。