Multiplication tables: Difference between revisions

Added D code
(Added R code)
(Added D code)
Line 263:
(format t " "))))))
</lang>
 
=={{header|D}}==
Note that the code could use some cleaning. Just like the C++ example, this too is in generalized form.
 
It uses C's printf to reduce the number of imported modules. In order to use std.stdio.writefln, all "%.*s" should be converted to "%s" (but NOT "%*d").
<lang d>import std.string;
 
void printTable(uint minsize, uint maxsize)
{
uint maxlen = toString(maxsize * maxsize).length;
 
uint x, y;
 
char[] hline = new char[](maxlen);
hline[] = '-';
char[] hspace = new char[](maxlen);
hspace[] = ' ';
 
for(x = minsize; x <= maxsize+1; x++)
printf("+%.*s", hline);
printf("+\n|%.*sx%.*s", hspace[0..$/2], ((hspace.length % 2) == 1) ? hspace[0..$/2] : hspace[0..$/2-1]);
for(x = minsize; x <= maxsize; x++)
printf("|%*d", maxlen, x);
printf("|\n");
for(x = minsize; x <= maxsize+1; x++)
printf("+%.*s", hline);
printf("+\n");
for(y = minsize; y <= maxsize; y++)
{
printf("|%*d", maxlen, y);
for(x = minsize; x <= maxsize; x++)
{
if(x >= y)
printf("|%*d", maxlen, x * y);
else
printf("|%.*s", hspace);
}
printf("|\n");
}
for(x = minsize; x <= maxsize+1; x++)
printf("+%.*s", hline);
printf("+\n");
}
 
void main()
{
printTable(1, 12);
}</lang>
 
Output:
<pre>
+---+---+---+---+---+---+---+---+---+---+---+---+---+
| x | 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12|
+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12|
| 2| | 4| 6| 8| 10| 12| 14| 16| 18| 20| 22| 24|
| 3| | | 9| 12| 15| 18| 21| 24| 27| 30| 33| 36|
| 4| | | | 16| 20| 24| 28| 32| 36| 40| 44| 48|
| 5| | | | | 25| 30| 35| 40| 45| 50| 55| 60|
| 6| | | | | | 36| 42| 48| 54| 60| 66| 72|
| 7| | | | | | | 49| 56| 63| 70| 77| 84|
| 8| | | | | | | | 64| 72| 80| 88| 96|
| 9| | | | | | | | | 81| 90| 99|108|
| 10| | | | | | | | | |100|110|120|
| 11| | | | | | | | | | |121|132|
| 12| | | | | | | | | | | |144|
+---+---+---+---+---+---+---+---+---+---+---+---+---+
</pre>
 
=={{header|E}}==