Pseudocódigo y Diagramas de Flujo Pseudocódigo El pseudocódigo es la descripción en Inglés o Español de los pasos de un algoritmo o procedimiento. El pseudocódigo es un mixto entre Inglés o Español y un lenguaje de programación universal. Existen varias representaciones de pseudocódigo, se tienen algunas similitudes pero no se tiene un estándar universal. Especificación de pseudocódigo Declaración de Procedimientos El pseudocódigo para un algoritmo inicia con la declaración del procedimiento (procedure), al cual se le asigna un nombre que se asocia al nombre representativo del algoritmo. El procedimiento recibe una lista de variables y las descripciones para cada variable (int, float, double, char). procedure mayor(L: lista de enteros) El procedimiento mayor recibe una lista de enteros nombrada L. Asignación Una asignación es una instrucción que se utiliza para asignar un valor a las variables. La asignación está formada por dos partes separadas por los símbolos “:=”. La parte izquierda de la asignación debe ser una variable, a la cual se le asigna el valor correspondiente de una expresión. Esta expresión se localiza en la parte derecha de la asignación, formada con valores constantes, variables y operadores aritméticos (+, ­, *, /, % “mod”). variable := expresión Algunos ejemplos: max := a a := 12 max := ( a + b ) / 2 Bloques para Instrucciones Las instrucciones puede ser agrupadas en bloques para formar procedimientos complicados. Los bloques son especificados usando las palabras claves begin y end. begin instrucción 1 instrucción 2 instrucción 3 . . . instrucción n end Las instrucciones del bloque son ejecutadas secuencialmente. Comentarios Los comentarios son escritos entre los caracteres “{“,”}”. Al igual que en cualquier lenguaje de programación, los comentarios son información para los programadores. {Esto es un comentario} {x es el mayor de L} Instrucciones Condicionales Una instrucción condicional controla el flujo de ejecución. La forma más simple de una instrucción condicional es if condición then instrucción o if condición then begin bloque de instrucciones end Si la condición es verdadera entonces se evalúa la instrucción de if. La condición puede estar formada por variables, constantes, operadores de relación (<, >, <=, >=, != “diferente ≠” , == “igualdad”) y operadores lógicos ( && “AND lógica” ,|| “OR lógica”, ! “not o negación”). Otra alternativa para la instrucción if es if­else. Cuando la condición de if es falsa entonces se evalúa la instrucción de else. if condición then instrucción 1 else instrucción 2 Note que sólo una de las dos instrucciones (1 o 2) será evaluada. Instrucciones para Ciclos Las instrucciones para ciclos también controlan al flujo de ejecución. for es una instrucción empleada en la construcción de ciclos, la cual tiene la siguiente forma: for variable:= valor inicial to valor final instrucción o for variable:= valor inicial to valor final begin bloque de instrucciones end El número ciclos a ejecutar es igual al numero de elementos del intervalo cerrado [valor inicial, valor final]. Cada vez que se ejecuta un ciclo se incrementa en 1 a la variable del ciclo, esto es debido a una especificación implícita. Si el valor inicial es 0 y el valor final es 3 entonces el número de ciclos es igual a 4. La variable toma los valores 0, 1, 2, y 3. Ejemplo: sum := 0 for i := 0 to n sum := sum + i while es otra instrucción utilizada para implementar ciclos: while condición instrucción o while condición begin bloque de instrucciones end Para el ciclo while, mientras la condición sea verdadera entonces se evalúa la instrucción o el bloque de instrucciones de while. La variable que controla al ciclo while es incrementada o decrementada explícitamente y no implícitamente como en for. Ejemplo: sum : = 0 while n > 0 begin sum := sum + n n := n ­1 end Más ejemplos: 1.­ El procedimiento mayor encuentra al elemento mayor de una secuencia finita procedure mayor(a1,a2, . . . ,an: enteros) max:= a1 for i := 2 to n if max < ai then max := ai {max es el elemento mayor} Finalmente la variable max contiene al elemento mayor. 1*.­ Se deja como ejercicio implementar al procedimiento mayor con un ciclo while. 2.­ El procedimiento gcd es la implementación del algoritmo de Euclides. El algoritmo de Euclides tiene la finalidad de obtener el máximo común divisor de dos números. procedure gcd(a,b: enteros positivos) x := a y := b while y ≠ 0 begin r := x % y x := y y := r end {gcb(a,b) es x} x es el máximo común divisor. 2*.­Si ejecutamos al procedimiento gcd(16,6), ¿Cual es el valor de x?. 3*­Escriba un procedimiento “suma_0_100” para que calcule la suma de 0+1 + 2 + . . . +100. Observe que para este procedimiento no es necesario recibir argumentos. 4*­Escriba un procedimiento “suma_1_n”para que calcule la suma de 1 + . . . +n donde n sera cualquier valor entero positivo mayor que 1. Referencia: Discrete Mathematics and its Applications Fourth Edition Kenneth H. Rossen Mc Graw Hill Diagramas de Flujo Los diagramas de flujo son otra técnica empleada para el desarrollo y representación de algoritmos. Con los diagramas de flujo, los algoritmos son representados en una forma gráfica. Los algoritmos son dibujados empelando los símbolos; óvalos, diamantes, rectángulos, paralelogramos y flechas llamadas líneas de flujo. Símbolos: Ovalos, empleados para especificar inicio y fin : begin end El rectángulo especifica los procesos: total = 0; total = total + grade; counter = 0; counter = counter + 1; El paralelogramo especifica entrada/salida: “Inserte un número” “La edad actual es :”+edad El diamante especifica la sentencia de control if. true grade != ­1 false Si la condición (grade != ­1) es verdadera, el flujo de ejecución toma el camino true, y para el falso se toma el camino false. Ejemplo: 1.­ Implementación del diagrama de flujo para el algoritmo suma_0_100. begin suma = 0; i = 0; true i < 101 suma = suma + i; i ++; false “suma de 0 a 100 =”, suma end 2*.­Se recomienda implementar los algoritmos propuestos en la sección de pseudocódigo. Referencia: HOW TO PROGRAM C H. M. Deitel / P. J. Deitel Prentice Hall