How to display a table in Scilab with mprintf() function

Scilab is very powerful and versatile when working with data, especially in matrix format. As a Scilab developer you might need to write a script, for a particular algorithm, which needs to display data in the Scilab console in a table format.

How to install Scilab

The embedded Scilab function mprintf() can do this easily and efficient.

For example let’s say that we need to display the table below:

Temperature
[°C]
Temperature
[K]
Temperature
[°F]
-40 233.15 -40.00
-30 243.15 -22.00
-20 253.15 -4.00
-10 263.15 14.00
0 273.15 32.00
10 283.15 50.00
20 293.15 68.00
30 303.15 86.00
40 313.15 104.00
50 323.15 122.00
60 333.15 140.00
70 343.15 158.00
80 353.15 176.00
90 363.15 194.00
100 373.15 212.00

The table above shows the conversion of the temperature from degrees Celsius [°C] to Kelvin [K] and degrees Fahrenheit [°F].

To recall the formulas for temperature conversion, read the article Temperature.

The Scilab script which displays the table above in the console, using the mprintf() function is:

clc

T_degC = [-40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100];
T_K = T_degC + 273.15;
T_degF = T_degC * (9/5) + 32;

mprintf("\nTemperature\tTemperature\tTemperature \n");
mprintf("[Celsius]\t[Kelvin]\t[Fahrenheit]\n");

for i=1:length(T_degC)
 mprintf("%d \t\t %.2f \t %.2f \n", T_degC(i), T_K(i), T_degF(i));
end

The first line calls the clc() function to clear the Scilab console. We use it to be sure that we have a clean Scilab console before we display our table.

The vector variable T_degC contains all the values of the temperature in °C, starting from -40 to 100, with increments of 10 °C. We could also generate this vector automatically by using the embedded Scilab function linspace():

-->linspace(-40,100,15)
 ans  =
         column  1 to 11
  - 40. - 30. - 20. - 10. 0. 10. 20. 30. 40. 50. 60.  
         column 12 to 15
    70. 80. 90. 100.  
-->

The variable T_K contains all the temperature values in Kelvin. The variable T_degF contains all the temperature values in degrees Fahrenheit. For both we use the appropriate temperature conversion formulas.

Our table needs a header which describes the content of each column. In our script we split the table header into two lines. First line contains the keyword Temperature three times:

mprintf("\nTemperature\tTemperature\tTemperature \n");

The first escape sequence \n starts a new line to display the table header. Each escape sequence \t adds a horizontal tab between two Temperature keywords. At the end we use another \n escape sequence to move the cursor at the beginning of the next line.

The following line adds the temperature unit for each of the Temperature columns:

mprintf("[Celsius]\t[Kelvin]\t[Fahrenheit]\n");

We use the \t escape sequence to add a horizontal tab between columns. At the end we add a \n escape sequence to move the cursor to the next line.

The display of the data is done using a for loop.

for i=1:length(T_degC)
 mprintf("%d \t\t %.2f \t %.2f \n", T_degC(i), T_K(i), T_degF(i));
end

With the instruction length(T_degC) we calculate the number of values contained in the temperature vector.

At each iteration of the for loop, we display a line in the Scilab console. Again we make sure to use \t and \n escape sequences to position the cursor in the right place before displaying the temperature value.

After running the script we get the following output in the Scilab console.

Temperature    Temperature    Temperature
[Celsius]      [Kelvin]       [Fahrenheit]
-40            233.15         -40.00
-30            243.15         -22.00
-20            253.15         -4.00
-10            263.15         14.00
0              273.15         32.00
10             283.15         50.00
20             293.15         68.00
30             303.15         86.00
40             313.15         104.00
50             323.15         122.00
60             333.15         140.00
70             343.15         158.00
80             353.15         176.00
90             363.15         194.00
100            373.15         212.00

For any questions, observations and queries regarding this article, use the comment form below.

Don’t forget to Like, Share and Subscribe!

Leave a Reply

Ad Blocker Detected

Dear user, Our website provides free and high quality content by displaying ads to our visitors. Please support us by disabling your Ad blocker for our site. Thank you!

Refresh