UNIVERSIDAD CATLICA DE SANTA MARA PROGRAMA PROFESIONAL DE INGENIERA DE SISTEMAS
SESIN 02:
REPRESENTACIN DE ALGORITMOS
I OBJETIVOS
Explicar los elementos de un algoritmo Estudiar los mtodos formales para la representacin de algoritmos. Estudiar las diferentes estructuras de control de la programacin estructurada II TEMAS A TRATAR Mtodos formales para representar algoritmos Pseudo cdigo Estructuras de control (secuenciales, selectivas y repetitivas) Procedimiento y funciones.
Algoritmos y estructura de datos I Pgina 2
Karim Guevara, lvaro Fernndez Sesin 02
III MARCO TEORICO
REPRESENTACIN DE ALGORITMOS
Mtodo informal
Lenguaje natural Ventajas: comprensible e intuitivo Inconveniente: impreciso
Mtodos formales
Pseudos cdigo Lenguaje natural limitado y sin ambigedad. Es una mezcla de lenguaje de programacin y espaol (o cualquier otro idioma). Es un conjunto pequeo y completo de sentencias que especfica los pasos de un algoritmo.
Diagramas Diagramas de flujo u organigramas Utiliza un conjunto de smbolos para representar cada estructura de control y mediante lneas de flujo se indica el orden en que se realiza el flujo lgico del algoritmo Diagramas de Nassi-Schneiderman o Diagramas N-S Los pasos sucesivos se escriben en cajas con distintas formas segn la estructura de control que representen
PSEUDO CDIGO
1 ESTRUCTURA GENERAL
ALGORITMO nombre VARIABLES declaracin de las variables utilizadas INICIO sentencias FIN
2 EJEMPLO DE DECLARACIN DE VARIABLES
nombre ES TEXTO TEXTO : nombre importe ES REAL REAL : importe tiene_tarjeta ES BOOLEANO BOOLEANO : tiene_tarjeta numero_cliente ES ENTERO ENTERO : numero_cliente precios ES VECTOR DE REALES ARRAYS[1..n] : precios
Los nombres de las variables no deben contener espacios.
Asignaciones importe precio * 1.13 total total + (precio + 3) * 2.5 factorial valor * factorial x x + 1
Expresiones lgicas (valores booleanos) SI (factorial > 34 Y factorial < 54000) O (contador < 32) ENTONCES
4 PROGRAMACIN ESTRUCTURADA
Un programa se escribe utilizando los siguientes tipos de estructuras de control de secuencia:
Secuencial: Una accin se ejecuta una tras otra, es decir, una instruccin sigue a otra en secuencia. Selectiva: Se evala la condicin y en funcin del resultado se ejecuta un conjunto de instrucciones u otro. Hay tres tipos de selectivas (simple, doble o mltiple). Repetitiva: Contienen un bucle (conjunto de instrucciones que se repiten un nmero finito de veces). Cada repeticin del bucle se llama iteracin. Todo bucle tiene que llevar
Identificador declarado anteriormente Una variable, constante, constante literal o frmula a evaluar. Deben ser del mismo tipo Variable Expresin Algoritmos y estructura de datos I Pgina 4
Se evala la condicin, si es verdadera, se ejecutan las sentencias; en caso contrario, se salta dicho grupo de sentencias.
ESTRUCTURA SELECTIVA (DOBLE)
SI condicin ENTONCES sentencias 1 SINO sentencias 2 FINSI
Se evala la condicin. Si es verdadera: se ejecutan las sentencias 1. Si es falsa: se ejecutan las sentencias 2.
4.3 ESTRUCTURAS ITERATIVAS
Se utiliza la estructura repetitiva ( For Loop) y la iterativa ( While Loop) para utilizar operaciones repetitivas dentro de un algoritmo. Algoritmos y estructura de datos I Pgina 5
Karim Guevara, lvaro Fernndez Sesin 02
Una estructura repetitiva se ejecuta un nmero determinado de veces. Una estructura iterativa se ejecuta hasta que la condicin especificada deja de ser cierta.
LA ESTRUCTURA REPETITIVA (FOR LOOP)
Se usa cuando se conoce el nmero exacto de veces que hay que ejecutar el bucle. El bucle lleva asociado una variable, llamada ndice, a la que se le asigna un valor inicial y un valor final.
Este ndice se va a incrementar o decrementar en cada iteracin de bucle en un valor constante
PARA var inicio HASTA fin HACER sentencias FIN_PARA --------------------------------------------------------------------------------- PARA var inicio HASTA fin INCREMENTO valor HACER sentencias FIN_PARA --------------------------------------------------------------------------------- PARA var inicio HASTA fin DECREMENTO valor HACER sentencias FIN_PARA
El trmino de iteracin (iteration terminal) contiene el valor de la iteracin que se est ejecutando en ese momento; i=0 corresponde a la primera iteracin, i=1 corresponde a la segunda iteracin y as sucesivamente hasta N-1. Si el valor que asignamos a la variable N es el 0, la estructura no se ejecuta ya que no tiene sentido repetir 0 veces una operacin. Esta estructura es equivalente al siguiente pseudo cdigo:
LA ESTRUCTURA ITERATIVA (WHILE LOOP)
MIENTRAS condicin HACER sentencias FIN_MIENTRAS
La condicin del bucle se evala al principio, antes ejecutar las sentencias del bucle, Si es verdadera, se ejecutan las sentencias del bucle y despus se vuelve a preguntar por la condicin. En el momento en el que la condicin es falsa se sale del bucle.
Como la condicin es evaluada, la primera vez, antes de entrar en el bucle, puede que el bucle se ejecute 0 veces.
Para finalizar un bucle, el valor de la condicin debe ser modificado en las sentencias que componen el bucle.
LA ESTRUCTURA ITERATIVA (DO WHILE LOOP)
HACER sentencias MIENTRAS condicin
La condicin se evala siempre al final del bucle, Algoritmos y estructura de datos I Pgina 6
Karim Guevara, lvaro Fernndez Sesin 02
si es VERDADERA, volvemos a ejecutar las acciones, si es FALSA, se sale del bucle.
Como la condicin se evala al final, incluso aunque la primera vez sea verdadera, se ejecuta al menos una vez por el bucle.
Para finalizar un bucle, el valor de la condicin debe ser modificado en las sentencias que componen el bucle.
5 ARREGLOS ARRAYS
array[<dimensin>] de <tipo_de_dato>
<dimensin> es un subrango con el ndice del lmite inferior y el lmite superior. Por ejemplo, array[5..20] de entero declarara un array de 16 elementos enteros. Pueden aparecer varios separados por comas para declarar arrays de ms de una dimensin.
<tipo_de_dato> es el identificador de cualquier tipo de dato estndar o definido por el usuario.
El acceso a un elemento de un array se realizar indicando su ndice entre corchetes. El ndice ser una expresin entera.
ARRAY[0..120] DE CARACTERES ARRAY[1..5,1..120] DE ENTERO
6 PROCEDIMIENTOS
Un procedimiento es un sub-algoritmo que realiza una tarea especfica y que puede ser definido con 0, 1 o N parmetros. Tanto la entrada de la informacin al procedimiento como la devolucin de resultados desde el procedimiento al programa llamador se realizarn a travs de los parmetros.
El nombre de un procedimiento no est asociado a ninguno de los resultados que obtiene.
La invocacin a un procedimiento se realiza con una instruccin llamar_a o o bien directamente con el nombre del procedimiento.
Karim Guevara, lvaro Fernndez Sesin 02 E o valor indica que el paso de parmetros se realiza por valor. E/S o ref indica que el paso de parmetros se realiza por referencia. <tipo_de_dato> es un tipo de dato estndar o definido previamente por el usuario. <lista_de_parmetros> es uno o ms identificadores vlidos separados por comas. Para indicar que se trata de un array, se podr utilizar el identificador seguido de corchetes (por ejemplo notas[]).
La lista de parmetros actuales es una o varias variables o expresiones separadas por comas que deben coincidir en nmero, orden y tipo con la lista de parmetros formales de la declaracin.
7 FUNCIONES
La funcin es una estructura autnoma similar a los mdulos. La diferencia radica en que la funcin se usa para devolver un solo valor de un tipo de dato simple a su punto de referencia. La funcin se relaciona especificando su nombre en una expresin, como si fuera una variable ordinaria de tipo simple. Las funciones se dividen en estndares y definidas por el usuario. Estndar: Son funciones proporcionadas por cualquier lenguaje de programacin de alto nivel, y se dividen en aritmticas y alfabticas. Definidas por el usuario: son funciones que puede definirlas el programador con el propsito de ejecutar alguna funcin especfica, y que por lo general se usan cuando se trata de hacer algn clculo que ser requerido en varias ocasiones en la parte principal del algoritmo.
<tipo_de_dato> es un tipo de dato estndar o definido previamente por el usuario. Se trata del tipo del dato que devuelve la funcin. En el caso de que la funcin devuelva un array, se podr utilizar el nombre del tipo de dato base seguido de corchetes (por ejemplo, entero[]). <nombre_funcin> debe ser un identificador vlido. <lista_parmetros_formales> son uno o ms grupos de parmetros separados por punto y coma. Cada grupo de argumentos se define de la siguiente forma:
{E | valor | E/S | ref} <tipo_de_dato> : <lista_de_parmetros>
E o valor indica que el paso de parmetros se realiza por valor. E/S o ref indica que el paso de parmetros se realiza por referencia. <tipo_de_dato> es un tipo de dato estndar o definido previamente por el usuario. <lista_de_parmetros> es uno o ms identificadores vlidos separados por comas. <expresin> es el valor de retorno de la funcin. Debe coincidir con el tipo de dato de la declaracin. Para indicar que se trata de un Algoritmos y estructura de datos I Pgina 8
Karim Guevara, lvaro Fernndez Sesin 02 array, se podr utilizar el identificador seguido de corchetes (por ejemplo notas[])
LLAMADA A FUNCIONES
<nombre_funcin>([<lista_parmetros_actuales>])
La lista de parmetros actuales es una o varias variables o expresiones separadas por comas que deben coincidir en nmero, orden y tipo con la lista de parmetros formales de la declaracin. Al devolver un valor y no existir funciones que no devuelven valores (funciones void de C o Java), la llamada debe hacerse siempre dentro de una expresin.
IV (La prctica tiene una duracin de 4 horas) ACTIVIDADES
EJEMPLO 1: BSQUEDA SECUENCIAL EN UN VECTOR
Escriba un algoritmo que lea un nmero real del teclado y busque dicho nmero en un vector de N nmeros reales, donde N es una constante a la que le daremos un valor cualquiera. Si se encuentra el nmero, se debe escribir por pantalla el ndice del elemento que lo contiene.
Supongamos que: 1. Que el algoritmo no necesita leer el contenido del vector. 2. Ningn elemento del vector se repite.
SOLUCIN PSEUDO CDIGO ALGORITMO bsqueda secuencial CONSTANTES n VALE 100 VARIABLES a ES ARRAY [1 .. n] DE REALES i ES ENTERO valor ES REAL encontrado ES BOOLEANO INICIO LEER (valor) i 1 encontrado FALSO MIENTRAS (i<=n) Y NO(encontrado) HACER SI a[i] = valor ENTONCES encontrado VERDADERO ESCRIBIR (El valor se ha encontrado en la posicin, i) FINSI i i+1 FIN_MIENTRAS FIN
EJEMPLO 2: SUELDO DE EMPLEADOS
Escriba un algoritmo en pseudo-cdigo que calcule el aumento de sueldo para un grupo de empleados de una empresa, teniendo en cuenta el siguiente criterio: Si el sueldo es inferior a 1000 euros: Aumento 15% Si el sueldo es mayor o igual a 1000 euros: Aumento 12% Imprima el nombre del trabajador, su sueldo sin aumento, su sueldo nuevo con aumento y el total de la nmina de la empresa, considerando este nuevo aumento. Algoritmos y estructura de datos I Pgina 9
Karim Guevara, lvaro Fernndez Sesin 02 Supongamos que la empresa tiene 100 empleados.
SOLUCIN
ALGORITMO Problema1 CONSTANTES num_emp ES 100 VARIABLES i, aux, aumento, total_nomina SON ENTEROS sueldo ES ARRAY[1 .. num_emp] DE ENTEROS nombre ES ARRAY[1 .. num_emp] DE CADENAS INICIO total_nomina 0 PARA i 1 HASTA num_emp HACER ESCRIBIR (El nombre del empleado es: , nombre[i]) ESCRIBIR (El sueldo del empleado es: , sueldo[i]) SI sueldo[i] < 1000 ENTONCES aumento 15 SINO aumento 12 FINSI sueldo[i] sueldo[i] + (sueldo[i] * aumento) / 100 total_nomina total_nomina + sueldo[i] ESCRIBIR (Su nuevo sueldo es: , sueldo[i]) FIN_PARA ESCRIBIR (El total de nomina de la empresa es: , total_nomina) FIN
EJEMPLO 3
Disear un algoritmo que permita intercambiar el valor de 2 variables. Nota: Implementar el procedimiento Intercambio.
SOLUCIN
ALGORITMO IntercambioVariables VARIABLE ENTERO : x, y
PROCEDIMIENTO Intercambio(E/S ENTERO: a; E/S ENTERO: b) VARIABLES ENTERO : aux INICIO aux a a b b aux FIN_PROCEDIMIENTO
Algoritmos y estructura de datos I Pgina 10
Karim Guevara, lvaro Fernndez Sesin 02 EJEMPLO 4
Disear un algoritmo que permita obtener el valor absoluto de un nmero. Nota: Implementar la funcin Absoluto.
SOLUCIN
ALGORITMO ValorAbsoluto
VARIABLE entero : num
INICIO LEER(num) num Absoluto(num) ESCRIBIR(num) FIN
ENTERO FUNCION Absoluto(E entero: n) inicio
SI n<0 entonces devolver (n*-1) SINO devolver (n) FINSI
FIN_FUNCION
Algoritmos y estructura de datos I Pgina 11
Karim Guevara, lvaro Fernndez Sesin 02
V EJERCICIOS
Escriba los Pseudo-cdigos respectivamente.
1 Leer 10 nmeros e imprimirlos al cuadrado 2 Leer 10 nmeros e imprimir slo los positivos 3 Imprimir los 10 primeros nmeros mltiplos de cuatro 4 Leer 50 nmeros e imprimir cuntos son negativos, positivos e iguales a 0. 5 Leer 50 nmeros e imprimir cuntos son pares y cuantos impares. 6 Leer 10 nmeros, obtener su cubo y su cuarta ( n3 y n4) 7 Leer el nombre, edad y sexo para n personas. Calcular e imprimir cuantas son mujeres menores, mayores y cuntos son varones menores.
8 Se desea obtener el salario semanal neto de los empleados de una empresa cuyo trabajo se paga por horas y del modo siguiente: Las horas inferiores o iguales a 35 horas (normales) se pagan a una tarifa determinada que se debe introducir por teclado al igual que el nmero de horas y el nombre del trabajador. Las horas superiores a 35 se pagarn como extras a un costo del 1.5 de las horas normales. Los impuestos a deducir a los trabajadores varan en funcin de su sueldo mensual: A. Sueldo <= 20 000 libre de impuestos. B. Los siguientes 15 000 soles el 20% de impuestos. C. El resto el 30% de impuestos.
9 El dueo de una empresa desea planificar las decisiones financieras que tomara en el siguiente ao. La manera de planificarlas depende de lo siguiente:
Si actualmente su capital se encuentra con saldo negativo, pedir un prstamo bancario para que su nuevo saldo sea de $10 000.
Si su capital tiene actualmente un saldo positivo pedir un prstamo bancario para tener un nuevo saldo de $20 000, pero si su capital tiene actualmente un saldo superior a los $20 000 no pedir ningn prstamo.
Posteriormente repartir su presupuesto de la siguiente manera. $5 000 para equipo de computo $2 000 para mobiliario y el resto la mitad ser para la compra de insumos y la otra para otorgar incentivos al personal. Desplegar que cantidades se destinaran para la compra de insumos e incentivos al personal y, en caso de que fuera necesario, a cuanto ascendera la cantidad que se pedira al banco.
10 El jurado provincial de Arequipa desea hacer un proceso de simulacin realizando 10 simulacros aleatorios para las prximas elecciones municipales Para lo cual considera solamente 2 candidaturas, 43 distritos y en cada distrito un mximo de 40000 electores; adems no se deben considerar votos nulos/blancos/viciados.
Generando votaciones aleatorias en todos los distritos, mostrar el nmero de votos alcanzados por cada candidato con su correspondiente porcentaje que representa en cada simulacro.
Al termino de todo el proceso de simulacin indicar las veces que gana cada candidato y el nmero de la candidatura ganadora si lo hubo ya que se considera ganador aquella candidatura que obtenga ms de la mitad de los votos.
Algoritmos y estructura de datos I Pgina 12
Karim Guevara, lvaro Fernndez Sesin 02
UTILIZANDO FUNCIONES Y PROCEDIMIENTOS
11 Calcular el valor de la serie donde N es un valor que se pasa como parmetro al subprograma que hace el clculo. 1 0 0 ) 1 * 1 ( n i n i n i
12 Tomando como base los resultados obtenidos en un laboratorio de anlisis clnicos, un medico determina si una persona tiene anemia o no, lo cual depende de su nivel de hemoglobina en la sangre, de su edad y de su sexo. Si el nivel de hemoglobina que tiene una persona es menor que el rango que le corresponde, se determina su resultado como positivo y en caso contrario como negativo. La tabla en la que el medico se basa para obtener el resultado es la siguiente:
EDAD NIVEL HEMOGLOBINA 0 - 1 mes 13 - 26 g% > 1 y < = 6 meses 10 - 18 g% > 6 y < = 12 meses 11 - 15 g% > 1 y < = 5 aos 11.5 - 15 g% > 5 y < = 10 aos 12.6 - 15.5 g% > 10 y < = 15 aos 13 - 15.5 g% mujeres > 15 aos 12 - 16 g% hombres > 15 aos 14 - 18 g%
13 Una institucin educativa estableci un programa para estimular a los alumnos con buen rendimiento acadmico y que consiste en lo siguiente: Si el promedio es de 9.5 o mas y el alumno es de preparatoria, entonces este podr cursar 55 unidades y se le har un 25% de descuento. Si el promedio es mayor o igual a 9 pero menor que 9.5 y el alumno es de preparatoria, entonces este podr cursar 50 unidades y se le har un 10% de descuento. Si el promedio es mayor que 7 y menor que 9 y el alumno es de preparatoria, este podr cursar 50 unidades y no tendr ningn descuento. Si el promedio es de 7 o menor, el numero de materias reprobadas es de 0 a 3 y el alumno es de preparatoria, entonces podr cursar 45 unidades y no tendr descuento. Si el promedio es de 7 o menor, el numero de materias reprobadas es de 4 o mas y el alumno es de preparatoria, entonces podr cursar 40 unidades y no tendr ningn descuento. Si el promedio es mayor o igual a 9.5 y el alumno es de profesional, entonces podr cursar 55 unidades y se le har un 20% de descuento. Si el promedio es menor de 9.5 y el alumno es de profesional, entonces podr cursar 55 unidades y no tendr descuento.
Obtener el total que tendr que pagar un alumno si la colegiatura para alumnos de profesional es de $300 por cada cinco unidades y para alumnos de preparatoria es de $180 por cada cinco unidades.
VI CUESTIONARIO 1. Qu herramientas existen para representar algoritmos? 2. Qu especificacin de algoritmos le parece la ms apropiada? Por q u?
Algoritmos y estructura de datos I Pgina 13
Karim Guevara, lvaro Fernndez Sesin 02 VII BIBLIOGRAFIA Y REFERENCIAS BIBLIOGRAFA BSICA D.S.Malik, DATA STRUCTURES USIGN C++, Thomson Learning, 2003 J. Galve. ALGORITMIA, Ed.Adisson Wesley, Espaa, 2000. Brassard, ANLISIS DE ALGORITMOS, Ed. Mc. Graw Hill., Espaa, 1999.,
BIBLIOGRAFA COMPLEMENTARIA Wirth M., ALGORITMOS Y ESTRUCTURA DE DATOS, Ed. Addison Wesley, Mxico, 1997 Aho. DISEO Y ANLISIS DE ALGORITMOS, Ed. Addison Wesley. USA, 1999. Deitel & Deitel COMO PROGRAMAR EN C/C++. Editorial Prentice Hall, 1995.