Beruflich Dokumente
Kultur Dokumente
Captulo 2 : ALGORITMOS
La primera fase en la construccin de programas la determina el algoritmo a utilizar, que nos indica una serie de pasos ordenados y lgicos para resolver un problema dado. 2.1 REQUISITOS, DISEO, PROGRAMACIN Y PRUEBAS. Pueden ser identificadas dos etapas en el proceso de resolucin de problemas : 1. Fase de solucin 2. Fase de implementacin (realizacin) en algn lenguaje de programacin. La fase de solucin incluye, a su vez el anlisis del problema, el diseo y la verificacin del algoritmo. Anlisis de Requerimientos Verificacin del Algoritmo Diseo (Traducir) Se puede definir lo que es Algoritmo, como la secuencia ordenada de pasos, no ambiguos, que conducen a la solucin del problema planteado. Todo algoritmo debe ser : Preciso. Indicando el orden de realizacin de cada uno de los pasos. Definido. Si se sigue el algoritmo varias veces proporcionndole los mismos datos, se deben obtener siempre los mismos resultados. Finito. Al seguir el algoritmo, ste debe terminar en algn momento, es decir, tener un nmero finito de pasos. Para disear un algoritmo se tienen dos mtodos: Descendente (Top-down): Diseo de los algoritmos en etapas, donde se va conceptos generales a los detalles. Este mtodo de diseo es el ms recomendable. Ascendente (Bottom-up): Ir de lo particular a los general. (No recomendado) de los
La programacin estructurada es un conjunto de tcnicas para desarrollar algoritmos fciles de escribir, verificar, leer y modificar. Utiliza: Diseo descendente. Consiste en disear los algoritmos en etapas, partiendo de los conceptos generales hacia los detalles. El diseo descendente se ver completado y ampliado con el modular. Recursos abstractos. En cada descomposicin de una accin compleja se supone que todas las partes resultantes estn ya resueltas, posponiendo su realizacin para el siguiente refinamiento. Estructuras bsicas. Los algoritmos debern ser escritos utilizando nicamente tres tipos de estructuras bsicas: secuenciales, decisin e iteracin, las cuales se describen ms adelante. TEOREMA DE BHM Y JACOPINI Para que la programacin sea estructurada, los programas han de ser propios. Un programa se define como propio si cumple las siguientes caractersticas: Tiene un solo punto de entrada y uno de salida Toda accin del algoritmo es accesible, es decir, existe al menos un camino que va desde el inicio hasta el fin del algoritmo, se puede seguir y pasa a travs de dicha accin. No posee lazos o bucles infinitos. El teorema de Bhm y Jacopini dice que:
Un programa propio puede ser escrito utilizando nicamente tres tipos de estructuras: secuencial, selectiva y repetitiva.
De este teorema se deduce que se han de disear los algoritmos empleando exclusivamente dichas estructuras, las cuales, como tiene un nico punto de entrada y nico punto de salida, harn que nuestros programas sean propios. 2.3 ELEMENTOS BSICOS Un algoritmo puede ser escrito en lenguaje natural, pero esta descripcin puede ser ambigua, por lo que se utilizan diferentes mtodos de representacin, que permiten evitar dicha ambigedad y permitir al mismo tiempo que sea fcilmente codificable. Los mtodos ms usuales para la representacin de algoritmos son: Descripcin narrada Diagrama de flujo Pseudocdigo DESCRIPCIN NARRADA Es la forma ms sencilla de describir o expresar un algoritmo. Consiste en dar un relato de la solucin en lenguaje natural. Por ejemplo: Algoritmo en descripcin narrada para la suma de 2 nmeros. 1. obtener los nmeros a sumar 2. sumar los nmeros 3. anotar el resultado El uso del lenguaje natural provoca frecuentemente que la descripcin sea imprecisa y poco confiable, por lo que este tipo de representacin no es recomendable.
DIAGRAMA DE FLUJO Es la representacin grfica de un algoritmo. Utiliza smbolos normalizados, con los pasos del algoritmo escritos en el smbolo adecuado y los smbolos unidos por flechas, denominadas lneas de flujo, que indican el orden en que los pasos deben ser ejecutados. Los smbolos principales son:
De manera general un diagrama de flujo esta constituido de la siguiente manera: inicia, recibe datos, realiza el procesamiento, muestra resultados y finaliza.
PSEUDOCDIGO El pseudocdigo en un lenguaje de especificacin de algoritmos que utiliza palabras reservadas y exige la tabulacin, o sea, sangra en el margen izquierdo, de algunas lneas. Se concibi para superar las dos principales desventajas de los diagramas de flujo: Lento de crear y difcil de modificar sin un nuevo redibujo. Es una herramienta muy efectiva para el seguimiento de la lgica de un algoritmo y para transformar con facilidad los algoritmos a programas.
Las distintas estructuras de control se representan de la siguiente forma: Secuenciales: Decisin simple: Leer (Lista_de_variables) Escribir (Lista_de_resultados) si <condicin > entonces accin_si fin_si doble: si <condicin> entonces accin_si si_no accin_no fin_si mltiple: segn <expresin> sea <valor1> : accin1 <valor2>: accin2 ........... <valorn>: accin n [si_no accin_sino] fin_segn
Repetitivas: mientras <condicin>hacer acciones fin_mientras repetir acciones hasta <condicin> para <Variable de control> fin_para <valor_inicial> hasta <valor_final> hacer acciones
2.4 DATOS Y EXPRESIONES Dato es la expresin general que describe a los elementos con los cuales opera un programa. Los datos pueden estar expresados como Variables o como Constantes. CONSTANTES Las constantes son elementos cuyo valor no cambia durante todo el desarrollo del algoritmo. Pueden ser literales o simblicas. Las constantes simblicas tienen un valor asignado y se identifican por un nombre. Una constante literal es un valor que se utiliza como tal. Ejemplos de Constante simblica: Ejemplos de Constante simblica: Las constantes pueden ser: Numricas enteras: En el rango de los nmeros enteros positivos o negativos. Ejemplos: 0, 2, -3, -8, etc. Numricas reales: En el rango de los nmeros reales positivos o negativos Ejemplos: 3.1416, 0.5, -4.3, etc. Lgicas: con valores True o False nicamente. Carcter: Alfabtico (a, b, ..., z) en mayscula o minscula Numrico (0,1,...,9) Carcter especial (+,?,etc) Cadena: Sucesin de caracteres encerrados entre apstrofes. Ejemplo: Hola Mundo
= 3.141592654.....
= 3.141592654.....
VARIABLES Las variables son elementos cuyo valor puede cambiar durante el desarrollo del algoritmo. Se identifican por un nombre y un tipo. El tipo determina el conjunto de valores que la variable puede tomar. Ejemplos: Variable A B Radio Carac1 Carac2 Valor 2 5 2.5 a c Tipo Entero Entero Real carcter carcter
Las variables pueden ser de tipo: entero, real, carcter, lgico o cadena. La evaluacin de los operadores con la misma prioridad se realiza siempre de izquierda a derecha. Si una expresin contiene subexpresiones encerrada entre parntesis, dichas expresiones se evalan primero. Las constantes y variables se utilizan para formar expresiones. EXPRESIONES Una expresin es una combinacin de operadores y operandos. Los operandos pueden ser constantes, variables u otras expresiones. Los operadores pueden aritmticos, lgicos o relacionales. Los operadores aritmticos son : Operador * / + Significado operador unario menos multiplicacin divisin suma resta Prioridad 3 2 2 1 1
La evaluacin de las expresiones se realiza de izquierda a derecha cuidando la prioridad de los operadores, los de prioridad mayor se evalan primero.
La evaluacin de los operadores con la misma prioridad se realiza siempre de izquierda a derecha. Si una expresin contiene subexpresiones encerrada entre parntesis, dichas expresiones se evalan primero.
Ejemplo:
Si A=2, B=3 y C=4, A+B*C=14 (A+B)*C=20 Hay Otros Operadores que corresponden a los Lgicos y Operacionales 2.5 Estructuras Secuenciales Se caracterizan porque una accin se ejecuta detrs de la otra. El flujo del programa coincide con el orden fsico en el que se han ido poniendo las instrucciones. Es decir, es una secuencia de acciones, donde se ejecuta primero la accin uno, despus la dos, luego la tres, etc. Dichas acciones pueden consistir en acciones simples tales como: Leer datos Realizar operaciones Escribir resultados
Accin 2
A, B
A+B
Fin
El smbolo
significa asignacin
2.6 ESTRUCTURAS SELECTIVAS Permiten controlar la ejecucin de acciones que requieran ciertas condiciones para su realizacin, es decir, se ejecutan unas acciones u otras segn se cumpla o no una determinada condicin. Estas estructuras son utilizadas cuando: Se tienen acciones que son excluyentes, es decir, que slo tiene que ejecutarse una o la otra, pero no ambas. Cuando es necesario elegir la accin a realizar de entre un conjunto de acciones existentes. Cuando es necesario verificar que lo datos sean vlidos para la aplicacin en cuestin, por ejemplo: no es posible dividir entre 0, la cuota por hora que se le paga a un trabajador no puede ser negativa, etc.
10
Las estructuras selectivas pueden ser: simples, dobles o mltiples. SIMPLES. Se evala la condicin y si sta da como resultado verdad se ejecuta una determinada accin o grupo de acciones; en caso contrario no se ejecuta dicho grupo de acciones y se continua con el flujo. Esta estructura se representa de la siguiente forma: Diagrama de Flujo Pseudolenguaje
si
Condicin
no
Accin
11
Ejemplo: Para dividir 2 nmeros considerando que el divisor no puede ser 0. Diagrama de Flujo
Inicio
A, B
si
B=0
no
A/B
Fin
Se leen los datos a emplear A y B, y como se va a dividir A B, se vlida el valor de B a travs de la condicin B0, si la condicin se cumple (si la evaluacin de la condicin da verdad) entonces se realiza la divisin y se muestra el resultado, en otro caso se va al final sin efectuar accin alguna. DOBLES. Cuando el resultado de evaluar la condicin es verdad se ejecutar una determinada accin o grupo de acciones y si el resultado es falso se ejecutar otra accin o grupo de acciones diferentes. En ambos casos las sentencias podrn ser simples o compuestas. Esta estructura se representa de la siguiente forma:
12
Diagrama de Flujo
si Accin_si Condicin no Accin_no
Ejemplo 1: Para determinar el mayor de dos nmeros, considerando el hecho de que sean iguales. Diagrama de Flujo Pseudolenguaje
Inicio
A, B
si
A=B
no A>B no
son iguales
si son iguales
Inicio Leer (A,B) Si A = B entonces Escribir son iguales sino Si A > B entonces Escribir (A Mayor) sino Escribir (B Mayor) Fin_si Fin
B Mayor
Inicio
13
Ejemplo 2: Para dividir 2 nmeros considerando que el divisor no puede ser 0. Diagrama de Flujo
Inicio
Pseudolenguaje
A, B
si C A/B
B=0 Error
no
Inicio Leer (A,B) Si B 0 entonces C B Escribir (C) sino Escribir (Error !!) Fin_si Fin
Inicio
MULTIPLES. Las estructuras selectivas mltiples permiten controlar la ejecucin de acciones cuando se tienen ms de dos opciones alternativas de seleccin. Aqu se ejecutarn unas acciones u otras segn el resultado que se obtenga al evaluar una expresin. Diagrama de Flujo
Expresin
Accin 1
Accin 2
Accin n
14
Ejemplo: Para realizar alguna de las siguientes operaciones: suma, resta, multiplicacin o divisin, segn la eleccin del usuario. Diagrama de Flujo
Inicio
Pseudolenguaje
Inicio Escribir Proprcione A y B Leer (A y B) Escribir Opciones: Escribir 1.- Suma Escribir 2.- Resta Escribir 3.- Multiplicacin Escribir 4.- Divisin Escribir Opcin ? Leer Opcin Segn Opcin sea 1: C A+B Escribir Suma=,C 2: C A-B Escribir Resta=,C 3: Si B 0 entonces C A B Escribir Divisin=,C sino Escribir Error !! Fin_si 4: C A x B Escribir Multiplicacin = Fin_segn Fin
Proporcione A y B:
A, B
Opcin
15
A*B
B=0
Suma=C Resta=C
A/B
Error !
Divisin=C
FIN
Expresiones Lgicas Las expresiones Lgicas sirven para plantear condiciones, que dan como resultado un valor booleano (Algebra de Bool) verdadero o falso, es decir se cumple o no se cumple la condicin. Las expresiones Lgicas se pueden clasificar en Simples y Compuestas. Las expresiones Lgicas Simples se forman relacionando operando (Variables y/o Constantes) mediante operadores relacionales. As, tienen la siguiente forma: Operando 1 Operando Relacional Operando 2
16
Los operadores relacionales son: Operador > < = >= <= Ejemplos: A>B B0
Significado Mayor que Menor que Igual a diferente de Mayor o igual que Menor o igual que
Las Expresiones Lgicas Compuestas se forman relacionando operandos booleanos (expresiones lgicas que proporcionan un valor verdadero o falso) con operadores lgicos. Tienen la siguiente forma: Operando Booleano1 Operador Lgico Los operadores lgicos son: Operador Significado Not (no) Negacin And (y) Conjuncin Or (o) Disyuncin Ejemplo: (A B) y (B > C) 2.7 Estructuras de Repeticin Iterar o ciclar es repetir una tarea: hacer algo y luego regresar y hacerlo una y otra vez hasta terminar la tarea. Las aplicaciones tpicas que requieren iteracin son: La introduccin de muchos datos, uno tras otro, para efectuar diversos clculos (por ejemplo obtener el promedio de calificaciones de un alumno). La clasificacin peridica de una gran coleccin de datos (por ejemplo la clasificacin de cheques procesados por sucursal bancaria, y para cada sucursal por nmero de cuenta del cliente cada da de la semana). La bsqueda de un dato en una gran coleccin de ellos(por ejemplo encontrar el precio actual de un articulo o el estado de una cuenta de depsito). Y muchas formulas cientficas que slo se pueden calcular por aproximaciones sucesivas (reduciendo el intervalo de la respuesta con cada ciclo).
17
Operando Booleano2
Existen tres clases de mecanismos de iteracin: 1. Para todos los valores de la progresin. 2. Mientras se valida una condicin. 3. Repetir- hasta que se satisfaga una condicin. A continuacin se Explica cada uno de ellos: 2.7.1 PARA. (for)
Es usado cuando se conoce de antemano, el nmero de veces que debe repetirse una instruccin o conjunto de ellas. Es un ciclo incondicional, que abarca todos los valores de una progresin, empieza con el primer valor y termina con el ultimo de ellos, los valores de la progresin deben ser asignados a una variable, la cual se denomina variable de control.
18
Diagrama de Flujo
VI
Condicin V Accin
Incremento o Decremento
para <Variable de control> hacer accin 1 . . . accin n fin_para Pseudolenguaje <valor_inicial> hasta <valor_final>
Funcionamiento 1. Se inicia la condicin de control, se verifica la condicin de paro si no se cumple entra al ciclo y ejecuta la accin. 2. Al llegar al fin regresa el control al encabezado de ciclo, actualizando el valor del contador de acuerdo al incremento o decremento. 3. Al volver el control del encabezado se pregunta si la variable de control lleg al valor final:
19
a. Si se cumple, entonces se sale del ciclo, dirigindose a la siguiente instruccin despus del fin. b. Si no ha tomado el valor final, entra al ciclo a ejecutar la instruccin. Ejemplo. Para sumar los 5 primero enteros positivos: Inicio 0 1 a 5 hacer suma suma + j fin_para escribir(suma) Fin Aqu a la variable de control J se le asigna originalmente el valor 1. La variable SUMA, que antes de entrar al ciclo tena un 0, aumentar por el valor de J. En la segunda pasada la J tendr un 2, y SUMA, aumentar a 3. En la tercera vuelta J llegar a 3, y esto incrementar SUMA a 6, y as sucesivamente hasta que J se le asigne el ltimo valor de la progresin, 5, despus de los cuales SUMA contendr la suma de los 5 primeros enteros positivos, es decir, 15. CICLO PARA ANIDADO. Al igual que todas las estructuras de control, es posible que un ciclo PARA contenga anidado otro ciclo y ste a otro; veamos, el siguiente ciclo: Ejemplo. Algoritmo ilustra el uso de un PARA anidado. inicio para i 1 a 5 hacer escribir (i =,i) para j 1 a 3 hacer escribir (j =,j) fin_para fin_para fin suma para j
20
2.7.2
MIENTRAS (while)
La instruccin Mientras... hacer continuar repitindose mientras la condicin continu siendo vlida (es decir, su valor de verdad sea verdadero). Diagrama de Flujo
Pseudolenguaje mientras <condicin>hacer <acciones> fin_mientras Ejemplo: Elaborar un algoritmo que calcule e imprima el sueldo de varios empleados utilizando MIENTRAS inicio escribir ( hay empleado (s/n)?) leer (otro) mientras otro = s hacer escribir (proporcione nombre, nmero de horas tra-bajadas y cuota) leer (nombre,hrstrab,cuotahr) sueldo hrstrab*cuotahr escribir (nombre, sueldo) escribir( desea procesar otro empleado (s/n)?) leer (otro) fin_mientras fin
21
2.7.3
REPETIR (Do-While)
La instruccin Repitir...hasta continuar repitindose mientras no se satisfaga la condicin (su valor de verdad sea falso). Esta instruccin tiene el siguiente diagrama de flujo: Diagrama de Flujo
Accin a repetir
Pseudolenguaje repetir <accion> hasta <condicin> Ejemplo: Elaborar un algoritmo que calcule e imprima el sueldo de varios empleados utilizando REPETIR inicio repetir escribir (proporcione nombre, nmero de horas trabajadas y cuota ) leer (nombre,hrstrab,cuotahr) sueldo =hrstrab*cuotahr escribir (nombre, sueldo) escribir ( desea procesar otro empleado (s/n)?) leer (desea) hasta desea = n fin
22