Documente Academic
Documente Profesional
Documente Cultură
Materia: Programación
A menudo los algoritmos requieren una organización bastante compleja de los datos, y es por
tanto necesario un estudio previo de las estructuras de datosfundamentales. Dichas estructuras
pueden implementarse de diferentes maneras,yesmás, existen algoritmos para implementar dichas
estructuras. El uso de estructuras de datos adecuadas puede hacer trivial el diseño de un algoritmo, o
un algoritmo muy complejo puede usar estructuras de datos muy simples.
Clasificación de algoritmos
1. Algoritmo determinista: en cada paso del algoritmo se determina de forma única el siguiente
paso.
2. Algoritmo no determinista: deben decidir en cada paso de la ejecución entrevarias
alternativas y agotarlas todas antes de encontrar la solución.
Todo algoritmo tiene una serie de características, entre otras que requiere unaserie de recursos,
algo que es fundamental considerar a la hora de implementarlosen una máquina. Estos recursos son
p r in c i p a l m e n t e :
1. El tiempo: período transcurrido entre el inicio y la finalización del algoritmo.
2. La memoria: la cantidad (la medida varía según la máquina) que necesita el algoritmo para su
ejecución.
Representación de un algoritmo
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural,
pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en
lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita
muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para
representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación
específico.
La descripción de un algoritmo usualmente se hace en tres niveles:
5
1. Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático
y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo
detalles.
2. Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que
encuentran la solución.
3. Implementación. Se muestra el algoritmo expresado en un lenguaje de programación
específico o algún objeto capaz de llevar a cabo instrucciones.
También es posible incluir un teorema que demuestre que el algoritmo es correcto, un
análisis de complejidad o ambos.
El pseudo código se refiere a crear un código para orientar a los programadores, pero sin la
6
sintaxis ni la estructura propia de ningún lenguaje.
Utilización en la práctica
En el trabajo de un analista de sistemas, una de las partes más trabajosas es la de determinar que
es lo que necesitan de un sistema los usuarios finales. Se dedican muchas horas a hacer un
relevamiento de los datos que serán necesarios, los tipos de procesamientos, las salidas, etc. Y debe
existir una realimentación entre el diseño y el usuario, para garantizar que el sistema cumpla con los
requisitos del usuario.
Supongamos que tenemos un sistema para una empresa que utiliza una interfaz gráfica en Visual
Basic, algunas aplicaciones específicas en C, y páginas PHP para trabajo vía Internet. Seguramente
que crear un diagrama específico para cada lenguaje sería una tarea tediosa.
Gracias a esta herramienta, podemos reunir a todos los programadores, dar las pautas de trabajo, y
mediante el pseudo código, cada programador sabrá lo que hace el sistema, y podrá escribir el código
correspondiente.
Incluso dos programadores que dominen el mismo lenguaje pueden tener metodologías de trabajo
distintas. Un problema puede ser resuelto de muchas maneras, cada una más o menos eficiente que
la otra, pero todas cumplen con el objetivo.
El pseudo código elimina estas diferencias, dando libertad a los programadores para que puedan
ajustarse a su metodología de trabajo.
Generalmente, este código se escribe con la participación de todos los programadores. Esto
representa la ventaja de que muchas opiniones ayudan a elegir la mejor entre todas, logrando una
solución efectiva y eficaz al problema planteado.
7
Ejemplo
Diagrama De Flujo
Es un gráfico lógico del plan de trabajo que se ejecutara para la solución de un determinado
problema. A través de él, se planifica la solución del problema independiente
del lenguaje de computación a usar.
Las capacidades humanas necesarias para elaborar un diagrama de flujo correcto son: Lógico,
Prácticas, y Atención.
El empleo de la maquina en las funciones del procediendo de datos han hecho necesario un flujo
ordenado de la información. La secuencia en que deberán ejecutarse las operaciones tendrá que
definirse claramente, y cuando se combine con los datos a los que debe aplicarse, esa secuencia
creara el flujo de información.
No puede hacerse mucho hincapié en documentación, ósea el registro de Información .Sin
Instrucciones escritas y sin representación gráfica del flujo de trabajo sería muy difícil de llevar una
tarea de procediendo de datos en forma apropiada. Hay varios métodos más eficientes organizados
y normalizados, es el de los diagramas de Flujo que el Futuro programador comprenda la necesidad
de los diagrama de flujo.
8
De interacción, permite el acercamiento y coordinación.
De simbología, disminuye la complejidad y accesibilidad.
De diagramación, se elabora con rapidez y no requiere de recursos sofisticados.
9
Conector dentro de página.
10
Tipos De Diagramas De Flujo
Hay varios tipos distintos de flujogramas que pueden usarse. Flujograma de primer nivel o
de dirección descendente.
Un flujograma de primer nivel muestra los pasos principales de un proceso y puede incluir
también los resultados intermedios de cada paso (el producto o servicio que se produce) y los
subpasos correspondientes. Este tipo de flujograma se usa por lo general para obtener un panorama
básico del proceso e identificar los cambios que se producen en el proceso. Es sumamente útil para
identificar los miembros correctos para el equipo (aquellas personas que participan en el proceso) y
para elaborar indicadores para observar y seguir el proceso por su concentración en los resultados
intermedios.
La mayoría de los procesos pueden graficarse en 4 ó 5 recuadros que representan los principales
pasos o actividades del proceso. En realidad, es buena idea usar solamente 4 ó 5 recuadros, porque
no obliga a tener en cuenta los pasos más importantes. Los demás pasos son normalmente subpasos
de los más importantes.
11
Flujograma de ejecución o matriz
Un flujograma de ejecución representa en forma gráfica el proceso en términos de quién se ocupa
de realizar los pasos. Tiene forma de matriz e ilustra los diversos participantes y el flujo de pasos
entre esos participantes. Es muy útil para identificar quién proporciona los insumos o servicios a
quién, así como aquellas áreas en las que algunas personas pueden estar ocupándose de las mismas
tareas.
12
Reglas Para Estructurar Un Diagrama De Flujo
El sentido de un diagrama de flujo generalmente es de arriba hacia abajo.
Es un símbolo solo puede entrar una flecha de flujo si varias líneas se dirigen al mismo símbolo,
se deben unir en una sola flecha.
Las líneas de flujo no deben cruzarse, para evitar los cruces se utilizan los conectores.
De un símbolo excepto el de decisión, solo puede salir una línea de flujo.
Los símbolos Terminal, Conector dentro de página y conector fuera de página solo pueden estar
conectados al diagrama por una sola flecha, ya que por su naturaleza es imposible que tenga una
entrada y una de salida.
Los émbolos de decisión tendrán siempre una sola flecha de entrada y dos o tres flechas de salida
según la cantidad de alternativas que se presentan.
Un diagrama de flujo debe estar complemente cerrado, teniendo una continuidad de principio a
fin, no pueden quedar flechas en el aire ni símbolos sin conexión al diagrama pues el flujo seria
interrumpido.
El diagrama N-S
El diagrama N-S o también conocido como diagrama de Chapin es una técnica de especificación de
algoritmos que combina la descripción textual, propia del pseudocódigo, con la representación
gráfica del diagrama de flujo.
El diagrama N-S cuenta con un conjunto limitado de símbolos para representar los pasos del
algoritmo, por ello se apoya en expresiones del lenguaje natural; sin embargo, dado que el lenguaje
natural es muy extenso y se presta para la ambigüedad, solo se utiliza un conjunto de palabras, a las
que se denomina palabras reservadas.
13
Definición de Programa.
Un programa informático o programa de computadora es una secuencia de instrucciones, escritas
para realizar una tarea específica en una computadora. Este dispositivo requiere programas para
funcionar, por lo general, ejecutando las instrucciones del programa en un procesador central. El
programa tiene un formato ejecutable que la computadora puede utilizar directamente para ejecutar
las instrucciones. El mismo programa en su formato de código fuente legible para humanos, del cual
se derivan los programas ejecutables (por ejemplo, compilados), le permite a un programador
estudiar y desarrollar sus algoritmos. Una colección de programas de computadora y datos
relacionados se conoce como software.
Estructuras De Datos
La Estructura de Datos: Es una colección de datos que pueden ser caracterizados por su organización
y las operaciones que se definen de ella. Lo que se pretende con las estructuras de datos es facilitar
un esquema lógico para manipular los datos en función del problema que haya que tratar y el
algoritmo para resolverlo. En algunos casos la dificultad para resolver un problema radica en escoger
la estructura de datos adecuada. Y, en general, la elección del algoritmo y de las estructuras de datos
que manipulará estará muy relacionada.
Según su comportamiento durante la ejecución del programa distinguimos estructuras de datos:
Estáticas: su tamaño en memoria es fijo. Ejemplo: arrays, conjuntos, cadenas.
Dinámicas: su tamaño en memoria es variable. Ejemplo: listas (Pilas, colas),listas enlazadas con
punteros, árboles, grafos, etc.
A su vez este tipo de estructura se subdivide en
Lineales.- son aquellas estructuras donde los datos se almacenan en zonas contiguas (sucesivas o
adyacentes), una detrás de otras. Ejemplo: Listas enlazadas, Pilas, Colas.
14
No lineales.- Aquí cada elemento puede tener diferentes “siguientes” elementos, se introduce el
concepto de bifurcación, ya no hay linealidad. Ejemplo: Árboles, grafos.
Las estructuras de datos que trataremos aquí son los arrays, las pilas y las colas, los árboles, los grafos
y algunas variantes de estas estructuras.
Abstracción
La abstracción es la separación de las propiedades esenciales de aquellas que no lo son. Para resolver
un problema real usualmente identificamos las características más relevantes del problema y a partir
de ellas construimos una abstracción -un modelo- del problema, que sea manejable y nos permita
obtener una solución.
En el contexto del diseño de programas también podemos utilizar la abstracción. Esto significa
especificar la funcionalidad del programa en términos de “alto nivel”. Una vez que se demuestra
que esta especificación es correcta se pueden añadir más detalles en pasos o niveles sucesivos hasta
el punto en que se obtiene una descripción detallada de “bajo nivel“ del programa. Dicha descripción
se puede implementar directamente empleando algún lenguaje de programación. El diseñador solo
ve los detalles relevantes a un nivel particular del diseño.
Conforme avanza el proceso de diseño va surgiendo la necesidad de distintos tipos de datos así como
de las operaciones que deben ser ejecutadas sobre ellos. Para tal fin, se emplea un tipo especial de
abstracción conocido como abstracción de datos.
15
Ejemplos de TAD:
a. TAD conjunto: colección de elementos que son manipulados por operaciones como la
unión, intersección y la diferencia de conjuntos.
b. TAD entero: es el conjunto de los enteros o sea {-1, -2, -3,…,-¥} È {1, 2, 3, …, ¥} y las
operaciones de suma, resta , multiplicación y división sobre los números enteros.
c. TAD complejo: es la colección formada por todos los números complejos sea elementos
de la forma a + ib, donde a y b son reales, i es la constante imaginaria O-1. Las
operaciones permitidas son: la suma, resta, multiplicación, división y conjugado de
números complejos.
Notas: El TAD que incluye además a la operación producto cartesiano es diferente al TAD
conjunto arriba especificado. El TAD que incluya a la operación que calcula el resto de la división
entera es un TAD diferente al especificado en b).
b. Tipo de datos
Un tipo de datos es la implementación de un TAD. En un tipo de datos el modelo matemático
que define a algún TAD es implementado de acuerdo a la sintaxis de algún lenguaje de
programación. Esta implementación o traducción del TAD consta de las declaraciones de las
variables apropiadas y un procedimiento o función de acceso que implemente cada
operación requerida por el T AD .
16
c. Encapsulamiento de datos
El programa de aplicación debe referirse a las propiedades esenciales de los datos y no a su
representación en memoria. Es decir, la comunicación entre el programa de aplicación y la
implementación de un TAD solo debe producirse a través de una interfaz, la cual está
constituida por las funciones de acceso del TAD. Este agrupamiento de los datos y de las
operaciones definidas sobre ellos formando una sola unidad y el ocultamiento de los detalles
de la implementación se llama encapsulamiento de datos.
17
Unidad 3:
Técnicas De Programación
La técnica de programación es el medio a través del cual se escoge de qué forma se creará la
secuencia de ordenes lógicas que desarrollará un determinado programa que se creará. Es la forma
como se desarrollará la ejecución de un determinado software y el conjunto de datos que entraran
y los resultados que se mostraran. Los tipos o técnicas de programación son bastante variados,
aunque puede que muchos de los lectores sólo conozcan una metodología para realizar programas.
En la mayoría de los casos, las técnicas se centran en programación modular, programación
estructurada y programación orientada a objetos, pero existen otros tipos de programación.
Ejemplo:
Se desea diseñar un algoritmo que realice las siguientes tareas:
Impresión de cabeceras de un informe,
Lectura de datos,
Ejecutar cálculos,
Imprimir líneas detalladas de información,
Imprimir totales.
Este programa se puede descomponer en módulos, de modo que exista un módulo principal o de
control y diferentes submódulos.
Módulo principal:
Llamada a submódulo (impresión de cabeceras)
Llamada a submódulo (proceso de datos)
Llamada a submódulo (impresión de totales)
18
Las cajas A y B pueden ser definidas para ejecutar desde una simple instrucción
hasta un módulo o programa completo, siempre y cuando éstos también sean
programas apropiados.
Aquí el bloque A se ejecuta repetidamente mientras que la condición C se cumpla o sea cierta.
También tiene una sola entrada y una sola salida; igualmente A puede ser cualquier estructura
básica o conjunto de estructuras.
19
Elementos de la programación orientada a objetos:
Objeto: es una unidad que contiene datos y las funciones que operan sobre esos datos.
Atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos).
Herencia: La herencia es la propiedad que permite a los objetos construirse a partir de otros
objetos.
Clase: Es una colección de objetos similares y un objeto es una instancia de una definición de
una clase.
Polimorfismo: Se refiere al hecho de que una misma operación puede tener diferente
comportamiento en diferentes objetos.
Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse
pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar
la cohesión de los componentes del sistema.
20
Unidad 4:
Estructura de Datos
IDENTIFICADOR: Un identificador es una serie de caracteres formados por letras, dígitos y el carácter
subrayado ( _ ) que no inicie con dígito, así mismo es el nombre que damos a todo lo que
manipulamos dentro de un programa (variable, constantes, funciones, etc). Por ejemplo variables,
constantes, funciones, tipos definidos por el usuario etc.
TIPOS DE DATOS: Todos los datos tienen un tipo asociado con ellos.
VARIABLES: Una variable es un identificador que puede tomar diferentes valores dependiendo del
tipo que esta se declare.
CONSTANTES: Constantes son los valores que no pueden ser modificados. En C, pueden ser de
cualquier tipo de datos. Además de los ejemplificados anteriormente, Podemos crear constantes de
caracteres con barra invertida. Estos corresponden a los caracteres que son imposibles introducir
desde el teclado.
PALABRAS RESERVADAS: Son palabras que tienen un significado especial para el lenguaje y no se
pueden utilizar como identificadores.
COMENTARIOS: Los comentarios pueden aparecer en cualquier parte del programa, mientras estén
situados entre los delimitadores /* comentario */. Los comentarios son útiles para identificar los
elementos principales de un programa o para explicar la lógica subyacente de estos.
21
Los datos de entrada.
Cuál es la información que se desea producir (salida)
Los métodos y fórmulas que se necesitan para procesar los datos.
Una recomendación muy práctica es el que nos pongamos en el lugar de la computadora y
analicemos que es lo que necesitamos que nos ordenen y en que secuencia para producir
los resultados esperados.
Codificación
Es la operación de escribir la solución del problema (de acuerdo a la lógica del diagrama de flujo o
pseudocódigo), en una serie de instrucciones detalladas, en un código reconocible por la
computadora, la serie de instrucciones detalladas se le conoce como código fuente, el cual se escribe
en un lenguaje de programación o lenguaje de alto nivel.
Prueba y Depuración
Los errores humanos dentro de la programación de computadora son muchos y aumentan
considerablemente con la complejidad del problema. El Proceso de identificar y eliminar errores,
para dar paso a una solución sin errores se le llama depuración.
La prueba consiste en la captura de datos hasta que el programa no presente errores (los más
comunes son los sintácticos y lógicos).
Documentación
Es la guía o comunicación escrita es sus variadas formas, ya sea en enunciados, procedimientos,
dibujos o diagramas. La documentación se divide en tres partes: Documentación Interna,
Documentación Externa Y Manual del Usuario.
Mantenimiento
Se lleva acabo después de terminado el programa, cuando se detecta que es necesario hacer algún
cambio, ajuste o complementación al programa para que siga trabajando de manera correcta. Para
poder realizar este trabajo se requiere que el programa este correctamente documentado.
Estructura de un programa
Un programa desarrollado en TurboPascal consta en general de una cabecera, una sección o zona de
declaraciones y un cuerpo principal.
22
Esquema de la estructura de un programa en TurboPascal 7.0
Cabecera
La cabecera de un programa es opcional y puramente informativa. Si existe se compone de una única
sentencia que sirve para asociar un nombre o identificador al programa.
Declaración de etiquetas
Permiten realizar saltos incondicionales en la secuencia de instrucciones de un programa. Su
utilización va unida a la sentencia goto y, aunque es un elemento incluido en la sintaxis de Pascal
estándar, no se recomienda por la filosofía de la programación estructurada (que evita los saltos
incondicionales).
23
Sintaxis: LABEL Etiqueta1, Etiqueta2, Etiqueta_n;
Una etiqueta es un identificador o una secuencia de cuatro dígitos decimales (entre 0 y 9999). Si las
etiquetas son varias se podrán declarar en la misma sentencia separándolas por comas.
Ej.: Label 100, 200;
Declaración de constantes
Las constantes son datos que no cambian durante la ejecución del programa y que se definen durante
el tiempo de compilación.
Sintaxis: CONST Nombre_Constante = Expresion_1;
Nombre_Constante_2 = Expresión_2;
Declaración de variables
Una variable es un espacio de la memoria reservado durante la ejecución del programa a la que se le
asocia un nombre o identificador y en la que se puede almacenar un valor que puede cambiar
durante dicha ejecución. La declaración consta de la palabra VAR seguida del identificador de cada
variable y su tipo, que puede ser predefinido o estar definido previamente en la sección anterior.
Sintaxis: VAR Variable: Tipo;
24
Comentarios
Los comentarios son sentencias que pueden incluirse en, prácticamente, cualquier parte del
programa y que son ignorados por el compilador (¡el traductor del código del programa fuente!).
Sólo sirven para dar información o explicaciones sobre el conjunto o alguna parte del programa a la
persona que lea el código fuente. Esto cobra especial importancia cuando se trata de un código más
o menos complejo o desarrollado por un equipo de programadores. Los comentarios suelen ir
delimitados entre caracteres de llaves: { y } o entre las parejas de caracteres (* y *).
Ej.: { Esto es un comentario }
(* Esto tambien es un comentario *)
Programas
En programación modular el programa se divide en módulos (subprograma), cada uno de los cuales
resuelve una actividad o tarea y se codifican independientemente de otros módulos. Cada uno de
estos módulos se analizan, codifican y ponen a punto por separado.
Podemos decir que los términos siguientes son sinónimos:
Subprograma, Módulo, Acción Compuesta, Proceso o Subalgoritmo: Es un conjunto de acciones
(sentencias), agrupadas bajo un nombre, que resuelven una tarea o subproblema.
Cada programa contiene un módulo denominado programa principal que controla todo lo que
sucede. Este programa principal es el que transfiere el control a los otros módulos (subprogramas),
de modo que ellos pueden ejecutar sus funciones.
Cuando el módulo ejecuta su tarea devuelve el control al módulo principal o al módulo que lo llamó.
Lo más interesante del Diseño Descendente, que incluye a la Programación Modular, es que trata en
forma separada lo global de los detalles, un subprograma oculta el detalle sobre la resolución global.
Resulta más sencillo resolver al problema subdividiéndolo en subproblemas siendo así más fácil llegar
a la solución. Además, es conveniente aplicar este método ya que habitualmente se trabaja en equipo
y cada grupo del equipo, entonces, puede encargarse de resolver una parte, ensamblando luego
todas las soluciones de estos subproblemas. Otra de las ventajas es la reutilización de código, es
decir, que si una misma tarea se debe realizar en distintas partes de un programa, se escribe (se
programa) una vez y se la invoca todas las veces que sea necesario.
Entre el módulo llamante y el módulo llamado se debe transmitir información, ya sea porque el
módulo llamado necesita datos para poder trabajar o porque devuelve los resultados obtenidos.
Parámetros o Argumentos: Información que se transmite entre módulos.
25
Existen dos tipos de subprogramas:
Procedimientos
Funciones
Procedimiento
El procedimiento es un subprograma, que devuelve uno, varios o ningún resultado y devuelve estos
resultados a través de parámetros.
El procedimiento es creado para resolver una tarea. Para trabajar puede necesitar recibir información
del módulo llamante, esta información la recibe a través de los parámetros de entrada. El
procedimiento luego trabaja, es decir realiza la tarea para la cual fue creado. Si obtiene resultados
para devolver al módulo llamante, los devuelve a través de los parámetros de salida.
Si el subprograma no devuelve resultados al módulo que lo invocó es porque muestra los resultados
en el mismo subprograma.
26
Referencias Bibliográficas
3. Hernández, Roberto; Lázaro, Juan Carlos; Dormido, Raquel; Ro. ESTRUCTURAS DE DATOS Y
ALGORITMOS. Madrid , Pearson Educación ,2001. Código Biblioteca UNS: 005.73 E92.
4. Catedraprogramacion. http://catedraprogramacion.forosactivos.net/t117-que-es-tecnica-
de-programacion
27