domingo, 1 de diciembre de 2013

Programación y Algoritmos - Introducción Parte 1 - Tipos y variables, Lectura y escritura.


Introducción

Esta serie de pseudo-tutoriales son creados con la intención de ayudar a cualquiera interesado en la programación. Cada post será sobre un tema especifico tratado de maneral genera en pseudo-código y de manera especifica en otros lenguajes como Java, Python, Ruby, C++, entre otros.

Algoritmos

Antes de empezar a aprender algún lenguaje de programación lo adecuado es conocer el algoritmo de lo que queremos simular o programar. Este algoritmo es el que describe, con una serie de pasos finitos (instrucciones), que es lo que sucede. Demostremos esto con un ejemplo de un algoritmo para abrir la puerta:
Si seguimos estas instrucciones abriremos la puerta correctamente. Como podemos ver cada linea indica una acción que se debe seguir. En la primera y penúltima línea se debe cumplir una condición para realizar la acción, y en la última vemos que sucede si no se cumple la condición.

Ahora veamos el algoritmo que se debe seguir para hallar el enésimo número de la sucesión de Fibonacci:
Apliquemos este algoritmo para saber el número de Fibonacci en la posición 1:
Paso 1:
1 es menor que 2 entonces 1 es el número de Fibonacci en la posición 1.
Fin.
Ahora en la posición 5:

Paso  1: 5 no es menor que 2, sigo al paso 4.
Paso  4: i = 1.
Paso  5: a = 0.
Paso  6: b = 1.
Paso  7: c = a + b = 0 + 1 = 1.
Paso  8: a = b = 1.
Paso  9: b = c = 1.
Paso 10: i = i + 1 = 1 + 1 = 2.
Paso 11: 2 no es igual a 5, repita desde paso 7
Paso  7: c = a + b = 1 + 1 = 2.
Paso  8: a = b = 1.
Paso  9: b = c = 2.
Paso 10: i = i + 1 = 2 + 1 = 3.
Paso 11: 3 no es igual a 5, repita desde paso 7
Paso  7: c = a + b = 1 + 2 = 3.
Paso  8: a = b = 2.
Paso  9: b = c = 3.
Paso 10: i = i + 1 = 3 + 1 = 4.
Paso 11: 4 no es igual a 5, repita desde paso 7
Paso  7: c = a + b = 2 + 3 = 5.
Paso  8: a = b = 3.
Paso  9: b = c = 5.
Paso 10: i = i + 1 = 4 + 1 = 5.
Paso 11: 5 es igual a 5. Continuamos al paso 12.
Paso 12: 5 es el número de Fibonacci en la posición 5.
Fin


Ahora analicemos algunos puntos clave de este ultimo algoritmo:
El paso 1 y el paso 3 conforman una condición que pregunta si n es menor que 2, si esto es cierto entonces seguimos al paso 2, si es falso proseguimos al paso 4. Esto es lo que se considera como una estructura de control condicionada.
Luego en cada uno de los pasos 4 a 10 hay asignación de un valor dado a una variable. Esta asignación es lo que se usa para fijar el valor o dato de una variable o atributo.
El paso 11 establece una estructura de control repetitivo o cíclico,  y dependiendo como se observen estos pasos se puede considerar como un ciclo con contador o un ciclo condicional.

La forma en que hemos mostramos el algoritmo anterior se considera como una descripción verbal de este. También podemos utilizar diagramas de flujo para expresar un algoritmo:

En estos tutoriales nos concentraremos más en la otra forma de expresar algoritmos:

Pseudo-código

A pesar de que en este lenguaje se puede utilizar muchas de las convenciones estructurales de los lenguajes de programación, el pseudo-código no es para programación. Este tipo de lenguaje permite entender fácilmente lo que sucede en un algoritmo, de modo que con el pseudo-código podemos tener una visión general del algoritmo, haciendo sencillo la "traducción" a un lenguaje de programación.

En un pseudo-código podemos colocar lo que queramos, siempre que tenga la lógica del proceso que se trata de programar; es de sintaxis libre. Así como en el algoritmo que hemos explicado, el pseudo-código, y los lenguajes de programación constan de instrucciones o sentencias, que son cada una de las líneas que lo componen. Estas sentencias se pueden agrupar en bloques dentro de las estructuras de control, que ya he mencionado antes pero continuaré explicando en otro post.

Sentencias o Instrucciones

Son un conjunto de datos, o secuencia de palabras que se interpretan. Pueden contener:
  • Declaración de variables.
  • Asignación.
  • Expresión aritmética.
  • Expresión lógica.
  • Comienzo de una estructura de control.
  • Fin de una estructura de control.
  • Llamada a una subrutina o función (que contiene otras sentencias).
  • Retorno de una subrutina.
  • Entrada o salida de datos.

Declaración de variables y Tipos.

Una variable es como un contenedor de datos, en el que solo se puede almacenar uno. En muchos lenguajes, como Java, C, C++ y otros, es necesario decir que tipo de dato va a almacenar la variable, esto se hace al declararla. Son lenguajes de tipado estático. Generalizando, una sentencia con una declaración de variable sería:
 
TipoVariable    nombreVariable

Para crear nombres de variables puedes usar lo que quieras, por ejemplo, "
casa
", "
qwert1729
", "
á21003kñ19
", siempre que recuerdes para que usas esa variable. Sólo es posible hacer eso en pseudo-código, los lenguajes tienen pautas para nombrar variables que se deben seguir para que no existan errores, y lo mejor es acostumbrarse a estas, por ejemplo hay distinción de mayúsculas y minúsculas, una variable llamada "
casa
" no es la misma que "
Casa
" o "
CASA
".

Las palabras que son reservadas en el lenguaje tampoco se pueden utilizar como nombre de variable, como lo son los tipos y las estructuras de control. También es importante alejarse de los acentos ´ ` ~ ^ y letras como ñ, estas pueden provocar errores, símbolos como - . , & % $ # " ( ) / = ya que estos pueden tenrt. Algunos lenguajes piden que sus variables sean nombradas en el estilo de CamelCase si su nombre requiere varias palabras, con la primera  letra en minúscula, por ejemplo:

nombreVariable5
,
resultadoSumaAnterior
,
nombreYApellido
.


En otros se usa el snake_case, por ejemplo;

nombre_variable_5
,
resultado_suma_anterior
,
nombre_y_apelido
.


Y si te parece mejor puedes combinar ambos estilos, eso dependerá de ti. La última preocupación que debes tener en mente es la longitud del nombre, con el tiempo y la practica lograrás nombrar variables de manera apropiada y resumida en menos de un segundo.

Los tipos de variables de uso común, y que por lo general ya están definidas en la mayoría de los lenguajes ya sea como primitivas o de otro modo los listo a continuación:
  • Variables tipo carácter: Estas contienen una letra, un número o un símbolo.
      Ejemplos:
    • Caracter letra
    • char     firstLetter
  • Variables tipo entero: Contienen un número entero.
      Ejemplos:
    • Entero   numeroPrimo
    • int      edad
    • Integer  mes
  • Variables tipo decimal: Almacenan números decimales.
      Ejemplos:
    • Decimal  pi
    • float    gravedad
    • double   precio
  • Variables tipo cadena: Contienen secuencias de caracteres, por lo general se consideran vectores de caracteres.
      Ejemplos:
    • Cadena   nombre
    • String   ciudadNatal
  • Variables tipo booleano o lógico: Sólo pueden contener dos datos, 0 o 1 que corresponden a los valores de verdad.
      Ejemplos:
    • Booleano estaVacio
    • boolean  esNumeroPrimo
En otros lenguajes no es necesario indicar el tipo, ya que el contexto lo dice (en el momento de asignar dato ala variable) y una misma variable, en distintos momentos, puede ser de diferentes tipos. Ejemplos de estos son los lenguajes de scripting (o lenguajes de tipado dinámico), aquellos que no requieren compilación, solo es necesario el interprete para poder ejecutarlo. Python, Ruby y Javascript son ejemplos de este tipo de lenguajes. En pseudo-código no se hace frecuente la inicialización de variables, es decir, no es necesario indicar el tipo, el contexto del algoritmo es lo que nos dice el tipo.

Asignación

Es lo que hacemos para insertar un dato en una variable.

Entero contador = 0
int fibonnacci_6 = 8;
string numeroPi = "3.14159265"


En pseudo-código algunos también utilizan el símbolo ← en vez de el símbolo de igual.

Aritmética

A las variables numéricas también le podemos asignar una expresión aritmética, en muchos lenguajes el interprete asigna el valor del resultado de la expresión. Por ejemplo, que valor recibe la variable "calculo"?:

calculo = 1+2*6/3-4


Espero hayas dicho 1, o dijiste 2? o dijiste -18? Parece que escribir expresiones así puede ser un poco complicado y confuso, sobretodo cuando no sabemos como será interpretado el orden de las operaciones en el lenguaje y no podemos asegurar que el orden que utilizamos sea el mismo. Lo mejor es evitarse problemas (y por consiguiente los bugs) y utilizar PARENTESIS "(" ")".
Si queremos obtener 1 deberiamos poner:
calculo = 1 + ((2 * (6/3)) - 4)

O si queremos obtener 2 deberiamos poner:

calculo = (((1+2)*6)/3)-4

O si queremos obtener -18 deberiamos poner:

calculo = ((1+2)*6)/(3-4)


Que bueno que eso quedó aclarado :)

Lectura y escritura de datos

Por ultimo en este post,  explicaré como se expresa en pseudo-código para mostrar un resultado o recibir algún dato del usuario. Es sencillo, para mostrar la frase Hola Mundo, utilizamos la función:

ESC("Hola Mundo")


O también:

Escribir("Hola Mundo")


No importa cual sea el nombre de la función o como la abreviemos el nombre, siempre que sea claro que es para escribir o mostrar un texto y que ese texto va entre los paréntesis ( ) y entre las comillas " " .
Y si queremos mostrar el dato que contiene una variable? Podemos utilizar comas entre variables y textos.

Cadena dia = "jueves"
Escribir("Hoy es ",dia,".")


Lo anterior muestra:
Hoy es jueves.


Se pueden usar también variables de tipo numérico.
Para que el usuario ingrese información hacemos:

Lea numero



Leer numero


numero es la variable a la que le estamos asignando la información ingresada.
Veamos el siguiente gist con pseudo-código para ingresar y mostrar el día actual.

Si se ingresa: martes, 15, abril y 2023, se muestra:
Hoy es martes, 15 de abril de 2023



En el siguiente post les daré una pequeña introducción a IDEs.
Si tienen alguna pregunta no duden en hacerla en los comentarios.

lunes, 22 de abril de 2013

Matrices

Mira esta hermosa aplicación que te ayudará a resolver matrices (cuadradas)!!!

Applet
Para utilizarla correctamente siempre ten encuenta esto:
  • Ingresa tu matriz en la primera tabla: selecciona una celda, presiona Backspace(Retroceso<--- )
  • También puedes cambiar el tamaño de la matriz con los spinners.
  • Una vez termines de ingresar la matriz presiona el botón que Actualiza la Matriz
  • Después de la tabla encontrarás que propiedades puedes obtener de la matriz que ingresaste, como su determinante, el valor de su traza...
  • Tambíen puedes obtener la matriz adjunta, la de cofactores, la inversa, y otros elementos correspondientes a la matriz que ingresaste.

Si no te cargó(te sale un texto en rojo que dice "Error. Haga clic para...") seguro fue porque no te salió la ventana de Advertencia de Seguridad de Java para darle permisos a la aplicación. Tal ventana se parece a:

Recarga la página y espera a que salga.
Cuando salga solo selecciona el cuadro que dice "Acepto los riesgos y deseo ejecutar esta aplicación", no te preocupes por esto, en la aplicación no hay ninguna línea de código que involucre tu computador. Si das en Cancelar la aplicación no cargará y te saldrá el error anterior. Puedes hacer clic en actualizar si crees que tu versión de java no está actualizada.

Cualquier otra anormalidad(bug, glitch...) que encuentres en la aplicación, te invito a que me lo hagas sabes en mi Twiter. Gracias.

jueves, 7 de febrero de 2013

Graficador

He aquí el segundo software que he hecho:
Graficador
Lo llamo Graficador. Descargalo gratis de aquí.
La versión más reciente que he hecho es 0.3.69 y sigue en desarrollo.

A diferencia de la mayoría de graficadores, este solo gráfica funciones explicitas, que sólo requieren de unas pocas propiedades para formar la función, como los coeficientes para cada término, un grado o una función trigonométrica. No hay forma de que el usuario ingrese una función de su gusto, y menos implícita.

Como uso este software?
Debes tener Java instalado en tu computador. Si no sabes si tienes Java, ve al link y busca el donde dice "Tengo Java?", has clic ahí y la página verificará si tienes o no instalado la versión más reciente de Java. En un futuro os daré una guía de "¿Cómo instalar Java?" hecha por mi, pero por ahora será Java quien te guíe.
Después de estar seguro que tienes Java, y de descargar el archivo Graficador.jar, todo lo que resta por hacer es dar clic en el, selecionar un lenguaje (versiones anteriores a 0.3.63 no tienen esta opción) y finalmente verás la ventana principal del programa, ¿no es hermoso? Y como puedes ver ya tiene una función dibujada. Hasta el momento no hay una guía interna que pueda ayudarte a usar el programa, pero planeo implementarla en un futuro.

¿Qué hago ahora?
Bueno, puedes jugar al escondite (solo, en tu casa), ve a comer, sigue navegando la web, etc. No lo sé!...
Oh! Te refieres a con el programa, muy bien, échale un vistazo a esta guía rápida que he hecho(y que será implementada en el programa mismo):

Arriba veras la común barra de menús con "Archivo", "Editar", "Gráfica" y "Ayuda", cada una la explicaré luego. Hasta la versión 0.3.69 los sub-menús "Nuevo...", "Abrir..." y "Contenido" no tienen funcionalidad, todavía.

¿Qué puedes hacer? Puedes Añadir una función, Eliminar una o varias funciones, Cambiar el color de una o varias funciones, todo eso solo en el menú Editar.
Añadir una función: Al seleccionar esta opción te aparece una ventana. De la lista puedes escoger el tipo de función que quieres añadir (Polinómica o Trigonométrica). Luego puedes añadir el número de términos (o grado si es polinómica). Da clic en el botón "Actualizar" para ver y editar los valores de las constantes de cada término. Debajo verás las ecuacion general de la función y la ecuación específica de la misma. Da clic en Listo" para finalizar la edición y ver la función graficada, o en "Cancelar" para no añadir nada.
Para poder editar o eliminar una o varias funciones, primero es necesario seleccionarla(s) dndo clic en la función ubicada en la barra de herramientas. Debe haber mínimo una función y sólo puedes añadir máximo 5 en una sola gráfica.
Editar una función no es muy diferente a añadirla. El proceso es muy parecido. Ten en cuenta que si seleccionaste más de una función, tendrás que terminar de editar la primera para editar la siguiente. Pasa lo mismo cuando vayas a editar los colores.

En el menú Gráfica puedes editar como se ve el plano, cambiar el tamaño de los ejes, poner o no las etiquetas, y que divisiones mostrar.

En el menú Archivo, en el sub-menú Guardar puedes seleccionar como guardar la imagen:
  • Actual: Guarda la gráfica con el tamaño que ves.
  • 500x500:La imagen será de 500 pixeles por 500 pixeles.
  • 1000x1000: La imagen será de 1000 pixeles por 1000 pixeles.
  • Custom: Escribe en el dialogo el alto y ancho que quieres que la imagen tenga.
Puedes salir del programa, ya sea presionando la "X" en la ventana, o seleccionando Salir en el menú Archivo.
En el menú de Ayuda, el sub-menú "Acerca de..." mostrará un pequeño diálogo con una breve descripción de Graficador y su versión.

Sus sugerencias y comentarios son bienvenidos
Si algo del programa no te agradó, o crees que podría ser mejor, o te encuentras con un error, bug, glitch, algo no esperado, dilo en un comentario.
Puedes enviarme un tweet para comunicarte conmigo.
Actualizaré este post cada vez que una nueva versión de Graficador este disponible, así que si te agradó puedes regresar cuando quieras y descargar la nueva versión.
Bugs (bunny): [Show]


Licencia Creative Commons
Este obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.