에 문제가 발생했습니다. 내 코드에 규칙이 적용됩니다. 배열이 2 개 있습니다. 행렬의 배열 (최대 100 개의 행렬)과 연산의 배열 (최대 99 개의 연산). 연산은 행렬의 더하기, 빼기 및 곱하기 (+ - *로 표시)입니다.수학 연산의 연산 순서에 대한 알고리즘
내 행렬은 구조체이지만 그저 세부 사항입니다. 나는 그들에 관한 모든 것을 위해 일하는 기능을 가지고있다.
또한 작업을 실행하는 기능이 있습니다.
struct Matrix compute(struct Matrix mat1, struct Matrix mat2, char op)
이 기능에는 스위치가있어 작동을 결정하고 올바른 것을 실행합니다.
내가 개선해야하는 코드는이 코드입니다. 순간
// counter = number of matrices in the array
// therefore there's also counter-1 operations
struct Matrix temp = compute(matrices[0], matrices[1], operations[0]);
for(int j = 1; j < counter; ++j)
{
temp = compute(temp, matrices[j+1], operations[j]);
}
get_matrix(temp); //outputs the matrix to stdout
이 코드 (입력이 정확하고 동작이 실행될 수있는 가정하여) 승산을 포함하지 않는 행렬과 연산 정확하게 모든 시퀀스를 평가한다.
무엇이 필요합니까? 나는 올바른 방향으로 엉덩이를 걷어차 야합니다.
피연산자가 행렬 인 표현식에 연산 순서를 적용 할 방법이 필요하다는 말입니까? 그리고 현재 그것은 곱셈에 실패합니다. 피연산자가 숫자 인 경우 '1 + 2 + 4 * 0'은'0 '으로 평가됩니다. – Miket25
@ Miket25 그래, 그게 내가 말하는거야. 또한 명백하게이 코드 부분 (행렬은 동적으로 할당 됨)에 메모리 누수가 있습니다. Im이 표시된 코드 아래에서 임시 행렬을 단지 2 행만큼 자유롭게 만듭니다. 하지만 나중에 해결할 수있는 문제입니다. – Welsy
연구 건물 ** 추상 구문 트리 **. 이 트리 내의 노드는 행렬 및 피연산자가됩니다. 그런 다음이 트리를 반복적으로 evaulate하면 작업 순서가 정해집니다. 나는 ** 재귀 파싱 **을 추천한다. 그것은 배우기 쉽습니다. 재귀 적 파생 구문 분석을 통해 연산 계산기의 순서에 대해 온라인으로 좋은 예제를 온라인으로 작성하고이를이 문제에 적용 할 수 있습니다. – Miket25