lunes, 28 de febrero de 2011

Introduciéndonos a la programación V - Diagramas de Flujo (3)

Como continuación del anterior capítulo, en este se mostrará la especificación para saber si el número es cero, positivo o negativo.
El algoritmo:
  1. Inicio
  2. Leer A
  3. Si A>0 entonces:
    1. Mostrar 'Es positivo'
      Si no
    2. Si A=0 entonces:
      1. Mostrar 'Es cero'
        Si no
      2. Mostrar 'Es negativo'
    3. Fin Si
  4. Fin si
  5. Fin
El diagrama de flujo:
Código fuente en C++ probado con Code Blocks 10.05: hospedado en google docs
Diagrama en DFD: hospedado en google docs
 

lunes, 21 de febrero de 2011

Introduciéndonos a la programación V - Diagramas de Flujo (2)

Este capítulo solo está destinado a la resolución de un problema común dentro de los algoritmos cuantitativos, la solución también tendrá el diagrama de DFD y código fuente de C++ para que así ya tengamos una idea temprana pero creciente sobre el uso de ambos:

Determinar si un número introducido por teclado es positivo o negativo

Planteamiento:
  • La solución es simple, debemos saber si el número es mayor o menor que cero mediante una decisión lógica.
Algoritmo en pseudocódigo:
  1. Inicio
  2. Leer A
  3. Si A>0 entonces:
    1. Mostrar 'Es positivo'
      Sino
    2. Mostrar 'Es negativo'
  4. Fin si
  5. Fin
 Diagrama de flujo en DFD con comentarios incluidos:
Código fuente en C++ probado con Code Blocks 10.05: hospedado en Google Docs
Diagrama en DFD: hospedado en Google Docs

Introduciéndonos a la programación IV - Diagramas de Flujo (1)

En el anterior capítulo vimos lo necesario para crear pseudocódigos, este capítulo está destinado estudiar todo lo requerido para crear nuestros propios diagramas de flujo. Así que:
Diagramas de flujo (Flowcharts)

Si bien los pseudocódigos son las representaciones escritas de los algoritmos, los diagramas de flujo son las representaciones gráficas de los mismos. Pero no cualquier gráfico puede entrar en un diagrama de flujo. La ANSI como en otros ámbitos también ha estandarizado los diagramas de flujo quedándonos con estos bloques gráficos pertinentes a cada acción para programar:


Muchas veces el simbolo correspondiente al conector dentro de página también es usado como símbolo de inicio y fin.
A diferencia de los pseudocódigos donde las reglas son muy generales e indican en sí que el pseudocódigo debe ser finito, concreto, no ambiguo, los diagramas de flujo tienen reglas un poco más estrictas por cumplir:
  1. Se deben usar solamente líneas de flujo horizontales o verticales.
  2. Se deben utilizar conectores cuando el cruce de líneas sea inevitable.
  3. Solo se deben utilizar los conectores cuando así sea necesario.
  4. No deben quedar líneas de flujo sin conectar.
  5. Se deben trazar los símbolos de manera que se pueda leer de arriba hacia abajo y de izquierda a derecha.
  6. Todo texto escrito dentro un símbolo deberá ser escrito claramente, evitando el uso de muchas palabras.
Modelos de diagramas de flujo
Para hacer que el aprendizaje sea mucho más eficaz, estos modelos pueden servirte como guía para realizar luego tus diagramas de flujo(Las capturas están hechas en DFD, un programa que luego describiré y usaremos):
  •  Modelo de estructura secuencial
  •  Modelo de estructura condicional simple

  • Modelo de estructura condicional doble
  •  Modelo de estructura iterativa
DFD
El programa libre DFD es un editor, depurador e intérprete de diagramas de flujo, muy útil a la hora de aprender ya que el simple hecho de poder ejecutarlo y depurarlo ya nos otroga bastantes bondades a la hora de aprender a programar. Se lo puede descargar gratuitamente de este link.
Para el siguiente capítulo el primer ejercicio oficial con pseudocódigo y diagrama de flujo. El clásido determinar si un número introducido por teclado es positivo o negativo.

Introduciéndonos a la programación III - Pseudocódigos y estructuras

Pseudocódigos (Falsos códigos?)

Pseudo, significa falso, entonces pseudocódigo es falso código? De hecho la respuesta es un sí y un no al mismo tiempo, el pseudocódigo es la representación escrita estructurada y organizada de lo que es un algoritmo, pero no constituye así un código que pueda ser compilado como ejecutable.

Estructuras y procesos

Dentro lo que es la programación existen estructuras para realizar lo que nosotros realizamos, por ejemplo, al ir a una heladería y ver una fila, nos ponemos en la fila y esperamos hasta que nos toque el turno esa es una estructura do-while, o al pasar la calle, si el semaforo esta en verde cruzamos, si esta en rojo no (esto claro depende de la señalización de tu país) esta es una estructura selectiva, un if. Razonando, nos damos cuenta que estas estructuras son parte imprescindible de nuestra lógica, de nuestro actuar. Para programar algo en la computadora estas también son imprescindibles, no podemos no utilizarlas en los códigos.
Los procesos más utilizados en la programación son:
  • Inicio -Marca el principio del proceso
  • Fin -Finaliza el proceso
  • Leer -Lee datos mediante dispositivos de entrada o de ficheros
  • Mostrar -Muestra resultados o mensajes
Las estructuras se dividen en dos:
  1. Estructuras selectivas
    1. Estructura If(del inglés condicional Si):
      Esta estructura consta de esta sintaxis:
      Si tengo dinero entonces
          Tomo taxi para ir a mi casa
      Si no
          Me presto dinero
      Fin Si
      Muchas veces esta estructura presenta el caso negativo, es decir:
      Si NO tengo dinero entonces
         Me presto dinero
      Fin si
      Como esta es el molde para las condicionales booleanas, es importante denotar que todas ellas pueden ser negativas según sea la conveniencia.
    2. Estructura de selección (case o switch en los lenguajes de programación)
      Su sintaxis es:
      Selección  según tu número: {dada una variable seleccionará del código que sigue el caso que más se aproxime dicha variable}
      caso 1: {Si tu número es 1}
        Leer la Odisea
      caso 2: {Si tu número es 2}
        Leer la Iliada
      caso 3: {Si tu número es 3}
        Leer la Eneida
      caso deafult: {En caso excepcional que ninguna de los casos se aproxime a la variable}
        No leer
      Fin selección
  2. Estructuras repetitivas 
    1. Estructura Para (For)
      Destinada a realizar una acción N veces su sintaxis es:
      Para (i=1 Hasta 5) {incrementará en uno, es posible también especificar de cuanto en cuanto incrementará el valor de i}
          Mostrar i {Mostrará el valor temporal de i, que será primero 1 luego 2, 3, 4 y 5 para finalizar}
      Fin Para
    2. Estructura Mientras (While)
      Realiza una acción mientras se cumpla la condición booleana que se especifica:
      Mientras (N sea par) {Se puede escribir también N mod 2=0}
          Mostrar N es par
          N=N+((N*0.5)+((N+2)*0.5)
      Fin mientras
    3. Estructura Do mientras (Do-While)
      Se parece al mientras en funcionamiento la diferencia radica en la sintaxis:
      Do
          Mostrar N aún es mayor a cero
      Mientras N sea mayor a cero {O N>0}
 Algunos lenguajes de programación incluyen la estructura "Repetir hasta que" cuya sintaxis es:
Repetir
  {acción}
Hasta que {condición se cumpla}
Practicamente todas las estructuras repetitivas pueden ser representadas unas por otras utilizandolas correctamente, toma nota por que es lo que veremos al llegar a estructuras repetitivas en C++.
Es más fácil comprender la teoría con ejemplos así que, a continuación un ejemplo:

A.-Pseudocódigo standard para resolver un examen:


1.-Inicio
2.-Llenar los dados personales en el examen
3.-Leer todas las preguntas y analizarlas brevemente
4.-Contador=1
5.-Repetir
    5.1.-Leer la pregunta N° + Contador
    5.2.-Si conozco el tema del que la pregunta habla entonces:
           5.2.1.-Si ya resolví alguna pregunta como la que resuelvo ahora entonces:
                     5.2.1.1.-Recordar la solución de esa pregunta
                     Si no
                     5.2.1.2.-Analizar la pregunta y examinar posibles soluciones
                     Fin si
           5.2.2.-Repetir
           5.2.3.-Tratar de resolver la pregunta
           5.2.4.-Si resolvimos la pregunta entonces:
                     5.2.4.1.-Contador= Contador +1
                5.2.4.2.-Ir a 5.2.5
                     Fin si
                     Hasta que nos estanquemos
           Si no
           5.2.5.-Pasar a la siguiente pregunta
           Fin si
    Hasta que Contador sea igual a número total de preguntas
6.-Entregar examen
7.-Fin

Introduciéndonos a la programación II - Algoritmos

Nuestro primer paso
Todo en esta vida tiene un comienzo, y en la programación no existe excepción. Este primer paso es empezar a diseñar nuestro código mediante pseudocódigos y diagramas de flujo que en fin representan nuestra forma de resolver el problema o también llamado algoritmo.

Algoritmo
La definición de algoritmo nos dicta que es una secuencia de pasos finitos destinados a resolver un problema de manera concisa, clara y no ambigua. Es importante también el dejar claro que al igual que las personas tienen distintas formas de resolver un problema, existirán distintos tipos de algoritmos, algunos extensos y más detallados, otros cortos y quizá incompletos pero lo único importante es que con cualquier tipo de algoritmo, el resultado no se vea afectado y este siga siendo el mismo.
Existen dos tipos de algoritmos, cualitativos y cuantitativos. Los cualitativos son exclusivos para la resolución de tareas no numéricas, es más se enfocan en procesos, por ejemplo, un algoritmo sobre como comprar un automóvil a buen precio es un algoritmo cualitativo. Los cuantitativos se definen más por el lado numérico que expresan, es decir que su propósito es el de resolver problemas matemáticos tales como algoritmos para encontrar el máximo común divisor, o la resolución de ecuaciones.
Esta secuencia finita no tiene una estructura de palabras definidas. En un algoritmo las expresiones son practicamente libres para todos, tan solo el respetar la lógica del proceso, que tiene un inicio y un fin. Para entender mejor, un algoritmo cualitativo para llevar paraguas:

  1. Inicio{Marca el inicio de todo el proceso que llevaremos a cabo}
  2. Ver el cielo {proceso}
  3. Si está nublado entonces{estructura condicional}
    1. Llevar paraguas {proceso}
  4. Fin si
  5. Fin{Marca el final del algoritmo}
Como podemos observar, la estructura es finita, no posee ambigüedades y es concisa, pese a su simplicidad es así tal como debemos llevar a cabo la escritura de un algoritmo.
Algunos ejemplos que nos ilustrarán más, aparte de que comenzamos a organizar nuestros algoritmos en forma de pseudocódigos (tópico que tocaremos el siguiente capítulo) son:
  1. Subir una escalera:
1.-Inicio
2.-Si la escalera está cerca entonces:
    2.1.-Ubicar la escalera en el lugar deseado
    2.2.-Si los escalones están en buen estado entonces:
             2.2.1.-Subir escalón por escalón
               Si no
             2.2.2.-Comprar otra escalera o reparar la actual
               Fin Si
          Si no
    2.3.-Traer la escalera y ubicarla en tal lugar
    Fin Si
3.-Fin
  1. Búsqueda de número telefónico:
1.-Inicio
2.-Si la guía telefónica NO está ahí entonces:
    2.1.-Ir por ella
    Fin Si
3.-Si conocemos el nombre completo de la persona entonces:
    3.1.-Buscar la sección de su apellido paterno por la primera letra de este
    3.2.-Si hay muchas personas con ese apellido entonces:
           3.2.1.-Buscar por su apellido materno o su nombre
           Si no
           3.2.2.-Memorizar el número encontrado
           Fin si
    Si no
    3.3.-Si recordamos parte del número entonces:
           3.3.1.-Localizar la parte de la guía constante solo de números
           3.3.2.-Buscar el número recordando parte de el
           3.3.3.-Si ubicamos el número entonces:
                     3.3.3.1.-Memorizarlo
                     Si no
                     3.3.3.2.-Cerrar la guía y pedir el número a la persona
                     Fin si
           Si no
           3.3.4.-Cerrar la guía y pedir el número a la persona
           Fin si
    Fin Si
             4.-Fin

Quizá creas que todo esto llegue a ser ridículo por hacer pseudocódigos sobre cosas tan cotidianas y fáciles, pero piensa, el objeto de realizar estás prácticas son sencillamente diagnosticar tu propia lógica y secuencia de pasos que tu mismo sigues al resolver los problemas.

Introduciéndonos a la programación I - Definición

Prefacio
El mundo de la programación es sumamente amplio, interesante y para muchas personas lo más apasionante en lo que conscierne de los computadores. La programación en sí conlleva a la lógica y a la capacidad de resolución de problemas de forma creativa y razonable. Aunque muchas personas no lo sepan, el principio para introducirnos en la programación somos nosotros mismos y nuestra capacidad de resolución de cuestiones que se nos presentan a diario.
Si es la primera vez que te introduces a la programación, esta es la entrada correspondiente ya que tocaremos la teoría necesaria en este primer capítulo. Si la teoría es de por sí agotadora y la acción de crear tu programa es lo único que deseas, es mejor que detengas tu ansiedad por que así por así no funciona la programación. Sin más prólogos o redundancias sobre el tema introduzcámonos brevemente a la teoría para saltar rapidamente a la práctica. Al final de una sustancial introducción a la programación habrá una pequeña práctica resuelta, porque muchas veces es de lo ilustrativo de donde más aprendemos.

Definición
Para Wikipedia, la gran ayuda de los jóvenes entre los que me incluyo, programación es:
El proceso de diseñar, escribir, probar, depurar y mantener el código fuente de programas computacionales. El código fuente es escrito en un lenguaje de programación. El propósito de la programación es crear programas que exhiban un comportamiento deseado. El proceso de escribir código requiere frecuentemente conocimientos en varias áreas distintas, además del dominio del lenguaje a utilizar, algoritmos especializados y lógica formal. Programar no involucra necesariamente otras tareas tales como el análisis y diseño de la aplicación (pero si el diseño del código), aunque si suelen estar fusionadas en el desarrollo de pequeñas aplicaciones.
 Analizando no tan menuciosamente vemos el concepto de diseñar al principio de la definición, esto se refiere a lo que veremos en el siguiente capítulo, el diseño del código o forma de resolver el problema mediante pseudocódigos, o diagramas de flujo, primeramente escritos y ya con la práctica se nos harán mentales.
Luego, podemos observar el concepto escribir, pero como escribimos la programación? Cómo la expresamos? Cómo creamos una aplicación a partir de nuestra idea? Este proceso se lleva a cabo a traves de los lenguajes de programación, los cuales existen para cada gusto y exigencia. Por ejemplo, programadores realmente interesados en la web, pueden usar PHP, los interesados en aplicaciones que van desde calculadoras a aplicaciones ofimáticas pueden aprender a usar Delphi, C++ Builder, o Visual Basic (en sus versiones .Net y la 6.0), en fín, para programar debemos conocer un lenguaje en el cual hacerlo y este primeramente será el C++, que tocaremos para capitulos más adelante.
Para finalizar rápidamente este capítulo tenemos que considerar algo que no está incluido implicitamente en la definición, la capacidad de programar no es solo para PC's o Mac's, sino para microprocesadores en sí, tengamos en cuenta que la mayoría de los productos electrónicos ahora funcionan con sistemas digitales, y es necesario tener un controlador para encargarse de todo el aparato electrónico, ese controlador, es software puro en su más minima expresion sintetizado junto a un microprocesador con instrucciones especificas para controlar todo, desde la duración de la batería de nuestro celular hasta la temperatura de nuestro refrigerador.
Como se puede ver en esta breve reseña sobre lo que nos llevara esta introducción, nuestro mundo actual precisa y no sería lo que es sin lo que se llama programación.

Programas que usaremos en la introducción
Aunque muchas veces el pensamiento nos dice que no importa la herramienta que utilicemos nos debe resultar el mismo producto, es preferible uniformizar los programas que usaremos para que así no suframos de no compatibilización. De ese modo dar a conocer los programas que se utilizarán en esta introducción:
Y posiblemente algún programa provisional para realizar algunas tareas especificas.

Hello world! (Hola mundo!)

Y todo debe comenzar como se acostumbra en el mundo de la programación...el tradicional:
printf ("Hello World!");
Este es mi blog personal! En el cual he de publicar alguna que otra cosa curiosa relacionada a lo que hago. Casi no hace falta mencionarlo pero bueno, así son las formalidades. Bienvenido a mi blog!