Casio Basic program, mely lehetővé teszi az RPN (reverse polish notation - fordított lengyel jelölés) adatbevitelt, és végrehajtja a számítást. Három részprogramból áll: RPN a főprogram (ez végzi a kezdőképernyő megjelenítését és a lenyomott billentyűk beolvasását, és meghívja a másik két programot), RPNTRANS alprogram, amely a bevitt billentyű-kódokból kialakít egyfajta RPN mátrixot, az RPNCALC pedig a számítást végzi el. A programon még lehet szépíteni, alakítgatni, ez egy kezdetleges (de már működőképes) változat. A 3 program mérete együtt alig több 1 kilobyte-nál.
Írta: Csetneki Sándor
képernyőkép
Prog "RPN"
Lbl 0;
ClrText;
For 1 -> A To 40: Next;
Locate 1,1,"-- CASIO BASIC RPN --";
Locate 1,7,"F1: CALC F5: CLR F6: DEL";
21 -> Dim List 1;
1 -> A;
Lbl 1;
Do;
Getkey -> B;
LpWhile B = 0;
10 -> W;
If B = 31;
Then Locate A,3,":";
-7 -> W;
IfEnd;
If B = 61;
Then Locate A,3,".";
-6 -> W;
IfEnd;
If B = 41;
Then Locate A,3,"-";
-5 -> W;
IfEnd;
If B = 42;
Then Locate A,3,"+";
-1 -> W;
IfEnd;
If B = 32;
Then Locate A,3,"-";
-2 -> W;
IfEnd;
If B = 43;
Then Locate A,3,"x";
-3 -> W;
IfEnd;
If B = 33;
Then Locate A,3,"/";
-4 -> W;
IfEnd;
B = 71 => 0 -> W;
B = 72 => 1 -> W;
B = 62 => 2 -> W;
B = 52 => 3 -> W;
B = 73 => 4 -> W;
B = 63 => 5 -> W;
B = 53 => 6 -> W;
B = 74 => 7 -> W;
B = 64 => 8 -> W;
B = 54 => 9 -> W;
W >= 0 And W <= 9 => Locate A,3,W;
If W != 10
Then W -> List 1[A;
A+1 -> A;
IfEnd;
*********** teljes törlés ***********
B = 39 => Goto 0;
*********** törlés ***********
If B = 29
Then A > 1 => A-1 -> A;
Locate A,3," ";
IfEnd;
*********** számítás ***********
If B = 79
Then -8 -> List 1[A;
Prog "RPNTRANS";
Prog "RPNCALC";
Locate 1,5,"RESULT: ";
Locate 9,5,List 2[1;
IfEnd;
Goto 1;
RPNTRANS program:
{30,2 -> Dim Mat A;
{30,2 -> Dim Mat B;
1 -> X;
0 -> V;
0 -> T;
1 -> E;
0 -> I;
While List 1[X] != -8;
List 1[X -> B;
X+1 -> X;
B>=0 And B<=9 And T=0 => 10*V+B -> V;
If B>=0 And B<= 9 And T=1;
Then V+WB -> V;
.1W -> W;
IfEnd;
If B= -5;
Then -1 -> E;
IfEnd;
If B= -6;
Then 1 -> T;
0.1 -> W;
IfEnd;
If B<0 And B!= -8 And B!= -6 And B!= -5
Then I+1 -> I;
E*V -> Mat A[I,1;
1 -> Mat A[I,2;
0 -> V;
0 -> T;
1 -> E;
I+1 -> I;
If B >= -4 And B <= -1
Then Abs B -> Mat A[I,1;
0 -> Mat A[I,2;
IfEnd;
IfEnd;
WhileEnd;
I+1 -> I;
3 -> Mat A[I,1;
3 -> Mat A[I,2;
1 -> I;
1 -> J;
While Mat A[I,2]!=3;
Mat A[I,1 -> B;
Mat A[I,2 -> C;
If A!=0 And B!=0
Then B -> Mat B[J,1;
C-> Mat B[J,2;
J+1 ->J;
IfEnd;
I+1 -> I;
WhileEnd;
3 -> Mat B[J,2;
Mat B -> Mat A
RPNCALC
30 -> Dim List 2;
1 -> X;
While Mat A[X,2] != 3;
Mat A[X,1 -> B;
Mat A[X,2 -> C;
X+1 ->X;
If C = 1
Then List 2[5 -> List 2[6;
List 2[4 -> List 2[5;
List 2[3 -> List 2[4;
List 2[2 -> List 2[3;
List 2[1 -> List 2[2;
B -> List 2[1;
IfEnd;
If C = 0
Then List 2[2 -> M;
List 2[1 -> N;
B=1 => M+N -> D;
B=2 => M-N -> D;
B=3 => M*N -> D;
B=4 => M/N -> D;
List 2[3 -> List 2[2;
List 2[4 -> List 2[3;
List 2[5 -> List 2[4;
List 2[6 -> List 2[5;
D -> List 2[1;
IfEnd;
WhileEnd