2010-06-16 5 views
1

변수와 숫자가 포함 된 일반 수식을 만들 수있는 프로그램 (C#)을 작성해야합니다. 예를 들어 모든 변수가 나를 위해 의미수학 프로그램 설정 방법

D = A + (A - C/X)(7.8 - 6.6) 
F = E + (E - C/X)(7.8 - 6.6) 
FinalResult = (A + D)(0.9) + (E + F)(0.32) + B(0.1) + .023 

데이터베이스로 이동 최대 값을 기준으로 무언가를보고 그 자리에 숫자를 반환합니다. 그래서 A는 2.12 예 (C와 E도 마찬가지)

이 프로그램을 구성하는 가장 좋은 방법은 무엇입니까? 프로그램에서이 수식을 읽게하려면 어떻게해야합니까?

나는 조금 MathML을 비트하지만 그건 시작하는 방법을 잘 (또는 예)

--Update--

난 그냥 다른 질문을보고 MathML을 언급 봤어요 그것을 SO와 관련시켰다. 모두들 정확합니다. 나는 그것을 표시 할 필요가 없습니다. 단지 누군가가 원하는 것을 확인하고 그것을 계산할 필요가 있습니다.

내 변수가 데이터베이스의 무언가에 매핑됩니다. 예를 들어, A는 다음을 사용하도록 알려줍니다.

Vend_Key = 3 
Trmnl_Key = 5 
Prod_Key = 7 

그런 다음 데이터베이스에서 숫자를 반환하는 데 사용됩니다.

사람들이 만드는 수식을 저장하려면 데이터베이스가 필요합니다. 이러한 기능을 실행하고 실행할 수있는 정보를 다른 곳에 저장하는 작업을 예약해야합니다.

+0

MathML은 (웹) 페이지에 표현식을 표시하는 데 사용됩니다. 왜 그것을 표시해야합니까? 나머지 질문은 표현식을 평가하는 데에만 관심이 있다고 제안합니다 ... –

+0

그래서 명확하게 설명합니다. 여기에 귀하의 변수는 수학 상수라고 생각하십니까? 전자, 파이, C, 등? 또는 방정식에 반환되는 데이터베이스에 저장된 값에 링크되어 있습니까? – Narcolapser

+0

왜 수학 프로그램을위한 데이터베이스가 필요하겠습니까? – Carra

답변

2

그래서 기본적으로 계산기가 필요합니까?

그렇다면 내가 먼저 할 일은 & 변수 값을 해당 값으로 바꾸는 것입니다. 그런 다음에 후행 표기법으로 변환하는 것과 같은 표현식을 평가하는 알고리즘을 사용할 수 있습니다 (훨씬 쉽게 평가할 수 있음). 알고리즘)을 사용하여 다음과 같은 코드를 사용합니다. 예 : 접미사에서 후위 알고리즘에 이르기까지 (예 : google)

  • 왼쪽에서 오른쪽으로 중위 문자열을 스캔합니다.
  • 빈 스택을 초기화하십시오.
  • scannned 문자가 피연산자이면 Postfix 문자열에 추가합니다. 스캔 한 문자가 연산자이고 스택이 비어 있으면 문자를 스택에 놓습니다. 스캔 한 문자가 피연산자이며, 스택이 비어 있지 않으면

    • 는 스택 (topStack)의 상단에있는 요소와 캐릭터의 우선 순위를 비교합니다. topStack이 스캔 한 문자보다 우선 순위가 높으면 스택을 팝합니다. 스캔 한 문자를 스택에 넣습니다. 스택이 비어 있지 않고 topStack이 문자보다 우선하는 한이 단계를 반복하십시오.

    모든 문자를 검사 할 때까지이 단계를 반복하십시오.

  • (모든 문자를 스캔 한 후에 스택이 Postfix 문자열에 가질 수있는 문자를 추가해야합니다.) 스택이 비어 있지 않으면 topStack을 Postfix 문자열에 추가하고 스택을 팝합니다. 스택이 비어 있지 않은 한이 단계를 반복하십시오.
  • Postfix 문자열을 반환합니다.왼쪽에서 오른쪽으로

    • 는 후위 문자열을 스캔 : 당신이 후위 문자열을 준비 할 때

    , 당신은 기본적으로 다음과 같이가는 간단한 접미사 평가 알고리즘을 사용할 수 있습니다.

  • 빈 스택을 초기화하십시오.
  • scannned 문자가 피연산자이면 스택에 추가합니다. 스캔 된 문자가 연산자 인 경우 적어도 두 개의 피연산자가 스택에 있습니다.

    • 스캔 된 문자가 연산자 인 경우 스택의 최상위 요소 (topStack)를 변수 temp에 저장합니다. 스택을 팝합니다. 이제 topStack (Operator) temp를 평가하십시오. 이 연산의 결과를 retVal로합시다. 스택을 팝하고 retVal을 스택에 넣으십시오.

    모든 문자를 검사 할 때까지이 단계를 반복하십시오.

  • 모든 문자를 스캔 한 후에는 스택에 요소가 하나만 있습니다. topStack을 반환하십시오.

topStack은 표현식의 결과입니다.

+0

또는 기존에 잘 테스트 된 표현 파서를 사용하십시오. –

0

저는 사용자가 입력 한 수식을 사용하는 프로젝트를 진행하고 있습니다. 제가 작업을 계획하고있는 방식은 다양한 문자를 파싱하는 것입니다. 그런 다음 표현 트리를 사용합니다.

각 연산자에는 2 개의 값이 있습니다. 2 개의 값과 연산자 유형을 포함하는 클래스를 만듭니다. 2 개의 값은 값 또는 더 많은 연산자 일 수 있습니다. 나무를 평가할 때 최상위 연산자를 호출합니다. 상위 연산자는 자식이라고하며, 평가는 완료되고 결과가 반환 될 때까지 자식에게 호출합니다.

읽기 : 프로그램에 전달 된 문자열을 가져 와서 구문 분석을 시작합니다. 먼저 곱셈과 나눗셈을 스캔하십시오. 이러한 경우에는 괄호로 간단히 단일 값으로 지정할 수 있습니다. 입력 된 값으로 이제 더하기와 빼기를 검색하십시오. 이제까지 아이들이 지금 가지고있는 것과 함께 이것들을 표현 트리에 입력하십시오. 그것이 완료되면 표현식 트리에 전체 방정식이 있습니다.