- TI nspire
[프로그램] splitor, sor. "or" 단위로 구분된 수식을 "리스트 / 매트릭스 / 변수 " 형태로 바꿈
Define LibPub splitor(expression)=
Prgm
:Local i,pos,prev_pos,num_or,len
:len:=dim(string(expression))
:num_or:=0
:prev_pos:=1
:
:While prev_pos≤len
: pos:=inString(string(expression)," or ",prev_pos)
: If pos=0 Then
: Exit
: Else
: num_or:=num_or+1
: prev_pos:=pos+4
: EndIf
:EndWhile
:
:r.list:=newList(num_or+1)
:
:prev_pos:=1
:For i,1,num_or
: pos:=inString(string(expression)," or ",prev_pos)
: r.list[i]:=expr(mid(string(expression),prev_pos,pos-prev_pos))
: expr("r.e"&string(i)&":=r.list["&string(i)&"]")
: prev_pos:=pos+4
:EndFor
:
:r.list[num_or+1]:=expr(mid(string(expression),prev_pos,len-prev_pos+1))
:expr("r.e"&string(num_or+1)&":=r.list["&string(num_or+1)&"]")
:
:list▶mat(r.list,1)→r.matrix
:
:Disp "Number of 'or's: ",num_or
:Disp "Saved result as 'r.list' & 'r.matrix' & r.#num"
:Disp r.matrix
:
:EndPrgm
이 프로그램은 solve() 등에 의해 만들어진 수식(expression)에서 " or "을 기준으로 조건을 분리하고, 각 조건을 처리하여 결과를 저장하는 기능을 수행합니다. 프로그램의 각 부분을 이해하기 위해 다음과 같은 과정을 거칩니다:
-
변수 초기화 및 설정:
len: 수식의 길이를 저장합니다.num_or: " or "의 등장 횟수를 저장할 변수로 초기화합니다.prev_pos: 수식을 검사할 때 사용할 시작 위치를 초기화합니다.
-
'or' 등장 횟수 세기:
While루프를 사용하여 수식을 처음부터 끝까지 검사합니다.inString함수를 사용하여 " or "의 등장 위치를 찾습니다.- 만약 등장 위치(pos)가 0이면, 더 이상 " or "이 없다는 것이므로 루프를 종료합니다.
- 등장 횟수를 세는
num_or를 증가시키고, 다음 검색을 위해prev_pos를 조정합니다.
-
조건을 저장할 리스트 초기화:
newList함수를 사용하여 조건을 저장할r.list리스트를 생성합니다.- 리스트의 크기는 " or "의 등장 횟수(num_or)에 1을 더한 값으로 설정합니다.
-
각 조건을 리스트에 저장:
- 다시
prev_pos를 1로 초기화하고For루프를 통해 각 " or "의 위치를 찾고, 해당 위치 이전부터 해당 위치까지의 부분 문자열을 추출합니다. - 추출한 부분 문자열을
expr함수를 사용하여 식으로 변환하여r.list리스트의 해당 위치(i)에 저장합니다. - 다음 검색을 위해
prev_pos를 조정합니다.
- 다시
-
결과 저장 및 출력:
r.list리스트를list▶mat함수를 사용하여r.matrix라는 이름의 행렬로 변환하여 저장합니다.- r.e1, r.e2... 변수에 개별 원소를 저장합니다.
- 결과 출력을 위해 "Number of 'or's: "와
num_or의 값을 출력합니다. - "Saved result as 'r.list' & 'r.matrix'"와
r.matrix의 내용을 출력하여 최종 결과를 사용자에게 표시합니다.
이 프로그램은 주어진 수식에서 " or "을 기준으로 여러 조건을 분리하고, 이를 적절히 처리하여 결과를 출력하는 기능을 가지고 있습니다.
이 프로그램에서 사용된 함수들을 간략히 설명드리겠습니다:
-
dim(string(expression)):dim함수는 인자로 전달된 배열 또는 문자열의 차원을 반환합니다.string(expression)은 수식을 문자열로 변환한 것이며, 이의 길이를 반환하여 수식의 전체 길이를 구합니다.
-
inString(string(expression), " or ", prev_pos):inString함수는 첫 번째 문자열에서 두 번째 문자열이 처음으로 나타나는 위치를 반환합니다.string(expression)에서 " or "이라는 문자열이prev_pos위치부터 시작하여 처음 발견된 위치를 반환합니다.- 발견되지 않을 경우 0을 반환합니다.
-
newList(num_or + 1):newList함수는 주어진 크기(num_or + 1)로 새로운 리스트를 생성합니다.- 여기서는 " or "의 등장 횟수(num_or)에 1을 더한 크기로 리스트를 생성하여 조건들을 저장할 준비를 합니다.
-
mid(string(expression), prev_pos, pos - prev_pos):mid함수는 문자열에서 지정된 범위의 부분 문자열을 추출합니다.string(expression)에서prev_pos위치부터pos - prev_pos길이만큼의 부분 문자열을 추출하여 각 조건을 식으로 변환합니다.
-
expr(...):expr함수는 문자열을 수식으로 변환하여 계산 가능한 형식으로 반환합니다.- 예를 들어, 문자열 "2 + 3"을
expr("2 + 3")으로 호출하면, 이는 숫자 5로 계산될 수 있습니다. - 프로그램에서는 수식을 문자열로 추출한 후
expr함수를 사용하여 각 조건을 계산 가능한 형태로 변환합니다.
-
list▶mat(r.list, 1):list▶mat함수는 리스트를 행렬로 변환하는 함수입니다.- 여기서는
r.list리스트를 1열로 행렬로 변환하여r.matrix라는 이름의 행렬에 저장합니다. - 이는 계산 결과를 보다 보기 쉬운 구조화된 형태로 저장하기 위해 사용됩니다.
이 함수들은 프로그램에서 문자열 처리, 검색, 데이터 구조 변환 등 다양한 기능을 수행하는 데 사용되었습니다.


[추가] 댓글에 있는 것처럼 sor(expression) 함수를 추가하였습니다.
코드만 다르고, 기능은 splitor(expression) 과 동일합니다.
생성되는 결과 변수도 동일하기 때문에 서로가 서로의 결과를 덮어씌워 저장할 수 있습니다.
댓글7
-
세상의모든계산기2024.06.20 - 09:30 #41850
1. 첨부 파일에 올려둔 splitor.tns 를 다운받아
2. 계산기 MyLib 폴더에 업로드하시고
3. Refresh Library 명령 (doc - 6 ?) 을 한번 실행하시면
4. 다른 파일에서도 splitor\splitor(수식) 명령으로 사용하실 수 있습니다.
-
세상의모든계산기
주의
다 잘 되는데... 딱 하나 안되는게 있네요.
조건문(Constraint)에 list[], matrix[]넣으니까 "Error: Invalid outside program" 에러가 나는군요.

이상하네요??????????????프로그램의 문제는 아니고, 그냥 | 조건문(Constraint) 과 "리스트/매트릭스" 조합에 문제가 있는 모양입니다.
"program" 이라고 딱 나와서 프로그램 문제인 줄 알았는데, 수동으로 만들어서 해 봐도 같은 문제가 발생합니다. -
1
세상의모든계산기
이것 때문에 변수 r.e1, r.e2, r.e3, ... ... 에 개별적으로 저장하도록 기능을 추가하였습니다.

-
세상의모든계산기
r.matrix 로 만든 것은
수식이 길어질 때는
가로로 쭉~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 연결되어 나와서
(PC든 계산기든) 알아보기가 힘들기 때문에
세로로 하나씩 출력하여 한눈에 쉽게 확인하기 위한 것입니다.
r.list 로 만든 것은
matrix 의 경우 값을 불러내려면
r.matrix[1,1] 과 같은 형태로 입력해야 하는데,
list 의 경우
r.list[1] 로 보다 간단하기 때문입니다.
편한걸로 취사선택해 쓰시면 됩니다.
- 1
-
세상의모든계산기
Define LibPub sor(expression)= Prgm :Local remains,count_or :© Initialize variables :remains:=expression :count_or:=0 :r.list:={} : :© Main Loop :While part(remains,0)="or" : count_or:=count_or+1 : r.list:=augment(r.list,{part(remains,1)}) : remains:=part(remains,2) : expr("r.e"&string(count_or)&":=r.list["&string(count_or)&"]") :EndWhile :r.list:=augment(r.list,{remains}) :list▶mat(r.list,1)→r.matrix :expr("r.e"&string(count_or+1)&":=r.list["&string(count_or+1)&"]") : :© Display Result :Disp "Number of 'or's: ",count_or :Disp "Saved result as 'r.list' & 'r.matrix' & r.#num" :Disp r.matrix :EndPrgm본문의 splitor() 와 실행 결과는 동일합니다.
part() 명령어를 이용하여 프로그램을 단순화하였습니다.
세상의모든계산기 님의 최근 댓글
뉴턴-랩슨 적분 방정식 시각화 v1.0 body { font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; display: flex; flex-direction: column; align-items: center; background: #f8f9fa; padding: 40px 20px; margin: 0; color: #333; } .container { background: white; padding: 40px; border-radius: 20px; box-shadow: 0 15px 35px rgba(0,0,0,0.08); max-width: 900px; width: 100%; } header { border-bottom: 2px solid #f1f3f4; margin-bottom: 30px; padding-bottom: 20px; } h1 { color: #1a73e8; margin: 0 0 10px 0; font-size: 1.8em; } p.subtitle { color: #5f6368; margin: 0; font-size: 1.1em; } .equation-box { background: #f1f3f4; padding: 15px; border-radius: 10px; text-align: center; margin-bottom: 30px; font-size: 1.3em; } canvas { border: 1px solid #e0e0e0; border-radius: 12px; background: #fff; width: 100%; height: auto; display: block; } .controls { margin-top: 30px; display: flex; gap: 15px; align-items: center; justify-content: center; flex-wrap: wrap; } button { padding: 12px 25px; border: none; border-radius: 8px; background: #1a73e8; color: white; cursor: pointer; font-weight: 600; font-size: 1em; transition: all 0.2s; box-shadow: 0 2px 5px rgba(26,115,232,0.3); } button:hover { background: #1557b0; transform: translateY(-1px); box-shadow: 0 4px 8px rgba(26,115,232,0.4); } button:active { transform: translateY(0); } button.secondary { background: #5f6368; box-shadow: 0 2px 5px rgba(0,0,0,0.2); } button.secondary:hover { background: #4a4e52; } .status-badge { background: #e8f0fe; color: #1967d2; padding: 8px 15px; border-radius: 20px; font-weight: bold; font-size: 0.9em; } .explanation { margin-top: 40px; padding: 25px; background: #fff8e1; border-left: 5px solid #ffc107; border-radius: 8px; line-height: 1.8; } .explanation h3 { margin-top: 0; color: #856404; } .math-symbol { font-family: 'Times New Roman', serif; font-style: italic; font-weight: bold; color: #d93025; } .code-snippet { background: #202124; color: #e8eaed; padding: 2px 6px; border-radius: 4px; font-family: monospace; } 📊 Newton-Raphson 적분 방정식 시뮬레이터 미분적분학의 기본 정리(FTC)를 이용한 수치해석 시각화 목표 방정식: ∫₀ᴬ (2√x) dx = 20 을 만족하는 A를 찾아라! 계산 시작 (A 추적) 초기화 현재 반복: 0회 💡 시각적 동작 원리 (Newton-Raphson & FTC) Step 1 (오차 측정): 현재 A까지 쌓인 파란색 면적이 목표치(20)와 얼마나 차이나는지 계산합니다. Step 2 (FTC의 마법): 면적의 변화율(미분)은 그 지점의 그래프 높이 f(A)와 같습니다. Step 3 (보정): 다음 A = 현재 A - (면적 오차 / 현재 높이) 공식을 사용하여 A를 이동시킵니다. 결론: 오차를 현재 높이로 나누면, 오차를 메우기 위해 필요한 가로 길이(ΔA)가 나옵니다. 이 과정을 반복하면 정답에 도달합니다! const canvas = document.getElementById('graphCanvas'); const ctx = canvas.getContext('2d'); const iterText = document.getElementById('iterText'); // 수학 설정 const targetArea = 20; const f = (x) => Math.sqrt(x) * 2; // 피적분 함수 f(x) = 2√x const F = (x) => (4/3) * Math.pow(x, 1.5); // 정적분 결과 F(x) = ∫ 2√x dx = 4/3 * x^(3/2) let A = 1.5; // 초기값 let iteration = 0; let animating = false; // 그래프 드로잉 설정 const scale = 50; const offsetX = 60; const offsetY = 380; function drawGrid() { ctx.strokeStyle = '#f1f3f4'; ctx.lineWidth = 1; ctx.beginPath(); for(let i=0; i 2026 04.11 참값 : A = ±2√5 근사값 : A≈±4.472135954999579392818347 2026 04.10 fx-570 ES 입력 결과 초기값 입력 반복 수식 입력 반복 결과 2026 04.10 파이썬 코드 검증 결과 초기값: 5.0 반복 1회차: 4.5000000000 반복 2회차: 4.4722222222 반복 3회차: 4.4721359558 반복 4회차: 4.4721359550 반복 5회차: 4.4721359550 초기값: 10.0 반복 1회차: 6.0000000000 반복 2회차: 4.6666666667 반복 3회차: 4.4761904762 반복 4회차: 4.4721377913 반복 5회차: 4.4721359550 2026 04.10 감사합니다. 주말 잘 보내세요. 2026 03.06