sábado, 22 de octubre de 2011

Conceptos Básicos de Programación

Un algoritmo es el inicio de la programación, porque él describe la lógica necesaria para resolver un problema, para representarlo se lo puede hacer a través de pseudocódigos y diagramas de flujo, que dan una visión amplia de cómo debe iniciarse y finalizar una programación basada en operadores, estructuras selectivas, estructuras repetitivas y manejo de arreglos.

El pseudocódigo no es directamente un lenguaje de programación que se pueda ejecutar en un computador y probar su correcto funcionamiento y tampoco indica si los bloques de código están correctamente colocados, ya que cada lenguaje de programación como C, C++, Java, entre otros, generalmente trabajan sus funciones de forma diferente, pero siempre manteniendo la lógica inicial de los algoritmos.

1. Algoritmos.

Los algoritmos constituyen un listado de instrucciones que indican el camino a seguir para dar solución a un problema. Este "camino a seguir" tiene una lógica que puede ser controlado a través de estructuras de control.

1.1. Características de los algoritmos.
  • Un algoritmo no debe ser ambiguo.
  • Debe de tener una secuencia inicial y final.
  • Cada paso deberá tener una secuencia sucesiva y única.
  • El algoritmo debe ser siempre eficiente y dar una solución al problema o de lo contrario mostrar un mensaje que diga "Sin solución".
1.2. Programa.

Un programa está definido por un "algoritmo", porque forma el conjunto de instrucciones que forman el algoritmo (codificados en un lenguaje de programación) y que se procesa en una computadora para solucionar un problema específico.

1.3. Heurística.

Es la solución a un problema y un algoritmo que da o produce una solución a un problema planteado aunque esta solución no sea la óptima es llamado "Heurístico".

1.4. Diagrama de flujo.

El diagrama de flujo es una representación gráfica de un algoritmo.

En el siguiente ejemplo se muestra un diagrama de flujo para: SUMAR (+) dos variables A y B, donde el resultado es almacenado en la variable C. (Ver Figura 1)
Figura 1.- Ejemplo de un diagrama de flujo.

Los símbolos más comunes del diagrama son:

Terminal: Se usa para indicar el inicio o fin de un diagrama de flujo.

Proceso: Cualquier tipo de operación que pueda originar cambio de valor, operaciones aritméticas, de transformaciones, etc.

Entrada/Salida: Se usa para indicar el ingreso o salida de datos.


Salida: Se utiliza para mostrar datos.

Conector: Sirve para enlazar dos partes cualesquiera de un diagrama a través de un conector en la salida a otro conector en la entrada.

Decisión: Indica operaciones lógicas o de comparación entre datos y en función del resultado determina cual camino alternativo del programa se debe seguir

Desde: Estructura repetitiva que indica un ciclo de N repeticiones de una o más acciones.

1.5. Variables.

Se utilizan para contener datos de distintos tipos: números, letras, cadenas de caracteres, valores lógicos, etc. El valor contenido en una variable puede cambiar a lo largo de la ejecución de un programa.

1.6. Constantes.

Son elementos que contienen datos, el valor asignado a una constante es fijo y no se puede cambiar durante la ejecución de un programa.

1.7. Expresiones.

Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales.

Por ejemplo:
A + (B + 3) / C

Cada expresión toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecución de las operaciones implicadas.

Una expresión consta de operadores y operandos. Según sea el tipo de datos que manipulan, las expresiones se clasifican en:
  • Aritméticas
  • Relacionales
  • Lógicas
2. Operadores.

2.1. Aritméticos.

Los operadores aritméticos permiten realizar cualquier operación aritmética (suma, resta, multiplicación y división).

En la siguiente tabla se muestran los operadores:
El operador MOD devuelve el resto o residuo de una división entera, mientras que el operador DIV permite realizar una división entre dos números enteros, allí radica la diferencia con el operador "/".

2.2. Relacionales.

Permiten evaluar las relaciones entre un par de operandos. Los operadores relacionales son:
2.3. Lógicos.

Los operadores lógicos producen un resultado booleano, y sus operando son también valores lógicos o asimilables a ellos (los valores numéricos son asimilados a cierto o falso según su valor sea cero o distinto de cero).

Los operadores lógicos son tres (and, or y not); dos de ellos son binarios, el último (negación) es unario.

2.4. AND (Y)

Produce un resultado con valor de verdad true cuando ambos operandos tienen valor de verdad true; en cualquier otro caso el resultado tendrá un valor de verdad false.

Sintaxis: variable1 AND variable2

2.5. OR (O)

Produce un resultado con valor de falso false cuando ambos operandos tienen valores falsos; en cualquier otro caso el resultado tendrá un valor de verdad true.

Sintaxis: variable1 OR variable2

2.6. NOT (NO)

Invierte el valor de verdad del operando.

Sintaxis: NOT operando

Ejemplo:
Si operando tiene un valor de verdad true, not operando produce un resultado con valor falso false.

2.7. Prioridad de los operadores.

Los operadores deben ser evaluados según la siguiente prioridad:

1.- ( )
2.- ^
3.- *, /, Mod, Not
4.- +, -, And
5.- >, <, >=, <=, <>, =, Or

3. ENTRADA/SALIDA de datos.

Los dispositivos de entrada/salida permiten que el usuario interactúe con el sistema. Por medio de los dispositivos de entrada el usuario ingresa los datos a procesar en el sistema y los dispositivos de salida muestran el resultado.

Las instrucciones de E/S dan acceso al programador a las funciones básicas de estos dispositivos, permitiéndole capturar datos de los dispositivos de entrada y asignarlos a variables para operar con ellos y mostrar resultados del proceso en los dispositivos de salida.

3.1. LEER.

Permite el ingreso de datos al computador, el dato leído debe ser almacenado en una variable, la sintaxis es la siguiente:
LEER variable

3.2. ESCRIBIR.

Permite reportar resultados de un proceso, también se usa para mostrar mensajes.
La sintaxis es la siguiente:
ESCRIBIR variable
ESCRIBIR 'Texto'
ESCRIBIR Expresión

Veamos unos ejemplos, según las sintaxis anteriores respectivamente:

ESCRIBIR Resultado
Esta instrucción devuelve el contenido de la variable Resultado.

ESCRIBIR 'Oriente Petrolero campeón'
Esta instrucción muestra al usuario el contenido de los apostrofes, nótese que para poder mostrar un texto este debe ir encerrado en apostrofes, comillas simples o dobles según el lenguaje que se utilice.

ESCRIBIR 4*n
Esta instrucción primero calcula la expresión 4*n y luego muestra ese resultado.

4. Tipos de datos simples o escalares.

Son aquellos datos cuyos miembros están compuestos por un solo item (dato). Los tipos de datos escalares nativos o primitivos son aquellos tipos de datos escalares que ya están implementados en el lenguaje junto a sus respectivas operaciones.

Entre este tipo de datos tenemos: Entero, Real, Caracter, Booleano: más adelante veremos otros tipos de datos.

5. Asignaciones.

Una asignación consiste en darle un determinado valor a una variable o constante, por ejemplo en la siguiente sentencia observamos que a la variable A, se le da el valor de 5.

A = 5

De manera similar podemos tener la siguiente asignación

A = 4 + (3 * Y^2)

vemos que una expresión a sido asignada a la variable A.
Algunos autores usan el símbolo <- en vez de igual (=) para una asignación.

6. Declaración de variables.

Mediante la declaración de variables describimos las características de las mismas.
La sintaxis que usaremos es la siguiente:

Nombre_de_variable: Tipo

Entiéndase por Tipo, al tipo de dato de la variable.

7. Técnicas de desarrollo de algoritmos.

Existen dos principales técnicas de diseño de algoritmos de programación, el Top Down y el Button Up.

Top Down.- También conocida como de arriba-abajo y consiste en establecer una serie de
niveles de mayor a menor complejidad (arriba-abajo) que den solución al problema.
Consiste en efectuar una relación entre las etapas de la estructuración de forma que una etapa jerárquica y su inmediato inferior se relacionen mediante entradas y salidas de información. Este diseño consiste en una serie de descomposiciones sucesivas del problema inicial, que recibe el refinamiento progresivo del repertorio de instrucciones que van a formar parte del programa.

La utilización de la técnica de diseño Top-Down tiene 3 objetivos básicos:

- Simplificación del problema y de los subprogramas de cada descomposición.

- Las diferentes partes del problema pueden ser programadas de modo independiente e incluso por diferentes personas.

- El programa final queda estructurado en forma de bloque o módulos, lo que hace más sencilla su lectura y mantenimiento.

Button Up.- El diseño ascendente se refiere a la identificación de aquellos procesos que necesitan computarizarse conforme vayan apareciendo, su análisis como sistema y su codificación, o bien, la adquisición de paquetes de software para satisfacer el problema inmediato.

Cuando la programación se realiza internamente y haciendo un enfoque ascendente, es difícil llegar a integrar los subsistemas al grado tal de que el desempeño global, sea fluido. Los problemas de integración entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programación alcanza la fecha límite para la integración total del sistema. En esta fecha, ya se cuenta con muy poco tiempo, presupuesto o paciencia de los usuarios, como para corregir aquellas delicadas interfaces, que en un principio, se ignoran. Aunque cada subsistema parece ofrecer lo que se requiere, cuando se contempla al sistema como una entidad global, adolece de ciertas limitaciones por haber tomado un enfoque ascendente.

Una de ellos es la duplicación de esfuerzos para acceder al software y más aún al introducir datos.

Otra es, que se introducen al sistema muchos datos carentes de valor.

Un tercero y tal vez el más serio inconveniente del enfoque ascendente, es que los objetivos globales de la organización no fueron considerados y en consecuencia no se satisfacen.

Entonces.. la diferencia entre estas dos técnicas de programación se fundamenta en el resultado que presentan frente a un problema dado.

Como ejemplo un departamento, el cual se componte de varias provincias (Andrés Ibéñez, Santistevan, Cordillera, ...), en cada uno de ellos se fueron presentando problemas a los cuales se les dio una solución basada en un enfoque ascendente (Button Up): creando programas que satisfacían sólo el problema que se presentaba.

Cuando el departamento decidió integrar un sistema global para suplir todas las necesidades de todas las provincias se dio cuenta que cada una de las soluciones presentadas no era compatible la una con la otra, no representaba una globalidad, característica principal de los sistemas.

Como no hubo un previo análisis, diseño de una solución global en todas sus provincias, centralización de información, que son características propias de un diseño Descendente (Top Down) y características fundamentales de los sistemas; el país no puede satisfacer su necesidad a nivel global.

La creación de algoritmos esta basado sobre la técnica descendente, la cual brinda el diseño "ideal" para la solución de un problema.

8. Pseudocódigo.

Diremos que una notación es un pseudocódigo si mediante ella podemos describir el algoritmo, utilizando palabras y frases del lenguaje natural sujetas a unas determinadas reglas.

Todo pseudocódigo debe posibilitar la descripción de:
  • Instrucciones de entrada/salida.
  • Instrucciones de proceso.
  • Sentencias de control del flujo de ejecución.
  • Acciones compuestas, a refinar posteriormente.
Para entender mejor estos conceptos en los siguientes artículos veremos algunos ejemplos de pseudocódigos, diagramas de flujos, codificaciones en PHP y todo lo explicado en el presente artículo.

No hay comentarios :

Publicar un comentario

Encuesta: ¿Quién es el mejor catedrático de la carrera de Ing. Informática de la UAGRM?