Aunque ya la hemos estado utilizando en muchos ejercicios, vamos a estudiar un poco más en profundidad cómo funciona la consola en jC.
Además de pintar, jC también es capaz de pedir e imprimir texto. Esto se denomina "consola", pues es la forma estándar de comunicarse con un ordenador: introduciendo órdenes por el teclado y observando el resultado por la pantalla.
Las funciones que tenemos a nuestra disposición para manejarnos con la consola son precisamente dos:
- print( <expr> ): Permite mostrar cualquier valor por la pantalla. Hay dos variantes: print() y println(), la segunda realiza un salto de línea tras imprimir.
Ejemplo
print( "Tu nombre es: " );
println( nombre );
-
readln( <msg> ): Devuelve la cadena de texto introducida por el usuario. El mensaje permite que el usuario conozca qué datos se le están preguntando.
Ejemplo
def nombre = readln( "Introduce tu nombre: " );
print( "Hola, " );
println( nombre );
Dado que lo que devuelve readln() es una cadena, el código anterior es equivalente a:
Ejemplo
char[] nombre = readln( "Introduce tu nombre: " );
print( "Hola, " );
println( nombre );
No siempre querremos obtener cadenas de texto por parte del usuario. En ocasiones, querremos preguntarle datos numéricos, como por ejemplo, una edad o una altura. Aunque sólo es posible leer cadenas de texto de la consola, siempre es posible convertirlas a un número, bien sea este entero (
int) o real (
double).
En la librería estándar
std.string, tenemos a nuestra disposición las funciones
strToInt() y
strToDbl(), que convierten una cadena pasada por parámetro en un número, entero y real, respectivamente.
Realizaremos ahora un programa completo, que permita convertir grados celsius en farenheit, y viceversa. Para convertir los grados celsius (c) en farenheit (f), es necesario aplicar la fórmula:
f = ( c * 1,8 ) + 32
Para realizar la conversión inversa, de farenheit (f) a celsius (c):
c = ( f - 32 ) / 1,8
Es muy fácil escribir, por tanto dos funciones que hagan las conversiones respectivas. Dado que los grados llevan posiciones decimales, es necesario que las variables a utilizar sean de tipo número real (
double).
double cnvtGradosCelsiusFarenheit(double x)
{
return ( ( x * 1.8 ) + 32 );
}
double cnvtGradosFarenheitCelsius(double x)
{
return ( ( x - 32 ) / 1.8 );
}
Sólo resta, por tanto, pedir una cadena de texto, y convertirla a un número real (double), esto puede hacerse de manera muy sencilla:
def grados = strToDbl( readln( "Introduce unos grados: " ) );
Una vez que se ha llamado a las funciones anteriores con la variable
grados, sólo es necesario imprimir el resultado. El programa completo aparece a continuación:
/** @name conversorGrados
* @brief Convierte los grados celsius a farenheit y vicecersa.
* @author jbgarcia@uvigo.es
* @date 2013-11-21
*/
import std.io;
import std.string;
double cnvtGradosCelsiusFarenheit(double x)
{
return ( ( x * 1.8 ) + 32 );
}
double cnvtGradosFarenheitCelsius(double x)
{
return ( ( x - 32 ) / 1.8 );
}
def grados = strToDbl( readln( "Introduce unos grados: " ) );
print( "Los grados celsius introducidos son grados farenheit: " );
println( cnvtGradosCelsiusFarenheit( grados ) );
print( "Los grados farenheit introducidos son grados celsius: " );
println( cnvtGradosFarenheitCelsius( grados ) );