• SEARCH

    통합검색
세모계
    • Dark Mode
    • GNB Always Open
    • GNB Height Maximize
    • Color
    • Brightness
    • SINCE 2015.01.19.
    • 세모계 세모계
    •   SEARCH
    • 세상의 모든 계산기  
      • 자유(질문) 게시판  
      • 계산기 뉴스/정보  
      • 수학, 과학, 공학 이야기  
      • 세모계 : 공지 게시판  
        • 구글 맞춤검색  
      • 세상의 모든 계산기  
        • 자유(질문) 게시판  
    • TI  
    • CASIO  
    • HP  
    • SHARP  
    • 일반(쌀집) 계산기  
    • 기타계산기  
    • 세모계
    • by ORANGEDAY
  • TI
    • TI nspire
    • [프로그램] splitor, sor. "or" 단위로 구분된 수식을 "리스트 / 매트릭스 / 변수 " 형태로 바꿈

    • Profile
      • 세상의모든계산기
        *.105.205.197
      • 2024.06.22 - 12:47 2024.06.20 - 09:25  161  7
    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 "을 기준으로 조건을 분리하고, 각 조건을 처리하여 결과를 저장하는 기능을 수행합니다. 프로그램의 각 부분을 이해하기 위해 다음과 같은 과정을 거칩니다:

    1. 변수 초기화 및 설정:

      • len: 수식의 길이를 저장합니다.
      • num_or: " or "의 등장 횟수를 저장할 변수로 초기화합니다.
      • prev_pos: 수식을 검사할 때 사용할 시작 위치를 초기화합니다.
    2. 'or' 등장 횟수 세기:

      • While 루프를 사용하여 수식을 처음부터 끝까지 검사합니다.
      • inString 함수를 사용하여 " or "의 등장 위치를 찾습니다.
      • 만약 등장 위치(pos)가 0이면, 더 이상 " or "이 없다는 것이므로 루프를 종료합니다.
      • 등장 횟수를 세는 num_or를 증가시키고, 다음 검색을 위해 prev_pos를 조정합니다.
    3. 조건을 저장할 리스트 초기화:

      • newList 함수를 사용하여 조건을 저장할 r.list 리스트를 생성합니다.
      • 리스트의 크기는 " or "의 등장 횟수(num_or)에 1을 더한 값으로 설정합니다.
    4. 각 조건을 리스트에 저장:

      • 다시 prev_pos를 1로 초기화하고 For 루프를 통해 각 " or "의 위치를 찾고, 해당 위치 이전부터 해당 위치까지의 부분 문자열을 추출합니다.
      • 추출한 부분 문자열을 expr 함수를 사용하여 식으로 변환하여 r.list 리스트의 해당 위치(i)에 저장합니다.
      • 다음 검색을 위해 prev_pos를 조정합니다.
    5. 결과 저장 및 출력:

      • 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 "을 기준으로 여러 조건을 분리하고, 이를 적절히 처리하여 결과를 출력하는 기능을 가지고 있습니다.


    이 프로그램에서 사용된 함수들을 간략히 설명드리겠습니다:

    1. dim(string(expression)):

      • dim 함수는 인자로 전달된 배열 또는 문자열의 차원을 반환합니다.
      • string(expression)은 수식을 문자열로 변환한 것이며, 이의 길이를 반환하여 수식의 전체 길이를 구합니다.
    2. inString(string(expression), " or ", prev_pos):

      • inString 함수는 첫 번째 문자열에서 두 번째 문자열이 처음으로 나타나는 위치를 반환합니다.
      • string(expression)에서 " or "이라는 문자열이 prev_pos 위치부터 시작하여 처음 발견된 위치를 반환합니다.
      • 발견되지 않을 경우 0을 반환합니다.
    3. newList(num_or + 1):

      • newList 함수는 주어진 크기(num_or + 1)로 새로운 리스트를 생성합니다.
      • 여기서는 " or "의 등장 횟수(num_or)에 1을 더한 크기로 리스트를 생성하여 조건들을 저장할 준비를 합니다.
    4. mid(string(expression), prev_pos, pos - prev_pos):

      • mid 함수는 문자열에서 지정된 범위의 부분 문자열을 추출합니다.
      • string(expression)에서 prev_pos 위치부터 pos - prev_pos 길이만큼의 부분 문자열을 추출하여 각 조건을 식으로 변환합니다.
    5. expr(...):

      • expr 함수는 문자열을 수식으로 변환하여 계산 가능한 형식으로 반환합니다.
      • 예를 들어, 문자열 "2 + 3"을 expr("2 + 3")으로 호출하면, 이는 숫자 5로 계산될 수 있습니다.
      • 프로그램에서는 수식을 문자열로 추출한 후 expr 함수를 사용하여 각 조건을 계산 가능한 형태로 변환합니다.
    6. list▶mat(r.list, 1):

      • list▶mat 함수는 리스트를 행렬로 변환하는 함수입니다.
      • 여기서는 r.list 리스트를 1열로 행렬로 변환하여 r.matrix라는 이름의 행렬에 저장합니다.
      • 이는 계산 결과를 보다 보기 쉬운 구조화된 형태로 저장하기 위해 사용됩니다.

    이 함수들은 프로그램에서 문자열 처리, 검색, 데이터 구조 변환 등 다양한 기능을 수행하는 데 사용되었습니다.

     

     


     

    스크린샷 2024-06-20 190910.png

    스크린샷 2024-06-20 233407.png

     


    [추가] 댓글에 있는 것처럼 sor(expression) 함수를 추가하였습니다. 

    코드만 다르고, 기능은 splitor(expression) 과 동일합니다. 

    생성되는 결과 변수도 동일하기 때문에 서로가 서로의 결과를 덮어씌워 저장할 수 있습니다. 

     

     

    0
    0
    Attached file
    스크린샷 2024-06-20 190910.png 80.8KB 19스크린샷 2024-06-20 233407.png 26.7KB 27splitor.tns 4.9KB 24
    이 게시물을..
    • 세상의모든계산기 세상의모든계산기 Lv. 25

      계산기는 거들 뿐
      혹은
      계산기를 거들 뿐

    • [TI-nspire] (프로그램) 보간법 (선형, 다항식) Linear & Polynomial Interpolation세상의모든계산기
    • [function] part() // nspire 레퍼런스 가이드북에 없는 함수세상의모든계산기

     댓글 7

      • Profile
      • 세상의모든계산기 (*.105.205.197) 2024.06.20 09:30 #comment_41850

        1. 첨부 파일에 올려둔 splitor.tns 를 다운받아

        2. 계산기 MyLib 폴더에 업로드하시고 

        3. Refresh Library 명령 (doc - 6 ?) 을 한번 실행하시면 

        4. 다른 파일에서도 splitor\splitor(수식) 명령으로 사용하실 수 있습니다. 

         

        0
        댓글
      • Profile
      • 세상의모든계산기 (*.105.205.197) 2024.06.20 09:41 #comment_41853

        주의

        다 잘 되는데... 딱 하나 안되는게 있네요. 

        조건문(Constraint)에 list[], matrix[]넣으니까 "Error: Invalid outside program" 에러가 나는군요.

        스크린샷 2024-06-20 184130.png

         

        이상하네요??????????????

        프로그램의 문제는 아니고, 그냥 | 조건문(Constraint) 과 "리스트/매트릭스" 조합에 문제가 있는 모양입니다.
        "program" 이라고 딱 나와서 프로그램 문제인 줄 알았는데, 수동으로 만들어서 해 봐도 같은 문제가 발생합니다. 

        Attached file
        스크린샷 2024-06-20 184130.png 82.2KB / 24
        0
        댓글
      • Profile
      • 세상의모든계산기 (*.105.205.197) 2024.06.20 14:36 #comment_41898

        이것 때문에 변수 r.e1, r.e2, r.e3, ... ... 에 개별적으로 저장하도록 기능을 추가하였습니다.

        스크린샷 2024-06-20 233911.png

        Attached file
        스크린샷 2024-06-20 233911.png 60.0KB / 10
        0
        댓글
      • Profile
      • 세상의모든계산기 (*.105.205.197) 2024.06.20 10:16 #comment_41864

        r.matrix 로 만든 것은 

        수식이 길어질 때는 

        가로로  쭉~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 연결되어 나와서 

        (PC든 계산기든) 알아보기가 힘들기 때문에 

        세로로 하나씩 출력하여 한눈에 쉽게 확인하기 위한 것입니다. 

         


        r.list 로 만든 것은 

        matrix 의 경우 값을 불러내려면

        r.matrix[1,1] 과 같은 형태로 입력해야 하는데, 

         

        list 의 경우 

        r.list[1] 로 보다 간단하기 때문입니다.

         


        편한걸로 취사선택해 쓰시면 됩니다.

         

        0
        댓글
      • FireCraf (*.178.214.6) 2024.06.21 20:24 #comment_42047
        part 명령어 안쓰시네요
        0
        댓글
      • Profile
      • 세상의모든계산기 (*.105.205.197) 2024.06.21 21:50 #comment_42053

        part() 함수를 몰랐어요. ^^
        감사합니다.

         

        써보니까
        이 녀석 좀 특이하네요?

        https://allcalc.org/42058

        0
        댓글
      • Profile
      • 세상의모든계산기 (*.105.205.197) 2024.06.22 11:44 #comment_42192
        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() 명령어를 이용하여 프로그램을 단순화하였습니다. 

        0
        댓글
    • 댓글 입력
    • 에디터 전환
    댓글 쓰기 에디터 사용하기 닫기
    • 목록 목록
    • [TI-nspire] (프로그램) 보간법 (선형, 다항식) Linear & Polynomial Interpolation
    • [function] part() // nspire 레퍼런스 가이드북에 없는 함수
    • 목록
    7
    by OrangeDay
    • TI
    • allcalc.org
    • 세모계 all rights reserved.