11
$\begingroup$

Say I'm trying to make a simple multiplication table and used

Table[i"x"j"="i*j,{i,1,9},{j,1,9}]

I'm trying to make it so that I can get a table of equations, but Mathematica keeps simplifying it so that 1x2 = 2 becomes 4=x.

$\endgroup$
  • 1
    $\begingroup$ You need some ToStrings and StringJoins thrown in to do it right. Try: Table[ToString@i <> "x" <> ToString@j <> "=" <> ToString[i j], {i, 1, 9}, {j, 1, 9}] $\endgroup$ – rm -rf Sep 29 '12 at 23:14
  • $\begingroup$ Try Inactivate $\endgroup$ – Wjx Jun 9 '17 at 6:14
12
$\begingroup$

You can use ToString and StringJoin to "correct" your approach as in my comment above. Another possibility of displaying it without using strings (my preferred way) is:

Outer[HoldForm[#1 #2 ] == #1 #2 &, #, #] &@Range@9 // TableForm
$\endgroup$
  • $\begingroup$ Nice. I forgot about HoldForm. +1 $\endgroup$ – Matariki Sep 29 '12 at 23:20
  • $\begingroup$ You, sir, are a lifesaver. I knew the solution was simple, but I wasn't thinking straight for a while for some reason. Again, thank you so much. $\endgroup$ – David Sep 29 '12 at 23:23
  • 2
    $\begingroup$ One can also use Array[] for the purpose: Array[HoldForm[#1 #2] == #1 #2 &, {9, 9}] // Grid. $\endgroup$ – J. M. is away Sep 30 '12 at 1:25
10
$\begingroup$

Row is useful for building up expressions that mix strings and non-strings without converting everything to strings:

Table[Row[{i, "×", j, "=", i*j}], {i, 1, 9}, {j, 1, 9}]

multiplication table

$\endgroup$
9
$\begingroup$

StringForm[] is a very convenient function for the purpose:

Array[StringForm["`1`×`2`=`3`", #1, #2, #1 #2] &, {9, 9}] // TableForm

multiplication table

$\endgroup$
9
$\begingroup$

Remember to convert your numbers to strings (ToString) and to join the strings with StringJoin (<>)

For example:

Table[
 ToString@i <> "×" <> ToString@j <> "=" <> ToString[i*j], {i, 1, 
  9}, {j, 1, 9}]

(* Out:
{{"1×1=1", "1×2=2", "1×3=3", "1×4=4", "1×5=5", "1×6=6", "1×7=7", "1×8=8", "1×9=9"},
 {"2×1=2", "2×2=4", "2×3=6", "2×4=8", "2×5=10", "2×6=12", "2×7=14", "2×8=16", "2×9=18"},
 {"3×1=3", "3×2=6", "3×3=9", "3×4=12", "3×5=15", "3×6=18", "3×7=21", "3×8=24", "3×9=27"},
 {"4×1=4", "4×2=8", "4×3=12", "4×4=16", "4×5=20", "4×6=24", "4×7=28", "4×8=32", "4×9=36"},
 {"5×1=5", "5×2=10", "5×3=15", "5×4=20", "5×5=25", "5×6=30", "5×7=35", "5×8=40", "5×9=45"},
 {"6×1=6", "6×2=12", "6×3=18", "6×4=24", "6×5=30", "6×6=36", "6×7=42", "6×8=48", "6×9=54"},
 {"7×1=7", "7×2=14", "7×3=21", "7×4=28", "7×5=35", "7×6=42", "7×7=49", "7×8=56", "7×9=63"},
 {"8×1=8", "8×2=16", "8×3=24", "8×4=32", "8×5=40", "8×6=48", "8×7=56", "8×8=64", "8×9=72"},
 {"9×1=9", "9×2=18", "9×3=27", "9×4=36", "9×5=45", "9×6=54", "9×7=63", "9×8=72", "9×9=81"}}
*)
$\endgroup$
7
$\begingroup$

Here's a variant using Defer, it requires a little trickery using the replacement facilities of With, though. But, again, no strings.

Table[With[{a = i, b = j, res = i*j}, Defer[a*b = res]], {i, 1, 3}, {j, 1, 3}]
(*
{{1 1 = 1, 1 2 = 2, 1 3 = 3}, 
 {2 1 = 2, 2 2 = 4, 2 3 = 6}, 
 {3 1 = 3, 3 2 = 6, 3 3 = 9}}
*)
$\endgroup$
5
$\begingroup$

Lately, I've been answering questions using Inactive, so here's an Inactive approach:

Table[Inactive[Times][i, j] == i*j, {i,1,9}, {j,1,9}]

{{1*1==1,1*2==2,1*3==3,1*4==4,1*5==5,1*6==6,1*7==7,1*8==8,1*9==9},{2*1==2,2*2==4,2*3==6,2*4==8,2*5==10,2*6==12,2*7==14,2*8==16,2*9==18},{3*1==3,3*2==6,3*3==9,3*4==12,3*5==15,3*6==18,3*7==21,3*8==24,3*9==27},{4*1==4,4*2==8,4*3==12,4*4==16,4*5==20,4*6==24,4*7==28,4*8==32,4*9==36},{5*1==5,5*2==10,5*3==15,5*4==20,5*5==25,5*6==30,5*7==35,5*8==40,5*9==45},{6*1==6,6*2==12,6*3==18,6*4==24,6*5==30,6*6==36,6*7==42,6*8==48,6*9==54},{7*1==7,7*2==14,7*3==21,7*4==28,7*5==35,7*6==42,7*7==49,7*8==56,7*9==63},{8*1==8,8*2==16,8*3==24,8*4==32,8*5==40,8*6==48,8*7==56,8*8==64,8*9==72},{9*1==9,9*2==18,9*3==27,9*4==36,9*5==45,9*6==54,9*7==63,9*8==72,9*9==81}}

$\endgroup$
2
$\begingroup$

For completeness, since V10. we can use StringTemplate or friends:

Array[
    StringTemplate["`1`×`2`= <*# #2*>"]
  , {9, 9}
] // TableForm
$\endgroup$
0
$\begingroup$

Strings in Mathematica have a problem with multilevel formulas like fractions:

enter image description here

It is better to use CellPrint[ExpressionCell[<your formula>, "Output"]] which does not have such problems.

$\endgroup$
  • $\begingroup$ Not true, depends what do you do: ToString[1/2], ToString[1/2, InputForm], ToString[1/2, StandardForm] $\endgroup$ – Kuba Jun 9 '17 at 6:40
  • $\begingroup$ I did just simple ToString@(a/b) and it makes #%&^& $\endgroup$ – Rom38 Jun 9 '17 at 6:56
  • $\begingroup$ That is the output form, but it is not the only one available. Please watch your language :) $\endgroup$ – Kuba Jun 9 '17 at 6:57
  • $\begingroup$ @Kuba Disgusting language indeed. In order to make it suitable for this site we must supply the infix Power operator with a second argument, e.g. like so: #%&^#&. Usage, e.g., like so: In: 3; In: #%&^#&[1][2] Out: 6 Rom38, please see What the @#%^&*?! do all those funny signs mean? and next time sanitize your input :-) $\endgroup$ – LLlAMnYP Sep 18 '18 at 10:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.