HolaLee.dpr
program
HolaLee;
uses Dialogs; |
Para preparar este programa:
Proceda igual que para el Programa HolaCons, pero asignando el nombre HolaLee |
type tipo = (entero, flotante,doble); | Definición de tipo como tipo enumerado. |
var s, nombre, apellido:
string;
edad, coderr: integer; peso, estatura: real; estado: boolean; |
Variables definidas para alojar valores de atributos de cada alumno. |
procedure
EntradaDato
(Letrero, Mensaje: string; Var x; li, ls: double; t: tipo); var n: integer; a: real; b: double; begin
|
Procedimiento:
Código reutilizable, en este caso para lectura y validación
de datos. Cada utilización se configura con argumentos asignados
a los parámetros formales.
Observe la declaración del parámetro x, precedido por la palabra var, lo que indica que se trata de una referencia a la variable que se use como argumento en el entorno donde se invoque -se llame- al procedimiento. Los valores de parámetros sin calificativo se guardan localmente y sólo son modificables internamente. |
estado:=InputQuery(Letrero,Mensaje,s); | InputQuery: función residente en la Unit Dialogs. Si el usuario no cancela, recoge valor del string introducido y lo entrega por el argumento de referencia a la variable global s. |
if
estado
then
begin case t of entero: begin |
El parámetro t es de tipo enumerado tipo, por lo tanto es también de tipo ordenado y su valor puede usarse como discriminador en una instrucción case. |
Val(s,n,coderr); b:=n; | El procedimientoVal
convierte el valor del primer parámetro de tipo string a valor numérico,
el cual retorna por la referencia del segundo parámetro.
La conversión la hace de acuerdo al tipo del argumento correspondiente
a este segundo parámetro. En caso de encontrarse algún caracter
inválido, se retorna en el tercer parámetro su posición
relativa al
origen del string. Si no, se retorna 0. Equivalentemente se pueden usar las funciones StrTo.... (Unit SysUtils) para convertir a diversos tipos. En ese caso para detectar error de conversión, hay que ponerlas dentro de un bloque de manejo de excepciones try ... except. (Ver Help de Delphi) |
end;
flotante: begin Val(s,a,coderr);b:=a; end; doble: begin Val(s,b,coderr); end; end; {case} if coderr <> 0 then estado:=false else if (b < li) or (b > ls) then estado:=false; end; until estado; |
Observe las otras aplicaciones
del procedimiento Val
para conversión a otros tipos numéricos.
Observe también como la instrucción de control repeat ... until obliga al usuario a continuar introduciendo el dato requerido hasta que sea correcto. |
case
t of
entero: Integer(x):=Trunc(b); flotante: Real(x):=b; doble: Double(x):=b; end; |
Observe las asignaciones
a la referencia x
de tipo indefinido utilizando la facilidad de
typecast,
la cual permite forzar a que el argumento de la expresión sea tratado
de acuerdo al identificador de tipo especificado por el typecast.
Se puede usar typecast de variables tanto a la derecha como a la izquierda en expresiones de asignación. |
end; | Fin de definición del procedimiento EntradaDato. |
// Cuerpo
programa principal
begin nombre:=InputBox('Identificación', 'Escribe tu nombre','Alumno'); apellido:=''; estado:=InputQuery('Identificación', 'Escribe tu apellido',apellido); if (not estado) or (apellido = '') then apellido:='Nivelación Postgrado'; ShowMessage('Hola '+nombre+' '+apellido); |
Observe el comentario
estilo lenguaje C++, disponible en Delphi además de los estilos
tradiconales de Pascal {...} y TurboPascal (* ... *).
Observe las llamadas a las funciones InputBox y ShowMessage, ambas residentes en la Unit Dialogs. Consulte el Help. Si el usuario no asigna nombre o apellido, se asignan valores por defecto. |
EntradaDato('Edad','Escribe
tu edad',
edad,20,80,entero); EntradaDato('Peso en Kg.','Escribe tu peso', peso,50,120,flotante); EntradaDato('Estatura en cm.', 'Escribe tu estatura', estatura,140,200,doble); ShowMessageFmt ('Edad: %d años Peso: %f Kg. Estatura %f cm.', [edad,peso,estatura]); |
Observe las llamadas a
la función definida por el programador EntradaDato
con la asignación de valores a los parámetros para adpatarla
a cada requerimiento de datos.
Observe la llamada a las función ShowMessageFmt, residente en la Unit Dialogs. Observe el uso de string de formato estilo lenguaje C y la forma del argumento para el segundo parámetro de tipo array of const. Consulte el Help. |
end. | Fin de definición del programa. |