viernes, 31 de mayo de 2013

1 Algoritmos

  1. Conceptos básico:

Algoritmos: Secuencia ordenada  de operaciones o pasos que describen el proceso que se debe seguir, para dar solución a un  un problema  en un tiempo finito.

Diagrama de FlujoUn diagrama de flujo es la representación gráfica de un algoritmo. También se puede decir que es la representación detallada en forma gráfica de como deben realizarse los pasos en la computadora para producir resultados.


Por ejemplo, el siguiente diagrama de flujo corresponde al algoritmo para calcular el área del rectángulo.

Monografias.com

Pseudocódigo: Mezcla de lenguaje de programación y español (o ingles o cualquier otro idioma) que se emplea, dentro de la programación estructurada, para realizar el diseño de un programa. En esencial, el pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos.

Por ejemplo, el siguiente pseudocódigo corresponde al algoritmo para calcular el área del rectángulo: el algoritmo calcula el área (a) de un rectángulo cualquiera, si se le suministra la longitud de de la base (b) y la longitud de la altura (h).

                                                     Monografias.com



TIPOS DE ALGORITMOS:
Teniendo en cuenta la forma como describen el proceso, se pueden clasificar en:
 Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras.
 Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.
Un algoritmo debe definir tres partes: Entrada, Proceso y Salida. Ejemplo: el algoritmo de receta de cocina se tendrá:
  • Entrada: ingrediente y utensilios.
  • Proceso: elaboración de la receta en la cocina.
  • Salida: terminación del plato (por ejemplo, Pollo al horno)
  • Preciso: el algoritmo debe ejecutar la tarea para el cual fue diseñado.
  • Determinístico: significa que el resultado debe depender estrictamente de los datos suministrados, siempre que el algoritmo se ejecute con un mismo conjunto de datos de entrada, el resultado debe ser siempre el mismo.
Son ejemplos de algoritmos los métodos utilizados en aritmética para sumar, restar, multiplicar y dividir cantidades; la aplicación de la fórmula cuadrática para encontrar las raíces de un polinomio de segundo grado En todos ellos se cumplen las tres características anteriores.
Un algoritmo eficiente y confiable es el producto de un análisis exhaustivo del problema, para determinar la mejor alternativa de solución.


Código

El producto final de la programación siempre debe ser código que pueda ser ejecutado en el computador. Esto requiere describir los algoritmos en un lenguaje de programación. Los lenguajes de programación definen un conjunto limitado de conceptos básicos, en función de los cuales uno puede expresar cualquier algoritmo.
En esta asignatura, usaremos el lenguaje de programación Python para escribir nuestros programas.
El código en Python para resolver la ecuación cuadrática es el siguiente:
a = float(raw_input('Ingrese a: '))
b = float(raw_input('Ingrese b: '))
c = float(raw_input('Ingrese c: '))

discriminante = b ** 2 - 4 * a * c
if discriminante < 0:
    print 'La ecuacion no tiene soluciones reales'
elif discriminante == 0:
    x = -b / (2 * a)
    print 'La solucion unica es x =', x
else:
    x1 = (-b - (discriminante ** 0.5)) / (2 * a)
    x2 = (-b + (discriminante ** 0.5)) / (2 * a)
    print 'Las dos soluciones reales son:'
    print 'x1 =', x1
    print 'x2 =', x2

raw_input()

DECLARACIÓN DE LOS DATOS: Como ya se dijo los datos a procesar y los datos resultantes del proceso se almacenan en la memoria principal de la computadora, también conocida como memoria RAM (Random Access Memory), y también se destinan localidades de memoria cuando se necesita almacenar resultados de cálculos intermedios. 
Por ejemplo:
1) Son identificadores válidos los siguientes:
longitud, altura, dato1, dato2, Coeficiente_a, numero_menor, EDAD
2) No son identificadores válidos los siguientes:
ºC , porque el carácter º no es un carácter permitido
1_dato, porque comienza con un dígito
numero menor, porque tiene un espacio en blanco como separador
leer, escribir e inicio, porque son palabras reservadas

INSTRUCCIONES Un algoritmo normalmente incluye una gran cantidad de instrucciones, también llamadas sentencias; inicialmente se presentan las instrucciones de asignación, lectura y escritura.


Instrucción Leer
Se define la instrucción Leer para indicar que se debe enviar información desde un dispositivo de entrada de datos, como el teclado, hacia la memoria En la memoria los datos serán ubicados a través de su nombre o identificador asignado.
El formato de esta instrucción es el siguiente:
Monografias.com

Instrucción Escribir
Se define la instrucción Escribir para indicar que se va a enviar información desde la memoria hacia un dispositivo de salida de datos, como la impresora o la pantalla del monitor.
El formato de esta instrucción es el siguiente:
Monografias.com

Diseño del algoritmo.
Se debe representar la alternativa de solución seleccionada mediante un algoritmo, el cual puede desarrollarse utilizando el pseudocódigo o el diagrama de flujo a preferencia del programador; luego se verifica si el algoritmo cumple con las características de un algoritmo.

Prueba de escritorio.
 Se debe ejecutar el algoritmo con diferentes datos de entrada para verificar si se obtienen los datos de salida esperados, en caso contrario se procede a hacer las modificaciones necesarias al algoritmo. 

Declaración de los datos
Monografias.com



Estructura secuencial.
Se trata de la construcción donde las instrucciones se deben ejecutar una después de la otra, en el mismo orden en que aparecen en el algoritmo, sin dejar de ejecutar ninguna de ellas.

ESTRUCTURA DE DECISIÓN
Es una situación típica en la resolución de problemas, que se tenga que decidir entre realizar una instrucción u otra dependiendo del cumplimiento de una condición. 
Por ejemplo: Para calcular c=b/a primero hay que verificar que a sea diferente de cero, ya que la operación se puede realizar únicamente si a es diferente de cero Para representar esta situación en el algoritmo se utiliza la estructura condicional también conocida como estructura de decisión.

Decisión simple
Una decisión es simple, cuando sólo se tiene un curso de acción para el caso que el resultado de evaluar la condición sea verdadero; es decir que si la condición es verdadera se debe de ejecutar la instrucción o el conjunto de instrucciones que se indique, y si la condición es falsa se omite la ejecución de dicha instrucción o conjunto de instrucciones.

Decisión doble
Una decisión es doble cuando se tiene un curso de acción para el caso que el resultado de evaluar la condición sea verdadero y otro para cuando sea falso.


2. Tipos de datos.


El tipo de un dato es el conjunto de valores que puede tomar durante el programa. Si se le intenta dar un valor fuera del conjunto se producirá un error.

La asignación de tipos a los datos tiene dos objetivos principales:
  • Por un lado, detectar errores en las operaciones.
  • Por el otro, determinar cómo ejecutar estas operaciones.
Existen muchas clasificaciones para los tipos de datos, y dependiendo de la fuente que mires, te mostrarán una u otra. A continuación tienes una de las posibles clasificaciones:

Tipos estáticos

Casi todos los tipos de datos son estáticos, la excepción son los punteros y no se tratarán debido a su complejidad.

Que un tipo de datos sea estático quiere decir que el tamaño que ocupa en memoria no puede variar durante la ejecución del programa.


Tipos dinámicos

Dentro de esta categoría entra solamente el tipo puntero. Este tipo te permite tener un mayor control sobre la gestión de memoria en tus programas. 

Tipos simples
Como su nombre indica son los tipos básicos en Pascal. Son los más sencillos y los más fáciles de aprender. Por todo esto, serán en los que nos centremos.


Los tipos simples más básicos son: entero, lógico, carácter y real. 

Tipos estructurados

Mientras que una variable de un tipo simple sólo referencia a un elemento, los estructurados se refieren a colecciones de elementos.
Las colecciones de elementos que aparecen al hablar de tipos estructurados son muy variadas: tenemos colecciones ordenadas que se representan mediante el tipo array, colecciones sin orden mediante el tipo conjunto, e incluso colecciones que contienen otros tipos, son los llamados registros.

Tipos ordinales
Dentro de los tipos simples, los ordinales son los más abundantes. De un tipo se dice que es ordinal porque el conjunto de valores que representa se puede contar, es decir, podemos establecer una relación uno a uno entre sus elementos y el conjunto de los números naturales.
Dentro de los tipos simples ordinales, los más importantes son:

  • El tipo entero (integer)
  • El tipo lógico (boolean)
  • El tipo carácter (char)

 Tipos no-ordinales

Simplificando, podríamos reducir los tipos simples no-ordinales al tipo 
real. Este tipo nos sirve para declarar variables que pueden tomar valores dentro del conjunto de los números reales.

El tipo boolean (lógico)

El tipo de datos lógico es el que te permite usar variables que disponen sólo de dos posibles valores: cierto o falso. Debido a esto, su utilidad salta a la vista, y no es otra que variables de chequeo. Nos sirven para mantener el estado de un objeto mediante dos valores:

  • si/no
  • cierto/falso
  • funciona/no funciona
  • on/off
  • etc.

Para aclararlo, veamos un ejemplo:


      
   type
      tLogico = boolean;
   var 
      llueve   : tLogico;   (* si llueve o no *)
      paraguas : boolean;   (* si encuentro o no el paraguas *)

   begin
      (* aqui se determinarian los valores de "llueve" y "paraguas" *) 
      
      if llueve and (not paraguas) then         
         writeln('Me quedo en casita')
      else 
         writeln('Me voy a dar un paseo')
   end.   
      
El tipo real (real)

Como ya has visto, Pascal soporta el conjunto entero de números. Pero no es el único, también te permite trabajar con números pertenecientes al conjunto real.

El tipo de datos real es el que se corresponde con los números reales. Este es un tipo importante para los cálculos. Por ejemplo en los estadísticos, ya que se caracterizan por tratar fundamentalmente con valores decimales.

A continuación tienes un ejemplo en el que se utiliza el tipo real. En el puedes ver las dos formas de declarar una variable real, y también el uso de una constante real. Por si tienes curiosidad, el resultado de ejecutar el programa compilado es:
El área para un radio de 3.14 es 63.6174



   const
      pi = 3.1416;      
   type
      tArea = real;
   var 
      A : tArea;     (* area *)
      R : real;      (* radio *)

   begin
      R := 4.50;
      A := pi * R * R;    (* calculamos el area *)
      
      writeln('El area para un radio de ',R:4:2,' es ',A:8:4)
   end.   
      


Los tipos char y string (carácter y cadena)

Con el tipo carácter puedes tener objetos que representen una letra, un número, etc. Es decir, puedes usar variables o constantes que representen un valor alfanumérico. Pero ojo, cada variable sólo podrá almacenar un carácter.

Sin embargo, con las cadenas de caracteres (strings) puedes contener en una sóla variable más de un carácter. Por ejemplo, puedes tener en una variable tu nombre.
Veamos cómo se usan ambos tipos en el siguiente ejemplo:


      
   type
      tNombre = string[10];  (* puede almacenar 10 caracteres *)
   var 
      nombre    : tNombre;  (* variable para almacenar el nombre *)
      letra_NIF : char;     (* caracter para contener la letra del NIF *)

   begin
      nombre    := 'Beni';
      letra_NIF := 'L';
      
      writeln('Mi nombre es ',nombre,' y mi letra es ',letra_NIF)      
   end.   
      

Veamos un ejemplo sobre tipos de datos

A continuación se presenta un ejemplo con el que puedes interactuar para que veas de forma más amena alguno de los conceptos sobre los tipos de datos.
En el ejemplo tienes en la parte izquierda el código del programa, y en la derecha la parte con la puedes jugar. Esencialmente, lo que tienes que hacer es:
  • Dar valores iniciales a las variables numerochar_A y char_B
  • Y en función de estos valores y de las instrucciones que hay en el código, determinar cuál será el valor de cadena


    
  program Prueba;
  type
     tNumero   = integer; 
     tLogico   = boolean;
     tCaracter = char;
     tCadena   = string[5];
  var
     numero : tNumero;
     cadena : tCadena;
     char_A, char_B     : tCaracter;
     logico_A, logico_B : tLogico;
     
  begin
     (* aqui se iniciarian las vars. *)
            (* ... *)
     logico_A := numero > 3;
     logico_B := numero < 6;
     if logico_A and logico_B then
        cadena := char_B
     else 
        cadena := char_A;
  end.   
        

Se debe asignar nombre a los datos de acuerdo a las reglas para formar identificadores. Al hacer la declaración de los datos también debe especificarse el tipo de dato que va a almacenarse en la posición de memoria especificada, los tipos de datos son: numérico, un carácter, una cadena de caracteres o un valor lógico 
(verdadero o falso).

Vídeos 

http://www.youtube.com/watch?v=TLbhqX9Oxuk
http://www.youtube.com/watch?v=5CBoxm_L38Y