domingo, 19 de marzo de 2017

tema-1 tecnica de creacion de algoritmos para la solucion de problemas

Bienvenid@ a este blog sobre los pseudocodigo o algoritmos :D


¿Qué es un algoritmo?:Es un conjunto ordenado y finito de operaciones que permten la solucion de un problema.En el contexto matemático, los algoritmos son una serie de normas o leyes específicas que hace posible la ejecución de actividades, cumpliendo una serie de pasos continuos que no le originen dudas a la persona que realice dicha actividad. Los algoritmos se pueden expresar de diversas formas: lenguaje natural, lenguaje de programación, pseudocodigo y diagramas de flujo.

 

Como se expresa un algoritmo: los algoritmos de pueden expresar de tres formas.


* Con palabras

*De forma grafica, diagrama de flujo 

*Con pseudocodigos 

 

Caracteristicas de un algoritmo:

Finitud:
El algoritmo debe acabar tras un número finito de pasos. Es más, es casi fundamental que sea en un número razonable de pasos.
 

 
Definibilidad:
El algoritmo debe definirse de forma precisa para cada paso, es decir, hay que evitar toda ambigüedad al definir cada paso. Puesto que el lenguaje humano es impreciso, los algoritmos se expresan mediante un lenguaje formal, ya sea matemático o de programación para un computador.
 

 
Entrada:
El algoritmo tendrá cero o más entradas, es decir, cantidades dadas antes de empezar el algoritmo. Estas cantidades pertenecen además a conjuntos especificados de objetos.Se trata siempre de cantidades representativas del mundo real expresadas de tal forma que sean aptas para su interpretación por el computador.
 

 
Salida:
El algoritmo tiene una o más salidas, en relación con las entradas.
 

 
Efectividad:
Se entiende por esto que una persona sea capaz de realizar el algoritmo de modo exacto y sin ayuda de una máquina en un lapso de tiempo finito


 

tipos de algoritmos:

cualitativo: son aquello que describen los pasos utilizando palabras.

ejemplo: realizar un algoritmo que indique como hacer una llamada telefonica.




 Algoritmos cuantitsativos: 
son aquellos en los que se utilizan calculos numericos
para definir los pasos del proceso.

Ejemplo:   





¿Que es lenguaje algoritmico?:
es una serie de simbolos y reglas 
que se utilizan para escribir de manera 
explicita un proceso.

Tipos de lenguaje algoritmico:

*graficos: es la representacion grafica 
de las operaciones que se realizan en un 
algoritmo (diagrma de flujo).  
     
  *No graficos: representan 
de forma descrictiva las 
operaciones que se realizan 
en un algoritmo (pseudocodigo).





 


Partes de un algoritmo:

Todo algoritmo debe obedecer a la estructura básica de un sistema, es decir: entrada, proceso y salida.


Donde:


ENTRADA:

Corresponde al insumo, a los datos necesarios que requiere el proceso para ofrecer los resultados esperados.


PROCESO:

Pasos necesarios para obtener la solución del problema o la situación planteada.


SALIDA:

Resultados arrojados por el proceso como solución.

 

tema-2 diseñar algoritmos para la solucion de problemas

EL pseudocodigo:

En ciencias de la computación, y análisis numérico, el pseudocódigo (o falso lenguaje) es una descripción de alto nivel compacta e informal del principio operativo de un programa informático u otro algoritmo.
 Utiliza las convenciones estructurales de un lenguaje de programación real, pero está diseñado para la lectura humana en lugar de la lectura mediante máquina, y con independencia de cualquier otro lenguaje de programación. Normalmente, el pseudocódigo omite detalles que no son esenciales para la comprensión humana del algoritmo, tales como declaraciones de variables, código específico del sistema y algunas subrutinas. El lenguaje de programación se complementa, donde sea conveniente, con descripciones detalladas en lenguaje natural, o con notación matemática compacta. Se utiliza pseudocódigo pues este es más fácil de entender para las personas que el código del lenguaje de programación convencional, ya que es una descripción eficiente y con un entorno independiente de los principios fundamentales de un algoritmo. Se utiliza comúnmente en los libros de texto y publicaciones científicas que se documentan varios algoritmos, y también en la planificación del desarrollo de programas informáticos, para esbozar la estructura del programa antes de realizar la efectiva codificación.
No existe una sintaxis estándar para el pseudocódigo, aunque los ocho IDE's que manejan pseudocódigo tengan su sintaxis propia. Aunque sea parecido, el pseudocódigo no debe confundirse con los programas esqueleto que incluyen código ficticio, que pueden ser compilados sin errores. Los diagramas de flujo y UML pueden ser considerados como una alternativa gráfica al pseudocódigo, aunque sean más amplios en papel.


Aplicaciones:

Generalmente se utiliza pseudocódigo en los libros de texto y publicaciones científicas relacionadas con la informática y la computación numérica, para la descripción de algoritmos, de manera que todos los programadores puedan entenderlo, aunque no todos conozcan el mismo lenguaje de programación. Generalmente, en los libros de texto se adjunta una explicación que acompaña a la introducción y que explica las convenciones particulares en uso. El nivel de detalle del pseudocódigo puede, en algunos casos, acercarse a la de formalizar los idiomas de propósito general.
Un programador que tiene que aplicar un algoritmo específico, sobre todo uno desfamiliarizado, generalmente comienza con una descripción en pseudocódigo, y luego "traduce" esa descripción en el lenguaje de programación meta y lo modifica para que interactúe correctamente con el resto del programa. Los programadores también pueden iniciar un proyecto describiendo la forma del código en pseudocódigo en el papel antes de escribirlo en su lenguaje de programación, como ocurre en la estructuración de un enfoque de Top-down y Bottom-up arriba hacia abajo.

 

Sintaxis:

 En la actualidad y por lo general, el pseudocódigo, como su nombre lo indica, no obedece a las reglas de sintaxis de ningún idioma en particular ni es de forma estándar sistemática, a pesar de que cualquier escritor en particular vaya a pedir prestado las estructuras de control general, la sintaxis y el estilo, por ejemplo, de algún lenguaje de programación convencional. Pero en caso de que se quiera ejecutar, se debe llevar a forma tipo, para que no genere mensajes de error. Las fuentes populares incluyen la sintaxis de Pascal, BASIC, C, C++, Java, Lisp, y ALGOL. Por lo general, se omiten las declaraciones de variables. A veces, las llamadas a funciones, los bloques de código y el código contenido dentro de un loop se remplazan por una sentencia de una línea en lenguaje natural.

Dependiendo del escritor, el pseudocódigo puede variar mucho en su estilo, yendo desde en un extremo, una imitación casi exacta de un lenguaje de programación real, hasta al acercarse a una descripción en prosa de formato de pseudocódigo en el otro extremo.

Este es un ejemplo de pseudocódigo (para el juego matemático bizz buzz):
Pseudocódigo estilo Fortran:
programa bizzbuzz
hacer i = 1 hasta 100 
    establecer print_number a verdadero
    si i es divisible por 3
        escribir "Bizz"
        establecer print_number a falso
    si i es divisible por 5
        escribir "Buzz" 
        establecer print_number a falso
    si print_number, escribir i
    escribir una nueva línea
fin del hacer
Pseudocódigo estilo Pascal:
procedimiento bizzbuzz
para i := 1 hasta 100 hacer
    establecer print_number a verdadero;
    Si i es divisible por 3 entonces
        escribir "Bizz";
        establecer print_number a falso;
    Si i es divisible por 5 entonces
        escribir "Buzz";
        establecer print_number a falso;
    Si print_number, escribir i;
    escribir una nueva línea;
fin

Pseudocódigo estilo C:
subproceso funcion bizzbuzz
para (i <- 1; i<=100; i++) {
    establecer print_number a verdadero;
    Si i es divisible por 3
        escribir "Bizz";
        establecer print_number a falso;
    Si i es divisible por 5
        escribir "Buzz";
        establecer print_number a falso;
    Si print_number, escribir i;
    escribir una nueva línea;
}

 

Estructuras de control:

En la redacción del pseudocódigo se utiliza tres tipos de estructuras de control: las secuenciales, las selectivas y las iterativas


Estructuras secuenciales:

Las instrucciones se siguen en una secuencia fija que normalmente viene dada por el número de renglón. Es decir que las instrucciones se ejecutan de arriba hacia abajo.


Estructuras selectivas:

Las instrucciones selectivas representan instrucciones que pueden o no ejecutarse, según el cumplimiento de una condición.
La condición es una expresión booleana. Instrucciones es ejecutada sólo si la condición es verdadera.
 





Selectiva doble (alternativa)

La instrucción alternativa realiza una instrucción de dos posibles, según el cumplimiento de una condición.
 La condición es una variable booleana o una función reducible a booleana (lógica, Verdadero/Falso). Si esta condición es cierta se ejecuta Instrucciones1, si no es así, entonces se ejecuta Instrucciones2






 Selectiva múltiple:
También es común el uso de una selección múltiple que equivaldría a anidar varias funciones de selección.

En este caso hay una serie de condiciones que tienen que ser mutuamente excluyentes, si una de ellas se cumple las demás tienen que ser falsas necesariamente, hay un caso si no que será cierto cuando las demás condiciones sean falsas.
En esta estructura si Condición1 es cierta, entonces se ejecuta sólo Instrucciones1. En general, si Condicióni es verdadera, entonces sólo se ejecuta Instruccionesi


{\color {Sepia}{\mathit {Si}}}\;{\color {OliveGreen}{\mathit {condici{\acute {o}}n_{1}}}}\;{\color {Sepia}{\mathit {Entonces}}}
{\color {BlueViolet}{\mathit {instrucciones_{1};}}}
{\color {Sepia}{\mathit {Si\;no\;si}}}\;{\color {OliveGreen}{\mathit {condici{\acute {o}}n_{2}}}}\;{\color {Sepia}{\mathit {Entonces}}}
{\color {BlueViolet}{\mathit {instrucciones_{2};}}}
{\color {Sepia}{\mathit {Si\;no\;si}}}\;{\color {OliveGreen}{\mathit {condici{\acute {o}}n_{3}}}}\;{\color {Sepia}{\mathit {Entonces}}}
{\color {BlueViolet}{\mathit {instrucciones_{3};}}}
\cdots
{\color {Sepia}{\mathit {Si\;no\;Entonces}}}
{\color {BlueViolet}{\mathit {instrucciones_{n};}}}
{\color {Sepia}{\mathit {Fin\;Si}}}



Selectiva múltiple-Casos:
Una construcción similar a la anterior (equivalente en algunos casos) es la que se muestra a continuación.
 En este caso hay un Indicador es una variable o una función cuyo valor es comparado en cada caso con los valores "Valori", si en algún caso coinciden ambos valores, entonces se ejecutarán las Instruccionesi correspondientes. La sección en otro caso es análoga a la sección si no del ejemplo anterior



{\color {Sepia}{\mathit {Seg{\acute {u}}n}}}\;{\color {OliveGreen}{\mathit {variable}}}{\color {Sepia}{\mathit {Hacer}}}
{\color {Sepia}{\mathit {caso}}}\;{\color {OliveGreen}{\mathit {valor_{1};}}}
{\color {BlueViolet}{\mathit {instrucciones_{1};}}}
{\color {Sepia}{\mathit {caso}}}\;{\color {OliveGreen}{\mathit {valor_{2};}}}
{\color {BlueViolet}{\mathit {instrucciones_{2};}}}
{\color {Sepia}{\mathit {caso}}}\;{\color {OliveGreen}{\mathit {valor_{3};}}}
{\color {BlueViolet}{\mathit {instrucciones_{3};}}}
\cdots
{\color {Sepia}{\mathit {De\;Otro\;Modo}}}
{\color {BlueViolet}{\mathit {instrucciones_{n};}}}
{\color {Sepia}{\mathit {Fin\;Seg{\acute {u}}n}}}


Estructuras iterativas:

Las instrucciones iterativas representan la ejecución de instrucciones en más de una vez.


 Bucle mientras:
El bucle se repite mientras la condición sea cierta, si al llegar por primera vez al bucle mientras la condición es falsa, el cuerpo del bucle no se ejecuta ninguna vez.





Bucle repetir:

Existen otras variantes que se derivan a partir de la anterior. La estructura de control repetir se utiliza cuando es necesario que el cuerpo del bucle se ejecuten al menos una vez y hasta que se cumpla la condición:

{\color {Sepia}{\mathit {Repetir}}}
{\color {BlueViolet}{\mathit {instrucciones;}}}
{\color {Sepia}{\mathit {Hasta\;Que}}}\;{\color {OliveGreen}{\mathit {condici{\acute {o}}n}}}


La estructura anterior equivaldría a escribir:
 
{\color {BlueViolet}{\mathit {instrucciones;}}}
{\color {Sepia}{\mathit {Mientras}}}\;{\color {BlueViolet}{\mathit {\neg }}}({\color {OliveGreen}{\mathit {condici{\acute {o}}n}}})\;{\color {Sepia}{\mathit {Hacer}}}
{\color {BlueViolet}{\mathit {instrucciones;}}}
{\color {Sepia}{\mathit {Fin\;Mientras}}}

Bucle hacer:

El Bucle hacer se utiliza para repetir un bloque de código mientras se cumpla cierta condición.


{\color {Sepia}{\mathit {Hacer}}}\;
{\color {BlueViolet}{\mathit {instrucciones;}}}\;
{\color {Sepia}{\mathit {Mientras}}}\;{\color {OliveGreen}{\mathit {condici{\acute {o}}n}}}



Bucle para:

Una estructura de control muy común es el ciclo FOR, la cual se usa cuando se desea iterar un número conocido de veces, empleando como índice una variable que se incrementa (o decrementa): Plantilla:Definiciones
la cual se define como:


{\color {OliveGreen}{\mathit {i}}}\;{\color {BlueViolet}{\mathit {\gets }}}\;{\color {OliveGreen}{\mathit {x}}}
{\color {Sepia}{\mathit {Mientras}}}\;{\color {OliveGreen}{\mathit {i}}}\;{\color {BlueViolet}{\mathit {\leq }}}\;{\color {OliveGreen}{\mathit {n}}}\;{\color {Sepia}{\mathit {Hacer}}}
{\color {BlueViolet}{\mathit {instrucciones;}}}
{\color {OliveGreen}{\mathit {i}}}\;{\color {BlueViolet}{\mathit {\gets }}}\;{\color {OliveGreen}{\mathit {i}}}\;{\color {BlueViolet}{\mathit {+}}}\;{\color {OliveGreen}{\mathit {z;}}}
{\color {Sepia}{\mathit {Fin\;Mientras}}} 



Bucle para cada:

Por último, también es común usar la estructura de control para cada. Esta sentencia se usa cuando se tiene una lista o un conjunto L y se quiere iterar por cada uno de sus elementos

{\color {Sepia}{\mathit {Para\;Cada}}}\;{\color {OliveGreen}{\mathit {x}}}\;{\color {BlueViolet}{\mathit {\in }}}\;{\color {OliveGreen}{\mathit {L}}}\;{\color {Sepia}{\mathit {Hacer}}}
{\color {BlueViolet}{\mathit {instrucciones;}}}
{\color {Sepia}{\mathit {Fin\;Para\;Cada}}}

 Si asumimos que los elementos de L son L_{0},L_{1},\dots ,L_{n}, entonces esta sentencia equivaldría a:


{\color {Sepia}{\mathit {Para}}}\;{\color {OliveGreen}{\mathit {i}}}\;{\color {BlueViolet}{\mathit {\gets }}}\;{\color {OliveGreen}{\mathit {0}}}\;{\color {Sepia}{\mathit {Hasta}}}\;{\color {OliveGreen}{\mathit {n}}}\;{\color {Sepia}{\mathit {Con\;Paso}}}\;{\color {OliveGreen}{\mathit {1}}}\;{\color {Sepia}{\mathit {Hacer}}}
{\color {OliveGreen}{\mathit {x}}}\;{\color {BlueViolet}{\mathit {\gets }}}\;{\color {OliveGreen}{\mathit {L_{i}}}}
{\color {BlueViolet}{\mathit {instrucciones;}}}
{\color {Sepia}{\mathit {Fin\;Para}}} 
Que es lo mismo que
{\color {Sepia}{\mathit {Para}}}\;{\color {OliveGreen}{\mathit {i}}}\;{\color {BlueViolet}{\mathit {\gets }}}\;{\color {OliveGreen}{\mathit {0}}}\;{\color {Sepia}{\mathit {Hasta}}}\;{\color {OliveGreen}{\mathit {n}}}\;{\color {Sepia}{\mathit {Hacer}}}
{\color {OliveGreen}{\mathit {x}}}\;{\color {BlueViolet}{\mathit {\gets }}}\;{\color {OliveGreen}{\mathit {L_{i}}}}
{\color {BlueViolet}{\mathit {instrucciones;}}}
{\color {Sepia}{\mathit {Fin\;Para}}} 



Sin embargo, en la práctica existen mejores formas de implementar esta instrucción dependiendo del problema.

Es importante recalcar que el pseudocódigo no es un lenguaje estandarizado. Eso significa que diferentes autores podrían dar otras estructuras de control o bien usar estas mismas estructuras, pero con una notación diferente. Sin embargo, las funciones matemáticas y lógicas toman el significado usual que tienen en matemática y lógica, con las mismas expresiones.