'TI-basic'에 해당되는 글 3건

  1. 2023.02.03 TI-86 공학용 계산기 1
  2. 2022.10.21 Casio Algebra fx-2.0에서 memory game 2
  3. 2022.10.12 TI-84 plus에서 야구게임

TI-86 공학용 계산기

계산기 2023. 2. 3. 23:24 posted by tolkien

우연히 TI-86 계산기를 손에 넣게 되었습니다.

TI-83 plus 랑 비교해보면

TI-86 공학용 계산기

  • Flash ROM이 없습니다. program은 RAM memory에 저장만 가능합니다. 따라서 PC와 link해서 backup해야 합니다.
  • TI-83 시리즈보다 더 유연한 듯 합니다. LIST의 경우, L1~L6만으로 제한되었던 TI-83과 달리 LIST 변수를 자유롭게 생성할 수 있습니다. 그것때문인지 모르겠지만,
  • 속도가 조금 느린 듯 합니다. TI-83에 porting했던 memory game을 넣어서 실행해보면 좀 시간이 더 걸리는 느낌입니다. 스펙상으로는 같은 6 Mhz인데. TI-83에서 L1~L6로 제한해서 변수 처리의 유연성을 줄인 대신 속도를 얻은 것 같습니다. 뭐 대규모 프로그램이 아닌 이상 LIST 6개면 무난할 것같기도 합니다.
  • 소프트 메뉴 버튼: HP 계산기에 보여준 soft menu button이 있습니다. TI-89에서 windows 95등에서 보여주는 상단에 menu등을 보여주는데, TI-86는 활성화된 menu를 화면 하단에 보여줍니다.

TI-89 menu
TI-89의 menu

 

TI-86의 soft menu
TI-86의 soft menu

 

마찬가지로 memory 게임을 porting해봤습니다. TI-83과 문법은 같은데, keyword가 조금 다릅니다. 또, TI-83과 달리 TI-89처럼 keyword를 직접 타이핑할 수 있습니다. (이것때문에 느려진 것인가?)

code는 아래와 같습니다. ('->'는 STO입니다. !=는 'not equal')

더보기
program: MEMORY
19->dimL L6
100->L6(10)

Lbl INIT
ClLCD 
For(I,1,9)
I->L6(I)
End
For(I,1,9)
int (rand*10)->J
If J!=0
Then
L6(I)->K
L6(J)->L6(I)
K->L6(J)
End
End
For(I,1,9)
I->L6(10+I)
End
For(I,1,9)
int (rand*10)->J
If J!=0
Then
L6(10+I)->K
L6(10+J)->L6(10+I)
K->L6(10+J)
End
End

0->W
0->R
For(I,2,6,2)
For(J,2,6,2)
Outpt(J,I,0)
Outpt(J,9+I,0)
End
End

Lbl LOOP
Outpt(4,8,"<"
Outpt(4,9,"-"
0->S
-1->Z

While S==0 or Z<0
getKy->S
If S==45
Return 
If S!=0
Then
S->X
0->Y
1->Z
MDISP
Z->U
End
End
Outpt(4,8,"-"
Outpt(4,9,">"
0->T
-1->Z
While T==0 or Z<0
getKy->T
If T!=0
Then
T->X
9->Y
1->Z
MDISP
Z->V
End
End
0->K
While K==0
getKy->K
End
If U!=V
Then
0->Z
Else
W+1->W
2->Z
End
S->X
0->Y
MDISP
T->X
9->Y
MDISP
R+1->R
If W<9
Goto LOOP
If L6(10)>R
R->L6(10)
ClLCD 
Disp "SCORE:"
Disp R
Disp "BEST SCORE:"
Disp L6(10)
0->K
While K==0
getKy->K
End
Goto INIT

program:MDISP
0->A
If Y!=0
Then
Y+1->C
Else
0->C
End
If X==72
Then
Y+2->A
2->B
C+7->C
End
If X==82
Then
Y+2->A
4->B
C+4->C
End
If X==92
Then
Y+2->A
6->B
C+1->C
End
If X==73
Then
Y+4->A
2->B
C+8->C
End
If X==83
Then
Y+4->A
4->B
C+5->C
End
If X==93
Then
Y+4->A
6->B
C+2->C
End
If X==74
Then
Y+6->A
2->B
C+9->C
End
If X==84
Then
Y+6->A
4->B
C+6->C
End
If X==94
Then
Y+6->A
6üB
C+3->C
End
If A==0
Then
-2->Z
Return 
End
If L6(C)==0
Then
-1->Z
Return 
End
If Z==2
Then
0->L6(C)
Return 
End
If Z!=0
Then
L6(C)->Z
End
Outpt(B,A,Z)
Return

실행 code 및 manual 첨부합니다.

MDISP.86p
0.00MB
MEMORY.86p
0.00MB
86bookeng.pdf
2.60MB

 

Casio Algebra fx-2.0에서 memory game

계산기 2022. 10. 21. 22:02 posted by tolkien

TI-83 plus에 구현해 놓은 memory game을 afx-2.0에 porting해봤습니다.
(원래 code는 여기에 있습니다.) 이걸 옮기다가 몇가지 변경을 했습니다.

  1. 카드 뒤집는 부분을 subroutine으로 뺐습니다. key 값을 X에 담고, Y에는 세트 구분 (0: 세트 A, 9: 세트 B), 처리 명령을 Z에 담았습니다. Z는 구체적으로...
    1. Z=0: 틀렸으므로 카드를 뒤집어라. (0으로 다시 돌려놓음)
    2. Z=1: 해당 카드의 숫자를 보여줄 것.
    3. Z=2: 맞았으니까, 해당 위치의 값을 0으로 바꾸고 출력 부분은 건드리지 않음.
    4. 반환시 Z=-1 : 해당 위치는 이미 뒤집었슴.
    5. 반환시 Z=-2 : invalid key input
  2. 카드 상태를 저장을 A,B,... 변수가 아닌 List를 사용했습니다. 덕분에 원래 source coe에서 보이던 변수 쥐어짜기를 할 필요가 없어졌습니다.
  3. 해놓고 보니, 괜찮아서 다시 TI-83 plus에 back porting했습니다. (그래서, 화면은 TI-83 plus)
  4. TI-83 plus로 다시 작성할 때, afx-2.0과 다른 점은
    1. muli statement가 되지 않아서 code가 길어졌습니다.
    2. key code가 다릅니다.
    3. repeat ~ while 문이 없어서 while ~ end문을 쓰다보니 S->0과 같은 변수 초기화를 해주어야 하네요. 그외에는 code는 대동소이합니다. 

code를 아래와 같습니다.  '->'는 →입니다. !=는 'not equal'입니다.

더보기
FILE:MEMORY
ClrText:100->Q
Lbl 0
For 1->I To 9
I->List 19[I]
Next
For 1->I To 9
Int (Ran# x10)->J
If J!=0:Then
List 19[I]->K
List 19[J]->List 19[I]
K->List 19[J]
EndIf:Next
0->List 19[10]
For 1->I To 9
I->List 19[10+I]
Next
For 1->I To 9
Int (Ran# x10)->J
If J!=0:Then
List 19[10+I]->K
List 19[10+J]->List 19[10+I]
K->List 19[10+J]
EndIf:Next

0->W:0->R
For 2->I To 6 Step 2
For 2->J To 6 Step 2
Locate I,J,0
Locate 10+I,J,0
Next:Next

Lbl 1
Locate 9,4,"<"
Locate 10,4,"-"
Do:LpWhile Getkey!=0
Do:Getkey->S
If S=47:Then Return:IfEnd
If S!=0:Then S->X:0->Y:1->Z:Prog "~MDISP":Z->U:IfEnd
LpWhile S=0 Or Z<0
Locate 9,4,"-"
Locate 10,4,">"
Do:LpWhile Getkey!=0
Do:Getkey->T
If T!=0:Then T->X:10->Y:1->Z:Prog "~MDISP":Z->V:IfEnd
LpWhile T=0 Or Z<0
Do:LpWhile Getkey!=0
Do:Getkey->K:LpWhile K=0
If U!=V:Then 0->Z
Else W+1->W:2->Z:IfEnd
S->X:0->Y:Prog "~MDISP"
T->X:10->Y:Prog "~MDISP"
R+1->R
Locate 2,7,"TRIAL:     "
Locate 9,7,R
If W<9:Then Goto 1:IfEnd
If Q>R:Then R->Q
Locate 2,7,"BEST : "
Locate 9,7,R
IfEnd
Goto 0

FILE:~MDISP
0->A
If X=74:Then
Y+2->A:2->B:Y+7->C
IfEnd
If X=73:Then
Y+2->A:4->B:Y+4->C
IfEnd
If X=72:Then
Y+2->A:6->B:Y+1->C
IfEnd
If X=64:Then
Y+4->A:2->B:Y+8->C
IfEnd
If X=63:Then
Y+4->A:4->B:Y+5->C
IfEnd
If X=62:Then
Y+4->A:6->B:Y+2->C
IfEnd
If X=54:Then
Y+6->A:2->B:Y+9->C
IfEnd
If X=53:Then
Y+6->A:4->B:Y+6->C
IfEnd
If X=52:Then
Y+6->A:6->B:Y+3->C
IfEnd
If A=0:Then
-2->Z:Return:IfEnd
If List 19[C]=0:Then
-1->Z:Return:IfEnd
If Z=2:Then 
0->List 19[C]:Return:IfEnd
If Z!=0:Then
List 19[C]->Z:IfEnd
Locate A,B,Z
Return

FX-9860에서 동작확인한 code입니다. (FA-124에서 IMPORT로 가져올 수 있습니다.)

MEMORY.G1M
0.00MB
MDISP.G1M
0.00MB

 

TI-83 plus에서 동작하는 code입니다. (text file. TI-83 plus에서 일일이 입력해야 합니다.)

memory_ti-83p.txt
0.00MB

이걸 Sharp EL-5230에 porting 할 수 있을지 생각중입니다. memory가 충분할 지...

( 2023/05/03 : fx-9860에서 동작하도록 Getkey buffer가 clear가 됨을 확인하는 code 추가. )

 

 

TI-84 plus에서 야구게임

계산기 2022. 10. 12. 23:15 posted by tolkien

- hp-39gs에서 야구게임

- sharp el-5230에서 야구게임

- algebra fx-2.0에서 야구게임

 

하는김에 탄력받아서...

가지고 있던 TI-84 plus에도 마찬가지로 porting해봤습니다.

  1. afx-2.0과 마찬가지로 if <condition>에서 OR 및 AND 연산자를 쓸 수 있습니다.
  2. Disp 명령을 쓸 수 있어서 이쁘지 않지만, 출력을 한줄로 처리할 수 있었습니다.
  3. GOTO문도 마찬가지.
  4. hp-39gs나 afx-2.0과 달리 multi statement를 지원하지 않아서 프로그램 line 수가 많습니다만, 편집하는 계산기의 column이 좁아서 큰 단점으로 느껴지지 않았습니다.

TI-84 plus는 casio fx-9860, hp-39gs와 비슷한 위치를 지닌 제품입니다. 단지 미국 수학교육 주교재 취급을 받고 있어서 가격이 비싼 편입니다. cpu는 z-80, 8bit cpu... (심지어, 칼라제품로 cpu는 z-80으로 알고 있습니다.)

 

code는 아래와 같습니다. '->'는 →입니다.

더보기
0->A
While A=0
iPart(rand*10)->A
End
0->B
While B=0 or B=A
iPart(rand*10)->B
End
0->C
While C=0 or C=A or C=B
iPart(rand*10)->C
End

Lbl 0
Input "GUESS: ",G
If G=-1
Then
Disp A*100+B*10+C
End
iPart(G/100)->D
fPart(G/10)*10->F
(G-100*D-F)/10->E
0->R
0->S
If D=B or D=C
Then
R+1->R
Else
If D=A
Then
S+1->S
End
End
If E=A or E=C
Then
R+1->R
Else
If E=B
Then
S+1->S
End
End
If F=A or F=B
Then
R+1->R
Else
If F=C
Then
S+1->S
End
End
If S=3
Then
Disp "GOOD JOB"
Return
End
Disp S,"STRIKE",R,"BALL"
Goto 0

baseball_ti-84.txt
0.00MB