开发者

small problem In Pascal , Could you please help?

开发者 https://www.devze.com 2023-02-03 06:31 出处:网络
I write this program with pascal which ask the user to enter two arrays and constant value which is K

I write this program with pascal which ask the user to enter two arrays and constant value which is K the program muli the K with arr开发者_如何学Pythonays . and then save the answer in new array and do some operation in new array addition << work well Subtraction << also work BUT the problem in Multi << I am trying to ask the user to enter a new array and do Muti but still there is a problem. ALSO I want these operation repeated until the user press exit <<< I could not do this options because i am not perfect with pascal .

I would be grateful if you could help me

This is My Code

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.


First of all having global one letter variables which collide with function parameters with the same name is insane.

Why does multK modify the global variable B as a sideeffect?
Why does minus modify the global variable C as a sideeffect?
Why global integers as for index variables?
And mult is even worse: It doesn't only modify C as a sideeffect, but it assumes C contains meaningful values beforehand. I think it needs to initialize C to all zeros beforehand.

My guess is some of your side effects interfere in strange ways. But I don't want to think it through. Refactor your code first. In particular learn how and when to use local variables.

0

精彩评论

暂无评论...
验证码 换一张
取 消