Conversor de Temperatura
En el siguiente proyecto se elaborará un conversor de temperaturas para demostrar el uso de bucles, concatenación de texto y variables.
Creación del Proyecto
Para crear el proyecto utilizamos el comando init
.
$ alr init --bin temperature
Resultado Esperado
Al ejecutar el programa debería mostrar la siguiente tabla:
F° C°
0 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148
Donde los grados celcius corresponden a la siguiente fórmula:
Código con Integer
El código para lograr el resultado es el siguiente:
with Ada.Text_IO;
procedure Temp is
use Ada.Text_IO;
fahrenheit, celcius : Integer;
lower, upper, step : Integer;
begin
lower := 0;
upper := 300;
step := 20;
Put_Line(" F°" & ASCII.HT & "C°");
fahrenheit := lower;
while (fahrenheit <= upper) loop
celcius := 5 * (fahrenheit - 32) / 9;
Put_Line(fahrenheit'Image & ASCII.HT & celcius'Image);
fahrenheit := fahrenheit + step;
end loop;
end Temp;
Línea | Descripción |
---|---|
|
Se definen dos variables del tipo entero para almacenar la temperatura. |
|
Se define variables para controlar los límites inferior, superior e incremento. |
|
Se establece los valores iniciales de los límites inferior, superior e incremento. |
|
Se muestra en consola las cabeceras de la tabla. |
|
Se asigna el valor inicial de la temperatura. |
|
Se realiza un bucle |
|
Se realiza el cálculo de la temperatura. |
|
Se muestra el mensaje separado por tabs ("\t") y retorno de carro ("\n"). |
|
Se incrementa el valor de la temperatura según la variable |
Código con Float
El código anterior solamente consideraba los números enteros, por lo que la precisión al convertir las temperaturas se perdía. Se debe modificar el código para considerar los tipos correctos.
with Ada.Text_IO;
with Ada.Float_Text_IO;
procedure Temp is
use Ada.Text_IO;
use Ada.Float_Text_IO;
fahrenheit, celcius : Float;
lower, upper, step : Float;
begin
lower := 0.0;
upper := 300.0;
step := 20.0;
Put_Line(" F°" & ASCII.HT & "C°");
fahrenheit := lower;
while (fahrenheit <= upper) loop
celcius := 5.0 * (fahrenheit - 32.0) / 9.0;
Put(Item => fahrenheit, Fore => 5, Aft => 1, Exp => 0);
Put(Item => celcius, Fore => 5, Aft => 1, Exp => 0);
New_Line;
fahrenheit := fahrenheit + step;
end loop;
end Temp;
Todas las operaciones deben ser añadidos los decimales, debido a que Ada debe ser explícito la conversión. |
La línea |