Middle three digits: Difference between revisions
Content added Content deleted
(Promote to full task from draft.) |
(Vedit macro language added) |
||
Line 165: | Line 165: | ||
middle_three_digits(0) returned: AssertionError('Need odd and >= 3 digits',) |
middle_three_digits(0) returned: AssertionError('Need odd and >= 3 digits',) |
||
>>> </lang> |
>>> </lang> |
||
=={{header|Vedit macro language}}== |
|||
<lang vedit>do { |
|||
#1 = Get_Num("Enter a number, or 0 to stop: ", STATLINE) |
|||
Ins_Text("Input: ") Num_Ins(#1, COUNT, 10) |
|||
Call("MIDDLE_3_DIGITS") |
|||
Ins_Text(" Result: ") Reg_Ins(10) Ins_Newline |
|||
Update() |
|||
} while (#1); |
|||
Return |
|||
// Find middle 3 digits of a number |
|||
// in: #1 = numeric value |
|||
// out: @10 = the result, or error text |
|||
// |
|||
:MIDDLE_3_DIGITS: |
|||
Buf_Switch(Buf_Free) |
|||
Num_Ins(abs(#1), LEFT+NOCR) // the input value as string |
|||
#2 = Cur_Col-1 // #2 = number of digits |
|||
if (#2 < 3) { |
|||
Reg_Set(10, "Too few digits!") |
|||
} else { |
|||
if ((#2 & 1) == 0) { |
|||
Reg_Set(10, "Not odd number of digits!") |
|||
} else { |
|||
Goto_Pos((#2-3)/2) |
|||
Reg_Copy_Block(10, Cur_Pos, Cur_Pos+3) |
|||
} |
|||
} |
|||
Buf_Quit(OK) |
|||
Return </lang> |
|||
Output: |
|||
<pre>Input: 123 Result: 123 |
|||
Input: 12345 Result: 234 |
|||
Input: 1234567 Result: 345 |
|||
Input: 987654321 Result: 654 |
|||
Input: 10001 Result: 000 |
|||
Input: -10001 Result: 000 |
|||
Input: -123 Result: 123 |
|||
Input: -100 Result: 100 |
|||
Input: 100 Result: 100 |
|||
Input: -12345 Result: 234 |
|||
Input: 1 Result: Too few digits! |
|||
Input: 2 Result: Too few digits! |
|||
Input: -1 Result: Too few digits! |
|||
Input: -10 Result: Too few digits! |
|||
Input: 2002 Result: Not odd number of digits! |
|||
Input: -2002 Result: Not odd number of digits! |
|||
Input: 0 Result: Too few digits! </pre> |
|||
=={{header|XPL0}}== |
=={{header|XPL0}}== |