View
226
Download
0
Category
Preview:
Citation preview
Unidad 4. Definición de conceptos de programación
4.1. Programación estructurada
4.2. Definición de lenguaje de programación, compilador, compilación y
ejecución de un programa
4.3. Descripción de los diferentes paradigmas de programación
4.4. Definición de algoritmo
4.5. Técnicas para elaborar un algoritmo
4.6. Análisis de complejidad de un algoritmo
4.7. Análisis de algoritmos clásicos (por ejemplo, el de Euclides)
Objetivos particulares de la unidad
Al culminar el aprendizaje de la unidad, lograrás hacer uso de las técnicas de
programación y algoritmos aplicados a programas de computadoras.
Introducción
La solución de problemas a través de la computadora se realiza a través
de programas, un programa es una serie de instrucciones especificas que
solucionan un problema en particular. Por ejemplo: el calculo de la nomina,
la facturación, la administración de un negocio, etcétera.
Pero un paso anterior al desarrollo del programa es el desarrollo de un
algoritmo, que es una serie de pasos detallados y lógicos para solucionar
un problema. Primero se realiza un algoritmo y después se traslada a un
lenguaje de programación, para realizar el programa.
Los algoritmos y la programación han estado íntimamente ligados desde la
aparición de la computadora, Los algoritmos son utilizados hoy en día,
para la solución de problemas que pueden ser resueltos a través de un
computador.
Un buen algoritmo es capaz de implantarse en cualquier equipo de
computo, es independiente de “plataforma”, esto quiere decir, que no
importa que sistema operativo se este utilizando, que tipo de hardware se
utilice, puede ser una computadora portátil, hasta una supercomputadora,
y tampoco importa mucho el lenguaje de programación, pues debe poder
ser implantado en estos diferentes entornos.
Ahora bien, un lenguaje de programación es un conjunto de símbolos e
instrucciones que le permiten a un ser humano comunicarse con la
computadora e indicarle que pasos debe seguir para resolver un problema,
existen diversos tipos de lenguajes de programación, pero en general
permiten realizar cálculos de texto, manipulación de cadenas de
caracteres y textos, realización de gráficos, almacenamiento y
recuperación de archivos.
Como ya lo viste a través de la revisión de las lecturas recomendadas, los
leguajes de programación que se verán en este curso, no son de mucha
complejidad, ya que el objetivo de la licenciatura en administración, no es
que un administrador sea un programador, pero si que tenga los
conocimientos suficientes, para entender que es un algoritmo, que es un
programa, y tener los conocimientos básicos en informática, que le
permitan interactuar con los sistemas de información que utilizan las
empresas, ya que es muy rara la empresa, que no cuenta con tecnologías
de información.
¡Suerte en tu aprendizaje!
4.1 Programación estructurada Los primitivos propósitos de la programación estructurada dirigían sus esfuerzos a
buscar modos de minimizar la probabilidad de error en el proceso de
programación. El factor humano es una de las fuentes más importantes en la
comisión de errores. Uno de los objetivos de la programación estructurada es la
minimización del error humano.
La programación estructurada consiste en descomponer un problema en su mínima
expresión.
A estas expresiones se les llama bloques, cada uno de estos realizara una parte
del problema. Cuando se tenga cada parte resuelta, se agruparán y con ello el
problema se resuelve. Los resultados que se pueden obtener de la programación
estructura son programación correcta y bien pensada, cuya lógica es fácil de
seguir, tiempos de prueba y corrección corta, programas menos complejos. La
clave en esto es dividir o expresar cualquier problema por medio de tres
estructuras de control fundamentales (un cuadro de procesamiento, un símbolo de
decisión de tipo IF THEN ELSE). Véase figura 1.
(c) Secuencia cíclica
Verdadero
Falso
(a) Secuencia simple
FalsoVerdadero
(b) Secuencia IF/THEN/ELSE
Figura 1. Estructuras de control.
Las estructuras de control fundamentales de la programación estructurada. Secuencia
La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra
en secuencia. Las tareas se suceden de tal modo que la salida de una es la
entrada de la siguiente y así sucesivamente hasta el fin del proceso. Una
estructura secuencial se representa de la siguiente forma:
Inicio
Accion1
Accion2
.
.
AccionN
Fin
Selección
Un algoritmo es ejecutado siguiendo la lista de los pasos que lo describen, dichos
pasos están determinados por los valores de ingreso, sobre los cuales se toman
decisiones sobre la serie de pasos a ejecutar.
Estos valores están contenidos en variables, sobre las cuales se evalúa una
condición y el resultado de la evaluación determina los pasos que van a ser
ejecutados.
Las condiciones de las decisiones se evalúan mediante una expresión de Boole,
cuyo resultado puede ser verdadero o falso.
Así entonces, la decisión se representa por una expresión booleana, la cual
describe una relación entre dos variables por medio de los operadores de relación
mayor que >, menor que <, igual que =, diferente de <>, mayor o igual que >= o
menor igual que <=.
Como ejemplo de lo anterior tenemos el siguiente algoritmo:
Requisitos para licencia de conducir
1. Lee nombre del aspirante
2. Lee edad
3. Lee sabe_conducir
4. Lee ve_bien
5. Si edad<=18, ir al paso 9
6. Si sabe_conducir=”N”, ir al paso 9
7. Si ve_bien=”N”, ir al paso 9
8. Otorgar licencia a nombre del aspirante e ir al paso 10
9. Negar licencia al aspirante.
10. Terminar
Como puede observarse, los pasos del numero 5 al 7 contienen expresiones
booleanas en las que si la evaluación da un resultado cierto, el paso del algoritmo
a ejecutar se salta hasta el paso numero 9, en el que se niega la licencia al
aspirante para luego terminar el algoritmo y en caso de dar un resultado falso se
ejecuta el paso siguiente al que se está ejecutando. En el paso numero 8 se
otorga la licencia solo en el caso de que el aspirante tenga 18 años o más, que
sepa conducir y que tenga buena vista, para luego ejecutar el paso numero 10 en
la que se da por terminado el algoritmo.
La decisión en la programación es conocida como la estructura SI-CIERTO-
FALSO en la que se realiza en la evaluación de una condición o predicado para
obtener un resultado, el cual plantea la elección de dos alternativas Verdadero o
Falso.
Iteración Las iteraciones se definen como la ejecución repetida de un conjunto de
instrucciones mientras que se cumple una determinada condición.
Las estructuras que cumplen con esta definición son: WHILE y REPEAT-UNTIL,
las cuales se tratarán a continuación:
a) WHILE La sintaxis de WHILE es la siguiente:
WHILE condición DO
Instrucciones
En esta estructura primero se evalúa la condición y si el resultado es verdadero,
entonces se ejecutan las instrucciones y se vuelve a evaluar la condición, si ésta
resulta falsa, se sale del ciclo, en caso contrario, comenzara de nuevo el
procedimiento.
Es posible que las instrucciones no se lleguen a ejecutar, si es que la condición
resulta falsa en la primera evaluación de la condición.
Una vez que se sale del ciclo, se ejecutaran las instrucciones que siguen a la
estructura WHILE.
b) REPEAT-UNTIL En REPEAT-UNTIL, el ciclo se ejecuta mientras la evaluación de la condición
resulte falsa, si el condición es verdadera, se sale del ciclo y continuara la
ejecución con la siguiente proposición del programa.
Las diferencias con WHILE es que REPEAT-UNTIL opera mientras su condición
sea falsa, mientras que en WHILE la condición debe de ser verdadera para la
ejecución de sus instrucciones; REPEAT debe ejecutar las instrucciones de su
estructura al menos una vez y WHILE puede ser que no ejecute las instrucciones
ni una sola vez, debido a que WHILE realiza al principio la prueba de evaluación
de la condición y en REPEAT ésta prueba se encuentra al final de su serie de
instrucciones, además REPEAT-UNTIL no necesita encerrar sus instrucciones
dentro de un BEGIN y END (como WHILE) ya que la prueba de condición delimita
el final de la estructura.
4.2 Definición de lenguaje de programación, compilador, compilación y ejecución de un programa
Programar significa enviar instrucciones a la computadora, y para que exista
comunicación entre la máquina y el programa se utilizan lenguajes definidos.
El único lenguaje que una máquina entiende es el de máquina, sin embargo, éste
resulta algo complicado. Ante esta situación, se desarrollaron otros lenguajes más
fáciles de manejarse como el ensamblador y otros de más alto nivel. Los lenguajes
actuales permiten realizar tareas muy complejas y con el menor número de
instrucciones.
Un lenguaje de programación es un conjunto de símbolos e instrucciones que le
permiten a un ser humano comunicarse con la computadora e indicarle que pasos debe seguir para resolver un problema
Existen diversos tipos de lenguajes de programación, pero en general permiten
realizar cálculos de texto, manipulación de cadenas de caracteres y textos,
realización de gráficos, almacenamiento y recuperación de archivos.
Un compilador es un programa que traduce un texto escrito en un lenguaje de
programación “código fuente” en un lenguaje que la computadora puede entender “lenguaje maquina”. Además el compilador verifica la sintaxis del programa, en caso de errores, los muestra al programador, si el programa ya no tiene errores, entonces el compilador genera un código objeto, que la computadora ya puede.
El siguiente paso es incluir en el programa todas las “bibliotecas” o programas
adicionales que necesita, para poder funcionar sin necesidad de un compilador,
técnicamente se llama “enlazar”, en este ultimo paso se obtiene un programa
“ejecutable”.
La compilación, es el proceso de traducción de programas fuente a programas
objeto.
El programa objeto obtenido de la compilación no ha sido traducido normalmente a
código máquina sino a ensamblador. Si no se contará con los compiladores,
entonces los programadores tendrían que desarrollar el programa directamente en
lenguaje de máquina, pues las instrucciones en lenguaje de máquina las que
hacen que corra el programa y que la computadora ejecute todas las
instrucciones.
El proceso de ejecución de un programa fuente es una continuidad entre
generación e interpretación. El programa directamente ejecutable binario es el
código producido por la secuencia compilación-ligado-carga interpretada por el
hardware, pero se puede tomar un camino alternativo que consiste en construir un
intérprete en software que ignora la generación de código y emula las acciones del
programa desde una etapa anterior. La ejecución de un programa se da mediante
los siguientes pasos.
Escritura del programa fuente con editor. (programa que permite a una
computadora actuar de modo similar a una máquina de escribir electrónica)
y guardarlo en un dispositivo de almacenamiento.
Introducir el programa fuente en memoria.
Compilar el programa con el compilador.
Verificar y corregir errores de compilación (listado de errores).
Obtención de programa objeto.
El compilador obtiene el programa ejecutable.
Se ejecuta el programa y si no existen errores, se tendrá la salida del
programa.
4.3. Descripción de los diferentes paradigmas de programación
Paradigma, es el conjunto de reglas y disposiciones (escritas o no) que hacen dos
cosas: establecer o definir límites, e indicar como comportarse dentro de tales límites para tener éxito el cual se mide por la habilidad para “resolver problemas”.
Precisamente porque un paradigma tiene ciertas reglas para poder llegar a un
objetivo, y porque además se mide por la habilidad para resolver problemas, se
tomo para relacionarlo con un término muy utilizado en la computación como son
los algoritmos, los cuáles son de gran ayuda para llegar a la solución de algún
problema y también por ello se llegaron a establecer diferentes paradigmas de
programación. Algunos de los paradigmas básicos son.
Divide y vencerás. Consiste en dividir el problema en partes o instancias
más pequeñas, tanto como se considere conveniente, de acuerdo a la una
de las partes por separado, cuando se tengan las soluciones, se combinan
para obtener la solución del problema original completo.
Recursión. Un subprograma puede llamar a otro subprograma y este a otro
y así sucesivamente. Es decir, los algoritmos pueden operar sobre una
copia de sí mismos, pueden hablar de sí mismos y computar propiedades
de sí mismos. Existen programas que pueden operar de la misma forma
sobre su propio texto y también pueden imprimir una copia de su propio
texto.
Programación dinámica. Resuelve problemas mediante la combinación de
las soluciones a subproblemas que no son independientes.
4.4. Definición de algoritmo
Metodo paso a paso para solucionar un problema que termina en un número
finito de pasos.
Cada paso en un algoritmo se expresa a través de una instrucción en el programa.
Es en parte similar a los términos procedimiento, método, técnica, proceso, rutina,
etc. Además de ser un conjunto finito de reglas que dan lugar a una secuencia de
operaciones para resolver un tipo de especifico de problema, un algoritmo debe
cumplir cinco importantes condiciones.
Finitud. un algoritmo tiene que acabar siempre tras un número finito de pasos.
Definibilidad. cada paso de un algoritmo debe definirse de modo preciso, las
acciones a realizar han de estar especificadas para cada caso rigurosamente.
Conjunto de entradas. debe existir un conjunto especificado de objetos, cada
uno de los cuales constituyen los datos iniciales de un caso particular del
problema que resuelve el algoritmo. A este conjunto se le llama conjunto de
entradas del algoritmo.
Conjunto de salidas. debe existir un conjunto especificado de objetos, cada uno
de los cuales constituye la salida o respuesta que debe tener el algoritmo para
los diferentes casos particulares del problema.
Efectividad. un algoritmo debe ser efectivo. Esto significa que todas las
operaciones a realizar en el algoritmo deben ser lo bastante básica para poder
ser efectuado de modo exacto en un lapso de tiempo finito por el procesador
que ejecute el algoritmo.
En conclusión, las características fundamentales que debe cumplir todo algoritmo
son:
Debe ser preciso e indicar el orden de realización de cada paso.
Debe estar definido si se sigue un algoritmo dos veces, se debe obtener el
mismo resultado cada vez.
Debe ser finito si se sigue un algoritmo, se debe terminar en algún momento, o
sea debe tener un número finito de pasos.
4.5. Técnicas para elaborar un algoritmo Lo que pretende un algoritmo es sintetizar de alguna forma una tarea, antes de ser
llevado a la computadora. Las técnicas que normalmente se llevan a cabo para la
elaboración de un algoritmo son:
Tablas de decisión. Es una matriz, la cual esta basada en la construcción de una tabla, en la cual se
pueden establecer
las condiciones que
se pueden dar en el
problema, así como
las acciones que se
deben llevar a cabo
para que esas
condiciones se
puedan cumplir.
Esta tabla suele ser normalmente un documento de comunicación entre los
usuarios tales como analistas, programadores etcétera.
Fuente: James A. Senn, Análisis y diseño de sistemas de información, México, 2ª. Edición, Mc Graw-Hill, pág. 147
Árboles de decisión. Es un diagrama que se
presenta en forma secuencial,
el cual presenta condiciones y
acciones, es decir muestra por
tiempos o lugares cuáles
condiciones van en primer
lugar, cuáles en segundo y así
sucesivamente. Asimismo nos
permiten conocer la relación
que existe entre cada decisión. Se llaman árboles de decisión debido a que su
presentación se asemeja a las ramas de un árbol.
Fuente: James A. Senn, Análisis y diseño de sistemas de información, México, 2ª. Edición, Mc Graw-Hill, pág. 143.
Diagramas de Flujo.
L os diagramas de flujo son la representación gráfica de los algoritmos.
Elaborarlo implica diseñar un diagrama de bloque que contenga un bosquejo
general del algoritmo y basándose en este proceder a elaborar el diagrama de
flujo con todos los detalles necesarios.
Reglas de elaboración le diagramas de flujo:
1. Debe de diagramarse de arriba hacia abajo y de izquierda a derecha. Es
una buena costumbre en la diagramación que el conjunto de gráficos tenga
un orden.
2. El diagrama sólo tendrá un punto de inicio y uno final. Aunque en el flujo
lógico se tomen varios caminos, siempre debe existir una sola salida.
3. Usar notaciones sencillas dentro de los gráficos y si se requiere notas
adicionales colocarlas en el gráfico de anotaciones a su lado.
4. Se deben de inicializar todas las variables al principio del diagrama. Esto es
muy recomendable, ya que nos ayuda a recordar todas las variables,
constantes y arreglos que van a ser utilizados en la ejecución del programa.
Además, nunca sabemos cuando otra persona, modifique posteriormente el
diagrama y necesite saber de estos datos.
5. Procurar no cargar demasiado una página con gráficos, si es necesario
utilizar más hojas, emplear conectores. Cuando los algoritmos son muy
grandes, se pueden utilizar varias hojas para su graficación, en donde se
utilizarán conectores de hoja para cada punto en donde se bifurque a otra
hoja.
6. Todos los gráficos deben de estar conectados con flechas de flujo. Jamás
debe de dejarse un gráfico sin que tenga alguna salida, a excepción del
gráfico que marque el final del diagrama.
Terminado el diagrama de flujo, se realiza la prueba de escritorio, que no es otra
cosa, que darle un seguimiento manual al algoritmo, llevando el control de
variables y resultados de impresión en forma tabular.
Ventajas:
1. Programas bien documentados.
2. Cada gráfico se codificará como una instrucción de un programa, realizando
una conversión sencilla y eficaz.
3. Facilita la depuración lógica de errores.
4. Se simplifica su análisis al facilitar la comprensión de las interrelaciones.
Desventajas:
1.-Su elaboración requiere de varias pruebas en borrador.
2.-Los programas muy grandes requieren diagramas laboriosos y complejos.
3.-Falta de normatividad en su elaboración, lo que complica su desarrollo.
Algunos de los gráficos usados en los diagramas son los siguientes:
Figura 4.2 Símbolos para elaborar un diagrama de flujo
Pseudocódigo.
El Pseudocódigo es la técnica más usada para elaborar algoritmos; pseudo
significa imitación, de modo que pseudocódigo es una imitación de código, al igual
que el diagrama de flujo, éste va describiendo la secuencia lógica de pasos
mediante enunciados que deben comenzar con un verbo que indique la acción a
seguir, seguida de una breve descripción del paso en cuestión.
El caso de usar decisiones se utilizan sentencias como:
si condición (relación boleana)
entonces instrucciones
si no instrucciones
y si es necesario una bifurcación (cambio de flujo a otro punto del algoritmo) se
utilizan etiquetas tales como:
suma 2 y 5
ir a final
(instrucciones)
(instrucciones)
final (etiqueta)
Por conservar la sencillez, se debe de usar un lenguaje llano y natural. Cada frase
será después que se codifique, una línea de comando del programa.
Las órdenes más usadas son hacer-mientras, hacer-hasta, si-entonces-sino,
repite-mientras, un ejemplo sería:
Algoritmo: Obtener la suma de los números del 1 al 100.
Inicio
asigna a = 0
asigna suma = 0
mientras a <= 100
asigna a = a + 1
asigna suma = suma + a
fin-mientras
imprime “La suma es: “ suma
fin
El siguiente paso es la comprobación y luego la codificación a un programa escrito
en un lenguaje de programación.
Warnier-orr. Estos también se conocen como
construcción lógica de
programas. Muestran los
procesos y la secuencia en que
se realizan. Esta formado por
niveles, cada proceso de un
nivel, se identifica por llaves en
donde se observan sus
componentes. Fuente: James A. Senn, Análisis y diseño de sistemas de información, México, 2ª. Edición, Mc Graw-Hill, pág. 791.
Nassi-Schneiderman. También llamados diagrama de
flujo estructurados. Son
herramientas que se establecen
en forma gráfica. Su estructura
sirve sobre todo a los
programadores que desarrollan
software de aplicación. Los
diagramas Nassi-Schneiderman
tiene tres elementos básicos:
proceso, decisión e interacción.
simismo, los pasos que se deben seguir para elaborar un algoritmo son.
problema)
ama)
rograma.
.6. Análisis de la complejidad de un algoritmo ente no es único dicho
problema en función del tamaño de la entrada.
Fuente: James A. Senn, Análisis y diseño de sistemas de información, México, 2ª. Edición, Mc Graw-Hill, pág. 785
A
Análisis previo del problema (describir el problema)
Primera visión del método de resolución (Analizar el
Descomposición en módulos (diseñar la lógica general del progr
Programación estructurada (diseñar la lógica detallada del programa)
Búsqueda de soluciones parciales
Ensamblaje de soluciones finales
Codificar, probar y documentar el p
4Si existe un algoritmo para resolver un problema normalm
algoritmo. Debemos preguntarnos una vez obtenido, si nuestro algoritmo es
bueno. Debemos plantearnos la cuestión de cual es más conveniente. Existen
diversos parámetros para comparar algoritmos, uno de ellos es el tiempo o
número de operaciones básicas que requiere el algoritmo para resolver el
Análisis de algoritmos.
Este tipo de análisis es el primer, paso que debe darse en el estudio de las
de un problema, pero no es único. El programador que
pueden solucionar recurriendo a los algoritmos y hay
tros que no tienen solución algorítmica. Aún así, los que si tienen una solución
(p. Ej. Algoritmo de Euclides, tcétera)
rtado, se hace el análisis del algoritmo de Euclides.
dos enteros. El
pseudocódigo es el siguiente:
)
mientras n<>0 hacer
od m
soluciones algorítmicas
convierte un algoritmo en un programa puede jugar un papel muy importante a la
hora de obtener un buen programa: una vez elegido un algoritmo para resolver un
problema es conveniente dedicar atención al refinamiento del tiempo para tratar de
que las constantes multiplicativas de la función tiempo sean lo más pequeñas
posibles.
Existen problemas que se
o
algorítmica, hay que analizar cuantos recursos de computadora se necesitan para
su ejecución. Sólo los algoritmos que utilizan pocos recursos o recursos factibles
para su ejecución, son útiles en la práctica.
4.7. Análisis de algoritmos clásicose
En este apa
Es un algoritmo para obtener el máximo común divisor de
función Euclid(m,n
residuo = n m
m = n
n = residuo
devolver m
Sean los números enteros m=9 y n=6:
m n residuo
9 6 3
6 3 0
3 0
Cuando n es igual a cero, el máximo común divisor de ambos números es el
contenido de la variable m: 3.
Recommended