Академический Документы
Профессиональный Документы
Культура Документы
1.1.1.
a. Definicin del problema Est dada por la formulacin del problema en forma correcta y completa. Esta enunciacin de lo que se desea es primordial para el xito de la resolucin. b. Anlisis del problema A partir del estudio del problema se deber identificar y conocer las partes principales del mismo y de esa manera determinar los siguientes conjuntos: de DATOS : es la informacin con que contamos para resolver el problema. de RESULTADOS : es lo que se desea obtener.
de CONDICIONES: una o ms relaciones que vinculan los dos conjuntos anteriores y que permitirn plantear la solucin del problema. c. Programacin Esta etapa consiste en obtener la solucin del problema dado. Se divide en dos subetapas:
2 Fundamentos de Programacin
c.1. Eleccin y creacin del mtodo Se trata de buscar un procedimiento o mtodo general que permita resolver el problema planteado utilizando una computadora. Es muy factible que se encuentren varios mtodos para hacerlo, lo importante es determinar la mejor alternativa, de acuerdo a distintos parmetros que se establezcan para esta seleccin. Esta puede ser la que produzca los resultados esperados en el menor tiempo y al menor costo o slo en el menor tiempo u otras. c.2. Codificacin Consiste en expresar el mtodo elegido en un lenguaje, llamado lenguaje de programacin, que pueda se interpretado por la computadora. Esta subetapa ser objeto de estudio en aos superiores. d. Prueba Esta etapa consiste en la ejecucin del cdigo del mtodo elegido, es decir, suministrar los datos al computador, y obtener los resultados. Luego se analizarn los mismos determinando si son realmente los esperados. Caso contrario, debern analizarse las etapas previas, comenzando por la ltima hacia atrs, y realizar las modificaciones necesarias, repitiendo esta proceso hasta obtener los resultados esperados. Observemos grficamente las etapas descriptas Resolucin de problemas
Programacin
Prueba
Codificacin
La etapa de eleccin y creacin del mtodo se puede dividir a su vez en el diseo de la estrategia y la definicin del algoritmo, y puede graficarse de la siguiente manera: Eleccin y creacin del mtodo
Diseo de la estrategia
1.1.2.
ESTRATEGIA
El diseo de la estrategia consiste en encontrar un mtodo que nos permita llegar a resolver el problema planteado. Como primer paso de esta etapa, debemos preparar un plan o esquema general de las tareas que deben realizarse para llegar a la solucin. Este esquema se denomina estrategia y debe ser una lista de QUE hacer. Cmo se disea una estrategia? Por lo dicho disear una estrategia consiste en dividir o descomponer el problema original en una sucesin de problemas ms simples, de tamao suficientemente pequeo como para que cada uno de ellos pueda ser comprendido en su totalidad. Esto, permitir atacar la solucin de cada problema simple por separado e independientemente de los dems, volviendo a aplicar este enfoque a cada uno de los subproblemas hasta llegar a subproblemas de solucin simple. Una vez que todos ellos han sido resueltos, se puede decir que el problema original ha sido resuelto. Este proceso de descomposicin de un problema partiendo de la formulacin completa del problema hasta llegar a problemas elementales de simple solucin, se llama diseo descendente, tambin conocido como top-down, mtodo de refinamiento sucesivos o diseo compuesto.
4 Fundamentos de Programacin
Grficamente, dado el problema P lo dividiremos en subproblemas Pi. Cada subdivisin implica un descenso de nivel. P nivel 0 P3 P4 nivel 1 nivel 2
P1
P2
P31
P32
P33
Cada Pi representa un enunciado o subproblema. Para cada uno existen 2 posibilidades: que Pi sea un subproblema o una tarea simple, dando por finalizada la descomposicin que Pi sea un subproblema o una tarea compuesta y por lo tanto sea posible su descomposicin en una nueva secuencia de subproblemas Las caractersticas generales de este tipo de diseo se basan en: ir de lo general a lo particular no existe una nica descomposicin de subproblemas en cada nivel puede verificarse que el esquema sea el correcto
finalmente se realiza un trabajo de recomposicin del esquema completo, resolviendo cada subproblema hasta lograr la solucin del problema. El diseo de una estrategia y su posterior refinamiento, constituyen las etapas ms creativas y quizs ms dificultosas de todo el proceso de resolucin de un problema.
1.1.3.
ALGORITMO
Planteada una estrategia indicando QUE tareas hacer, debemos especificar una lista detallada de COMO hacerlas, llegando as a definir una solucin paso a paso del problema llamada algoritmo. La descripcin de la solucin detallado por
medio de un algoritmo constituye el segundo paso en la etapa de eleccin del mtodo. La palabra algoritmo se utiliza, en general, como sinnimo de procedimiento, mtodo o tcnica. Pero en el rea de computacin tiene un significado ms especfico. Un algoritmo es un conjunto finito de operaciones (instrucciones - pasos) que seguidos en un determinado orden permiten resolver un tipo de problema. Las caractersticas principales de un algoritmo son : Finito : permite arribar a la solucin de un problema despus de la ejecucin de un nmero finito de pasos. Definido : cada paso debe ser enunciado en forma clara y precisa, y no debe dar lugar a ambigedades. Para los mismos datos el algoritmo debe dar siempre los mismos resultados General : debe ser la solucin aplicable a un tipo de problemas y no un problema particular. Teniendo en cuenta las caractersticas mencionadas previamente podemos decir que un algoritmo es una secuencia ordenada y finita de pasos que constituyen un mtodo general para resolver un tipo de problemas. Es de notar que esta definicin, se refiere a ...resolver un tipo de problemas ..... y no hace hincapi en el uso del computador como herramienta para su resolucin. Esto se debe a que el concepto de algoritmo se aplica a problemas computacionales que van a ser resueltos por medio de un computador y a problemas no computacionales, en cuya resolucin no interviene esta herramienta. En ambos casos el lenguaje usado en la descripcin del algoritmo debe ser comprensible para el destinatario o para quien lo va a ejecutar. Por lo visto, para cualquier problema para el que pueda especificarse un mtodo finito de solucin puede definirse un algoritmo. Ejemplos que se pueden presentar en la vida diaria : una receta de cocina las instrucciones para utilizar un aparato electrnico el camino para llegar a un lugar determinado desde un punto de partida
6 Fundamentos de Programacin
Ejemplos de algoritmos computacionales Calcular los sueldos de los empleados de una empresa Actualizar el stock de un comercio Calcular las races de una ecuacin
Desarrollemos el siguiente ejemplo de la vida diaria Problema: Preparar un taza de caf instantneo El grado de detalle que deberemos usar en la definicin del mtodo, depender de la persona que sea la ejecutante de la solucin. Si el ejecutante es un ama de casa, probablemente con el enunciado sea suficiente, pero si se trata de alguien que nunca prepar un caf podramos detallar los siguientes pasos: PROCESO Cafe1 Calentar una taza de agua sin llegar al punto del hervor; Poner en un taza tres cucharaditas de azcar, dos de caf instantneo y media cucharadita de soda; Batir hasta que la mezcla se torne marrn claro; Llenar con el agua caliente la taza; Revolver para disolver la mezcla en el agua
FINPROCESO Obsrvese que para indicar el inicio y el fin del algoritmo se han utilizado las palabras PROCESO Y FINPROCESO respectivamente y que los pasos han sido lo suficientemente simples para un principiante en el arte de preparar caf. Otro aspecto que es importante considerar es que contamos con una serie de elementos para poder preparar el caf como por ejemplo : recipiente para calentar el agua, azcar, caf, cucharita, taza, soda Supongamos que no se tiene la certeza de que en el momento de hacer el caf se tenga soda, se podr reemplazar con agua, el algoritmo por lo tanto ser
Algoritmo Cafe2 Calentar una taza de agua sin llegar al punto del hervor; Poner en un taza tres cucharaditas de azcar , dos de caf instantneo SI se tiene soda ENTONCES agregar en la taza media cucharadita de soda SINO agregar en la taza media cucharadita de agua fra FINSI Batir hasta que la mezcla se torne marrn claro; Llenar con el agua caliente la taza; Revolver para disolver la mezcla en el agua
Fin Algoritmo Las dos primeras instrucciones se ejecutan una a continuacin de otra, luego se presentan dos alternativas: o se agrega media cucharadita de soda o se agrega media cucharadita de agua fria. Para describirlas se ha usado las palabras SI ENTONCES SINO FINSI que se analizarn en detalle ms adelante En este caso el algoritmo cubre ya mayor cantidad de posibilidades, no previstas en la versin anterior. A partir de esto se pueden realizar las siguientes observaciones: El algoritmo debe estar compuesto por acciones tales que el ejecutante sea capaz de realizar El algoritmo debe ser enunciado en un lenguaje comprensible para el ejecutante, hombre o computador. En este ltimo caso, estar restringido a un juego de instrucciones perfectamente determinado. El algoritmo deber representar todo el conjunto de posibles resultados del problema, inclusive el caso de que no tenga solucin Para un mismo problema se pueda describir ms de un algoritmo y con cualquiera de ellos se deber llegar a la/s misma/s solucin/ es ; un algoritmo ser ms eficaz que otro. La eficacia del algoritmo depende de los recursos con que se cuente y los factores que se consideren : costos, tiempo, etc..
8 Fundamentos de Programacin
Ejemplo de resolucin de problemas de la vida cotidiana Ejemplo: Preparar un licuado de frutas Recursos: Licuadora. Fruta con cscara. Taza con leche. Taza con azcar. Cuchillo. Plato. Todos los elementos estn sobre la mesada. Se cuenta con las medidas necesarias de todos los ingredientes. Algoritmo : Algoritmo Licuado Tomar el vaso de la licuadora Colocar el vaso en la base SI la licuadora no est enchufada ENTONCES enchufarla FINSI Tomar el cuchillo REPETIR tomar la fruta pelarla cortarla sobre el plato colocar la fruta cortada en el vaso HASTAQUE no haya ms frutas Dejar el cuchillo Tomar la taza con la leche Echar la leche en el vaso Dejar la taza de la leche sobre la mesada Tomar la taza con el azcar Colocar el azcar en el vaso Dejar la taza del azcar sobre la mesada Tapar el vaso Mover la perilla de encendido hacia la derecha REPETIR esperar HASTAQUE la mezcla est licuada Mover la perilla de encendido hacia la izquierda Fin Algoritmo
En este caso ciertas acciones como la de Tomar la fruta, pelarla, cortarla, colocar..... se repiten mientras se tiene fruta para hacerlo. Aparecen aqu las palabras REPETIR y HASTAQUE , que veremos en capitulos posteriores.
1.1.4.
FORMALIZACIN
Formalizaremos algunos conceptos vistos anteriormente. Hemos mencionado que la forma de enunciar la solucin a un problema planteado depende del ejecutante o tambin llamado procesador. Por lo tanto llamaremos as a toda entidad capaz de entender un enunciado y ejecutar los pasos descriptos en un algoritmo. Si bien en los ejemplos vistos el ejecutante se trataba de un persona en la resolucin de problemas computacionales debemos pensar que el procesador ser la computadora. Tambin hemos notado que para poder realizar su tarea el ejecutante debe contar con los recursos adecuados. El conjunto de estos recursos existentes en el momento de la ejecucin de un trabajo constituye el ambiente del problema. El mtodo que se elija para proponer la solucin de un tipo de problema depende del ejecutante y de los recursos o elementos con que se cuenta (ambiente). Cuando definimos algoritmo hemos hablado de un conjunto de pasos o acciones. Una accin es un evento que modifica el ambiente y puede ser: primitiva no-primitiva
Una accin es primitiva cuando para un ejecutante dado su enunciado es suficiente para que pueda ser ejecutada sin informacin adicional. Una accin no-primitiva es aquella que puede ser descompuesta en acciones primitivas par un ejecutante dado. Tambin hemos visto que en los ejemplos se nos presentan situaciones que indicaban alternativas : SI se tiene soda ..., esta no es una accin porque no modifica el ambiente, pero son elementos que el ejecutante debe saber interpretar. A estos enunciados se los denomina condicin.
Por lo tanto una condicin es una afirmacin lgica sobre el estado de algn recurso del ambiente, que puede tomar valor verdadero o falso en el momento de la observacin. El ejecutante determina en el momento de la ejecucin del algoritmo las acciones a seguir, dependiendo de que la condicin sea satisfecha o no.
PROGRAMACIN MODULAR
Es un mtodo de diseo y tiende a dividir el problema en partes perfectamente diferenciadas que puedan ser analizadas, resueltas y puestas a punto por separado. Para atacar el anlisis de un problema, y siguiendo el diseo Top-Down, se pueden utilizar criterios de programacin modular para dividirlos en partes independientes, probando cada uno por separado y realizando su recomposicin ascendente. Cada una de las partes independientes se llama Mdulo y para su determinacin se deben tener en cuenta los siguientes criterios: un mdulo debe corresponder a una funcin lgica perfectamente bien definida. los mdulos deben ser pequeos para que sean claros y de poca complejidad. un mdulo debe tener una estructura de caja negra, es decir la salida debe ser exclusivamente funcin de la entrada. cada mdulo deber tener una nica entrada y una nica salida.
1.1.5.
La programacin modular tiende a : disminuir complejidad: disminuye la complejidad del problema original, dividiendo un problema en partes ms simples. aumentar la claridad: el problema original es planteado ahora como un sucesin de mdulos que resulta ms fcil de comprender inclusive para terceras personas. aumentar la fiabilidad: como consecuencia de los dos puntos anteriores, aumenta la confiabilidad en todo proceso de resolucin.
facilitar modificaciones y conexiones: cada mdulo puede realizarse y probarse por separado, minimizndose los problemas de puesta a punto al final.
2. FORMALIZACION DE ALGORITMOS
Qu es un ALGORITMO COMPUTACIONAL?
Los problemas desarrollados hasta el momento, se resolvieron empleando instrucciones coloquiales y se basaban en situaciones de la vida diaria. Los algoritmos as desarrollados son fciles de entender para cualquier persona o ejecutante. Pero nuestro objetivo es llegar a desarrollar algoritmos que puedan ser interpretados por una computadora. Para ello es necesario una descripcin clara y carente de ambigedades de cada una de las acciones que llevan a la solucin del problema, por medio de rdenes comprensibles para la computadora. En este captulo nos ocuparemos de describir la formalizacin necesaria para el desarrollo de Algoritmos Computacionales. De aqu en ms cuando mencionemos al ejecutante de un algoritmo, nos estaremos refiriendo concretamente a una computadora. En el siguiente ejemplo planteamos un algoritmo completo de acuerdo a la formalizacin que propondremos posteriormente. Ejemplo: Plantear un algoritmo computacional que calcule la hipotenusa de un tringulo rectngulo, se conocen las longitudes de los catetos. Anlisis del problema: Datos: Longitudes de los catetos Resultados: Hipotenusa Relacion: Teorema de Pitgoras
Algoritmo:
Inicio
A,B
H RC( A 2 + B 2)
Hipotenusa=, H
Fin
En este ejemplo A, B y H constituyen variables; 2 e 'Hipotenusa' son constantes; el paralelogramo con una flecha hacia su interior representa la accin de LEER, el paralelogramo con la flecha hacia afuera es la accin de ESCRIBIR y la flecha representa la accin de asignacin; RC (A 2 + B 2) es una expresin numrica y RC ( ) es la funcin raz cuadrada. El signo ; (punto y coma) es el separador de acciones. En esta unidad iremos desarrollando todos estos elementos, que conforman un lenguaje algortmico grfico que nos permnite crear diagramas de fujo La forma general de un algoritmo expresado mediante u diagrama de flujo es la sigueinte en pseudocdigo es la siguiente:
Inicio
accin 1
accin 2 .. accin n
Fin Donde cada boque grfico representa una accin deteminada del algoritmo. Esudiaremos varias acciones y su correspondiente forma en el diagama de flujo.
una posicin de memoria donde puede asignarse o almacenarse un nico valor por vez. Para proponer el nombre de una variable observaremos tres reglas simples: 1) Utilizar slo letras y/o dgitos, comenzando siempre con una letra. 2) No utilizar las palabras claves o reservadas del lenguaje de codificacin (por ahora, no endremos incovenientes en este aspecto, pues usaremos diagramas de flujo); o para las funciones internas o predefinidas: RC, SEN, TRUNC, LN, etc. 3) No hacer distincin entre maysculas y minsculas. Esto implica que VENTA, venta y Venta, constituyen en el algoritmo la misma variable. Esta sintaxis y sus restricciones no presentan inconvenientes para proponer nombres de variables, pues disponemos de un sinnmero de combinaciones diferentes de letras y dgitos. Por ejemplo: NOMBRE, DIRECCION, Res1, MONTO. Ejercicio: En los siguientes ejemplos de variables, indique si son vlidas; caso contrario especifique la causa:
a) venta b) x12 c) (total) d) resultado e) *PRODU f) promedio El diseador del algoritmo tiene total libertad para proponer nombres a sus variables, aunque como consejo, es conveniente proponer identificadores que tengan alguna relacin con el dato que representan. En nuestro ejemplo inicial, podramos haber empleado CATETO1, CATETO2, HIPOT, en lugar de A, B, H.
Por ltimo, definimos expresin a un conjunto de operandos ligados por operadores, que describe una operacin o clculo arrojando un nico resultado. En nuestro primer ejemplo RC (A 2 + B 2) es una expresin que permite obtener el valor de la hipotenusa. Algunos ejemplos de expresiones: 1) 2+a-x*5, 2) A < B, 3) TRUNC( R ) + 1
TIPOS DE DATOS
Un algoritmo computacional puede emplear los siguientes tipos de datos:
Numrico Caracter Lgico
Esta clasificacin nos define los tipos primitivos de datos. Estudiaremos a cada uno de ellos y su modo de empleo.
2.1.1.
Tipo numrico
Es el conjunto formado por los valores numricos que pueden incluir un punto decimal y pueden estar precedidos por los signos '+' o '-'. La ausencia de signo implica un valor positivo. Se clasifican a su vez en tipo entero o tipo real, pero no haremos distinciones en su empleo. Los datos de tipo numrico pueden representarse como constantes, variables y /o expresiones . Constantes numricas Una constante numrica es un valor formado por algn elemento del conjunto numrico. Veamos algunos ejemplos de constantes numricas que puedan emplearse en un algoritmo computacional: 12 -25000 +1.2345 -2345 -23576.998 0.45E+02 En el ltimo ejemplo se indica una constante numrica con notacin cientfica, donde E+02 indica la potencia de base diez, es decir: 0.45E+02 = 0.45 * 10 2 = 45 Variables numricas Cualquier identificador o variable que represente a un dato numrico se denomina variable numrica. Si una variable se define en un algoritmo como numrica, no podr adoptar valores de tipo no numrico.
Expresiones numricas Una expresin numrica es aquella que combina operandos numricos (constantes numricas, variables numricas u otras expresiones numricas) con los operadores algebraicos.
Los operadores algebraicos y su funcin son: Operador + * / Funcin Suma Resta Producto Cociente Potencia
La jerarqua de estos operadores es la misma que plantea el lgebra de los nmeros, y podr ser alterada con la intercalacin de niveles de parntesis. Ejemplos: 2 + a * 10 2 - 800 / C 1 - (2 * TOT - 30) P) 4 * (VENTA / 5 2 - 25) donde a, C, TOT, P, VENTA son todas variables numricas. En cada caso, al evaluar la expresin se obtiene un nico resultado. El operador de radicacin no existe, ya que esta operacin puede plantearse a travs de la potenciacin de exponente fraccionario. De todas maneras utilizaremos una funcin para el clculo de la raiz cuadrada, como se indica en el ejemplo inicial. Supondremos adems, que el ejecutante de nuestro algoritmo (la computadora ) conoce y puede resolver ciertas funciones numricas. A estas funciones las llamaremos "funciones internas" y, tienen la propiedad de devolver un valor o resultado al ser aplicadas sobre un argumento indicado entre parntesis. Funcin RC( ) ABS( ) EXP( ) SEN( ) Significado Raz cuadrada Valor absoluto Exponenciacin Seno
Funcin COS( ) TAN( ) ATAN( ) TRUNC( ) LN( ) REDON( ) Ejemplos: TRUNC(2/3) - ABS(A) * 3 SEN(X) + 1 - TAN(C/2) 12/ RC(TAN(3.1416 / 4))
Significado Coseno Tangente Arco tangente Parte entera Logaritmo natural Redondeo
2.1.2.
Tipo Caracter
El tipo caracter incluye a un conjunto formado por todos los caracteres o smbolos de cdigo ASCII (Cdigo Estadard Americano para el Intercambio de Informacin). La mayora de ellos se generan en el teclado de una computadora, es decir, las letras de nuestro alfabeto en mayscula, en minscula, los dgitos, los operadores relacionales '<', '>', '=', el espacio en blanco ' ',los operadores aritmticos '+', '-', '*', '/', los caracteres de puntuacin y otros especiales '!', '@', '%', '(', etc. Este conjunto de 256 caracteres es un conjunto ordenado, y por lo tanto, existe una relacin de precedencia u orden entre sus elementos (de menor a mayor) determinado por su nmero de cdigo. El orden lo establece el cdigo ASCII (ver la tabla con algunos de los cdigos). Tener e cuenta que en el orden de precedencia del cdigo ASCII, los siguientes grupos se hallan propuestos de menor a mayor: El espacio en blanco Los dgitos '0', '1', '2',.........'9'. Las letras maysculas 'A', 'B',......'Z'.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
'' '!' '"' '#' '$' '%' '&' ''' '(' ')' '*' '+' ',' '-' '.' '/'
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
'0' '1' '2' '3' '4' '5' '6' '7' '8' '9' ':' ';' '<' '=' '>' '?'
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
'@' 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O'
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' '[' '\' ']' '^' '_'
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
'`' 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o'
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' '{' '|' '}' '~' ''
Constantes tipo caracter Una constante tipo caracter es una constante cuyo valor pertenece al conjunto mencionado anteriormente delimitada por apstrofes. ( ). De acuerdo a la relacin de orden establecida, podemos afirmar que son verdaderas las siguientes proposiciones: La letra 'a' es mayor que la letra 'B'. El caracter '5' es menor que la letra 'A'. Dentro de este tipo incluiremos a las cadenas de caracteres: secuencia finita de caracteres encerrados entre apstrofes y por lo tanto tienen una longitud que est dada por la cantidad de caracteres que la forman. Por ejemplo, los nombres, apellidos y direcciones, constituyen informacin formada con sucesiones o cadenas finitas de los caracteres mencionados anteriormente. Ejemplos: 'Jorge Fernndez' '043-234558' 'Resultado=' 'HIPOTENUSA' 'San Martn 2377 - Dpto. 5' '*************'
Aqu tambin es vlido establecer una relacin de orden basada en la precedencia entre caracteres ya sealada. Para establecer dicho orden entre dos cadenas, se compara caracter por caracter hasta encontrar una desigualdad. Entonces son vlidas las proposiciones: 'Mario' '043-553456' 'mesa' es mayor que es menor que es menor que 'Mariana' 'TE:043-553456' 'mesas'
Observemos que en nuestra formalizacin algortmica, los datos de tipo caracter o las cadenas de caracteres se indican siempre entre apstrofos. Esto es para evitar confusiones con otros elementos algortmicos que desarrollaremos ms adelante.
Variables tipo caracter Una variable o identificador que represente a un caracter o a una cadena de caracteres es una variable de tipo caracter.
2.1.3.
Tipo Lgico
El tipo lgico nos permite expresar un valor de verdad en un algoritmo a travs constantes, variables y/o expresiones. Constantes Lgicas Las constantes lgicas son solo 2 y estn respresentadas por los valores Verdadero y Falso. Variables Lgicas Una variable lgica ser una variable que representa a alguno de los dos valores lgicos: Verdadero o Falso. Expresiones lgicas Las expresiones lgicas ms sencillas se plantean con la combinacin de operandos del mismo tipo y los operadores relacionales matemticos. Operador < > = >= <= <> Significado Menor que Mayor que Igual que Mayor o igual que Menor o igual que Distinto
Ejemplos:
Expresin Lgica 45 > 12 56 <= 30 Andrea' > 'Mariana' 'Andrea' > 'Ana' 60 < '23'
Las expresiones lgicas simples mostradas en el ejemplo, tambin son conocidas como expresiones relacionales, pues permiten comparar o relacionar a dos operandos del mismo tipo. Justamente, la ltima expresin del ejemplo anterior no es vlida pues compara a una constante numrica con una constante de tipo caracter. La algortmica computacional, permite tambin formar expresiones lgicas ms complejas, a travs de operandos lgicos y los operadores que emplea la lgica proposicional: Conector Lgico ~ Significado Conjuncin Disyuncin Negacin
Observemos entonces el valor de verdad de las siguientes expresiones lgicas: Expresin Lgica (7 < 10) ('a' < 'c') ('Ana' < 'Angel') (12 > 19) ~ (37 > 18) (VENTA > X) (SEN(X) <= 1) Resultado Verdadero Verdadero Falso Verdadero
PRIMITIVAS
En la unidad anterior definimos a primitiva como la accin algortmica cuyo enunciado es suficiente para que el ejecutante pueda realizarla sin ningn tipo de informacin adicional. En un lenguaje algortmico como lo son los lenguajes de programacin, las primitivas se identifican con palabras claves o reservadas. Nosotros empleamos bloques grficos en el diagrama de flujo para representar acciones primitivas. En algortmica computacional las acciones primitivas se clasifican en: Secuenciales Condicionales Repetitivas
2.1.4.
ASIGNACIN
Esta accin permite a un identificador o variable, representar o memorizar cierto valor. Para describirla utilizaremos la notacin siguiente:
V E
Donde V es la variable a la cual el ejecutante debe asignar el valor de E. El smbolo '' puede leerse 'toma el valor'. Segn sean los tipos de V y E una asignacin puede ser: aritmtica caracter lgica
Asignacin aritmtica La asignacin V E es aritmtica si V es una variable numrica y E es una constante numrica, una variable numrica o cualquier expresin de tipo numrico.
NUM 3*X+2; (NUM toma el valor que resulta de evaluar la expresin 3*X+2) Notemos que para poder realizar una asignacin aritmtica debemos evaluar la expresin de la derecha y luego ese resultado se almacena en la variable que figura a la izquierda. Por lo tanto es perfectamente vlida la accin: N N+1; que
equivale a: tomar el valor actual de N, sumarle 1 y asignarle ese resultado a la variable N. Por ejemplo, si antes de la accin N contena el valor 8, luego de dicha accin contendr 9. Observemos que esta accin algortmica no tiene nada que ver con los conceptos asimilados en matemtica, donde N= N+1 es una expresin incompatible.
Asignacin tipo caracter La asignacin V E es una asignacin de tipo caracter si V es una variable tipo caracter y E es un constante caracter o una variable tipo caracter Ejemplos: A '7'; X3 A; (A toma el valor '7') (X3 toma el valor contenido almacenado en la variable A) (APELLIDO toma el valor 'Lpez')
La asignacin VE es una asignacin lgica si V es una variable de tipo lgico y E es una constante lgica (Verdadero o Falso), una variable lgica o una expresin lgica.
Ejemplos: M F ; TRUE 34 <= 78; (M toma el valor F) (TRUE toma el valor lgico V)
2.1.5.
ENTRADA Y SALIDA
Todo algoritmo tiene por objetivo principal producir resultados, pudiendo o no incorporar informacin del medio externo (datos), al ambiente o sistema que observa. Esta incorporacin de valores desde el exterior al ambiente del algoritmo, nos lleva a definir una accin primitiva de lectura o entrada. Usaremos para ello un bloque grfico representado por un paraelogramo con una flecha hacia su inteior: De esta manera, la accin de lectura o LEER nos permite ingresar, desde el medio externo, uno o ms valores los cuales son asignados a la variable V o a las variables que figuran dentro del paraelogramo.
Ejemplos:
DAT
Esta accin tiene el mismo efecto que una asignacin, slo que sta utiliza valores del ambiente del algoritmo; en cambio la lectura asigna valores desde el medio exterior. Esta accin contribuye a hacer a los algoritmos de uso general, pues permite incorporar datos nuevos para producir nuevos resultados. Sin esta accin, la ejecucin de un algoritmo producir siempre la misma respuesta. La accin primitiva que permite a un algoritmo comunicar resultados o salida de informacin al medio exterior, la describiremos en el diagrama de flujo con un parelogramo y una flecha dirigida hacia el exterior. Representa la accin ed ESCRIBIR. Podemos colocar en este bloque una variable, una constante, una expresin o una lista de variables y/o constantes. Su formato general es: C
donde C representa una constante, una variable del ambiente, una expresin o una lista de variables. En esta accin el valor almacenado en una variable o el de una constante es comunicado al mundo exterior. Ejemplos: Apellido
DAT, NOMBRE
'Total =', X
Destaquemos algunas diferencias entre las acciones de lectura y escritura. La lectura se realiza solamente a travs de variables y, por lo tanto, si se lee una variable que ya fue definida en el algoritmo, implicar un acceso destructivo, esto es, la variable perder su valor para tomar el del nuevo dato que se ingresa. En cambio, si se escriben resultados a travs de variables el ejecutante realizar un acceso no destructivo a dichas variables, pues slo necesita conocer su contenido para ejecutar la escritura. Aqu las variables conservan sus valores despus de la accin. Las acciones de lectura y escritura son conocidas como acciones de entrada/salida o abreviadamente E/S.
DIAGRAMAS DE FLUJO
Las acciones antes desciptas corresponden a un lenguaje algortmico que llamaremos pseudocdigo. Adems, disearemos algoritmos en forma grfica a travs de los llamados diagramas de flujo. En un diagrama de flujo, las estructuras de las primitivas del pseudocdigo se identifican con una forma geomtrica identificatoria o bloque. Estos bloques se
unen con flechas que nos indican la secuencia u orden en que deben ejecutarse las instrucciones, es decir el flujo o recorrido que ha de seguirse en el diagrama. Para las acciones de lectura y escritura emplearemos un paralelogramo con una pequea flecha que apunta hacia adentro o hacia afuera del bloque respectivamente. Para la accin de asignacin usaremos un rectngulo.
Cada bloque se corresponde con una nica accin. Una de las ventajas del empleo de diagramas de flujo, es la visualizacin plana de las acciones que forman el algoritmo, permitiendo seguir facilmente su lgica. Estas ventajas se apreciarn ms adelante, cuando desarrollemos primitivas de estructura condicional y repetitiva. Veamos ahora algunas de las formas geomtricas que usaremos como bloques que identifican acciones en un diagrama de flujo: Bloque Significado o Uso
Inicio o fin de proceso Asignacin Lectura o ingreso de datos Escritura o salida Expresin lgica con una salida por V y otra por F Subalgoritmo
Conectores
Hemos desarrollado en la unidad anterior el objetivo de la estrategia. En el ambiente se definen y describen las variables que se emplearn, indicando por cada una su nombre, su tipo, su clase ( por el momento solamente: simples) y su significado. Y por ltimo, se define el algoritmo escrito en un lenguaje algortmico. En el curso emplearemos como lenguajes algortmicos el PSEUDOCODIGO y los DIAGRAMAS DE FLUJO. En estos primeros captulos, en la resolucin de problemas no incluiremos la estrategia y su posterior refinamiento. Veamos en un ejemplo como aplicamos el modelo de resolucin de problemas. INICIO Problema: intercambiar los valores de dos variables numricas que se leen como datos. A, B Ambiente: Variable Numrica AUX A A X B A B Aux Algoritmo B AUX A, B FIN X X Carcter Lgica Clase Simple Simple Simple Significado Dato Dato Auxiliar
(Inicio) (Leer A y B) (Asignar el valor de A a AUX) (Asignar el valor de B a A) (Asignar el valor de AUX a B ) (Informar los contenidos de A y B) (Bloque de finalizacin)
CONCLUSION
Los conceptos tratados hasta aqu, contribuyen a formalizar la metodologa de la definicin de algoritmos. Quien los disee dispone ahora de reglas claras y formales, eliminando acciones ambiguas o carentes de precisin.
Esto no quiere decir que, planteado un problema, el algoritmo que describe la solucin del mismo sea nico. Al contrario, el diseo de los algoritmos requiere una gran dosis de creatividad y, es comn, hallar varios caminos para la obtencin de un resultado. Slo se trata de establecer pautas claras y precisas para que distintos ejecutantes que interpreten dichas pautas, puedan realizar la secuencia de acciones que conforman el algoritmo.
3. LOGICA DE CONTROL
INTRODUCCIN
La formalizacin algortmica que comenzamos a desarrollar en la unidad anterior, nos ha permitido disear algunos algoritmos computacionales, en los cuales empleamos tres acciones primitivas fundamentales: asignacin, lectura y escritura, para resolver problemas sencillos, con la caracterstica adems, de que las acciones que lo formaban se ejecutaban secuencialmente, en el orden en que aparecan, es decir: una a continuacin de otra. Pero en el diseo de algoritmos, para la resolucin de problemas ms complejos, es necesario contar con herramientas que nos permitan modificar el orden lineal de ejecucin de las acciones, donde el ejecutante pueda tomar decisiones y determinar qu accin realizar en el momento de ejecucin del algoritmo. Para ello, la diagramacin estructurada nos brinda recursos propios. En rigor, esta metodologa establece que todo algoritmo por ms complejo que seapuede elaborarse mediante el uso de slo tres estructuras lgicas de control: secuencia seleccin iteracin
Estas estructuras presentan la caractersticas de tener un nco punto de entrada y una nica salida. Un algoritmo definido en base a estas estructuras, es mas fcil de entender, y permite, por lo tanto, detectar los errores de lgica ms rpidamente.
Los bloques A, B, C representan una accin elemental o un mdulo; cada uno de ellos, con un nico punto de entrada y un nico punto de salida. En pseudocdigo la secuencia se especifica indicando las acciones en el orden en que deben ser ejecutadas, separadas entre s por el signo de puntuacin ";", (escritas en el mismo rengln o en diferente):
A; B; C;
Ambas representaciones indican la ejecucin primero del bloque A, luego del B, y finalmente del C. Las acciones primitivas de LEER, ASIGNAR y ESCRIBIR que estudiamos en la unidad 2 responden a este tipo de estructura
3.1.2 SELECCIN
Con frecuencia, la definicin de un problema nos leva a tener que tomar una o ms decisiones en la codificacin de un algoritmo. Por ejemplo, supongamos que conocemos el precio unitario de un producto y la cantidad de unidades a comprar, y sabemos que la empresa vendedora hace un descuento del 10% si compramos ms de 25 unidades. Para conocer el monto total a pagar debemos tomar una decisin dentro del algoritmo y realizar el clculo correspondiente a la compra de 25 o menos unidades, y por otro lado el clculo correspondiente a la compra de ms de 25 unidades. Si Cantidad > 25 Por Verdadero: Monto PU*Cantidad* 0.90 ( descontamos 10% del PU) Por Falso: Monto PU*Cantidad Fin de la estructura Las estructuras de seleccin permiten, al ejecutante, alterar el flujo lineal de control de las acciones de un algoritmo. Permiten tomar decisiones y elegir un camino a seguir en base a ciertos valores o informacin del algoritmo, ya sean datos que se ingresan o resultados de clculos que se realizan.
a. ESTRUCTURA CONDICIONAL O DE DECISIN Esta estructura permite elegir el camino a seguir segn el valor de verdad de una condicin. La estructura condicional permite al ejecutante o procesador elegir las acciones a seguir entre dos alternativas especficas, de acuerdo al valor de una condicin en el momento de ejecucin del algoritmo. La representacin de esta estructura en un diagrama es: donde condicin es cualquier elemento del ambiente del algoritmo que arroje un resultado lgico Verdadero o Falso, es decir que el elemento condicin puede ser una variable o expresin lgica. Tanto A como B representan una accin primitiva o un conjunto de acciones. La presencia de esta estructura en un algoritmo, le indica al procesador que debe: 1) evaluar la condicin planteada a) si la condicin toma un valor Verdadero (V), ejecutar el bloque A; y finaliza la estructura condicional indicada con el punto. b) si la condicin toma un valor Falso (F), ejecutar el bloque B; y finaliza la estructura condicional. 2) En ambos casos, luego contina la ejecucin del algoritmo con la accin posterior al punto.
Condicin
Esta estructura se la considera como una unidad, con un nico punto de entrada y un nico punto de salida. Su punto de entrada es la evaluacin de la condicin y su punto de salida -- luego de haberse ejecutado el camino correspondiente-- se plantea en la unin de las 2 ramas de la bifurcacin que plantea la estructura: la rama por Verdadero y la rama por Falso. Ejemplo 1: Una compaa de turismo ha definido una poltica de promocin de sus empresa para lo cual ha fijado descuentos para sus clientes en funcin de los viajes anteriores realizados. El valor del descuento es del 20% para aquellos clientes que, considerando los viajes realizados en el ltimo ao y el que desean realizar, han recorrido ms de 3000 Kms. y del 5% para aquellos que no han alcanzado dicha cifra. Turismo Se desea realizar un algoritmo que calcule el importe a pagar por un cliente, si se ingresa su nombre y apellido, el total de kilmetros recorridos hasta el momento, y los datos del viaje a contratar: precio, destino, kilmetros a recorrer. Informar NYA, TACUM, PRECIO, DEST, los datos ingresados, el monto del descuento y elKMS monto a pagar por el cliente. Ambiente: Variable NYA TACUM PRECIO DEST TOTAL DESC IMP Algoritmo: X X X V X X Num. TOTAL:= Carac. Lg. TACUM Clase + KMS X Simple Significado
F Simple TOTAL > 300 Kilmetros acumulados hasta la fecha Simple Precio del viaje Simple Kms. recorrer DESC := PRECIO *a 0.05 Simple Simple IMP:= PRECIO - DESC Destino del Viaje Kilmetros totales includos los del viaje actual
Simple Descuento a realizar Cliente:, NYA, Acumulados:, TACUM X Simple Importe Total Datos del viaje:$, PRECIO, KMS, Kms., DEST Descuento: $, DESC, Importe: $, IMP FIN
DEST Misiones
TOTAL 3900
DESC 70
IMP 289
Acciones de Escritura Cliente: Juan Prez Acumulados: 3100 Datos del Viaje: $350 800 Kms. Misiones Descuento: $70 Importe: $289 La estructura condicional brinda la posibilidad de plantear que por la alternativa falsa no se especifiquen acciones a ejecutar. De esta manera, en el condicional, la salida por VERDADERO deber presentar al menos una accin a ejecutar, mientras que por FALSO no se plantea ninguna accin. Esta variante de la estructura condicional se representa en diagrama de la siguiente manera:
Condicin
Ejemplo 2: Realizar un algoritmo que ingrese como datos, el precio unitario y la cantidad de unidades vendidas de un artculo e informe el monto neto de venta, sabiendo que para cantidades superiores a 500, se efecta un descuento del 20 %.
Algoritmo:
Venta
Precio, Cant
Fin
Ambiente: Variable PRECIO CANT Num. Carac. X X Lg. Clase Simple Simple Significado Precio de venta del artculo Cantidad de artculos vendidos
MONTO CUESTION
X X
Simple Simple
Ejercicio propuesto: Una compaa de turismo ha definido una poltica de promocin de sus empresa para lo cual ha fijado un descuento del 20% para aquellos clientes que, considerando los viajes realizados en el ltimo ao y el que desean realizar, superen los 3000 Kms. de recorrido. Se desea realizar un algoritmo que calcule el importe a pagar por un cliente, si se ingresa su nombre y apellido, el total de Kms. recorridos hasta el momento, y los datos del viaje a contratar: precio, destino, Kms. a recorrer. Informar los datos ingresados, el monto del descuento y el monto a pagar por el cliente.
Estructuras condicionales anidadas En una estructura condicional, tanto la alternativa verdadera como la falsa pueden presentar a su vez, otras estructuras condicionales, dando lugar a esquemas como el siguiente: En diagrama de flujo: Condicin 1 Condicin 2 A B C
En este esquema hablamos de condicionales anidados, con un condicional externo- el primero que se plantea (evala la Condicin1) - y condicionales internos (en este caso, aparece uno slo que evala la Condicin2). Este esquema puede complicarse, si en A, B, y/o C planteamos otros condicionales internos, pero debe tenerse en cuenta que cada anidado finaliza antes del condicional anidante, quedando completamente encerrado en el condicional mayor que lo abarca. Ejemplo 3: Una compaa de turismo ha definido una poltica de promocin de sus empresa para lo cual ha fijado descuentos para sus clientes en funcin de los viajes anteriores realizados. El valor del descuento es del 30% para aquellos clientes que, considerando los viajes realizados en el ltimo ao y el que desean realizar, han recorrido ms de 3500 Kms. , del 15 % lsi han sumado ms de 1500 Kms., del 5% para aquellos que han superado los 500 kms.. Se desea realizar un algoritmo que calcule el importe a pagar por un cliente, si se ingresa su nombre y apellido, el total de Kms. recorridos hasta el momento, y los datos del viaje a contratar: precio, destino, Kms. a recorrer. Informar los datos ingresados, el monto del descuento y el monto a pagar por el cliente. Ambiente: Variable NYA TACUM PRECIO KMS DEST TOTAL DESC IMP X X X X X X X Num. Carac. X Lg. Clase Simple Simple Simple Simple Simple Simple Simple Simple Significado Nombre y Apellido del Cliente Kilmetros acumulados hasta la fecha Precio del viaje Kms. a recorrer Destino del Viaje Kilmetros totales includos los del viaje actual Descuento a realizar Importe Total
TURISMO NYA, TOTACUM, PRECIO, DEST, KMS TOTAL := TOTACUM + KMS TOTAL > 3500 DESC := PRECIO * 0.3 TOTAL > 2000
IMP : = PRECIO - DESC Cliente:, NYA, Kms.acumulados:, TOTACUM Datos del viaje: $, PRECIO, KMS, DEST Descuento a realizar:, DESC, Importe:, IMP
Fin
b. ESTRUCTURA DE SELECCIN MLTIPLE Esta estructura es una generalizacin de la estructura condicional y brinda la posibilidad de elegir entre ms de dos alternativas de acuerdo al valor de una variable de control numrica, previamente fijado. En un diagrama de flujo se representa de la siguiente manera: donde E es la variable de control, numrica, que toma todos los valores enteros positivos, acotados dentro de un rango preestablecido, generalmente N Otros de 1 a N. R A B A U A En presencia de esta estructura el procesador deber: observar el valor de la variable E decidir el camino a ejecutar de acuerdo al valor de E: Si E toma el valor 1, realizar la accin A Si E toma el valor 2, ejecutar la accin B y as sucesivamente para cada uno de los valores posibles de E que se hayan indicado. Si E toma valores fuera del rango 1 a N, deber ejecutar la accin U, indicada en "otros". en todos los casos, ejecutada la accin asociada, deber salir de la estrucutra y continuar con la accin siguiente especificada despus del punto. A, B, ... U representan una accin elemental. La estructura de decisin mltiple, mantiene las caractersticas vistas en las anteriores, de tener un nico punto de entrada y un nico punto de salida. La sintaxis equivalente en pseudocdigo es la siguiente:
E 1 A 2 .... .
SEGUN E HACER 1: A 2: B . . . . n: R DEOTROMODO: U FINSEGUN El comienzo y el fin de la estructura estn identificados por las palabras claves SEGN y FINSEGN, respectivamente. Ejecutada la accin asociada al valor de la variable E, el ejecutante finaliza la estructura y contina con la accin siguiente a la palabra clave FinSegn. Puede suceder que para alguno de los caminos indicados se deba ejecutar ms de una accin. En este caso en el diagrama de flujo se graficarn las acciones a realizar:
E 1 A B A 2 .... . N Otros R A D R A
C A
U A
pseudocdigo,
la
SEGUN E HACER 1: COMENZAR A; C FINCOM 2: B . . . . n: COMENZAR R; D FINCOM DEOTROMODO: U FINSEGUN Observacin: no se coloca punto y coma (;): en la accin que precede a la estructura de desicin mltiple despus de la palabra clave FINSEGUN
en la accin que precede a la palabra clave FINSEGUN y a cada uno de los valores que puede tomar la variable de control Otros formatos de la estructura de seleccin mltiple: a) Si cuando la variable de control toma valores mayores a los especificados no existe accin a realizar, esta estructura permite omitir la rama correspondiente a "otros" ( o DEOTROMODO en el pseudocdigo). Esta alternativa nos queda:
E 1 A B A 2 .... . N
R U A
b) Cuando para distintos valores de la variable de control se deban ejecutar la/s misma/s accin/es, la estructura permite agrupar dichos valores indicando el camino de accines a realizar, por nica vez. En el diagrama nos queda: En el pseudocdigo: SEGUN E HACER E 1,2 ,3 4 ......... N Otro 1, 2, 3: A 4: B A B R T n: R DEOTROMODO: T FINSEGUN En este caso se consider que para los valores de E igual a 1, 2 o 3 se debe ejecutar la accin A.
Ejemplo 4: Se desea calcular el sueldo de un empleado, conociendo como datos su legajo, nombre y apellido, categora (1, 2, 3, o 4) y sueldo bsico. Se le paga adems, una bonificacin que depende de la categora. Para la categora 1 y 3, la bonificacin es del 30 % del sueldo bsico, para la categora 2, del 20 % y para la categora 4, del 15 %. Informar legajo, sueldo bsico, bonificacin y sueldo a cobrar. (en el dato categora, slo pueden venir los valores indicados). Ambiente: Variable LEG NYA CAT SB BON TOT Algoritmo: a) Pseudocdigo PROCESO SUELDO LEER LEG, NYA, CAT, SB SEGUN CAT HACER 1, 3: BON := 0.30 * SB 2: BON := 0.20 * SB 4: BON := 0.15 * SB FINSEGUN TOT := SB + BON; ESCRIBIR LEG, SB, BON; ESCRIBIR 'Sueldo a cobrar:', TOT FINPROCESO NOTA: En el ejemplo las acciones a realizar para 2 valores de la variable CAT, son las mismas. En estos casos, es posible agrupar dichos valores e indicar una nica vez las acciones a realizar. X X X X Num. X X Carac. Lg. Clase Simple Simple Simple Simple Simple Simple Significado Legajo del empleado Nombre y apellido del empleado Categora del empleado Sueldo bsico del empleado Bonificacin que cobra Sueldo neto a cobrar
b) En diagrama
BON : = 0.2 * SB
FIN
4. Estructuras Iterativas
Analizaremos ahora las diferentes formas de plantear, en la construccin de algoritmos, la repeticin de la ejecucin de una o varias acciones, a travs de las estructuras de Iteracin. Las estructuras de iteracin son aquellas que nos permiten ejecutar una accin o un conjunto de acciones varias veces, dependiendo de una condicin. En la solucin de problemas computacionales, se presentan casos en los que no se conoce de antemano la cantidad de veces que se quiere repetir un conjunto de acciones, en otros, ese nmero de repeticiones es conocido. Definiremos estructuras algortmicas que nos permitan describir ambas situaciones. Dentro de las estructuras de iteracin, veremos tres esquemas: Mientras Repetir Para
ESTRUCTURA MIENTRAS
En diagrama, esta estructura se representa como:
condicin
V A
donde condicin puede ser una variable o expresin lgica y A representa cualquier accin primitiva o conjunto de estructuras, llamado rango del ciclo. Como en las estructuras vistas anteriormente - secuencia y seleccin - la iteracin se considera una unidad, con un slo punto de entrada y un slo punto de salida. Cuando el procesador encuentra esta estructura deber: Observar la condicin
Si la condicin es V
ejecutar A
Entre el conjunto de acciones de A, deber existir una accin que permita modificar,
en determinado momento, indefinidamente. su valor de verdad; sino el bloque A se repetir
Ejemplo 1: Una compaa de turismo ha definido una poltica de promocin de sus empresa para lo cual ha fijado descuentos para sus clientes en funcin de los viajes anteriores realizados. El valor del descuento es del 20% para aquellos clientes que, considerando los viajes realizados en el ltimo ao y el que desean realizar, han recorrido ms de 3000 Kms. y del 5% para aquellos que no han alcanzado dicha cifra. Se desea realizar un algoritmo que calcule la recaudacin de la compaa en un da. Para ello, por cada cliente se ingresa su nombre y apellido , el total de Kms. recorridos hasta el momento, y los datos del viaje a contratar: precio, destino, Kms. a recorrer. El fin de datos se produce al ingresar como nombre y apellido un valor ZZZ `
Para cada cliente informar los datos ingresados, el monto del descuento y el monto a pagar. Informar adems el total recaudado y el total de descuentos realizados por la Compaa, con leyendas alusivas. Ambiente:
Num
Carac. Lg X
Significado Nombre y Apellido del Cliente Kms. acumulados hasta la fecha Precio del viaje Kms. a recorrer Destino del Viaje Kms.Tot. includos los del viaje actual Descuento a realizar Importe a Pagar Total de Decuentos Total recaudado por la Compaa
X X X X X X X
TOTDES X TOTIMP X
Algoritmo- En Diagrama
Turismo
tdes:=0
Totimp:=0
NyA
total:=tacum + kms
desc:= precio*0.20
desc:precio*0.05
NyA
Seguimiento a) Datos: Juan Perez, 3100, 350, Misiones, 800 Jos Diaz, 300, 500, Mendoza, 956 ZZZ
NYA
TACUM
PRECIO KMS
DEST
TOTAL
DESC
IMP
TOTDES TOTIMP
Juan Perez
3100
350
800
Mision es
3900
70
289 0 70
0 299
500
956
Mendo 1256 za
25
475 95
774
Acciones de escritura Cliente: Juan Perez Acumulados: 3100 Datos del viaje: $350 Misiones 800 Kms.
956 Kms.
b) Datos:
ZZZ
NYA
TACUM
PRECIO
KMS
DEST
TOTAL
DESC
IMP
TOTDES
TOTIMP
0 ZZZ
Obsevacin: Debemos notar que en este ejemplo se desconoce a priori la cantidad de veces que se repite el proceso. Sin embargo, el mismo algoritmo puede utilizarse para el caso de `ningn cliente ( ejemplo b) , para un solo cliente, para 2 (ejemplo a) o para ms.
ESTRATEGIA
En la unidad 1, definimos ESTRATEGIA y ubicamos a la Definicin de una estrategia como una etapa dentro de la Resolucin de problemas, que debe realizarse previa a la Definicin de algoritmos. Comenzaremos a aplicar estos conceptos y los vistos en esa unidad referidos a diseo descendente, en la resolucin de problemas que se nos plantean. Ejemplo 2: Una compaa paga a cada uno de sus vendedores una bonificacin anual basada en el sueldo del vendedor y en su total de ventas durante el ao. El valor de la bonificacin es del 3 % del total de las ventas si las ventas son inferiores a 4 veces el sueldo del vendedor, o del 5 % si son mayores o iguales a ese monto. Realizar un algoritmo que ingrese por cada vendedor el nombre y apellido, el sueldo y el total de ventas. El fin de datos se produce al ingresar como nombre y apellido 'ZZZZ'. Para cada empleado informar el nombre y apellido y la bonificacin correspondiente, y adems informar el total que debe pagar la compaa en concepto de bonificaciones, con leyenda indicativa. Para resolver este problema, luego de realizar el anlisis del mismo, debemos plantear la estrategia, definiendo las etapas que deben seguirse para arribar a la solucin del problema, indicando QU debe hacerse y no el CMO.
Compaa
Inicializar Acumulador
Vendedor
Determinar Bonificacin
Acumular Bonificacin
Calcular
Bonif.
Calcular
Bonif.
Notacin:
Representa un proceso iterativo. Debajo de l pueden graficarse los mdulos que forman el ciclo.
cuya
ejecucin depender
de una
ESTRUCTURA REPETIR
En diagrama la estructura se grafica de la siguiente manera:
condicin
V
donde condicin puede ser una variable o expresin lgica y A representa cualquier accin primitiva o conjunto de estructuras, de la misma manera que en el esquema anterior. Esta estructura plantea la ejecucin del bloque A, reiteradamente, hasta que se cumpla la condicin. En presencia de este esquema, el procesador deber: ejecutar el bloque A Observar la condicin
Si la condicin es F
ejecutar A
Observamos que la condicin es evaluada despus de cada ejecucin del bloque A, por lo tanto ste ser ejecutado al menos una vez. La diferencia entre la estructura Mientras y sta, reside en el punto de evaluacin de la condicin. Esto hace que en la estructura Mientras el bloque A pueda ser ejecutado desde 0 a n veces, mientras que en el Repetir desde 1 a n veces.
Tal como en el caso anterior, esta estructura es considerada como una unidad, con un nico punto de entrada y un nico punto de salida. Ejemplo 3: Una compaa de turismo ha definido una poltica de promocin de su empresa para lo cual ha fijado descuentos para sus clientes en funcin de los viajes anteriores realizados. El valor del descuento es del 20% para aquellos clientes que, considerando los viajes realizados en el ltimo ao y el que desean realizar, han recorrido ms de 3000 Kms. y del 5% para aquellos que no han alcanzado dicha cifra. Se desea definir un algoritmo que calcule la recaudacin diaria de la compaa para sus N clientes. Para ello, por cada cliente se ingresa su nombre y apellido, el total de Kms. recorridos hasta el momento, y los datos del viaje a contratar: precio, destino, Kms. a recorrer. Para cada cliente informar los datos ingresados, el monto del descuento y el monto a pagar. Informar adems el total recaudado y el total de descuentos efectuados por la Compaa, con leyendas alusivas. El valor N se ingresa como primer dato.
Ambiente:
Significado Cantidad de Clientes Nombre y Apellido del Cliente Kms. acumulados hasta la fecha Precio del viaje Kms. a recorrer Destino del Viaje
X X X X
Kms.Tot. includos los del viaje actual Descuento a realizar Importe a Pagar Total de Decuentos Total recaudado por la Compaa Contador de Clientes
TOTIMP X CONT X
Algoritmo - En Diagrama
Seguimiento Datos: 2, Juan Perez, 3100, 350, Misiones, 800 Jos Diaz, 300, 500, Mendoza, 956
KMS DEST
CONT
Jua n Pere z
3100
350
800
Misione s
3900
70
289
70
299
Jos Diaz
300
500
956
Mendoz a
1256
25
475
95
774
Vemos en este ejemplo , que conocemos de antemano la cantidad de clientes a procesar a travs de la variable N.
Turismo
tdes:=0
Totimp:=0
cont:= 0
total:=tacum + kms
desc:= precio*0.20
desc:precio*0.05
cont:= cont + 1
ESTRUCTURA PARA
La estructura de repeticin llamada PARA nos permite realizar un conjunto de acciones un nmero determinado de veces. Formato general
Accin 1
Accin 2
V VI VF P
Accin 3
Accin n
Donde: V : es una variable numrica llamada variable de control VI: es variable o constante numrica, es el valor inicial que toma V VF: variable o constante numrica, es el valor final que toma V P : variable o constante numrica, es el paso, el valor de P puede ser positivo o negativo pero no puede ser cero. A diferencia de las estructuras REPETIR y MIENTRAS, en esta estructura iterativa el procesador tiene a su cargo la variacin de la variable de control ya que se incrementa su valor automticamente de acuerdo a P, hasta llegar a VF. El procesador ejecutar las acciones en el siguiente orden:
1. 2. 3. 4.
A la variable V le asigna el valor de VI. Ejecuta las acciones previstas (accin 1 hasta accin n). Incrementa la variable V sumndole P. Evala si el valor de la variable V de control es menor o igual a VF en ese caso contina a partir de 2. con la ejecucin del algoritmo.
Accin 1
Accin 2 VI
V VF
Accin 3
Accin n
Observaciones: 1- Cuando P > 0 el valor de VF debe ser mayor o igual a VI. 2- Cuando P < 0 el valor de VF debe ser menor o igual a VI 3- Las acciones 1 a n se ejecutan siempre al menos una vez
Ejemplo 4: informar los primeros veinte nmeros pares, a partir del nmero 2.
Pares
Nro
Nro 2 40 2
Finproceso
Vamos a resolver el Ejemplo 3. utilizando la estructura Para. El contador cont que lleva el control del nmero de iteraciones, ser la variable de control de la estructura Para. Observar el Diagrama que se encuentra en la siguiente pgina.
Turismo
tdes:=0
Totimp:=0
total:=tacum + kms
desc:= precio*0.20
Cliente:, NyA, Acumulados:, tacum Datos del viaje : $, precio, kms, Kms, dest
CICLOS ANIDADOS
En el diseo de algoritmos, es comn la utilizacin de estructuras lgicas de control complejas, las que se basan en la combinacin de estructuras bsicas. As vimos, en las estructuras de decisin que era posible formar condicionales anidados, es decir incluir dentro de una estructura de decisin otra estructura de decisin, siempre que el condicional interno est totalmente comprendido por el condicional externo. De la misma manera pueden presentarse ciclos anidados, es decir, estructuras de iteracin incluidas dentro de otras siguiendo las mismas reglas: la estructura interna debe estar totalmente incluida en la estructura externa. Veamos algunos ejemplos: a.-)
El diagrama representa una seleccin en base a una condicin Y. Cuando sta es verdadera se ejecutan las acciones A, B y luego finaliza la estructura. cuando no se cumple la condicin se ejecuta la accin C, y luego finaliza la estructura.
b)
Y V A M B
F F
El diagrama plantea una seleccin en base a la condicin Y. Cuando Y es verdadera, se presenta el caso dado en a). Cuando Y es falsa, se ingresa en una estructura de seleccin, que depende de la condicin Q. Se evala Q, y si Q es verdadera se ejecuta la accin M, se va al fin de la estructura de seleccin de Q, se ejecuta W y se finaliza la estructura de seleccin de Y. Si Q es falsa, se ejecutan las acciones R y S, se va al fin de la estructura que depende de Q, se ejecuta W, y se finaliza la estructura de seleccin de Y. c)
P V V Q F
Este ejemplo presenta una iteracin con la condicin lgica P. El bloque de accin que se debe ejecutar cuando P es verdadero, est formado por una estructura de seleccin regido por la condicin Q. d)
V R
F F V
S Z T
El diagrama plantea una seleccin que depende de la condicin lgica P. Si P es verdadera, se ejecuta una secuencia de acciones: R, S, T. Si P es falsa, se ejecuta una iteracin regida por Q e)
Z V V V B X F
El diagrama plantea una iteracin que depende de la condicin lgica Z. Las acciones que se deben ejecutar para Z verdadera, plantean una seleccin que depende de X, a su vez si sta es verdadera, plantea una seleccin regida por Y. Si X es falsa se ejecuta una accin A. f)
B M C D F 1 N
X V
Se plantea una iteracin con una estructura PARA, que ejecuta las acciones A y B. Luego comienza una estructura REPETIR, que itera las acciones C y D mientras la condicin X es falsa. Cuando X es verdadera, termina el Repetir y se vuelve a la accin A para continuar con la siguiente iteracin del PARA, hasta que M llega al valor N.