Dynamic variable names: Difference between revisions

Added FreeBASIC
(Lingo added)
(Added FreeBASIC)
Line 203:
pad swap 9 + evaluate</lang>
Of course, it is easier for the user to simply type VARIABLE ''name'' at the Forth console.
 
=={{header|FreeBASIC}}==
FreeBASIC is a statically typed, compiled language and so it is not possible to create new variables, dynamically, at run time. However, you can make it look to the user like you are doing so with code such as the following. Ideally, a 'map' should be used for an exercise such as this but, as there isn't one built into FB, I've used a dynamic array instead which is searched linearly for the variable name.
 
<lang freebasic>' FB 1.05.0 Win64
 
Type DynamicVariable
As String name
As String value
End Type
 
Function FindVariableIndex(a() as DynamicVariable, v as String, nElements As Integer) As Integer
v = LCase(Trim(v))
For i As Integer = 1 To nElements
If a(i).name = v Then Return i
Next
Return 0
End Function
 
Dim As Integer n, index
Dim As String v
Cls
 
Do
Input "How many variables do you want to create (max 5) "; n
Loop Until n > 0 AndAlso n < 6
 
Dim a(1 To n) As DynamicVariable
Print
Print "OK, enter the variable names and their values, below"
 
For i As Integer = 1 to n
Print
Print " Variable"; i
Input " Name : ", a(i).name
a(i).name = LCase(Trim(a(i).name)) ' variable names are not case sensitive in FB
If i > 0 Then
index = FindVariableIndex(a(), a(i).name, i - 1)
If index > 0 Then
Print " Sorry, you've already created a variable of that name, try again"
i -= 1
Continue For
End If
End If
Input " Value : ", a(i).value
a(i).value = LCase(Trim(a(i).value))
Next
 
Print
Print "Press q to quit"
Do
Print
Input "Which variable do you want to inspect "; v
If v = "q" OrElse v = "Q" Then Exit Do
index = FindVariableIndex(a(), v, n)
If index = 0 Then
Print "Sorry there's no variable of that name, try again"
Else
Print "It's value is "; a(index).value
End If
Loop
End</lang>
 
Sample input/output :
{{out}}
<pre>
How many variables do you want to create (max 5) ? 3
 
OK, enter the variable names and their values, below
 
Variable 1
Name : a
Value : 1
 
Variable 2
Name : b
Value : 2
 
Variable 3
Name : b
Sorry, you've already created a variable of that name, try again
 
Variable 3
Name : c
Value : 4
 
Press q to quit
 
Which variable do you want to inspect ? b
It's value is 2
 
Which variable do you want to inspect ? c
It's value is 4
 
Which variable do you want to inspect ? a
It's value is 1
 
Which variable do you want to inspect ? q
</pre>
 
=={{header|GAP}}==
9,490

edits