제공합니다.AS400 CL 스크립트 산술 내가 알고리즘 부문의 나머지를 계산하기 위해 노력하고있어 0
예 : 15/6
1. (15/6) = 2
2. (2) * 6 = 12
3. 15 - 12 = 3
의 나머지 6분의 15의 나머지 부분은 참으로
받기 3.
는 내 CL 스크립트에서이 알고리즘을 사용하고 내 문제는 단순히 모든 0을 반환시간. 왜 그런가요?
crtclpgm pgm(test) srcfile(test) srcmbr(test)
실행 :
pgm
dcl var(÷nd) type(*int) value(15)
dcl var(&divisor) type(*int) value(6)
dcl var(&remainder) type(*int)
dcl var(&msg) type(*char)
/* Calculate remainder. [ed: 29Sep2016] "* &remainder" is now: "* &divisor" */
chgvar var(&remainder) value(÷nd - (÷nd/&divisor) * &divisor)
/* Prior to 29-Sep-2016 redaction, the above was coded as the incorrect expression: +
chgvar var(&remainder) value(÷nd - (÷nd/&divisor) * &remainder) +
and remains, commented-out, to preserve relevance of user-comments about the OP */
/* Cast remainder and display. */
chgvar var(&msg) value(&remainder)
sndpgmmsg msg(&msg)
endpgm
함께 컴파일
call test
출력 :
0
이 날짜 24 9 월 2016로, 영업에 표시된 CL 프로그램 소스 코드는 반드시을 전시 무엇을 복사 \ 붙여 넣기 아니다 기술 된 어려움; 즉 첫 번째'CHGVAR'의 표현은 분명히 "계산하려고"한 표현과 일치하지 않습니다. 결과는 항상 주제 피험자가 기술 한 0이 아닌'& dividend'의 초기 값입니다. 표제. – CRPence
해당 표현식의 값이 나눗셈의 자르기에서 다른 정수 유형이어야하기 때문에 아니요. 최소한 그것은 괜찮은 프로그래밍 언어에서 일어날 일입니다. –
"아니오"는 무엇입니까? 나는 '나머지 = 배당 - (배당/제수) * 제수'는 '나머지 = 배당 - (배당/제수) * 나머지'와 같은 표현이 아니라는 점을 지적했다. CL 소스는 후자를 코딩했다. 정수 나누기, 모든 알맞은 프로그래밍 언어는 정수 나누기 연산자와 어리석게도 두 개의 정수 피연산자가있는 정수 만 결과를 내 보내지 않는 다른 나누기 연산자를 제공합니다. CL은 어리석게도 정수 결과를 강제하지 않지만 정수 나누기 연산자를 제공하지 못합니다. 그러나 CL은 강력한 * 제어 언어로서 실제 프로그래밍 언어가 아닙니다. – CRPence