lunes, 30 de marzo de 2015

Lógica de Programación (10) - Control de flujo y estructuras de selección

Cuando hablamos del control de flujo nos referimos al control que como programadores podemos tener sobre el orden en el cual se van a ejecutar las diferentes instrucciones que forman a nuestro programa. Hasta ahora hemos estado desarrollando algoritmos cuyo flujo (o sea, el orden en que se van ejecutando cada una de las instrucciones del algoritmo) se dice que es secuencial. Esto quiere decir que las sentencias se ejecutan en secuencia, una después de otra, en el mismo orden en que se sitúan dentro del programa.

Hasta ahora nuestros algoritmos han sido secuenciales

Pero este tipo de ejecución tiene grandes limitantes. Pensemos, por ejemplo, que el dueño de una tienda de abarrotes nos solicita desarrollar una pequeña aplicación para calcular el importe y cobrar las compras de sus clientes. El dueño de la tienda tiene un programa de recompensas en el cual aplica un determinado descuento si el total de la compra supera ciertos limites: si la compra es mayor a 1000 pesos, el descuento será del 5% y si supera 2500 pesos el descuento es del 10%.

En un caso como el descrito, el flujo secuencial no nos será de mucha utilidad por sí mismo porque ¿cómo define el programa cual es el descuento a aplicar? ¿Será el 5% o el 10%? Según la descripción, el descuento depende del monto de la compra pero ¿cómo decide eso el programa?

Ahí es donde entran en juego las estructuras de selección. Estas estructuras nos permiten habilitar a nuestro programa para tomar decisiones y ejecutar un determinado conjunto de instrucciones de acuerdo al cumplimiento de una o varias condiciones. 

Las estructuras de selección ayudan a nuestros programas a elegir un camino
En las estructuras de selección se evalúa una condición o conjunto de condiciones y de acuerdo al resultado se ejecuta una acción u otra. Para especificar las condiciones que se deben evaluar usamos expresiones lógicas. Existen tres estructuras de selección: simples, dobles y múltiples. Vamos a conocer de un vistazo a cada una, para luego profundizar en ellas en las siguientes lecciones:

Estructura de selección simple (si-entonces)
Esta estructura ejecuta una determinada acción cuando se cumple alguna condición (o condiciones). Esta condición es evaluada y:
  • si resulta verdadera, entonces se ejecuta la acción o acciones determinadas
  • si resulta falsa, entonces no se hace nada


Estructura de selección doble (si-entonces-si no)
Esta estructura evalúa una condición y, si es verdadera, ejecuta una acción determinada; pero si resulta falsa, ejecuta una acción distinta. A diferencia de la estructura simple, con la doble nuestro programa puede elegir entre dos cursos de acción diferentes.

Estructura de selección múltiple (segun_sea, caso)
La estructura de selección múltiple evaluará una expresión que podrá tomar n valores distintos. Según se elija uno de estos valores en la condición, se realiza una de las n acciones posibles; o lo que es lo mismo, el flujo del algoritmo seguirá un determinado camino entre los n posibles.


En la próxima lección vamos a comenzar a profundizar en las estructuras de selección, comenzando por las más simples. ¡Hasta la próxima!





viernes, 27 de marzo de 2015

SMART kapp, el pizarrón inteligente definitivo

Uno de esos pequeños problemitas cotidianos a los que se enfrenta cualquier maestro en clase es el de tener que esperar unos minutos durante la clase para que los alumnos copien las notas que escribió en el pizarrón para explicar algún tema. Esto, por supuesto, acarrea algunos inconvenientes como la pérdida de tiempo efectivo de clase, la pérdida del ritmo de la sesión o que los alumnos copien mal algún detalle de la clase en sus cuadernos de notas.

Todo eso puede resolverse con SMART kapp, un pizarrón inteligente presentado en la más reciente edición del CES Las Vegas



Todo lo que se escribe en el SMART kapp se transfiere automáticamente y en tiempo real a los smartphones o tablets de los alumnos, no sólo a quienes estén presentes en el salón de clase sino aún a quienes estén atendiendo la clase de manera remota; esto es gracias a la aplicación que acompaña al dispositivo, la cual se encuentra disponible para iOS y Android. Por si fuera poco, las notas creadas son respaldadas automáticamente en sitios de almacenamiento en línea como Dropbox o Google Drive para poder acceder a ellas en cualquier momento. Y no sólo eso, sino que no se requiere usar ninguna clase de plumón especial, pues funciona con la misma clase de marcadores que se emplean en los pizarrones regulares.

Chequen el video para que conozcan las fenomenales características de este dispositivo:



El pizarrón SMART kapp ya está a la venta en dos tamaños: 42 y 84 pulgadas, con precios de $899 y $999 dólares respectivamente, aunque por ahora su venta está limitada a ciertos países (México de momento NO está incluido, lamentablemente, aunque seguramente pronto lo estará).

¿Qué opinan sobre este dispositivo? ¿qué ventajas y desventajas ven en su aplicación?


Enlace: SMART kapp



Otra forma de compartir enlaces personalizados en Facebook

En un artículo anterior les mostré la forma en que se puede forzar a que Facebook aplique una determinada apariencia a un enlace que se comparta en esa red social. Esa forma requiere acceso al código fuente del sitio que estamos tratando de compartir y funciona bien para compartir sitios propios (como mi blog, por ejemplo). 

Pero, ¿qué pasa si se desea compartir, por ejemplo, un artículo de otro sitio web, una noticia o algún video de YouTube? En esos casos no tenemos ningún control sobre la apariencia del enlace que Facebook muestra dado que no tenemos acceso al código fuente de dicho enlace.

Sin embargo, para resolver ese problemita, podemos usar una muy sencilla herramienta gratuita: PostWithPicture. En este sitio podemos definir el título, la descripción y la imagen que se mostrarán cuando compartimos un enlace en Facebook o en Google+. En el caso de la imagen, podemos elegir una directamente de nuestra computadora, lo cual nos da todavía más libertad al momento de personalizar nuestros enlaces.



Sin duda una muy buena herramienta que más de una vez nos permitirá compartir enlaces en nuestras redes sociales favoritas dándoles nuestro toque personal.


Enlace: PostWithPicture.

jueves, 26 de marzo de 2015

Cientos de imágenes sin fondo listas para usar ¡gratis!

Cuando se trata de editar una foto para usar en alguna composición o en algún gráfico para la web, una de las tareas más tediosas es la de remover el fondo para usar sólo el objeto que nos interesa. 

Pues bueno, gracias a PNGimg.com ya no tenemos que trabajar tanto, pues el sitio nos ofrece una muy amplia y variada colección de imágenes sin fondo en formato PNG listas para descargar y usar en nuestros proyectos. Hay imágenes de muchísimos objetos diferentes y afortunadamente se encuentran categorizadas para encontrarlas facilmente.

Sin duda un gran sitio digno de tenerse en favoritos para sacarnos de más de un apuro.





Enlace: PNGimg.com

Lógica de Programación (9 bis) - Actividades resueltas

En la última lección de este curso hablamos sobre la escritura de algoritmos y sus reglas. Conocimos algunos ejemplos y sobre todo se plantearon algunos ejercicios prácticos para reforzar ese tema. Pues bien, antes de la siguiente lección, en la que vamos a conocer las estructuras de decisión para enriquecer aún más nuestros algoritmos, he decidido compartir con ustedes la solución a las actividades de aprendizaje propuestas. 

Antes que servir de "acordeón" para que eviten pensar (no hagan eso, muchachitos), quiero que sirva como una forma en la que ustedes mismos pueden autoevaluarse y corregir sus propios ejercicios. Aclaro que las soluciones que yo propongo no son las únicas y cada quien puede tener su propio proceso de pensamiento, así que tampoco las tomen como dogma incuestionable ni nada. 

Sin más, pues, vamos a las soluciones propuestas. ¡Espero que les sean de utilidad! ¡Nos leemos en la siguiente lección!

ACTIVIDADES RESUELTAS

1. El índice de masa corporal (IMC) es una medida de asociación entre la masa y la talla de una persona y se calcula dividiendo el peso en kilogramos entre el cuadrado de la estatura en metros. Escribe un algoritmo para calcular y mostrar el IMC de una persona.

algoritmo Calcular_IMC
var
   real: peso, estatura, imc
inicio
   escribir("Proporciona tu peso en kilogramos: ")
   leer(peso)
   escribir("Proporciona tu estatura en metros: ")
   leer(estatura)
   imc <- peso / estatura ** 2
   escribir("Tu IMC es igual a " + imc)
fin


2. Escribe un algoritmo que calcule tanto el perímetro como el área de un círculo en base a la medida de su radio.

algoritmo Circulo
var
   real: radio, perimetro, area
const 
   pi = 3.1416
inicio
   escribir("Proporciona el radio del círculo: ")
   leer(radio)
   perimetro <- 2 * pi * radio
   area <- pi * radio ** 2
   escribir("El perímetro del círculo es igual a " + perimetro)
   escribir("El área del círculo es igual a " + area)
fin


3. Crear un programa que reciba como dato una cantidad en pesos y nos muestre su equivalente en dólares, euros y yenes.

algoritmo Divisas
var
   real: pesos, dolares, euros, yenes
const
   dolar = 14.5  //equivalencia dolar-peso
   euro = 16.5   //equivalencia euro-peso
   yen = 0.13    //equivalencia yen-peso
inicio
   escribir("Proporciona la cantidad de pesos a convertir: ")
   leer(pesos)
   dolares <- pesos/dolar
   euros <- pesos/euro
   yenes <- pesos/yen
   escribir(pesos + " pesos equivalen a: ")
   escribir(dolares + " dolares")
   escribir(euros + " euros")
   escribir(yenes + " yenes")
fin


4. Crear un programa que permita calcular el costo total de construir un tanque cilìndrico para almacenar agua, sabiendo que el metro cuadrado de aluminio tiene un precio fijo de $255.00

algoritmo Costo_Tanque
var
   real: radio, altura, area_tanque, costo_total
const
   precio_aluminio = 255
   pi = 3.1416
inicio
   escribir("Proporciona el radio del tanque: ")
   leer(radio)
   escribir("Proporciona la altura del tanque: ")
   leer(altura)
   area_tanque <- 2 * pi * radio * (altura + radio)
   costo_total <- area_tanque * precio_aluminio
   escribir("El área total del tanque es: " + area_tanque)
   escribir("Su costo total de construcción es: " + costo_total)
fin


5. Escribir un programa que permita calcular la intensidad de la atracción gravitacional entre dos cuerpos en base a la teoría de la gravitación universal de Isaac Newton, teniendo como datos las masas de ambos cuerpos y la distancia que los separa.

algoritmo Gravitacion
var
   real: masa1, masa2, distancia, fuerza_g
const
   g = 6.73E-11 //esta es una cantidad con notación científica; en cada lenguaje de programación se representa distinto

inicio
   escribir("Proporciona la masa del primer cuerpo celeste: ")
   leer(masa1)
   escribir("Proporciona la masa del segundo cuerpo celeste: ")
   leer(masa2)
   fuerza_g <- g * masa1 * masa2 / distancia ** 2
   escribir("La fuerza de atracción gravitacional entre ambos cuerpos celestes es de " + fuerza_g)
fin


6. Se requiere un programa que reciba como entrada 5 números y calcule y muestre:
   a) la suma de los 5 números
   b) la resta del primero menos el tercero
   c) el cociente del primero entre el cuarto
   d) el producto del segundo por el cuarto
   e) el primero incrementado en 5 unidades
   f) el doble del segundo más el triple del primero
   g) el cuadrado del quinto más el doble producto del primero por el tercero

algoritmo Operaciones_Aritmeticas
var
   real: num1, num2, num3, num4, num5
inicio
   escribir("Proporciona el primer número: ")
   leer(num1)
   escribir("Proporciona el segundo número: ")
   leer(num2)
   escribir("Proporciona el tercer número: ")
   leer(num3)
   escribir("Proporciona el cuarto número: ")
   leer(num4)
   escribir("Proporciona el quinto número: ")
   leer(num5)
   escribir("Los resultados son: ")
   escribir(num1 + num2 + num3 + num4 + num5)
   escribir(num1 - num3)
   escribir(num1 / num4)
   escribir(num2 * num4)
   escribir(num1 + 5)
   escribir(2 * num2 + 3 * num1)
   escribir(num5 ** 2 + 2 * num1 * num3)
fin

NOTA: Como vemos en este último ejemplo, la instrucción "escribir" puede incluir tanto textos como variables o incluso expresiones completas. En este caso evitamos crear variables para los resultados y sólo optamos por escribir la expresión. En la práctica, no obtendríamos como salida la expresión, sino el resultado de la misma.



Enlace: Índice del curso





miércoles, 25 de marzo de 2015

Personalizar un enlace compartido en Facebook

Cuando intentaba compartir un enlace a este blog en mi cuenta personal de Facebook me di cuenta de un detalle bastante molesto. Cada que intentaba compartir la URL principal del blog (www.israelcapetillo.com), Facebook elegía una imagen al azar, tomada de cualquiera de los posts, como imagen del enlace a compartir en la red social. Y no sólo eso, sino que también el título y la descripción parecían tomados al azar. Algo asi:

Clic para agrandar

Como ven, al momento de intentar compartir el enlace en Facebook, se elige una imagen al azar (en este caso, de un post algo antiguo) y la descripción que se encuentra en el área de suscripción del blog. Eso me molestaba bastante y yo, perfeccionista y obsesivo como soy, me dispuse a buscarle alguna solución. Esta es la manera de personalizar la apariencia de un enlace compartido en Facebook:

1) Revisar el modo en que Facebook "ve" el HTML de nuestro sitio. Esto es importante porque de ahi es de donde Facebook toma la información que se presentará en la publicación al momento de compartir un enlace. Eso podemos revisarlo en la herramienta "Object Debugger" de Facebook. En ella, sólo basta con introducir la URL del sitio que queremos compartir para que podamos ver la información que Facebook obtiene al analizar el HTML de la misma. En el caso de mi blog, se veía algo asi:

Clic para agrandar

Como pueden ver, hay algunas propiedades (todas las que inician con "og") que no estaban bien definidas, por lo que Facebook infiere la información óptima para compartir. Si observan con cuidado, verán que en el caso de la imagen elige una entre muchas disponibles, pero ninguna que me convenciera. Igualmente en la descripción: Facebook trajo el texto que le parecó más adecuado.

Pero eso se puede corregir si modificamos un poco el HTML de nuestro sitio. Lo cual nos lleva al siguiente paso.

2) Incluir etiquetas en la cabecera (<head></head>) de nuestro HTML que incluyan la información personalizada que deseamos mostrar cuando se comparta nuestro enlace. Estas etiquetas son:

<meta property="og:url" content="tu_URL_personalizada" />
<meta property="og:title" content="tu_titulo_personalizado" />
<meta property="og:description" content="tu_descripcion" />
<meta property="og:image" content="tu_imagen" />

La primera le dirá a Facebook la URL del sitio que estamos compartiendo, la segunda el título del enlace que debe compartir; la tercera le indica nuestra descripción personalizada y la cuarta le especifica la imagen que debe usar en el enlace compartido. En mi caso, decidí incluir esta información:

<meta content='http://www.israelcapetillo.com' property='og:url'/>
<meta content='IsraelCapetillo.com' property='og:title'/>
<meta content='Mi blog personal donde comparto temas relacionados con mi pasión: el desarrollo de software. Además ¡cursos gratis!' property='og:description'/>
<meta content='http://www.estudioiq.com/images/Big_greenSticker.png' property='og:image'/>

Una vez que incluí estas etiquetas en mi código, volví a ejecutar el Object Debugger de Facebook y esta es la información que la herramienta pudo detectar sobre mi sitio:

Clic para agrandar
Ahora si, ya puedo ver la URL, título, imagen y descripción que yo decido que se muestre. Ahora, si quiero compartir mi blog en Facebook, esto es lo que veo:

Clic para agrandar

¡Qué cambio! Asi que ya lo saben, la próxima vez que deseen compartir un enlace más personalizado en Facebook, lograrlo es bastante sencillo y no les lleva más que un par de minutos hacerlo.


martes, 24 de marzo de 2015

Desarrollo de software ¡sin instalar nada!

Una de las tareas más tediosas a la hora de desarrollar software es la preparación del entorno de desarrollo que vamos a utilizar. Dependiendo de tipo de desarrollo que vayamos a hacer, esto puede ser desde muy simple (como en el caso de HTML-CSS-JavaScript) hasta más complicado y tedioso (como el desarrollo con Java). Sin embargo, gracias al desarrollo de los servicios PaaS (Platform as a Service) hoy podemos evitarnos todo ese trabajo previo de modo que podamos enfocarnos en escribir y probar nuestro código al instante.



Esto es gracias a la existencia de algunos sitios que nos proveen de todas las herramientas para escribir y probar nuestro código de modo gratuito (en la mayoría de los casos) y además accesible desde cualquier computadora.

Estas plataformas incluyen editores de código, compiladores, debuggers, servidores de prueba y muchas otras herramientas que nos permiten desarrollar software rápido y sin preocuparnos de tener que instalar y configurar mil y una herramientas antes de poder escribir código.

Algunas de las grandes ventajas de este tipo de herramientas son:

  • No necesitas configurar nada. Con simplemente crear una cuenta de usuario ya contamos con un servidor de desarrollo listo para usar con los lenguajes de programación más habituales.
  • Probar en un entorno más realista, dado que nunca será lo mismo probar en un "localhost" en mi computadora que en un ambiente más similar a lo que sería un entorno de producción.
  • Trabajo en equipo. En estas herramientas usualmente podemos compartir un proyecto con otros miembros de modo que todos trabajen en el mismo proyecto y con el mismo código.
  • Trabajar desde cualquier computadora, con el único requisito de contar con una conexión a internet y un navegador.
Algunas de las herramientas más populares y que pueden empezar a probar desde ya son:

JSFiddle - para escribir pequeños "snippets" o bloques de código rápido incluyendo HTML, CSS y JavaScript así como una gran variedad de librerías externas para probar de manera más eficaz.




.NET Fiddle - para escribir desde snippets hasta programas completos en lenguajes de programación de la plataforma .NET, como C#, Visual Basic o F#




Codeanywhere - una potente herramienta para desarrollo web totalmente en línea que nos permite trabajar con lenguajes como HTML, CSS, JavaScript, PHP, Ruby, Python, C++ y una gran variedad de frameworks adicionales. Cuenta también con apps para Android e iOS para desarrollar desde aún más dispositivos y en cualquier lugar.




Cloud9 - similar a Codeanywhere, también nos permite conectarnos a nuestras cuentas de Dropbox, Google Drive o a algún servidor FTP para almacenar y editar nuestros archivos.




Codenvy - similar e igualmente potente que los dos anteriores.




Como ven, la oferta de herramientas para desarrollo desde la web son muchas y muy variadas. Asi que ya saben, si desean empezar a desarrollar software sin la tediosa tarea de tener que configurar un entorno de desarrollo, creen una cuenta en alguno de los servicios presentados y ¡empiecen a probar!

lunes, 23 de marzo de 2015

Lógica de Programación (9): Escritura de algoritmos

En las lecciones anteriores hemos estado aprendiendo conceptos y técnicas esenciales para la escritura de algoritmos. En esta lección entraremos de lleno en la escritura de los mismos y vamos a escribir nuestros primeros programas completos. Emocionante, ¿no?

Pues bien, vayamos por partes. Lo primero que debemos saber es que para escribir un algoritmo necesitamos respetar una cierta estructura que hará que nuestros algoritmos sean más legibles y fáciles de implementar en un lenguaje de programación, no sólo por nosotros mismos sino por cualquier persona que llegara a leerlos (como otro desarrollador involucrado en el proyecto, por ejemplo).

Si bien hemos dicho que la escritura de algoritmos no sigue una sintaxis concreta, sí debemos procurar escribirlos en un lenguaje similar al usado por la mayoría de los lenguajes de programación, de modo que su traducción a estos sea más sencilla. La sintaxis con la que voy a enseñarles a escribir algoritmos en este curso es muy similar a los lenguajes de programación C#, Java o JavaScript, aunque no es idéntica.

Componentes de un algoritmo
Todo algoritmo consta de dos componentes básicos: una cabecera y un bloque algoritmo. La cabecera es una acción simple que inicia con la palabra algoritmo, seguida del nombre asignado al programa completo. El bloque algoritmo es el resto del programa y consta a su vez de dos secciones: las acciones de declaración y las acciones ejecutables.

Clic para agrandar
Las declaraciones definen las variables y constantes que vamos a usar en nuestro programa, mientras que las acciones ejecutables son todas las acciones que va a realizar la computadora cuando el algoritmo sea convertido a algún lenguaje de programación.

Veamos más a detalle cada uno de estos componentes:

Cabecera del algoritmo
Todos los programas deben comenzar con una cabecera en la que se exprese el identificador o nombre del programa precedido por la palabra algoritmo. El identificador que usemos debe seguir las mismas reglas que aprendimos en la lección 5. Ejemplo:

algoritmo Calcular_Pago


Declaración de variables y constantes
En esta sección se declaran o describen todas las variables y constantes que serán utilizadas en el algoritmo. Para declarar variables, comenzamos empleando la palabra var (abreviatura de variable) y se sigue esta sintaxis:

var
   tipo-1 : lista de variables 1
   tipo-2 : lista de variables 2
   .
   .
   tipo-n : lista de variables n

En esta sintaxis, tipo es cada uno de los tipos de datos básicos que ya conocemos (como entero, real, caracter, cadena o boolean), mientras que lista de variables representa el nombre (o nombres) de la variable que estamos declarando. Por ejemplo:

var
   entero : num_empleado
   entero : horas_trabajadas
   real : pago_hora
   real : pago_bruto
   real : impuestos
   real : pago_neto
   cadena : nombre_empleado

o lo que es lo mismo:

var
   entero : num_empleado, horas_trabajadas
   real : pago_hora, pago_bruto, impuestos, pago_neto
   cadena : nombre_empleado

Como podemos ver, podemos declarar más de una variable del mismo tipo en una misma línea.

Para el caso de la declaración de constantes, comenzamos la sección con la palabra const, seguida de los nombres de las constantes y sus valores asignados. Por ejemplo:

const
    tasa_impuesto = 2.3

Acciones ejecutables
Una vez que ya declaramos las constantes y variables que vamos a emplear, es hora de comenzar a escribir las distintas acciones que formarán nuestro algoritmo. Aquí incluiremos todas las instrucciones de entrada (lectura), procesamiento y salida de resultados (escritura) que van a darle forma a nuestro programa. Las acciones ejecutables se encasillan entre las palabras inicio y fin.

Acciones de lectura
Las acciones de lectura de datos siguen esta sintaxis:

leer (variable_1[, variable_2, ... variable_n])

Es decir, podemos leer más de una variable a la vez. Por ejemplo:

leer (num_empleado, nombre_empleado, horas_trabajadas, pago_hora)

Acciones de procesamiento
Estas son todas las instrucciones que van a procesar nuestros datos de entrada como fórmulas, expresiones de decisión, expresiones de repetición, etc. Si se trata de fórmulas, simplemente las escribimos en la forma que ya hemos aprendido en lecciones anteriores. Si se trata de expresiones de decisión o repetición, cada una de ellas tiene sus propias palabras y sintaxis que iremos conociendo en lecciones posteriores.

Ejemplos:
       pago_bruto <- horas_trabajadas * pago_hora
   impuestos <- pago_bruto * tasa_impuesto / 100
   pago_neto <- pago_bruto - impuestos


Acciones de escritura
Las acciones de escritura de resultados siguen esta sintaxis:

escribir(expresión_1)

En el caso de la escritura de resultados, procuramos escribir un resultado a la vez en forma de una expresión que puede estar formada, por ejemplo, por un texto fijo seguido de una variable; también podemos escribir directamente el resultado de alguna fórmula matemática. Por ejemplo:

escribir "Desglose de nómina para el empleado " + nombre_empleado + " con número " + num_empleado

En esta expresión, estamos escribiendo algunos textos fijos (escritos entre comillas) y además los valores de algunas variables. Una vez que esas variables tengan valor, la expresión que veremos en pantalla estará completa. Por ejemplo, podríamos ver en pantalla algo como esto:

Desglose de nómina para el empleado Pedro Martínez con número 587954

Comentarios
Una buena práctica cuando escribimos algoritmos o programas es documentar nuestro proceso mediante el uso de comentarios. Los comentarios son líneas que tienen por objetivo funcionar como explicaciones internas de nuestro código. Pensemos en los comentarios como pequeños "post-it" que le ponemos a nuestro código para explicar, ya sea a nosotros mismos o a algún otro desarrollador, qué es lo que estamos haciendo en alguna parte del código. Los comentarios tienen sintaxis libre, pues no son más que notas internas que son sólo explicativas.
Si nuestro comentario es sólo de una línea, ésta irá precedida por dos diagonales (//)
Si el comentario será más extenso y ocupará varias líneas, entonces lo encasillamos entre los caracteres /* y */.

Siguiendo la sintaxis que hemos descrito, el algoritmo para calcular el sueldo de un empleado sería escrito como sigue:

algoritmo Calcular_Pago
var
   entero : num_empleado, horas_trabajadas
   real : pago_hora, pago_bruto, impuestos, pago_neto
   cadena : nombre_empleado
const
   tasa_impuesto = 2.3

inicio
   //leer los valores de entrada
   leer (num_empleado, nombre_empleado, horas_trabajadas, pago_hora)

   //calcular el pago neto
   pago_bruto <- horas_trabajadas * pago_hora
   impuestos <- pago_bruto * tasa_impuesto / 100
   pago_neto <- pago_bruto - impuestos

   /* en esta sección mostramos al usuario
       los resultados del procesamiento */
   escribir("Desglose de nómina para el empleado " + nombre_empleado + " con número " +   num_empleado)
   escribir("Pago Bruto : " + pago_bruto)
   escribir("Deducciones : " + impuestos)
   escribir("Pago Neto : " + pago_neto)
fin

Este, señoras y señores, es nuestro primer algoritmo completo, escrito con las reglas que hemos de seguir de aquí en adelante para escribir nuestros programas.

Veamos otro ejemplo de un algoritmo completo, sólo para reforzar lo que hemos aprendido hasta ahora:

algoritmo Calcular_Area_Poligono
var
   entero: num_lados
   real: medida_lado, medida_apotema, area
inicio
   //lectura de datos de entrada
   escribir "Introducir la cantidad de lados del polígono"
   leer (num_lados)
   escribir "Introducir la medida los lados del polígono"
   leer (medida_lado)
   escribir "Introducir la medida del apotema"
   leer (medida_apotema)

   //cálculo del área
   area <- num_lados * medida_lado * medida_apotema / 2

   //mostrar resultado
   escribir "El área del polígono de " + num_lados + " lados es: "  + area
fin

En este ejemplo estamos usando la instrucción escribir para mostrar algunas instrucciones al usuario de nuestro programa. Este uso también es totalmente válido.

En la próxima lección hablaremos de las estructuras de decisión, que nos permiten dividir el flujo de nuestro programa en base a una o más condiciones. Mientras tanto, es hora de practicar lo aprendido escribiendo nuestros propios algoritmos. ¡Hasta la próxima!

ACTIVIDADES DE APRENDIZAJE

1. El índice de masa corporal (IMC) es una medida de asociación entre la masa y la talla de una persona y se calcula dividiendo el peso en kilogramos entre el cuadrado de la estatura en metros. Escribe un algoritmo para calcular y mostrar el IMC de una persona.

2. Escribe un algoritmo que calcule tanto el perímetro como el área de un círculo en base a la medida de su radio.

3. Crear un programa que reciba como dato una cantidad en pesos y nos muestre su equivalente en dólares, euros y yenes.

4. Crear un programa que permita calcular el costo total de construir un tanque cilìndrico para almacenar agua, sabiendo que el metro cuadrado de aluminio tiene un precio fijo de $255.00

5. Escribir un programa que permita calcular la intensidad de la atracción gravitacional entre dos cuerpos en base a la teoría de la gravitación universal de Isaac Newton, teniendo como datos las masas de ambos cuerpos y la distancia que los separa.

6. Se requiere un programa que reciba como entrada 5 números y calcule y muestre:
   a) la suma de los 5 números
   b) la resta del primero menos el tercero
   c) el cociente del primero entre el cuarto
   d) el producto del segundo por el cuarto
   e) el primero incrementado en 5 unidades
   f) el doble del segundo más el triple del primero
   g) el cuadrado del quinto más el doble producto del primero por el tercero

jueves, 19 de marzo de 2015

Lógica de Programación (8): Funciones internas

Hemos hablado ya sobre las expresiones aritméticas y cómo podemos traducir fórmulas matemáticas usando diferentes clases de operadores aritméticos. Sin embargo, ¿qué pasa si en mi algoritmo necesito calcular una raíz cuadrada? ¿o si necesito calcular alguna función trigonométrica? ¿y qué tal si hay que redondear un valor numérico? Pues para esos casos existen las llamadas Funciones Internas, incorporadas o estándar, que forman parte de prácticamente todos los lenguajes de programación. 

La idea de estas funciones es ahorrarnos trabajo puesto que no tenemos que hacer más que llamarlas por su nombre (o "invocarlas") y pasarles algunos parámetros para que nos regresen el resultado que buscamos. Por ejemplo, la función raiz2 nos permite calcular la raíz cuadrada de un número y lo único que tenemos que hacer es pasarle como parámetro el número cuya raíz cuadrada queremos calcular. Algo asi:

x ← raiz2(25)    

Después de esta instrucción, x tendría el valor de 5.

En esta tabla encontramos las funciones internas más frecuentes así como su descripción y un ejemplo de uso para comprender mejor su funcionamiento.

(Clic para agrandar)

Veamos ahora cómo usar estas funciones para traducir a expresiones algorítmicas una de las fórmulas matemáticas más conocidas: la fórmula general para resolver ecuaciones de segundo grado (sí recuerdan sus matemáticas de secundaria, ¿verdad?):


O lo que es lo mismo:




Estas fórmulas, traducidas a expresiones algorítmicas quedarían así:

x1 = (-b + raiz2(cuadrado(b) - 4 * a * c)) / (2 * a)
x1 = (-b - raiz2(cuadrado(b) - 4 * a * c)) / (2 * a)


En la próxima lección vamos a conocer algunas variaciones de la operación de asignación. Mientras tanto, ¡es hora de practicar!

ACTIVIDADES DE APRENDIZAJE

¿Puedes escribir estas fórmulas matemáticas usando operadores aritméticos y funciones internas? ¡Inténtalo!










martes, 17 de marzo de 2015

Lógica de Programación (7): Expresiones lógicas

Un segundo tipo de expresiones es la expresión lógica o booleana, cuyo valor es siempre verdadero o falso. Recuerda que existen sólo dos posibles valores para una variable (o constante) de tipo booleano: verdadero (true) y falso (false). En esencia, una expresión lógica es aquella cuyo resultado sólo puede tomar uno de esos dos valores.

Las expresiones lógicas se forman combinando constantes y variables lógicas con operadores lógicos como not, and y or y operadores relacionales (de relación o comparación) como =, <, >, <=, >=, <>.

Operadores de relación
Los operadores relacionales o de relación permiten realizar comparaciones entre valores o expresiones de cualquier tipo. Los operadores relacionales son:

(Clic para agrandar)

El formato general que seguimos para establecer una comparación en un algoritmo es:

expresión1 operador_de_relación expresión2

y el resultado de la operación siempre será verdadero o falso.

Por ejemplo, si suponemos que A = 4 y B = 3, entonces

A > B es verdadero

mientras que 

(A - 2) < (B - 4) es falso



Operadores relacionales y tipos de datos
Los operadores de relación se pueden aplicar a cualquiera de los cuatro tipos de datos estandar que conocemos: enteros, reales, lógicos y caracteres. En el caso de la aplicación a valores numéricos, la comparación es bastante evidente:

3 < 6 es verdadero
0 > 1 es falso
4 = 2 es falso
8 <= 5 es falso
9 >= 9 es verdadero
5 <> 5 es falso

Para realizar comparaciones entre caracteres, lo mejor es recurrir al código ASCII. En este código, cada caracter representable en una computadora tiene un valor numérico asignado. Ese valor nos servirá para revelar el valor de la comparación entre 2 caracteres. 

(Clic para agrandar)

Podemos, también, aplicar estos 4 principios para dichas comparaciones:
  • Los caracteres especiales (#, $, %, &, /, etc) exigen necesariamente la consulta del código ASCII
  • Los valores de los caracteres que representan dígitos están en su orden natural. Esto es, '0'<'1', '1'<'2', etc
  • Las letras mayúsculas 'A'...'Z' siguen el orden alfabético: 'A' < 'B', 'B'<'C', 'C'<'D', etc
  • Las letras minúsculas también siguen el criterio alfabético: 'a' < 'b', 'b'<'c', 'c'<'d', etc

En general, los 4 grupos mencionados anteriormente están situados en el código ASCII en orden creciente. Es decir:

caracteres especiales < dígitos < letras mayúsculas < letras minúsculas

Cuando se utilizan los operadores de relación entre valores lógicos, la regla es muy sencilla:

falso < verdadero

Esto es debido a que, en una computadora, falso = 0 y verdadero = 1. La comparación se hace sola.



Operadores lógicos
Los operadores lógicos o booleanos básicos son not (no), and (y) y or (o). ¿Y cómo funcionan? Bueno, todo depende de los valores que relacionemos con estos operadores. A las reglas de funcionamiento de los operadores lógicos las llamamos "Tablas de Verdad" y estas son las que se aplican para los operadores not, and y or:

(Clic para agrandar)

La forma general en que aplicamos estos operadores es:

expresión1 operador_lógico expresión2

Las expresiones lógicas pueden mezclar constantes/variables de todos los tipos, así como operadores aritméticos, de relación o lógicos. Así, por ejemplo:

(1 < 5) and (5 < 10)     es verdadera
(5 > 10) or ('A' < 'B')   es verdadera
not(4 > 6)  es verdadera
(1 > 4) and (4 < 7 + 2)  es falsa


¿Listos para practicar lo aprendido? en seguida van a encontrar algunos ejercicios prácticos para ver qué tanto aprendieron sobre las expresiones lógicas. En la siguiente lección vamos a aprender sobre las llamadas funciones internas que nos ayudarán a escribir sentencias un poco más complejas para nuestros algoritmos. ¡Hasta la próxima!

ACTIVIDADES DE APRENDIZAJE

¿Puedes calcular el valor booleano que resultará de cada una de las siguientes expresiones?
  • (4 <= 4) and 2 > 3
  • (15 / 3 + 2 < 9) or (4 * 2 > = 10 - 2)
  • not('B' < '1') and not('3' > 'r')
  • not (4 < 5 or (verdadero > falso))
  • not(not(5 > 3) and 3 > 5 + 10)




viernes, 13 de marzo de 2015

Lógica de Programación (6): Expresiones aritméticas



En las lecciones anteriores de este curso hemos aprendido algunos términos básicos relativos al desarrollo de algoritmos. Hoy nos toca meternos más a fondo a la escritura de las instrucciones que van a formar esos algoritmos. Y por ello, en esta ocasión nos vamos a ocupar de las expresiones.

Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales que utilizamos para darle instrucciones a una computadora. Una expresión puede ser algo tan simple como asignarle un valor a una variable o tan complejo como toda una fórmula matemática traducida a símbolos que la computadora entendería.

Existen distintos tipos de expresiones que podemos encontrarnos en un algoritmo común. En esta lección nos vamos a enfocar en las expresiones aritméticas.

Expresiones aritméticas
Estas son similares a las fórmulas matemáticas que aprendimos desde nuestros años de primaria y que nos sirven para representar algún modelo de la vida real. Desde el cálculo del área de alguna figura geométrica hasta la representación de un complejo modelo económico, las expresiones aritméticas serán bastante usuales en nuestra labor como programadores.

En una expresión aritmética usaremos únicamente variables o constantes de tipo numérico, además de algunos símbolos que se utilizan para representar las operaciones aritméticas más comunes. En esta tabla agrupamos los operadores aritméticos que usaremos para construir nuestras expresiones así como algunos ejemplos de su uso:

Operadores aritméticos ordenados de manera jerárquica
Algo muy importante que tenemos que destacar es que, cuando hay varias operaciones aritméticas en una expresión, la computadora las resuelve de un modo distinto a como nosotros lo haríamos. Supongamos, por ejemplo, que queremos calcular el valor para la variable C, que tiene asignada la siguiente expresión:

C ← 5 * 4 + 8 / 2 - 1 

Seguramente, nosotros seguiríamos el orden de aparición de las operaciones para irlas resolviendo; por pasos, sería algo como esto:

C ← 20 + 8 / 2 - 1   Multiplicamos 5 * 4
C ← 28 / 2 - 1     Sumamos 20 + 8
C ← 14 - 1     Dividimos 28/2
C ← 13     Restamos 14 - 1

Sin embargo, la computadora ejecuta las operaciones según un determinado orden de jerarquía. En la tabla de operadores mostrada, se ilustra también la jerarquía que les asigna la computadora. Por lo tanto, la computadora calcularía el valor de la variable de un modo distinto:


C ← 20 + 8 / 2 - 1     Se multiplica 5 * 4
C ← 20 + 4 - 1     Se divide 8 / 2
C ← 24 - 1     Se suma 20 + 4
C ← 23     Se resta 24 - 1

Como vemos, la computadora llega a un resultado totalmente distinto al que obtendríamos nosotros. Es importante que sepamos cómo "piensa" una computadora para resolver estas operaciones dado que será nuestro trabajo escribir algunas fórmulas matemáticas en forma de expresiones que entienda y ejecute correctamente una computadora. 

Además de los operadores aritméticos, en una expresión podemos usar también paréntesis para forzar la resolución de alguna operación independientemente de su nivel de jerarquía. Y es que, para una computadora, las operaciones que están agrupadas con paréntesis deben resolverse primero. 

Veamos, por ejemplo, la forma en que se calcularía el valor de la variable M en esta expresión:

M ← 4 * (5 + 2) * 3  / (5 - 1) 
M ← 4 * 7 * 3 / (5 - 1)
M ← 4 * 7 * 3 / 4
M ← 28 * 3 / 4
M ← 84 / 4 
M ← 21

Como podemos ver, las operaciones (5+2) y (5-1) se ejecutaron primero a pesar de que las operaciones de suma y resta tienen menos nivel de jerarquía que la multiplicación o la división. Esto es porque agrupamos ambas operaciones entre paréntesis, lo que eleva su nivel de jerarquía ante los "ojos" de la computadora. Una vez que los paréntesis se quitan de en medio, se sigue respetando la misma jerarquía de siempre.

Si ocurriera que en una misma expresión hay varios niveles de agrupamiento de operaciones, la computadora va a resolver las más internas primero. Por ejemplo:

B ← 12 + ( 3 * 4 * ( 7 - 5 ) / 6 ) - 1
B ← 12 + ( 3 * 4 * 2 / 6 ) - 1   Se resuelve primero el paréntesis más interno (7 - 5)
B ← 12 + ( 12 * 2 / 6 ) - 1
B ← 12 + ( 24 / 6 ) - 1
B ← 12 + 4 - 1
B ← 16 - 1
B ← 15

Conversión de fórmulas matemáticas a expresiones aritméticas
Como decíamos algunos párrafos atrás, conocer el orden de ejecución de las operaciones aritméticas en una computadora nos permite convertir una fórmula matemática en una expresión que la computadora entienda y ejecute en el orden correcto. Veamos algunos ejemplos:

Expresión algebraica Expresión aritmética algorítmica
x**2 + y**4
x**2 / (a**3 + b**3)
u + x**2 / y
(a + b) / (a + c**2 / d + e)


Y bueno, es hora de practicar lo aprendido hasta aquí. A continuación van a encontrar una serie de ejercicios que les recomiendo mucho que resuelvan para que comprendan muy bien cómo funciona esto de los operadores aritméticos en la computadora. Como siempre, pueden enviarlos directamente a mi email personal si desean que los revise. Si tienen dudas, les invito a usar la sección de comentarios de esta lección.

En la próxima lección vamos a aprender cómo crear y evaluar otro tipo de expresiones: las expresiones lógicas. ¡Hasta la próxima!


ACTIVIDADES DE APRENDIZAJE

1) Digamos que A=5, B=25 y C=10. ¿Puedes deducir cuál será el valor de la variable X en cada uno de los siguientes casos?

  • X ← A + B + C
  • X ← A + B * C
  • X ← A + B / C
  • X ← A + B mod C
  • X ← (A + B) div C
  • X ← A + (B / C)
2) Calcula el valor de la variable C en cada uno de los siguientes casos.
  • C ← 8 + 7 * 3 +  5 * 6
  • C ← -2 ** 3
  • C ← (33 + 3 * 4) / 5
  • C ← 2 ** 2 * 3
  • C ← 3 + 2 * (18 - 4 ** 2)
  • C ← 16 * 6 - 3 * 2

3) Escribe las siguientes expresiones algebraicas en forma de expresiones algorítmicas




Copyright © IsraelCapetillo.com - Un blog de tecnología, noticias geek y más Compartido por Gooyaabi Templates | Powered By Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com