Learning Machine #3 - Programando en Pascal - Variables.

Hola de nuevo a todos, el día de hoy vamos a continuar con más de programación en Pascal. En el post del día de hoy vamos a ver los tipos de datos que se pueden usar. En algunos post anteriores hemos visto algo similar, pero hoy veremos el caso concreto para pascal, ademas es importante repetir esto tantas veces cómo sea necesario para que nuestros programas estén lo más optimizados posibles en el uso de memoria.



Variables y sus tipos.

Al igual que en los otros lenguajes de programacion, en Pascal haremos uso de variables. Estas serán las encargadas de almacenar valores que posteriormente usaremos, pero dependiendo de cómo sea declarada, será el tipo de "datos" que se le pueda asignar.

Los datos y los valores que pueden almacenar son los siguientes:
TipoRangoTamańo en bytes
Byte0 .. 2551
Shortint-128 .. 1271
Smallint-32768 .. 327672
Word0 .. 655352
Integer******
Longint-2147483648 .. 21474836474
Longword0 .. 42949672954
Int64-9223372036854775808 .. 92233720368547758078
Qword0 .. 184467440737095516158
Char***1

Los datos anteriores solo corresponden a las variables del tipo "numérico" o tipos simples. Antes de avanzar hay que ver un poco sobre el tipo integer.
Cuando Pascal compila, el tipo integer dependerá de cual fue el objetivo de la compilación, usualmente, la mayoría de la gente está familiarizado con máquinas de 32 bits, pero existen 3 tipos de estándares, 16,32,64. Cuando se compila una aplicación cuyo objetivo es una máquina de 16 bits, pascal usará 16 bits (2 bytes) para almacenar los valores del tipo integer, esto nos dará una capacidad de -32,768 a 32,767, pero en cambio si nuestro objetivo es una máquina de 32 bits, se usaran 32 bits(valga la redundancia) y podrá almacenar desde  -2,147,483,648 a 2,147,683,647. En el caso de las máquinas de 64 bits ocurre exactamente lo mismo.

El otro caso que debemos de revisar es el tipo "Char", este puede almacenar un valor entre 0 a 255, pero solo es en teoría, porque este se usa para hacer referencia a un elemento del estándar ASCII y por ejemplo, si tratamos de hacer una operación matemática sobre una variable declarada cómo "char", el compilador nos marcará un error.

Para los tipos complejos, por ahora solo veremos el tipo "String". Este tipo se usa para almacenar cadenas de texto con una longitud de hasta 255 caracteres (aunque se puede ampliar), este es el tipo que se usara para poder trabajar con cadenas de texto.

Y bien, por ahora es todo, si bien aún hay algunos tipos más, por ahora estos serán más que suficiente para empezar a programar con pascal.

Los leo luego

Cumplimos un año!!

Hola a todos, el día de hoy solo escribo para agradecer a todos los que nos visitaron, visitan y visitaran.



Ha sido un largo trayecto desde el primer día hasta hoy. Solo me resta agradecer a las personas que me motivaron a iniciar con este proyecto (muy particularmente a una ;) ).

Continuaremos con los proyectos y actualizaciones pendientes y todos juntos avanzaremos hacia adelante.

Gracias a todos, Nos leeremos luego.

Learning Machine #2 - Programando en pascal - Fundamentos del lenguaje.

Hola de nuevo a todos, el día de hoy vamos a continuar con el aprendizaje del lenguaje de programación en pascal. En el post anterior vimos un poco sobre el ciclo de vida de un programa (para este y todo los lenguajes). En este post vamos a ver un poco más sobre Pascal.


Palabras reservadas.

Al igual que todos los otros lenguajes de programación, en Pascal se usan una serie de palabras que tienen una función en especifico y no puede ser usadas como nombres para variables.
La siguiente lista muestra las palabras reservadas en Free Pascal (su uso las veremos más adelante):

  • absolute
  • and
  • array
  • asm
  • begin
  • case
  • const
  • constructor
  • destructor
  • div
  • do
  • downto
  • else
  • end
  • file
  • for
  • function
  • goto
  • if
  • implementation
  • in
  • inherited
  • inline
  • interface
  • label
  • mod
  • nil
  • not
  • object
  • of
  • operator
  • or
  • packed
  • procedure
  • program
  • record
  • reintroduce
  • repeat
  • self
  • set
  • shl
  • shr
  • string
  • then
  • to
  • type
  • unit
  • until
  • uses
  • var
  • while
  • with
  • xor

Simbolos.

En el lenguaje de programación Pascal, se reconocen todos los símbolos en el estandar ASCII, pero ademas, los siguiente símbolos tienen un uso especial:
  • +
  • -
  • *
  • /
  • =
  • <
  • >
  • [ ]
  • .
  • ,
  • ( )
  • :
  • ^
  • @
  • { }
  • $
  • #
  • &
  • %
Y los siguientes pares de símbolos también:
  • <<
  • >>
  • **
  • <>
  • ><
  • <=
  • >=
  • :=
  • +=
  • -=
  • *=
  • /=
  • (*
  • *)
  • (.
  • .)
  • //

Comentarios.

Los comentarios son partes de código que van a ser omitidos por el compilador al momento de generar el ejecutable. Principalmente se usan para proporcionar información adicional en el código, en pascal, se puede comentar de tres maneras distintas. supongamos el siguiente código:
Program HelloWorld(output);
	uses crt;
(* Aqui empieza la parte principal *)
begin
	clrscr;
	writeln('Hello World');
(* Usamos readln() para esperar que se presione enter *)
	readln();
end.

Ahora el siguiente:
Program HelloWorld(output);
	uses crt;
{ Aqui empieza la parte principal }
begin
	clrscr;
	writeln('Hello World');
{ Usamos readln() para esperar que se presione enter }
	readln();
end.
	
Y el siguiente:
Program HelloWorld(output);
	uses crt;
//Aqui empieza la parte principal 
begin
	clrscr;
	writeln('Hello World');
//Usamos readln() para esperar que se presione enter 
	readln();
end.
	

En todos los casos anteriores, el código es exactamente igual, solo que se usan todas las formas de comentar disponibles.
Y bien, por ahora es todo, en el siguiente post seguiremos viendo más sobre el lenguaje de programación Pascal.

Los leo luego.

Learning machine #1 - Programando en Pascal.

Hola de nuevo a todos, el día de hoy vamos a ver una introduccion al mundo de la programación.
Varios usuarios me han preguntado (atraves del formulario de contacto) sobre la posibilidad de crear "tutoriales" para aprender a programar, al inicio no me gustaba la idea, porque no soy bueno explicando, pero alguien alguna vez dijo: "Cuando enseñas tu tambien aprendes", entonces, trataré de hacer algunos post en donde mostraré las cuestiones básicas (y un poco más).
Al inicio no se me ocurria en que programa empezar así que en vez de ir a C#; porque hay mucho código en el post o java (para android), decidí empezar con lo que yo empecé: Pascal.


Si bien no es un lenguaje muy popular ni mucho menos nuevo, creo que sirve para sentar las bases que cualquier programador necesita.

Para empezar, descargaremos el IDE de Pascal desde su página. Antes de empezar vamos a ver el ciclo de vida de un programa.

Ciclo de vida de un programa/aplicación.

El ciclo de vida consiste basicamente de cuatro partes:

  • Analisis.
  • Diseño.
  • Pruebas.
  • Implementacion.
El analisis, cómo su nombre lo dice, consiste en buscar que es lo que qeuremos lograr y cómo hacerlo (creacion del algoritmo en resumidas cuentas). Suponiendo que qeuremos hacer una aplicacion que haga las cuatro operaciones básicas: Suma, Resta, Multiplicación y División. Lo primero que hacemos es ver que funciones tenemos disponibles para llevar a cabo las tareas antes dichas, planear cómo es que se va a interactuar con el usuario (tanto de entrada y salida) y cómo debe de lucir la aplicación (aunque en pascal son "limitadas" las opciones para interactuar con el usuario). En pocas palabras, debemos de buscar una forma de resolver el problema

El diseño, este consiste en tratar de pasar el algoritmo que se concebi antes al código, esta parte es esencial y muy importante, dado que el programa resultante será la implementación del código que nosotros hayamos escrito. Un buen código producirá una buena ejecución.

Las pruebas, estas deben de realizarse para corregir errores y tratar de evitarlos lo más que se pueda. En está etapa debemos de probar las cosas más absurdas. Es importante probar la mayoría de los escenarios posibles, en algunas ocasiones, lo errores serán producto de las propias limitantes del lenguaje de programación, otras serán producto de nuestro propio descuido, y finalmente vendrán lo errores que el usuario pueda causar. Es importante que tratemos de no asumir, por más absurdo que algo nos pueda parecer, hay que manejarlo cómo es debido. Supongamos que seguimos con el programa de la calculadora, el usuario la ejecuta y quiere hacer una división; 13/0. Todos los lenguajes producirán un error si se quiere dividir cualquier número entre 0 y si no hay un manejo adecuado, la aplicación simplemente se cerrará (o peor, puede comprometer todo el sistema, eso dependiendo de que es lo que hacemos). La manera de evitarlo, sera comprobar cual es el valor del divisor y si es 0 simplemente no hacer la operación y decirle al usuario cual fue la razón por la que no se pudo resolver su operación.

Finalmente la implementacion, esta parte corresponde a la ejecucion, cuando ya se han hecho las debidas pruebas y hemos minimizado los errores, si es cierto, siempre, cualquier programa será propenso a los errores (aun si llevas decadas programando), pero siempre (y aunque suene repetitivo) debemos de probar la mayoria de escenarios posibles.

Estructura de un programa en pascal.


Un programa en pascal consiste de 5 partes:

  • Titulo del programa.
  • Declaracion de librerias.
  • Declaracion de variables.
  • Cuerpo del programa
    • Implementacion.
  • Fin del programa.
Observando la imagen, el titulo del programa es HelloWorld. La palabra reservada "Program" se usa para indicar el inicio del programa.
Para hacer la declaración de las librerías que vamos a usar, debemos de hacer uso de la palabra reservada "uses" seguida del nombre de la librería (por ahora solo usamos crt que proporciona funciones básicas).
Después vendría la declaración de las variables que vayamos a usar, la palabra reservada "begin" indica el inicio del programa en sí, seguido de está, debemos de escribir el código de la aplicación.
"clrscr;"limpia la pantalla, es decir borra todo el contenido previo y deja lista la ventana en "blanco". "writeln("Hello World");" la función "writeln" se usa para mostrar texto pero además, inserta un linea nueva al final. "readln();" se usa para que el programa reciba texto por parte del usuario, en programas simples, es recomendable usar un "readln();" al final del programa, porque cuando acaba la ejecución, el programa se cierra de manera inmediata, en el código anterior, si no usáramos la función, al ejecutar la aplicación solo veríamos una ventana negra que se cierra de inmediato. "end." se usa para indicar que es el fin del programa.

Y bien, por ahora es todo, en el siguiente post veremos cómo usar librerías y ademas vernos cuales son las más comunes y las funciones que ofrecen, además de los tipos de datos que podemos usar en Pascal.
Los leo luego.

Back to basics #4 - Eligiendo al mejor tipo.

Hola de nuevo a todos, el día de hoy vamos  a continuar con lo básico. En el post anterior, vimos cómo al elegir un tipo de variable, puede ser determinante a la hora de que se producen los errores.

Antes que nada vamos a ver cuales son los tipos disponibles en C# y Java en la siguiente tabla:

Nombre cortoClase .NETTipoAnchoIntervalo (bits)
byteByteEntero sin signo80 a 255
sbyteSByteEntero con signo8-128 a 127
intInt32Entero con signo32-2.147.483.648 a 2.147.483.647
uintUInt32Entero sin signo320 a 4294967295
shortInt16Entero con signo16-32.768 a 32.767
ushortUInt16Entero sin signo160 a 65535
longInt64Entero con signo64-922337203685477508 a 922337203685477507
ulongUInt64Entero sin signo640 a 18446744073709551615
floatSingleTipo de punto flotante de precisión simple32-3,402823e38 a 3,402823e38
doubleDoubleTipo de punto flotante de precisión doble64-1,79769313486232e308 a 1,79769313486232e308
charCharUn carácter Unicode16Símbolos Unicode utilizados en el texto
boolBooleanTipo Boolean lógico8True o false
objectObjectTipo base de todos los otros tipos
stringStringUna secuencia de caracteres
decimalDecimalTipo preciso fraccionario o integral, que puede representar números decimales con 29 dígitos significativos128ą1.0 × 10e?28 a ą7.9 × 10e28
La tabla anterior está disponible en la página de ayuda de MSDN,
Ahora, que es lo que debemos antes de empezar a crear una aplicación, bueno, debemos de tener muy claro que es lo que queremos lograr, si no tenemos eso muy claro desde el principio, es muy posible que a medio programa encontremos algunas dificultades. En C# disponemos de 15 tipos de variables y es necesario saber que tipo de datos se almacenan en cada una.

¿Cómo aplicar el tamaño adecuado a las variables?

Muchas veces hay que elegir que tipo de variables son la que debemos de usar en determinada parte de nuestro programa, generalmente siempre se buscará usar la variable más grande disponible, eso siempre y cuando no sepamos cual será el valor que está poseerá. Pero es recomendables hacer eso?, por supuesto que no! siempre debemos de tratar de tener el menor consumo de memoria.
Imaginemos que tenemos un programa en el cual una variable va a recibir el valor que el usuario introduzca, así que creamos una variable del tipo long (cuyo valor máximo es 922337203685477507), en tiempos modernos funciona de maravilla y nos ahorra muchos dolores de cabeza, finalmente que son 64 bits de 32,000,000,000 que hay disponibles en la mayoria de las computadoras (64 de 8,000,000,000 de los móviles). Pero la cosa no siempre fue así, hace no mucho tiempo, la cantidad de memoria era mucho más limitada, los computadores más potentes solamente tenían 64MBytes de RAM, por lo que administrar de manera prudente los recursos era primordial para el buen desarrollador de software. Entonces asumir no era una opcion, en ese caso lo que se hacia limitar al usuario, poner las condiciones pertinentes para que todo este dentro de los esperado. Podemos concluir que siempre debemos de usar la variable del tipo mas razonablemente pequeña y condicionar al usuario a que se ajuste, solo en casos realmente específicos es cuando debemos de adecuar el programa al usuario.

¿Cuando si debemos de ajustarnos?

En tiempos recientes es difícil citar un caso en el cual el programa deba de ajustarse a las condiciones del usuario. Hace no mucho tiempo una canción coreana se volvió inmensamente popular y la plataforma de videos más popular no estaba lista para poder llevar la cuenta, entonces un día, este video hizo lo impensable (por esas fechas) paso las 2,147,483,647 vistas y cómo vimos en el post anterior, un valor del tipo "int" no puede mostrar un número mas allá de ese y pasó lo que tenía que pasar, los desarrolladores se vieron en la necesidad de actualizar su código y ahora en lugar de usar una variable del tipo "int", optaron por usar valores de tipo long. Es una buena solución, ya que 922,337,203,685,477,507 es aproximadamente 131,762,457 la población de la tierra, más que suficiente en mi opinión.
Otro problema de este tipo surge con los equipos relativamente viejos, en ellos el tiempo se mide en segundos y se almacena en una espacio de 32 bits, haciendo cálculos, en el 2038 habrán alcanzado el limite que se puede almacenar en 32bits, pero este a diferencia del caso anterior es un poco mas complejo en su resolución. Muchos dirán que se puede arreglar con solo usar 64 bits para almacenar el tiempo, pero cuando se realizan operaciones de forma binaria se perdería compatibilidad con el software viejo. Muchos de los que previeron el problema hicieron que el hardware fuera compatible con 64bits y crearon software especifico para la plataforma, por lo que se evitarían el problema.

En el caso de las aplicaciones que he hecho para el blog, lo admito, he sido flojo, pero muchos de los errores que tienen son de los más básicos y por más simple que sea, siempre se debe de entregar software lo mas completo y listo posible. A partir de eso, la mayoría de programas se van a actualizar para quitar todas las partes "flojas".

Y bien por ahora es todo, los leo luego.