2011-01-10 6 views
-1

私はこのプログラムをパスカル で書いています。このプログラムはユーザに2つの配列と定数値を入力するように指示します。これはK プログラムとKアレイの配列です。 して、新しい配列 で答えを保存し、新しい配列 加え< <作業も で何らかの操作を行う減算< <も を動作しますが、私は新しい配列を入力するようユーザーに尋ねるしようとしていますマルチ< <で問題とMutiを行うが、まだ問題がある。 また 私はこれらの操作をユーザーが終了するまで繰り返す必要があります< < <私はパスカルには完璧ではないのでこのオプションはできませんでした。あなたが私に小さな問題パスカルで、助けてくれますか?

を助けることができれば

私は感謝されるこれは非常識である同じ名前の関数のパラメータと衝突するすべての持つグローバルな1文字の変数の

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

muli opの問題。もしあなたが私を助けてくれたら、私はあなたを待っています。 – user570285

+0

少なくとも、観測された振る舞いと期待される振る舞いの違いを説明する必要があります。しかし、あなたの本当の問題はそのバグではなく、読めないコードを書くことです。 – CodesInChaos

答えて

1

最初に私のコードです。

なぜmultKがグローバル変数Bを副作用として変更するのですか?
なぜminusは、グローバル変数Cを副作用として変更しますか?
インデックス変数としてグローバル整数を使用するのはなぜですか?
multはさらに悪いです:副作用としてCを変更するだけでなく、Cが意味のある値をあらかじめ含んでいることを前提としています。私はそれがすべて0にCを初期化する必要があると思う。

私の推測では、あなたの副作用のいくつかは奇妙な方法で干渉しています。しかし、私はそれを考える必要はありません。コードを最初にリファクタリングしてください。特に、どのようにいつローカル変数を使用するかを学びます。

+0

私は、プログラムを配列bで配列を複数配列し、結果をcで保存したいと思っています。繰り返される。もし他の提案や助けがあれば、私は今それを必要とします – user570285

+0

質問は、パスカルを使って2つの行列を乗算する方法ですか? – user570285

+0

@ user570285:パスカルを使って行列を乗算する方法の問題は、あまりにも広すぎて、良いSOの問題にはならない。この答えで示唆されているようにコードを書き直して再試行し、具体的に何がうまくいかないのかを教えてくれると、はるかに役に立つ可能性があります。 –

関連する問題