2011-01-10 4 views
-1

이 프로그램을 파스칼 과 함께 쓰면 사용자에게 두 배열과 상수 값을 입력하라는 메시지가 표시됩니다.이 배열은 K 프로그램과 K 배열을 사용합니다. 다음 새로운 배열 에서 답을 저장하고 새로운 배열에 몇 가지 작업을 할 또한 < < 작업도 은 뺄셈 < <도 작동하지만 멀티 <에 문제 < 나는 새로운 배열을 입력하도록 요청하려고하고 무티를해라.하지만 여전히 문제가있다. 또한 사용자가 종료 할 때까지 이러한 작업을 반복 할 수 있습니다. < < < 파스칼에 완벽하지 않기 때문에이 옵션을 사용할 수 없습니다. 당신이 나에게작은 문제 파스칼에서 도와 주시겠습니까?

을 도울 수 있다면

내가 감사하겠습니다이 내 코드 같은 이름이 미친 짓과 함수 매개 변수와 충돌 모두 가진 글로벌 한 문자 변수의

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

질문은 파스칼을 사용하여 두 행렬을 곱하는 방법입니까? – user570285

+0

@ user570285 : 파스칼을 사용하여 행렬을 곱하는 방법에 대한 질문은 너무 커서 너무 좋은 질문이 아닙니다. 이 답변에서 제안한대로 코드를 다시 작성하고 다시 시도한 다음 구체적으로 잘못된 점을 알려면 훨씬 더 유용 할 수 있습니다. –

관련 문제