사칙 연산 표현식 생성과 답안 검사에 관한 필기

3992 단어
소프트웨어 공학의 개인 프로젝트는 초등학생을 대상으로 하는 네 가지 연산 문제 생성과 검사 도구를 쓰는 것이다.주요 기능은 두 가지가 있는데 하나는 네 개의 연산 문제를 생성하는 것이고, 다른 하나는 주어진 문제와 답안에 대해 그 중의 답안의 정확성을 검증하는 것이다.
 
시간표
 
초기에 구상하는 시간이 비교적 많았지만 인코딩과 테스트에 적지 않은 시간이 걸렸다.
c 언어를 사용하기 때문에 문자열의 처리와 메모리 관리에 많은 시간을 들였다.
PSP2.1
Personal Software Process Stages
Time
Planning
계획
 
  · Estimate
· 이 임무는 얼마나 걸릴지 예상
 20h
Development
개발하다
 
  · Analysis
· 수요 분석(신기술 학습 포함)
 6h
  · Design Spec
· 디자인 문서 생성
 1h
  · Design Review
· 디자인 재심(동료와 디자인 문서 심사)
 1h
  · Coding Standard
· 코드 규범(현재 개발에 적합한 규범 제정)
 0.5h
  · Design
· 구체적 설계
 2h
  · Coding
· 세부 코딩
 7h
  · Code Review
· 코드 재심
 1h
  · Test
· 테스트(자체 테스트, 코드 수정, 수정 제출)
 4h
Reporting
보고
 
  · Test Report
· 테스트 보고서
 1h
  · Size Measurement
· 작업량 계산
 0.5h
  · Postmortem & Process Improvement Plan
· 사후 총결산 및 과정 개선 계획 제출
 0.5h
 
합계
 24.5
 
제목 분석과 사고방식
주요 문제:
1. 산수 검사
비등가탈중
만약 두 표현식의 수와 조작부호가 모두 같다면, 우리는 이 두 표현식이 중복된다고 생각한다.
2. 대량의 데이터에 대한 지원은 1w개의 산식을 지원하고 검색의 중량을 고려하여 순서 검색을 하고 구조체와 체인 테이블을 사용한다.
3. 답안 교정은 접두사 표현식에 대한 계산을 지원해야 한다.
1) 접미사 표현식 접미사 표현식 - 스케줄러 알고리즘
2) 접미사 표현식의 계산
4. 진분수의 사칙 연산(a!=0,b!=0)
획득 조작수: a, b, m, n
계산 결과:k,l (k/l 형식)
1) 가감법: m/a + n/b -> (bm+an)/ab
곱셈:m/a× n/b ->mn/ab
나눗셈: m/a ÷n/b ->mb/na(n!=0)
2) 전전 상제법으로 최대 공약수를 구하고 간소화 점수(k/l)
if(k>l)
    x=gcd(k,l);
else
    x=gcd(l,k);
int gcd(int k, int l){
    if(k%l==0)
        return l;
    else
        return gcd(l,k%l);
}

또한: 간략하게 처리한 후 분모가 1인 경우를 기억한다
5. 괄호 문제 - 괄호가 있는 산식 생성
왼쪽 괄호: 첫 번째 수/모든 조작부호 (마지막 포함), 왼쪽 괄호를 생성한 적이 없으면, 무작위로 왼쪽 괄호를 생성할지 여부입니다.
오른쪽 괄호: 모든 조작부호는 왼쪽 괄호를 생성한 적이 있고 오른쪽 괄호를 생성한 적이 없으면 무작위로 오른쪽 괄호를 생성할지 여부입니다.
끝부분: 왼쪽 괄호가 있지만 오른쪽 괄호가 없으면 오른쪽 괄호를 보충합니다.
비고: 우선 오른쪽 괄호를 검사한 다음에 왼쪽 괄호를 검사합니다.
6.c 언어가 가져온 주의해야 할 문제: c풍 형식 문자열 처리, 메모리 관리.
 
코드에서 발생한 문제
 1.생성 과정 중의 산식 결과의 합법성 검사에 많은 시간이 걸렸다.생성된 표현식을 계산할 수 있는 표현식으로 처리하는 데 많은 시간이 걸린다.
 2.c풍 형식 문자열을 처리하는 것은 타고난 번거로움이 있는데, 이 점도 상기에서 큰 영향을 미친다.
 3.메모리 관리 문제.코드를 간소화하기 위해 많은 함수를 구성했고 전참과 반환값은 기본적으로char* 유형을 채택하여 메모리를 방출하는 과정에서 적지 않은 문제가 발생했다.
 
성능 분석
ArithmeticProducer.exe -r 50 -n 20000
이름:
비독점 견본수
단독 견본 수
비독점 견본 수 백분율
단독 견본 수 백분율
-  ArithmeticProducer.exe
1,159
624
100.00
53.84
+  produce
969
532
83.61
45.90
+  _strcmp
18
18
1.55
1.55
+  gcd
18
18
1.55
1.55
+  calc
152
16
13.11
1.38
+  convert
25
13
2.16
1.12
+  transToVulgarFrac
59
8
5.09
0.69
+  getRand
16
7
1.38
0.60
+  getGcd
22
4
1.90
0.35
+  _RTC_CheckEsp
2
2
0.17
0.17
+  getIntResult
109
2
9.40
0.17
+  @ILT+230
1
1
0.09
0.09
+  @ILT+240
1
1
0.09
0.09
+  _RTC_CheckStackVars
1
1
0.09
0.09
+  checkRange
91
1
7.85
0.09
+  __tmainCRTStartup
1,159
0
100.00
0.00
+  main
1,159
0
100.00
0.00
+  mainCRTStartup
1,159
0
100.00
0.00
여기서 produce()는 산식을 생성하는 데 사용되는 함수입니다.
이 같은 성능 분석 데이터를 보면 CPU 시간을 가장 많이 차지하는 제품() 함수가 45.90%에 달했다.
다른 함수에서 CPU 시간은 주로 계산에 소모된다. (gcd () 는 최대 공약수를 계산하는 데 사용되고, clac () 는 접두사 표현식의 값을 계산하는 데 사용되며, convert () 는 접두사 표현식을 접두사 표현식으로 바꾸어 계산하는 데 사용된다.
분석 데이터에 따르면 제품() 함수는 최적화 공간이 매우 크다.

좋은 웹페이지 즐겨찾기