この例では、ユーザに数値を入力させ、それを元に計算を実行し、結果を新しいウィンドウに表示します。
「Prime Numbers.jsl」は、ユーザに整数の入力を促し、素因数分解の結果、もしくは、その整数は素数であるというメッセージを、新しいウィンドウに表示します(Figure 17.5)。このスクリプトでは、異なる種類のディスプレイボックスを整列したり、テキストを結合したり、条件関数を用いたりしています。
/* How do you gather numeric input from the users, perform a
calculation on that input, and show the results in a new window?
This script demonstrates how to create an interactive program that asks the user
to enter a number and then factors the number or confirms it as a prime number. */
// Ask the user to enter a name and number.
nw = New Window( "Factoring Fun",
V List Box(
Text Box( "Choose a number between 2 and 100, inclusive. " ),
Spacer Box( Size( 25, 25 ) )
),
V List Box(
Lineup Box(
2,
Text Box( "Your name " ),
uname = Text Edit Box( "< name > ", << Justify Text( Center ) ),
Text Box( "Your choice " ),
uprime = Number Edit Box( 2 )
),
Spacer Box( Size( 25, 25 ) ),
H List Box(
Button Box( "OK",
// Unload responses.
username = uname << Get Text;
fromUser0 = uprime << Get;
// Test input for out of range condition.
If( fromUser0 <= 1 | fromUser0 > 100,
// Send message to user that input value is out of range.
nw2 = New Window( " Factoring Fun: Message for "
|| username,
<<Modal,
Text Box(
"The number you chose, " || Char( fromUser0 ) ||
" is not between 2 and 100, inclusive.
Please try
again. "
),
Button Box( "OK" )
),
/* Else the number is within range.
Test for a prime number.If not prime, factor it.
Create a vector which holds the prime numbers
within specified range. */
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];
// Count the number of primes in the vector.
p# = N Row( primes );
isprime = 0; // Set flag.
// Make a copy of the value for processing.
fromuser1 = fromuser0;
factors = {}; // Initialize list.
/* Process the value by checking for prime then
factoring if needed. */
While( isPrime == 0,
// Compare value to vector of prime numbers.
If( Any( fromuser0 == primes ),
// If found, place value in factor list.
Insert Into( factors, fromUser0 );
isPrime = 1 // Set condition to exit While loop.
;
); // End For loop.
If( isprime == 0,
For( q = 1, q <= p#, q++,
If( Mod( fromuser0, primes[q] ) == 0,
fromUser0 = fromUser0 / primes[q];
Insert Into( factors, primes[q] );
q = p# + 1 // End if-then loop.
;
); // End If loop.
); // End For loop.
); // End If/Then loop.
); // End while loop.
cfUser0 = Char( fromUser1 );
nf = N Items( factors );
If( nf >= 2,
fmsg = "The number you have chosen has the following
factors: ",
fmsg = "The number you have chosen is a prime number: "
);
// Show message to user about results.
nw3 = New Window( " Factoring Fun - Your Results",
<<Modal,
Text Box( username || ", you chose: " || cfUser0 ),
Spacer Box( Size( 25, 25 ) ),
Text Box( fmsg || " " || Char( factors ) ),
Spacer Box( Size( 25, 25 ) ),
Button Box( "OK" )
);
);
), // End the main OK button script.
// Close the window and the program.
Button Box( "Cancel", nw << Close Window )
)
)
);
図17.5 素因数分解の結果