1 Unidad 1: Algoritmos 1.1 Introduccin Constantemente el hombre se enfrenta a innumerables problemas que debe resolver. Muchas soluciones las logra apelando a lo aprendido con su experiencia que con el correr del tiempo ha logrado internalizar. Para otras necesita el apoyo de herramientas aportadas por de diversas ramas de la tecnologa, siendo la computadora una de las de mayor Resulta complicado expresar instrucciones en el lenguaje binario de la mquina, mediante ceros y unos, por lo que fue necesario generar un canal de comunicacin hombre-mquina, que permitiera a sta interpretar nuestras solicitudes y a nosotros comprender sus resultados y mensajes. de esta manera los lenguajes de programacin. La computadora no puede resolver nada sin que el hombre determine la forma, y recursos necesarios para hacerlo. Es claro, que dar respuesta a un problema exige conocimiento, reflexin, razonamiento lgico y alguna dosis de ingenio y sagacidad. La experiencia indica que aprender un lenguaje de programacin no resulta una tarea complicada, lo complejo es encontrar el camino adecuado para la resolucin de la problemtica planteada. Algunas personas aplican, generalmente de forma inconsciente, una serie de mtodos y mecanismos que suelen resultar adecuados para abordar problemas. Estas operaciones mentales se conocen como procesos heursticos. Una heurstica es una regla prctica basada en la experiencia, sobre la cual no existe garanta de llegar a una solucin. Una persona puede aprender estrategias que aumenten su capacidad para resolver problemas, que de otra manera le hubieran resultado difciles. Una estrategia es un mtodo general, una gua que puede aplicarse para hallar la resolucin de muchas clases de problemas. Existen diferentes estrategias para enfrentar la resolucin de un problema. Este captulo comienza con algunas estrategias para resolver problemas utilizando computadoras, para lo cual se emplea un seudo-lenguaje, que no es interpretado por ellas. Este seudo-lenguaje llamado seudocdigo, tiene la caracterstica de tener una sintaxis sencilla que resulta familiar al hombre. Esto tiene dos ventajas visibles, por un lado permite a quien intenta resolver un problema centrar su atencin en su resolucin sin preocuparse por reglas rigurosas, y por otro la posibilidad de codificar los algoritmos construidos en cualquier lenguaje de programacin. Se analizan adems los tipos de datos y estructuras de control que permitirn expresar las rdenes adecuadas para realizar luego dicha codificacin.
1.2 Qu es un Problema? Un problema es un desafo intelectual, ya que para llegar a una solucin se deben desarrollar actitudes, hbitos y formas de pensamiento; se requiere aplicar y vincular conocimientos previos, probablemente de reas diferentes, buscando nuevas relaciones. Es importante definir qu se entiende por problema, considerando que esta palabra es usada en contextos diferentes y con matices diversos. Etimolgicamente, la palabra problema deriva del griego proballein y significa algo lanzado hacia delante. Un problema es un asunto o un conjunto de cuestiones que se plantean para ser resueltas. El diccionario de la Real Academia Espaola da cinco acepciones diferentes para la palabra problema, pero la ms adecuada para lo que se tratar en este documento es: Planteamiento de una situacin cuya respuesta desconocida debe obtenerse a travs de mtodos cientficos. Otras definiciones son: "Tener un problema significa buscar, conscientemente, alguna accin apropiada para alcanzar o lograr el propsito claramente concebido; pero no inmediatamente alcanzable. Resolver un problema significa encontrar tal accin." (Polya, 1965) "...es una situacin en la cual un individuo acta con el propsito de alcanzar una meta utilizando para ello una estrategia particular " (Chi y Glaser, 1983) En este ltimo caso, lograr una meta significa alcanzar una solucin. Resolver el problema significa realizar actividades que operen sobre un estado inicial para lograr la solucin. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 2 En general se habla de un problema, cuando se plantea una situacin cuya solucin representa un obstculo, no es evidente. En los problemas se pueden distinguir cuatro componentes (Mayer, 1983): Meta: lo que se desea lograr. Datos: informacin disponible para comenzar a analizar la situacin problemtica. Esto es, el conjunto de elementos que representa el conocimiento relacionado con el problema. Restricciones: factores que limitan la va para llegar a la solucin. Mtodos: se refieren a los procedimientos utilizados para resolver el problema.
Existen problemas de distinta naturaleza: matemticos, qumicos, filosficos, etc. La resolucin de un problema requiere aplicar y vincular conocimientos previos, buscando nuevas relaciones. En este documento, se analizarn problemas cuyas soluciones se deben obtener utilizando una serie de rdenes que se introducen a la computadora para que sta las ejecute.
1.3 Pautas a tener en cuenta en la resolucin de Problemas Buscar la solucin de problemas es una tarea difcil de sistematizar, puede pensarse como un proceso de bsqueda en un espacio de soluciones potenciales, y para ello se pueden tener en cuenta ciertas pautas para facilitarla. As, George Polya, considerado el padre de las Estrategias para la Solucin de Problemas fue un matemtico hngaro cuyos aportes incluyen documentos y libros que promueven un acercamiento al conocimiento y desarrollo de estrategias en la solucin de problemas. Su famoso libro Cmo Plantear y Resolver Problemas, introduce su mtodo de cuatro pasos y estrategias especficas tiles en la solucin de problemas. Los cuatro pasos propuestos por Polya son los siguientes: 1. Entender el problema. 2. Configurar un plan. 3. Ejecutar el plan. 4. Mirar hacia atrs (verificar procedimientos y comprobar resultados) En base a esta propuesta se pueden considerar las siguientes fases para resolver problemas:
Fase Objetivo Interpretacin del problema Ayudan a la comprensin del problema Representacin del problema Planificacin Permiten explorar soluciones y seleccionar la que se considere ms adecuada Ejecucin del plan Verificacin de pasos y Comprobacin de resultados Permite validar la solucin obtenida
Figura 1.1 Componentes de un Problema Datos + Restri - cciones
Meta
Mtodos
para alcanzar
utilizando
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 3 Estas fases no necesariamente se siguen en forma estrictamente secuencial. Muchas veces, se elige una estrategia, que al aplicarla no resulta adecuada o por lo menos no es suficiente para alcanzar la solucin. Entonces, en este proceso de resolucin, conviene retroceder y volver a empezar.
A continuacin se describen brevemente estas fases. 1.3.1 Interpretacin del problema El primer inconveniente que se presenta cuando se debe resolver un problema es su interpretacin. El formato, que en general se utiliza para enunciar un problema son textos narrativos y expositivos. La comprensin de estos textos requiere establecer una serie de relaciones, para identificar la meta, es decir lo que se desea obtener, con qu datos se cuenta, y cmo deben ser organizados dichos datos para proponer una alternativa de solucin. Salvo algunas excepciones, antes de ingresar a la universidad se acostumbra resolver problemas clsicos, cuyos enunciados son textos breves en los que no faltan ni sobran datos; cuya secuencia lgica responde claramente a la sucesin de operaciones que deben realizarse o con pistas u orientaciones, que facilitan la tarea para resolverlos. Sin embargo, esto no es lo que ocurre en la realidad, en la que los problemas son realmente obstculos, desafos que implican movilizar ideas que permiten encontrar un camino para resolverlos, en general su solucin no es obvia. Para resolver problemas se requiere la adquisicin de ciertas capacidades, tales como organizar la informacin, formular preguntas, identificar los datos y considerar si ellos son suficientes o es necesario obtener otros a partir de clculos intermedios, analizar la posibilidad de distintas alternativas de solucin y en este caso proponer la que se considere ptima.
En esta etapa, algunas preguntas bsicas que debiera responder quien intenta resolver un problema: Qu se debe obtener? Con que datos se cuenta? Existen restricciones?
1.3.2 Representacin del problema Una vez interpretado el problema, en muchas ocasiones es conveniente representarlo. El proceso de anlisis del mundo real que permite identificar los aspectos esenciales de un problema y sus relaciones, se denomina abstraccin. El resultado de este proceso se expresa a travs de un modelo que contempla los requerimientos del problema. Algunos mtodos que facilitan la representacin de un problema, , son las descripciones grficas y las representaciones simblicas, ya que permiten visualizar la informacin relevante contenida en su enunciado.
Descripciones Grficas: Para la resolucin de problemas lineales, que implican por ejemplo comparacin de los valores de una variable, se puede utilizar una recta, colocando los elementos en el orden que les corresponde. Para el caso de problemas en los que estn relacionadas ms de una variable, suele ser adecuado el uso de representaciones tabulares. Tambin los diagramas de Venn pueden ser de utilidad en problemas en los que se deban relacionar conjuntos o para resolver situaciones que impliquen razonamientos lgicos , los Diagramas de Flujo para representar situaciones que pueden depender de condiciones o que sean cambiantes en el tiempo, otra forma de representacin son los diagramas de Nassi Schneiderman (N-S). Los Diagramas de Flujo, tambin conocido como ordinogramas o flujogramas, utilizan una serie de smbolos, que se muestran en la siguiente figura. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 4 Smbolo Aplicacin
Lectura de Datos y Escritura de resultados
Terminador: Comienzo o fin de una tarea
Procesos
Decisin
Por su parte, la representacin que usan los diagramas de Nassi-Schneiderman (N-S), tambin conocido como diagrama de Chapin o estructogramas, es una tcnica de especificacin de algoritmos que combina la descripcin textual, propia del pseudocdigo, con la representacin grfica del diagrama de flujo. Los smbolos utilizados son:
Las representaciones simblicas son tiles para el caso de problemas matemticos. Consiste en encontrar la ecuacin que represente una determinada situacin, cuya solucin contribuye a alcanzar el objetivo propuesto.
Los siguientes son ejemplos de problemas muy sencillos, que pueden ser fcilmente representados utilizando algunas de las herramientas enunciadas. Ejemplo 1: En 1959 la Argentina, junto con otros once pases, firm el Tratado Antrtico, que garantiza la ocupacin pacfica de la Antrtida y su no militarizacin, prohbe las explosi ones nucleares y el almacenamiento de desechos radiactivos. Con este espritu, la base Argentina Vicecomodoro Marambio, fundada el 29 de octubre de 1969, trabaja contra la contaminacin ambiental en todos sus aspectos, colabora con la actividad de los cientficos y controla el centro Meteorolgico Antrtico. Esta base se encuentra en el punto ms alto de la isla Marambio, a 200 m sobre el nivel del mar. En invierno cuando la temperatura es menor al promedio de -18C, el mar se congela hasta una profundidad de 4m. Figura 1.2 Smbolos utilizados en Diagramas de Flujo
SI - FinSi Segn - FinSegun Secuencia Para-FinPara Mientras- FinMientras Hacer - Mientras Figura 1.3 Smbolos utilizados en Diagramas de Chapin (N-S) entonces sino condicin variable condicin condicin v1 v2 ... vn Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 5 La temperatura ms clida registrada hasta 1993 en la Antrtida fue de 14 C en la base Argentina Esperanza, y la ms fra fue de 89 C bajo cero en la estacin rusa Vostok. Se est elaborando un informe en el cual se debe indicar la distancia entre la base Marambio y el mar no congelado en invierno y la diferencia entre la temperatura promedio y las temperaturas extremas 1
Para resolver este problema, respondamos las tres preguntas bsicas que nos permiten interpretarlo: - Qu se debe obtener?: 1. distancia entre la base Marambio y el mar no congelado en invierno y 2. diferencia entre la temperatura promedio y las temperaturas extremas - Con que datos se cuenta? Para calcular la distancia entre la base Marambio y el mar no congelado en invierno: - Ubicacin de Base Marambio: 200 m sobre el nivel del mar. - El mar se congela hasta una profundidad de 4m. Para calcular la diferencia entre la temperatura promedio y las temperaturas extremas: - Temperatura ms clida - Temperatura ms fra - Temperatura promedio - Existen restricciones? No Como ambos tems consisten en la comparacin de valores de una variable, se puede utilizar una representacin lineal para cada una de las variables consideradas. Variable distancia Variable temperatura
Ejemplo 2: En el marco del Proyecto de Prevencin de Enfermedades Cardiovasculares, un investigador mdico desea medir la eficacia de un tratamiento para dejar de fumar. El tratamiento tuvo una duracin de 6 meses, y al finalizar el mismo se obtuvo una muestra de 100 pacientes que lo realizaron en distintas unidades hospitalarias de la provincia. La muestra ha sido organizada, teniendo en cuenta la edad de los pacientes, en tres categoras: Categora 1: pacientes menores de 40 aos. Categora 2: entre 41 y 55 aos, con gran riesgo de sufrir insuficiencias cardacas. Categora 3: pacientes mayores de 55 aos. De los 60 encuestados correspondientes a la segunda categora, 20 no pudieron dejar de fumar. En cambio de los 30 pacientes encuestados de la categora 1 slo el 40% sigue fumando. Si en total dejaron de fumar 63 personas, de las cuales 5 tienen ms de 55 aos, el investigador necesita informar, el porcentaje de pacientes para los que el tratamiento tuvo xito en cada una de las categoras de anlisis.
1 Extrado de Matemtica. Santillana EGB 8. pg 25 Nivel del mar
Base Marambio
100m
200m
-4m
0 C Temperatura Promedio
50 C
14 C
-18 C
-50 C
-89 C
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 6 Los cuestionamientos seran para este caso: - Qu se debe obtener? Porcentaje de pacientes para los que el tratamiento tuvo xito en cada una de las categoras de anlisis - Con que datos se cuenta? Una representacin adecuada de de los datos para este tipo de problema, en el que se manejan dos variables, edad y resultado del tratamiento (xito, fracaso), es una tabla de doble entrada, como la siguiente: Resultados Tratam. Edad xito Fracaso Total Menores de 40 ? 12 30 41-55 ? 20 60 Mayores de 55 5 ? ? Total 63 ? 100 Los resultados se pueden obtener ahora en forma inmediata.
Ejemplo 3: En los ltimos aos, el rendimiento escolar de los alumnos del nivel medio de la provincia de San Juan ha sido bajo, y en general los docentes lo atribuyen a la falta de contencin en sus hogares. Para contrastar esta hiptesis, el Ministerio de Educacin ha solicitado a su Departamento de Investigacin Educativa, un estudio para determinar si la falta de rendimiento est relacionada con problemas de los alumnos en el mbito familiar. Se tom una muestra de 2000 alumnos, en la que estaban representados todos los colegios de la provincia. Se consensu en considerar que un alumno tiene problemas de rendimiento, si no alcanz los objetivos en ms de 3 materias de la currcula en el ltimo ao. Los alumnos fueron seleccionados en forma aleatoria en los distintos establecimientos, siendo las fuentes de informacin el boletn de calificaciones, y la ficha de opinin del asesor pedaggico del colegio, respecto de la situacin familiar de los alumnos seleccionados. De la muestra obtenida, 1200 alumnos tienen problemas en su rendimiento escolar pero 400 de ellos no tienen problemas familiares, y adems se ha contabilizado un total de 900 alumnos con problemas en sus hogares El ministro debe confeccionar un informe para ser enviado a los directivos y tomar en forma conjunta las acciones pertinentes, que contenga: - Porcentaje de alumnos encuestados que no tienen ninguno de los problemas analizados. - Porcentaje de alumnos que tienen problemas de rendimiento y familiares - Porcentaje de alumnos que sin tener problemas en sus hogares presentan dificultades en sus estudios Se puede representar el total de los alumnos encuestados por medio del conjunto T, con el conjunto R a los alumnos con problemas de rendimiento y con F al conjunto de los alumnos con problemas familiares. Teniendo en cuenta que los conjuntos de los alumnos con problemas no son disjuntos, el uso de diagramas de Venn puede ayudar a representar la situacin problemtica y a los asesores del ministro a proporcionar los valores solicitados.
F
800
400
100
700
R
T
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 7 Ejemplo 4: La profesora de fsica de un curso de EGB, quiere realizar una experiencia para lo cual ha solicitado a sus alumnos recortar en una cartulina un tringulo rectngulo, cuyos medidas sean tres nmeros enteros consecutivos. Cunto debe medir cada lado del tringulo? Para resolver esta situacin problemtica los alumnos debern encontrar la ecuacin que represente la situacin solicitada por la profesora, esto es, debern obtener una representacin simblica. Si se nombra con x, y, z a cada uno de los lados:
Y teniendo en cuenta el teorema de Pitgoras, se obtiene la expresin que representa la situacin planteada:
Resolviendo esta ecuacin se encontrar un valor para el lado x, a partir del cual se encontrarn los otros dos lados, teniendo en cuenta las condiciones iniciales del problema.
1.3.3 Planificacin En esta fase se debe seleccionar la estrategia ms adecuada que permita a partir de los datos, encontrar la respuesta al problema. Las estrategias son procedimientos que guan a quien debe resolver el problema, en la eleccin de las tcnicas, conceptos y procesos que debe poner en accin para obtener una solucin. En esta etapa el alumno debe plantear hiptesis, determinar si los datos son suficientes o si necesita calcular otros para resolver el problema. Las estrategias para la resolucin de problemas incluyen, entre otros, mtodos heursticos y algoritmos. Los mtodos heursticos son estrategias generales de resolucin y reglas de decisin, utilizadas para solucionar problemas basados en la experiencia previa, con problemas similares. Mediante un proceso heurstico se puede llegar a la solucin ptima, pero tambin puede conducir a una solucin no muy buena e incluso a ninguna solucin. Algunos autores indican 2 que los procedimientos heursticos, son acciones que comportan un cierto grado de variabilidad y su ejecucin no garantiza la obtencin de un resultado ptimo. Los mtodos heursticos, que se basan en un conocimiento intuitivo sobre un determinado problema, pueden variar en el grado de generalidad. Algunos son muy generales y se pueden aplicar a gran cantidad de dominios, otros pueden ser ms especficos y se limitan a un rea particular de conocimiento. Los algoritmos, a diferencia de los procedimientos heursticos, consisten de un conjunto de pasos, cuya ejecucin correcta garantiza una solucin a un problema. Es importante, destacar que el diseo de algoritmos no solo requiere conocer metodologas de representacin, sino tambin desarrollar el pensamiento lgico para generar soluciones La planificacin para resolver el problema: Determinar si un nmero es par consistira en aplicar procesos que permitan realizar la evaluacin correspondiente. Una representacin sencilla de los pasos que conforman un algoritmo, son los diagramas de Chapin o N-S que por su combinacin de texto e imagen son fciles de interpretar. Estos diagramas constituyen una herramienta que favorece la programacin estructurada.
2 Enseando a Aprender. Lisette Poggioli.http://www.fpolar.org.ve/poggioli/poggio05.htm z 2 = x 2 + y 2 (x+2) 2 = (x) 2 +(x+1) 2 x 2 +4.x+ 4 = x 2 + x 2 + 2.x+1 x 2 - 2.x 3= 0
Siendo y= x+1 z= x+2
z
x
y
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 8 El diagrama siguiente representa la solucin del problema utilizando un algoritmo posible de resolucin: Inicio entero:num Leer num (num resto 2)==0 SI NO Escribir Nmero par Escribir Numero impar Fin Si se retoma el ejemplo 4 enunciado, la planificacin consistira en aplicar el algoritmo que permite resolver una ecuacin de segundo grado, que como se sabe, si tiene solucin, no es nica. Esto lleva a tener que decidir si ambas son soluciones de la situacin planteada o debe seleccionarse la que corresponda. El siguiente es un esquema grfico de las acciones que se deben realizar para resolver la ecuacin de segundo grado de la forma ax 2 + b.x +c= 0 y determinar la longitud de los lados del tringulo rectngulo.
1.3.4 Ejecucin del plan En esta fase se aplica la estrategia planificada, analizando si los distintos pasos intermedios que se realizan conducen realmente al objetivo propuesto, tratando de determinar incluso si el camino seleccionado es el ms adecuado. Para el caso del ejemplo que se viene considerando, el valor obtenido para el discriminante es 16: D = (-2) 2 - 4*1*(-3)= 16 >0, esto implica que la ecuacin tiene dos races distintas 3 y 1. Dos races reales distintas
Seleccionar raz solucin
Comienzo
Calcular discriminante D = b 2 - 4*a*c
V
D > 0
Leer coefic.a,b,c
Sin solucin real
Races coincidentes
Calcular lados del tringulo
Fin
F
V
D< 0
F
Mostrar resultado: Problema sin solucin
Mostrar resultado de ecuacin
Mostrar valores de los lados
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 9 De esta dos races, y atendiendo al contexto del problema, se selecciona el nmero positivo, obtenindose como valores de los lados del tringulo 3 , 4 y 5 cm respectivamente.
1.3.5 Verificacin de pasos y comprobacin de resultados En general esta fase conduce a una mejor comprensin del problema o a encontrar soluciones alternativas. Para el caso del ejemplo, se verifica si se cumplen las condiciones iniciales del problema esto es, los lados deben ser consecutivos y corresponder a un tringulo rectngulo. Es evidente que son consecutivos, para determinar si corresponden a un tringulo rectngulo deben verificar el teorema de Pitgoras, 5 2 =3 2 +
4 2 . Como se observa, las fases I y II ayudan a la comprensin del problema, las fases III y IV a explorar soluciones y aplicar la que se considere ms adecuada, finalmente la fase V permite valorar la solucin obtenida.
1.4 Modelizacin de problemas del mundo real. Hasta el momento se han analizado problemas sencillos, que se pudieron resolver sin dificultad utilizando estrategias para interpretar las problemticas expresadas en enunciados precisos. Hay que tener en cuenta que, resolver un problema requiere de tiempo y esfuerzo. El proceso de resolucin puede resultar una experiencia placentera y motivadora, ya que tiene algo de descubrimiento, aumenta el conocimiento, aporta nuevos puntos de vista, y mejora las capacidades bsicas de un individuo para desenvolverse no slo en el mbito acadmico, sino tambin en la vida cotidiana. Ahora bien, los problemas que se analizarn en esta asignatura sern aquellos cuya solucin pueda ser representada a travs de algoritmos computarizables, para lo cual los conceptos analizados se adecuarn a esta situacin.
1.4.1 Etapas para la resolucin de problemas usando como herramienta la computadora. Un programador es una persona que resuelve problemas a usuarios, utilizando como herramienta una computadora. Para llegar a ser un programador eficaz se necesita aprender a resolverlos de un modo riguroso y sistemtico. De las estrategias descriptas, mtodos heursticos y algoritmos, la que se adecua es la de algoritmos. Basados en el aporte de Polya, se puede decir que la actividad de resolucin de problemas utilizando una computadora es un proceso que involucra las siguientes etapas:
Etapas resolucin de problemas utilizando computadoras Fases resolucin de problemas Objetivo Anlisis del problema Interpretacin del problema Ayudan a la comprensin del problema Representacin del problema Diseo del Algoritmo Planificacin Permiten explorar soluciones y seleccionar la que se considere ms adecuada Codificacin Compilacin y ejecucin
Ejecucin del plan Validacin Verificacin de pasos y comprobacin de resultados Permite validar la solucin obtenida Documentacin Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 10 Brevemente describiremos en que consiste cada una de ellas, si bien la propuesta de este documento es centrarse en las dos primeras etapas que conforman el objetivo de este curso: 1.4.1.1 Anlisis del problema La primera condicin al momento de resolver un problema, es contar con un enunciado preciso y claro, que no contenga ningn tipo de ambigedades. Esto es fundamental ya que la correcta resolucin de un problema viene determinada en gran medida por el planteamiento inicial, no se puede abordar una solucin mientras no se tenga claro a donde se quiere llegar. El programador, no comenzar a intentar solucin alguna hasta que no tenga claro las especificaciones y requerimientos del usuario. Un planteamiento correcto evitar perder tiempo en la implementacin de algoritmos incorrectos. 1.4.1.2 Diseo del Algoritmo En la etapa de anlisis se determina qu hacer, en la etapa de diseo se debe determinar cmo se debe hacer. El procedimiento elegido para la solucin se debe expresar como una secuencia ordenada de acciones, que el procesador deber ejecutar para obtener los resultados pretendidos. Esta secuencia de acciones expresadas en un lenguaje simblico se conoce con el nombre de Algoritmo. Inicialmente, el algoritmo se expresa en lenguaje natural, el que se usa habitualmente para comunicarse con otras personas, este seudolenguaje recibe el nombre de Seudocdigo. 1.4.1.3 Codificacin Un algoritmo es una especificacin simblica que debe traducirse a un lenguaje de programacin para que pueda ser interpretado por la computadora, obtenindose de esta manera lo que se conoce como programa fuente. El proceso de de traduccin del algoritmo a un lenguaje de programacin se conoce como codificacin. 1.4.1.4 Compilacin y ejecucin Utilizando un editor del lenguaje seleccionado, se podr depurar el programa fuente de los errores de sintaxis. Si el cdigo contiene errores debidos a que el programador no respet la sintaxis del lenguaje, es decir errores de compilacin, el compilador los detecta y especifica por medio de mensajes. El programa ejecutable se crear una vez solucionados estos errores. 1.4.1.5. Validacin La validacin permite comprobar que un programa cumple con sus especificaciones, es decir resuelve correctamente el problema para el que fue diseado. Los mtodos de validacin se pueden clasificar en dos grandes grupos: Validacin mediante pruebas Validacin mediante verificacin o Validacin formal La Validacin mediante pruebas consiste en ejecutar el programa con lotes de prueba para comprobar si los resultados obtenidos coinciden con los esperados. Los resultados anmalos debern ser analizados para detectar su causa, los cuales se eliminan en la etapa de depuracin del programa. El procedimiento de prueba-depuracin se repite hasta que no se detectan errores y se tenga confianza que el programa fue lo suficientemente probado. El problema de este tipo de verificacin es determinar si el juego de pruebas es lo suficientemente confiable. Lo ideal sera contar con el caso de pruebas perfecto que permita asegurar que el programa se ejecutar correctamente para cualquier entrada posible. Algunos autores sugieren definir juegos de prueba que aseguren, que la ejecucin del programa pase por todos los caminos posibles (juegos de prueba mnimamente perfectos), y que se ejecuten todas las instrucciones (juegos de prueba mnimamente buenos). La Validacin por verificacin consiste en demostrar formalmente que el programa es correcto. Se realiza un anlisis sin ejecutar el programa. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 11 Una vez que el programa es depurado de los errores de sintaxis, puede ocurrir que al ejecutarse no realice lo que se pretenda, que no se llegue al objetivo propuesto. El programa puede tener errores de lgica, stos pueden resultar difciles de detectar, se producen cuando el algoritmo est mal implementado y deben ser corregidos por el programador. Se debe recordar que la computadora realiza lo que se le indica, aunque estas acciones estn incorrectas. En general para la verificacin se utilizan datos vlidos representativos del problema. Si bien es imposible realizar una verificacin exhaustiva, se debe tratar de incluir algunos casos excepcionales vlidos y datos no vlidos, para los que el algoritmo debe dar una respuesta adecuada. La facilidad de verificacin y depuracin de errores de funcionamiento del programa, conducen a mejorar su calidad, este es uno de los objetivos de la ingeniera de Software. En este curso comenzaremos en las primeras unidades realizando validacin por prueba, e introduciendo conceptos de la Validacin mediante verificacin, los cuales sern formalizados en la Unidad IV. 1.4.1.6 Documentacin Consiste en agregar al programa comentarios que faciliten su comprensin, se consiguen de esta manera programas ms fciles de interpretar y mantener. Para el caso de programas de una envergadura importante, es conveniente colocar un comentario que especifique en forma general el objetivo del programa, si est dividido en partes indicar la funcin de cada una, el autor, fecha de realizacin y toda informacin que pueda resultar de inters. Estos comentarios sern de utilidad para un programador que debe utilizar un programa despus de un cierto perodo de tiempo o si el mismo debe ser utilizado por otros programadores.
En este curso nos centraremos en las dos primeras etapas. 1.5 Anlisis del problema Dada la sencillez de los problemas a resolver en este curso, la etapa correspondiente al anlisis del problema, consistir solamente de la interpretacin del enunciado a resolver. A lo largo de la carrera, en diferentes asignaturas, se estudiarn tcnicas necesarias para hacer frente a problemas de gran envergadura Como se ha dicho en numerosas expresiones en este texto, en primer lugar se debe comprender el problema planteado. Comprender un problema implica identificar claramente los resultados o salida, y los datos con que se cuenta para resolverlo. En un problema se pueden distinguir tres componentes: los datos (entrada), el o los resultados (salida), y un conjunto de reglas o restricciones que vinculan a los datos con los resultados a obtener. El anlisis de un problema comienza identificando estas componentes. Un problema se plantea por lo general mediante un enunciado, el cual se define como una secuencia finita de palabras que conforman frases, que pueden estar constituida por una o varias oraciones. En general, interpretar los enunciados de los problemas para reconocer sus componentes, es el mayor obstculo con que se enfrenta el programador al momento de encontrar el algoritmo de resolucin de un problema. Una estrategia para interpretar enunciados de problemas, podra ser 3 : - Leer con detenimiento TODO el enunciado. - Comprender claramente el significado de cada palabra y cada frase. - Poner especial atencin a los signos de puntuacin. - Identificar la salida o resultados del problema. - Identificar datos explcitos (pueden ser relevantes o irrelevantes). - Identificar datos implcitos (pueden ser relevantes o irrelevantes) y hacerlos explcitos. - Detectar imprecisiones o ambigedades antes de avanzar con la solucin.
3 Adecuacin de la estrategia propuesta por Sonia V. Rueda Alejandro J. Garca, en Programa de Ingreso 2003. Anlisis y Comprensin de Problemas.Fundamentos, Problemas Resueltos y Problemas Propuestos. UNS. Noviembre de 2002
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 12 Veamos en que consiste cada una de estas etapas. Para identificar las componentes se recomienda en un principio la lectura del enunciado del problema como un todo, sin detenerse demasiado en los detalles. Una vez que se tiene una idea global del problema, se realiza una segunda lectura determinando las partes principales del mismo, para evaluar qu se pide y con qu datos se cuenta. El problema se debe descomponer y luego recomponer, as lo manifiesta George Polya: 4
Examina usted un objeto que despierta su inters o mueve su curiosidad: una casa que tiene intencin de alquilar, un telegrama importante pero enigmtico, un objeto cuyo uso y origen le intrigan o un problema que quiere resolver. Considera el objeto como un todo, pero esa impresin quiz no es muy precisa. Un detalle le llama la atencin. Despus se concentra en otro detalle, y ms tarde, sobre otro nuevamente. Diversas combinaciones de detalles se pueden presentar y al cabo de un momento, mira de nuevo el objeto como un todo, pero lo ve de una manera diferente. Usted ha descompuesto el todo en sus diversas partes y ha recompuesto dichas partes en un todo ms o menos diferente .De esto se deduce que el enunciado debe leerse por lo menos dos veces. La primera lectura permite acercarnos al problema y conocer el contexto donde se plantea: lugar, actores, acciones. Ejemplo: Una fbrica de electrodomsticos, un supermercado posee informacin, una empresa de colectivos de larga distancia, entre otros. Una segunda lectura permite detectar qu datos son relevantes para procesar. La importancia de los datos est en funcin de las especificaciones del enunciado. Es necesario poner especial atencin a los signos de puntuacin, ya que de ellos depende el significado de cada frase. Y sobre todo, destacar que un cambio sintctico leve, puede provocar una variacin semntica fundamental. Por ejemplo la mitad de: 20 ms 4 respecto a: la mitad de 20, ms 4 o Esteban vive con Matas y estudia Programacin respecto a: Esteban vive con Matas, que estudia Programacin. Se ha hablado de datos relevantes y datos explcitos, Qu significan estos conceptos? A veces, se tiene la sensacin de que el enunciado no brinda suficientes datos. La clave, est en obtener informacin til a partir de ciertos datos que pueden estar ocultos. Otras veces, los problemas proveen muchos datos y es importante distinguir los datos relevantes de aquellos que no lo son. Los datos pueden estar expresados en forma explcita o implcita, y a su vez ser relevantes o no para un contexto determinado. Un dato est expresado en forma explcita, cuando es claramente identificable en el contexto que se usa. En cambio est implcito cuando es parte del problema aunque no se lo exprese directamente. Algunos datos no estn explcitos y deben ser calculados a partir de otros, es decir se deben reali zar inferencias a partir de datos detectados y transformarlos en explcitos. Si ahora se quiere calcular la cantidad de metros de piso cermico grantico de alto trnsito, que se necesita para una habitacin cuadrada de un departamento en la calle 25 de mayo 150 (O). La habitacin tiene 1 puerta de 85 cm de ancho, y una ventana en la pared opuesta de 1,25 metros de ancho. El ancho de la habitacin es de 3 metros. Aqu est explcito que el piso es cermico grantico de alto trnsito, que la habitacin es cuadrada y tiene 3 m de ancho, implcitamente se indica que la superficie que se necesita cubrir se calcula como lado por lado. Por otro lado, un dato es relevante cuando es necesario para obtener la solucin del problema, en caso contrario se dice que es un dato irrelevante o distractor. En el ejemplo anterior, el ancho de la habitacin es relevante. Sin embargo, el tipo de piso, la direccin del departamento, y que la habitacin tiene una puerta son datos irrelevantes. En casos de problemas sobre especificados, puede haber varios conjuntos de datos relevantes alternativos, los que llevaran contemplar distintos caminos hacia la solucin.
4 Cmo Plantear y Resolver Problemas. Polya G. pg 73
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 13 Actividad 1: Identificar los datos relevantes e irrelevantes en los siguientes enunciados: a) En las ltimas vacaciones Lucila viaj a Mar del Plata con sus amigas y quiere saber cuntas fotos sac. El ltimo rollo que compr era de 12 fotos y todava le quedan 5 fotos en la cmara. Tiene para revelar dos rollos de 36 fotos de 400 asas y 1 rollo de 24 de 100 asas. b) Tres jvenes matrimonios salieron a bailar. Una de las chicas vesta de rojo, otra de verde, y la tercera, de azul. Sus maridos vestan tambin de estos mismos colores. Ya estaban las parejas en la pista cuando Carlos, el chico de rojo casado con la chica de verde, le dijo: Te has dado cuenta Ana? Ninguno de nosotros tiene pareja vestida de su mismo color. Con esta informacin, se podr deducir de qu color viste el compaero de baile de la chica de rojo? c) Tres hombres tienen dos trabajos cada uno. El chofer se burla del msico por su pelo largo. El msico y el jardinero acostumbran a ir de pesca con Juan. El pintor le compr una botella de ginebra al asesor. El chofer est de novio con la hermana del pintor. Jorge debe al jardinero 1000 pesos. Javier venci a Jorge y al pintor jugando al tejo. Uno de ellos es peluquero y no hay dos que tengan el mismo trabajo. Qu hace cada uno?
Actividad 2: Identificar las salidas y los datos relevantes en los siguientes enunciados: a) Cuando Rogelio llega al peaje recuerda que debe informar el peso de la carga que lleva, su camin vaco pesa 2000 kg. y cargado pesa 4000 kg. b) De cuantas maneras distintas puede un empleado de una panadera ubicada en una calle cntrica, con 200 m 2 cubiertos, acomodar 600 alfajores en cajas de 6 y 12 unidades de manera que todas queden llenas.
El siguiente es un ejemplo de un problema algebraico, en cuya solucin se aplican las distintas etapas propuestas en la estrategia de anlisis de enunciados. Ejemplo 5: Un quiosquero tiene su quiosco en la esquina de Alem y Crdoba; todos los das abre a las 8 y cierra a las 22 horas. El quiosquero sabe con certeza que va a vender 350 alfajores la prxima semana y como no quiere perder ningn cliente, no puede dejar de comprar menos de esa cantidad. Antes de ir a comprar los alfajores, se pregunta cunto dinero tiene que gastar si quiere invertir la menor cantidad posible. En el supermercado, cada bolsa de 8 alfajores cuesta $3. En el mayorista, cada caja de 60 alfajores cuesta $20. En una primera lectura, el problema no parece fcil de resolver. Para llegar a una solucin se pueden usar los pasos propuestos para el anlisis del enunciado; lo que permitir resolverlo muy fcilmente. - Leer con detenimiento TODO el enunciado. - Comprender claramente el significado de cada palabra y cada frase. - Interpretar cada prrafo considerando particularmente el significado que depende de los signos de puntuacin. - Identificar la salida o resultados del problema. Cunto dinero tiene que gastar si quiere invertir la menor cantidad posible. - Identificar datos explcitos (pueden ser relevantes o irrelevantes). Se anotan todos los datos explcitos en el enunciado, y se identifican cules a nuestro criterio son relevantes para resolver la incgnita y cules no. o Tiene su quiosco en la esquina de Alem y Crdoba, (irrelevante) o Abre todos los das (irrelevante) o Abre a las 8 y cierra a las 22 horas. (irrelevante) o Necesita comprar 350 alfajores (relevante) o No puede comprar menos de 350, o perder clientes (relevante) o En el supermercado, cada bolsa de 8 alfajores cuesta $3. (relevante) o En el mayorista, cada caja de 60 alfajores cuesta $20. (relevante) Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 14 Identificar datos implcitos y hacerlos explcitos. Hay algunos otros datos que no estn en forma explcita en el enunciado, pero que se deducen rpidamente de l. o El quiosquero puede hacer sus compras en el supermercado o en un mayorista. o Debe comprar tantas bolsas o cajas para cubrir 350. o Puede comprar ms de 350 si es necesario. o En el mayorista debe comprar por cajas de 60, as que siempre comprar mltiplos de 60. Es decir comprar como mnimo 360 alfajores. o En el supermercado las bolsas son de 8 alfajores. As que slo puede comprar mltiplos de 8. Como mnimo comprar 352 alfajores. Detectar imprecisiones o ambigedades, y resolverlas antes de seguir avanzando. Una posible ambigedad es si tiene que comprar exactamente 350 alfajores. La respuesta es no, ya que tiene que comprar una cantidad que puede ser mayor. Hacer inferencias a partir de los datos detectados y hacerlos explcitos: para esto vamos haciendo preguntas sencillas que guiarn a la solucin de la incgnita. o Cuntas bolsas de supermercado necesitara comprar para tener al menos 350 alfajores? La solucin matemtica es: 350 / 8 = 43,75 bolsas, pero como no puede comprar 0,75 de bolsa, entonces necesita comprar 44 bolsas. o Cuntas cajas del mayorista necesitara comprar? Respuesta: ahora la solucin es 350 / 60 = 5.83. Por lo tanto necesitara comprar 6 cajas. o Cunto gastara en el supermercado? Respuesta: 44 x $3 = $132 o Cunto gastara en el mayorista? Respuesta: 6 x $20 = $120 Ahora, se puede dar respuesta a la incgnita planteada. Fcilmente, se ve cual es la solucin: El quiosquero invierte $120. Esta es una de las posibles alternativas de solucin, se podra tambin haber determinado el costo del alfajor por unidad y realizar un anlisis similar al anterior.
Actividad 3: Buscar la solucin a los siguientes problemas, teniendo en cuenta los pasos planteados en la estrategia para anlisis de enunciados: a) Deduzca las edades de las personas que intervienen en el siguiente dilogo. - Cul es tu edad Pedro? - Es fcil Juan, dentro de dos aos, tendr el triple que tu edad actual. - Es cierto, y dentro de cuatro aos, yo tendr la mitad de tu edad actual. - Cul es la edad de tu mam? - Tiene 45. - Cuntos aos sumamos entre los dos?
Sintetizando podemos decir que en la etapa de anlisis, algunas preguntas bsicas que debe responder quien intenta resolver un problema son: Qu se debe obtener? Con que datos se cuenta? Existen condiciones? El proceso que permite determinar en forma clara y precisa el objetivo que se desea es decir los requisitos del cliente (profesor o enunciado del problema) se llama especificacin del problema. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 15 Un problema est definido por un estado inicial o de partida. Resolver un problema requiere transformar mediante un proceso, los datos de entrada para obtener la salida.
Para representar la solucin del problema se puede utilizar alguna descripcin grfica o representacin simblica de las vistas, que nos ayude a sistematizar la informacin. En sntesis, en la etapa de anlisis se determina Qu Hacer, lo que se especifica al responder las preguntas: Qu salidas se deben generar?, Qu entradas se ofrecen para ello?
Esquemticamente: Anlisis Qu hacer? Especificacin de Salidas Especificacin de Entradas
1.6 Diseo del Algoritmo En esta etapa se debe determinar cmo se debe hacer, es decir, especificar el proceso seleccionado para resolver el problema. En este momento la pregunta adecuada es Cul es el /los mtodo(s) a usar para llegar a la solucin deseada?
Recordemos, que la secuencia ordenada de acciones que permiten expresar una posible solucin al problema, se conoce como Algoritmo.
Esquemticamente:
Diseo Cmo hacer? Especificacin de procedimientos Construccin del algoritmo
En esta fase se convierte la especificacin de requisitos establecida en la fase de anlisis en un diseo, ms o menos detallado estableciendo el comportamiento paso a paso, o la secuencia lgica de acciones capaz de resolver el problema planteado en un tiempo finito. Esto es lo que se denomina realizar un algoritmo. Distintos estilos de programadores a la hora de obtener la resolucin del problema, puede dar lugar a algoritmos diferentes pero igualmente vlidos 5
1.6.1 Especificacin de procedimientos antes de la construccin del algoritmo A continuacin se muestran algunos tipos de procesos: 1.6.1.1 Procesos Secuenciales Ejemplo 6: La mutual de los empleados de la Universidad de San Juan, ha elaborado un proyecto, a llevarse a cabo en un plazo de 6 meses, con el objeto de realizar algunas refacciones en su predio ubicado en el departamento de Pocito. En un terreno rectangular cuyas dimensiones se conocen, est construida una piscina circular de dimetro igual a la mitad del largo del terreno.
5 Criado Clavero, M Asuncin..Programacin en Lenguajes Estructurados. Captulo 1. Pag 9 Entrada
Proceso - Algoritmo Salida
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 16 Debido a algunos accidentes ocurridos en las ltimas temporadas de verano, se desea cubrir el fondo con un material especial que evite dichas contingencias. Con el mismo objetivo se colocarn dos hileras de mosaico antideslizante en el contorno de la pileta. Por otra parte, una vez finalizada la obra, se quiere parquizar nuevamente los alrededores de la piscina. Se ha solicitado al departamento construcciones de la universidad, un informe que especifique la superficie a cubrir con cada uno de los materiales mencionados, con el objeto de realizar la licitacin para la compra de los mismos. Una vez que se tienen claros los objetivos del problema, se puede realizar su representacin:
Ahora se debe determinar qu hacer, respondiendo por ejemplo a las preguntas: Qu salidas se deben generar?Qu entradas se tienen?.Cul es el proceso que permite a partir de los datos de entrada obtener la solucin del problema?
Se puede hacer un anlisis del enunciado, y una manera de ayudarnos en esta tarea es sistematizar la informacin especificando:
Salida Datos de Entrada Proceso 1.Superficie del fondo de la pileta 2.Permetro de la pileta 3.Superficie a cubrir de cs- ped (superficie sombreada en la figura) Largo y ancho del terreno
Clculo de Superficie pileta Clculo del Permetro Clculo de la Superficie de csped. Informar resultados Llamaremos datos de entrada a aquellos que son conocidos y deben ser proporcionados por el programador desde un dispositivo externo tal como el teclado. Del anlisis vemos que existen tres procesos diferentes que deben ser especificados ms detalladamente. Si bien los interrogantes que pueden ayudarnos en la tarea de utilizar los procesos adecuados varan de acuerdo al problema a resolver, veamos los que podramos realizar para el caso planteado: 1. Proceso Clculo de Superficie de la pileta El primer interrogante que podemos hacernos es: Cmo calcular la superficie de la pileta? Si la pileta es circular, Cul es la frmula de la superficie de un crculo?
Ahora bien, conocida la frmula, Qu datos se necesitan para resolver la ecuacin planteada? El valor 3.14 es un dato dado, no debe ser calculado. Se conoce el valor del radio? La respuesta debe obtenerse del enunciado del problema: En un terreno rectangular, est construida una piscina circular de dimetro igual a la mitad del largo del terreno. Como se observa el radio no es un dato dado explcitamente, sino que debe ser calculado a partir del dimetro, que es conocido. radio = dimetro/2, como dimetro la mitad del largo del terreno, SupPileta = 3.14 * radio 2
c.
d
ancho
largo
a. donde d = largo/2
b. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 17 Entonces: radio = (largo /4) De esta manera: SupPileta= 3.14 * (largo /4) 2 2. Proceso Clculo Permetro de la pileta Cul es la frmula que resuelve la longitud de la circunferencia? La longitud de la circunferencia se puede expresar como:
Qu datos estn identificados para poder resolver la ecuacin? Igual que en el proceso 1, el dato que debe ser calculado es el radio. LongPileta = 2 * 3.14 * (largo/4) 3. Proceso Clculo de Superficie a cubrir de csped Cul es la frmula que permite calcular la superficie sombreada de la figura? La superficie a cubrir con csped, se obtiene como la diferencia entre la superficie del terreno y la superficie ocupada por la pileta. Ahora es necesario determinar: Los valores de las superficies son datos de entrada, han sido calculados o se debe utilizar alguna frmula para obtenerlos?
De estas dos superficies, la superficie de la pileta ha sido calculada, slo falta determinar la del terreno: SupTerreno = largo * ancho Dado que largo y ancho son datos de entrada, pueden ser usados directamente. Los procesos, como el visto, que consisten de un conjunto de acciones que se ejecutan en forma consecutiva, una sola vez, se denominan procesos secuenciales.
1.6.1.2 Procesos con alternativas de accin Ejemplo 7: El Ministerio de Educacin de la Nacin, luego de la reunin paritaria con los gremios correspondientes, ha decidido otorgar un aumento salarial a los agentes de las Universidades Nacionales del pas. El aumento se realiza discriminando categoras y antigedad de los empleados. Los agentes universitarios se clasifican en las categoras de: Docentes, No docentes y Auxiliares alumnos. Segn el acuerdo, el aumento otorgado a Docentes con ms de 10 aos de antigedad es del 15% y con menos antigedad es del 10%. Para los agentes No docentes el aumento es del 20% para los que poseen ms de 10 aos de antigedad y 15% en caso contrario. Los Auxiliares alumnos, recibirn un aumento del 30%. Todos los porcentajes se calculan sobre el sueldo bsico. Se debe determinar el monto del aumento para el agente y el monto del sueldo bruto a cobrar, teniendo en cuenta que es la suma del sueldo bsico y el aumento otorgado.
Representacin del problema Categoras Antigedad Aumento (sobre sueldo bsico) Docentes >10 aos 10 aos 15% 10% No Docentes >10 aos 10 aos 20% 15% Auxiliar alumno --- 30% LongPileta = 2 * 3.14 * radio
d. SupCesped = SupTerreno SupPileta
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 18 Especificacin del problema Salida Datos de Entrada Proceso Monto del aumento Sueldo bruto a cobrar Sueldo bsico Categora Antigedad Porcentaje aumento Calcular el monto del aumento (proceso con alternativa) Determinar el sueldo bruto Informar resultados obtenidos 1. Proceso Calcular monto del aumento (proceso con alternativa) Segn lo expresado en el problema: el aumento otorgado a Docentes con ms de 10 aos de antigedad es del 15% y con menos antigedad es del 10%. Para los agentes No docentes el aumento es del 20% para los que poseen ms de 10 aos de antigedad y 15% en caso contrario. Los Auxiliares alumnos, recibirn un aumento del 30%. Todos los porcentajes se calculan sobre el sueldo bsico. Este proceso requiere de dos instancias: A - Identificar la categora del empleado Comparando la categora del empleado surgen las siguientes alternativas: - El empleado es docente - El empleado es no docente - El empleado es auxiliar alumno. B - Anlisis de la antigedad del agente - La antigedad es mayor a 10 aos, calcular el porcentaje sobre sueldo bsico, segn la categora. - La antigedad es menor o igual a 10 aos en ese caso corresponde aplicar otro porcentaje sobre el bsico. 2. Proceso Determinar el sueldo bruto, calcular dicho importe: El sueldo bruto se calcula mediante la suma de la suma del sueldo bsico y el aumento otorgado. Sueldo_Bruto = Sueldo_Basico + Aumento En la frmula que permite calcular el Sueldo_Bruto el valor Sueldo_Basico es un dato de entrada, es decir deber ser ledo y Aumento es el resultado del proceso anterior. A diferencia del ejemplo 6, cuya resolucin consiste de una serie de acciones que se realizan en forma secuencial, en ste, la aparicin de una condicin cuyo resultado determina las acciones a seguir, interrumpe la secuencia. Se puede entonces decir que, la alternativa rompe el flujo secuencial del proceso que gua la resolucin del problema. Las siguientes actividades permitirn aplicar los conceptos hasta aqu analizados. En todos los casos, es necesario realizar la tabla de Especificacin del problema, determinando: Salida, Datos de Entrada y Procesos (indicando el tipo). Actividad 4: Se ha realizado una prueba a interesados en participar en un programa televisivo de canto. Para cada participante se registran los siguientes datos: edad, cdigo de sexo y tres puntuaciones correspondientes a las pruebas de evaluacin a las que fueron sometidos: afinacin, ritmo y aptitud artstica. Se debe calificar a un participante como Aprobado, No aprobado Convocatoria en suspenso. Se designan como aprobados a todos los participantes que obtuvieron ms de 90 puntos en la prueba de afinacin y un puntaje promedio mayor que 85 puntos en las otras dos pruebas. Se considerarn en la categora convocatoria en suspenso aquellos participantes que habiendo obtenido ms de 90 puntos en afinacin, no alcanzaron el puntaje promedio en las otras dos pruebas. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 19 Actividad 5: La emergencia energtica por la que atraviesa nuestro pas debido a la falta de inversin de las empresas responsables de esa rea en los ltimos aos, ha llevado a que en la actualidad deba tomarse medidas que afectan directamente al usuario. Ante la necesidad de un ahorro de energa en los domicilios particulares, para no perjudicar el normal desarrollo de las industrias, Energa San Juan ha implementado un sistema de castigos. Se ha puesto en vigencia una disposicin que consiste aplicar a aquellos usuarios que incrementaron su consumo en ms de 100KW, un recargo del 20% al subtotal correspondiente a energa. El total a pagar que figura en una boleta de energa, est constituido por la suma de tres subtotales: Subtotal Energa, Subtotal Impuestos y Contribuciones y Subtotal subsidio y/o Bonificacin. El subtotal energa est constituido por la suma de un Cargo Fijo mensual de $9.05 y un Cargo variable que se obtiene de multiplicar la mitad del consumo bimestral registrado, por el precio unitario correspondiente al KW/hora, que en la actualidad es de $0.0699. Se necesita informar a un usuario, del cual se conoce los consumos bimestrales del mismo perodo en los dos ltimos aos, el importe a pagar y en caso de haber sido sancionado especificar el valor del recargo aplicado.
1.6.1.3 Procesos Iterativos Hasta ahora los ejemplos considerados requieren de acciones que se ejecutan una sola vez, sin embargo en muchas situaciones puede ocurrir que las mismas deban repetirse en ms de una oportunidad. Como ejemplo, se considera nuevamente el ejemplo 6 y se supone que en lugar de informar el sueldo de un empleado de la Universidad, el informe debe realizarse para los 5000 agentes de la Universidad Nacional de San Juan. Se puede inferir que la lectura de datos, la salida y el proceso deben repetirse para cada uno de los usuarios en forma idntica. En este caso se habla de un proceso iterativo o ciclo. En los procesos iterativos debe tenerse en cuenta cuales son las acciones que deben repetirse y que por tanto se colocan dentro del ciclo y cuales van fuera de l. Algunas preguntas pueden ayudarnos en esta determinacin: Qu datos se necesitan? Cuntas veces deben leerse o calcularse? Los resultados deben informarse en las distintas ejecuciones del ciclo? Existen tantos resultados como pasadas o ejecuciones tenga el ciclo? Existen clculos que se van realizando en las distintas iteraciones pero cuyo resultado deben informarse una nica vez al finalizar las iteraciones? En el ejemplo planteado, las acciones de lectura de datos, clculos y el informe deben repetirse para cada uno de los usuarios, por ello todos se incluyen dentro del ciclo. Pero qu ocurre si se solicitara el importe total que necesita la Universidad Nacional de San Juan para el pago de sueldos? En ese caso se deben sumar los importes de cada uno de los usuarios dentro el proceso iterativo y una vez finalizado se informa dicho importe fuera del ciclo. En cada una de las siguientes actividades indicar en las especificaciones de los procesos, aquellos que se deban incluir dentro del ciclo y los que van fuera de l. Actividad 6: En una fbrica de artculos del hogar se ha sistematizado la informacin correspondiente a los productos que comercializa. Por cada producto se almacena tipo, cdigo, detalle, costo de fabricacin y stock. Los tipos de productos se codifican: A para identificar productos de Refrigeracin. C. para identificar productos de Calefaccin. E. para identificar Electrodomsticos. Un ejemplo de cdigo que identifica un producto es E-231-Licuadora Brown-50-180, donde E indica el tipo de producto, en este caso un electrodomstico, 231 el cdigo, Licuadora Brown el detalle, 50 el costo de fabricacin y 180 es el stock. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 20 Si en total se comercializan 150 productos, es necesario informar el importe total en stock de cada una de las categoras de productos fabricados y el importe que demanda la fabricacin de todos los productos.
Actividad 7: Una inmobiliaria necesita calcular el valor de cada uno de los inmuebles que tiene para la venta. Para ello conoce el nmero de identificacin del inmueble, nombre del propietario, tipo de inmueble, metros cubiertos y zona. Los tipos de inmueble se clasifican en: D Departamentos, L Loft, C Casa Las Zonas estn discriminadas en tres categoras. El valor del metro cuadrado en la zona 1 es de $1500, en la zona 2 un 20% menos que en la 1 y la zona 3 un 30 % menos que la 1. Se han determinado adems los importes bsicos para cada tipo de inmueble como se detalla: si el inmueble es tipo D el bsico es de $10.000, el tipo L tiene un bsico de $12.000 y si se trata del tipo C este valor es de $16.000. El Valor del inmueble se calcula adicionando al bsico, el importe que surge de considerar el tamao y ubicacin del inmueble. El dueo de la inmobiliaria est realizando un balance y ha solicitado al responsable de la seccin administracin un detalle que contenga un listado en donde figure el identificador del inmueble, su propietario y el importe de venta para cada inmueble. Tambin desea determinar el importe total que posee la inmobiliaria con relacin a los 120 bienes que tiene para la venta y el nombre de los propietarios de casas ubicadas en la zona 1.
Actividad 8: La fbrica de cartn Zucamor San Juan evala la situacin habitacional de sus 350 empleados con el fin de realizar, en un futuro inmediato, un proyecto de planes de vivienda acorde a sus presupuestos. Para ello el personal directivo de la empresa ha confeccionado una encuesta, que tiene los siguientes tems: Posee casa propia? Tiene otra actividad laboral? Algn integrante de su familia aporta dinero a la economa familiar? Las respuestas debern ser contestadas con s o no segn corresponda. De esta encuesta se quiere determinar la cantidad de empleados que tienen actividad extra a la organizacin, cantidad de empleados que reciben ayuda econmica de otro integrante de la familia y porcentaje de empleados que no poseen casa propia y son la nica fuente de ingreso familiar.
Q Qu u c co on nc ce ep pt to os s s se e t tr ra ab ba aj ja ar ro on n h ha as st ta a e el l m mo om me en nt to o? ? En una primera instancia se trat de identificar los tres componentes fundamentales que determinan un problema: Salida, Datos de Entrada y Procesos. Se realiz una clasificacin de los procesos en Secuenciales, Alternativos e Iterativos, segn si la ejecucin de las acciones sigue una lnea consecutiva, caminos alternativos de accin o se repetan un nmero determinado de veces respectivamente.
1.7 Formalizacin de conceptos para la construccin de algoritmos Ahora se tratar de formalizar algunos conceptos, que nos conducirn a la expresin de los procesos representados grficamente, utilizando un seudolenguaje llamado seudocdigo. 1.7.1 Concepto de Algoritmo La palabra "algoritmo" deriva del nombre latinizado del matemtico rabe Mohamed Ibn Moussa Al Kow Rizmi, el cual escribi entre los aos 800 y 825 su obra Quitab Al Jabr Al Mugabala, donde se recoga el sistema de numeracin hind y el concepto del cero. Fue Fibonacci, el que tradujo su obra Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 21 al latn y la inici con las palabras: Algoritmi dicit. As, de la palabra algorismo, que originalmente haca referencia a las reglas de uso de la aritmtica utilizando dgitos rabes, se evolucion a la palabra latina, derivacin de al-Khwarizmi, algobarismus, que ms tarde mutara a algoritmo en el siglo XVIII. Un algoritmo es un mtodo para resolver problemas, que consiste de una secuencia ordenada y finita de acciones o pasos elementales, cada una de las cuales con un significado preciso, que debe ejecutarse en un tiempo finito. Se considera como un paso elemental aquel que no puede volver a ser dividido en otros ms simples. De ahora en adelante se utiliza la palabra accin simple como sinnimo de paso elemental. De esta definicin se desprenden importantes condiciones que debe cumplir un algoritmo: Precisin: Cada accin debe tener un significado preciso, esto es, su interpretacin no debe dar lugar a ambigedades. Finitud: Debe ejecutarse con una cantidad finita de pasos. Efectividad: Un algoritmo es efectivo si sus acciones conducen al resultado buscado y se realizan en un tiempo finito. Se debe tener en cuenta que un algoritmo puede ser finito y no efectivo. Otras caractersticas que debera poseer un algoritmo son: Robustez: significa que un algoritmo debe contemplar todas las posibles facetas del problema que se quiere resolver, es decir, debe ser flexible a cambios. Si se logra construir un algoritmo robusto, cualquier giro inesperado del problema ser controlado por l. Correctitud: un algoritmo es correcto cuando da una solucin al problema, cumple con todos las especificaciones y alcanza los objetivos planteados. Completitud: significa que el algoritmo cuenta con todos los recursos para poder llegar a una solucin satisfactoria Eficacia: un algoritmo es eficaz cuando da una solucin al problema planteado Eficiencia: un algoritmo es eficiente cuando logra llegar a sus objetivos planteados utilizando la menor cantidad de recursos posibles, es decir, minimizando el uso memoria y tiempo de resolucin. Puede ser que exista un algoritmo eficaz pero no eficiente, en lo posible se deben manejar estos dos conceptos en forma conjunta. Para los mismos datos de entrada puede producirse o no, siempre los mismos datos de salida. En el caso en que se produzcan siempre los mismos datos de salida el algoritmo se llama determinista y en caso contrario no determinista. Un algoritmo se define como una funcin f: E S, pero si es no determinista es probable que no se encuentre una funcin como en el caso de programacin concurrente y paralela, donde en muchos casos la salida puede depender no slo de la entrada sino tambin de factores temporales. En este documento se considerarn algoritmos deterministas, que son independientes tanto del lenguaje de programacin en que se expresan, como de la computadora que los ejecuta. Es como una receta de cocina que se puede expresar en distintos idiomas, pero el resultado ser el mismo independientemente del lenguaje del cocinero. Es importante hacer notar, que el concepto de algoritmo, aunque similar y obviamente relacionado, no debe confundirse con el concepto de programa. Algoritmo, es la especificacin de un conjunto de pasos orientados a la resolucin de un problema, mientras que un programa es ese conjunto de operaciones especificadas en un determinado lenguaje de programacin. Un algoritmo constituye la documentacin principal que se necesita para iniciar la fase de codificacin y para representarlo se utilizan dos tipos de notacin: pseudocdigo y diagramas de flujo. El diseo de un algoritmo es independiente del lenguaje que se utilice en la codificacin. Un algoritmo escrito en pseudocdigo siempre se suele organizar en tres secciones: cabecera, declaraciones y cuerpo. En la seccin de cabecera se escribe el nombre del algoritmo. En la seccin de declaraciones se declaran algunos objetos (variables, constantes,...) que va a utilizar el programa. En el cuerpo estn descriptas las acciones necesarias para resolver el problema planteado. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 22 1.7.2 Diseo de Algoritmos Disear un algoritmo es una tarea donde la creatividad y experiencia del programador juega un papel importante y que difcilmente podr ser del todo automatizada. Es necesario tener en cuenta algunas consideraciones a la hora de construir un algoritmo. Como se dijo, los algoritmos sern escritos utilizando un lenguaje simblico llamado seudocdigo. Si bien es cercano al lenguaje natural, utiliza un conjunto de acciones y reglas expresadas en un vocabulario limitado, de tal manera que pueda ser interpretado por la comunidad de programadores. Tambin se dijo que resolver un problema requiere transformar mediante un proceso, los datos de entrada para obtener la meta, a la que se llama salida.
El proceso de anlisis del mundo real para identificar los aspectos esenciales de un problema se llama abstraccin y la expresin de estos aspectos, atendiendo a las especificaciones del problema se denomina modelizacin. Los elementos que participan en ese modelado se llaman datos. Ahora bien, es bueno precisar un conjunto de conceptos que ayudarn a la interpretacin de esta unidad. Se observa que la palabra datos, datos de entrada y datos de salida son vocablos muy utilizados hasta el momento, por lo que es oportuno definirlos.
1.7.3 Datos Cuando se resuelven problemas con computadora, los objetos reales se deben modelar mediante objetos abstractos, representables y entendibles sobre una computadora Un dato es un elemento u objeto de la realidad que los algoritmos representan y son capaces de modificar y procesar Los datos pueden ser de diversos tipos, as en los ejemplos presentados en esta unidad, se consideran temperaturas, distancias, edades, lados de un tringulo, objetos que son representados por cdigos preestablecidos, como el rendimiento acadmico de un alumno, el xito o fracaso de un tratamiento para dejar de fumar. Tambin se podra haber solicitado el nombre de los colegios en los que hay mayor porcentaje de bajo de rendimiento, o el nombre de los pacientes que deben continuar con el tratamiento para dejar de fumar, entre otros. El tratamiento de los datos que pueden ser nmeros, nombres, cdigos, requiere de una transformacin desde el mundo real a alguna forma de representacin binaria, para su almacenamiento en la computadora.
Un dato tiene asociado: un Nombre, un Valor y un Tipo, y ocupar un espacio en la memoria de la computadora. En general simbolizaremos lo expresado as:
Un dato podr ser el nombre de un paciente. Entonces: Nombre del dato Paciente Valor del dato Luciana Gmez Tipo de dato Conjunto de caracteres alfabticos
Es importante destacar que todo dato a ser procesado por la computadora debe estar almacenado en la memoria principal. Se puede considerar conceptualmente, que la memoria est constituida por un segmento en donde se almacenan los datos y otro en donde se almacenan las acciones del algoritmo.
Luciana Gmez
Paciente
Entrada
Proceso - Algoritmo Salida
Dato Nombre Valor Tipo Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 23
1.7.3.1 Variables y Constantes En general, durante la ejecucin de un algoritmo es necesario manipular informacin que pueda cambiar continuamente, esto es posible utilizando elementos llamados variables. Las Variables son los elementos que permiten almacenar datos que modifican su valor mientras se procesa el algoritmo. . Cuando los datos tienen asociado un valor que no cambia durante el procesamiento del algoritmo, se habla de Constantes.
1.7.3.2 Identificador El nombre con que se designa un dato, se llama tambin identificador y en general est representado por una secuencia de uno o ms caracteres: letras, dgitos y/o algunos caracteres especiales. El primer carcter debe ser una letra y el nombre no debe contener espacios en blanco. Se aconseja seleccionar nombres representativos de los objetos para facilitar su interpretacin y/o su posterior modificacin, se dice que los nombres deben ser autoexplicativos. En los problemas planteados, se asignaron nombres para identificar los datos utilizados. As, para representar los lados del tringulo se design con x, y, z a cada uno de ellos. Para el caso de la encuesta realizada por el investigador mdico, la edad del paciente y el resultado del tratamiento se pueden identificar con edad y result respectivamente. En el ejemplo 6 se utilizan los identificadores largo y ancho y en la actividad 5 los datos se representan con los nombres consumo_actual, consumo_anterior, Precio_KW, Cargo fijo.
1.7.4 Tipos de Datos Los datos que utilizan los programas se pueden clasificar en base a diferentes criterios. Uno de los ms significativos, es aquel que dice que todos los datos que utilizan los programas son simples o estructurados. Si un dato contiene un valor que siempre se trabaja como una unidad, se dice que es un dato simple. Cuando el dato est formado por una coleccin de otros datos, se dice que es una estructura de datos o un tipo de dato estructurado. Un tipo de dato define el rango de valores que puede tomar un dato y las operaciones que se pueden realizar con l. Para determinar el proceso que permitir obtener el resultado o salida requerida de un problema que debe ser resuelto por una computadora, es necesario conocer el tipo de datos que sta puede manipular. Esto permite visualizar una primera clasificacin de los datos en:
Memoria de acciones
Memoria de datos
Memoria Principal
Tipos de datos Simples
Estructurados
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 24 1.7.4.1 Tipos de Datos Simples Un dato simple es indivisible (atmico), es decir, no se puede descomponer. Los tipos de datos simples que definen la mayora de los lenguajes de programacin son:
1.7.4.1.1 Tipo de Dato Numrico Tipo entero: este tipo permite representar los valores enteros, por lo tanto son tiles para simbolizar edades, cdigos numricos, nmeros de calles, resultados provenientes de procesos de conteo, etc. Tipo real: este tipo permite representar valores con punto decimal. Ejemplos de variables de tipo real son las que representan notas, temperaturas, presin arterial, altura, peso, costos, etc. Ejemplo: Un ao es un dato simple. Anio: 2013 Un ao se expresa con un nmero entero, el cual no se puede descomponer. Sin embargo, una fecha es un dato compuesto porque est formado por otros tres datos simples (da, mes, ao). Fecha: Da: 30 Mes: 11 Anio: 2013 Las siguientes son las declaraciones de algunas variables de los problemas presentados: real largo , ancho entero edad real x,y,z Toda variable que se utilice en un algoritmo debe ser declarada, esto es, se debe especificar su nombre y el tipo de dato asociado. La declaracin de variables permite a la computadora reservar el espacio de memoria necesario para el almacenamiento de la misma, como as tambin verificar si las operaciones que se realizan con ella corresponden al tipo declarado. Por convencin y para adecuarnos a la forma en que trabaja el lenguaje C, para declarar una variable colocaremos el identificador de la misma precedido por su tipo.
1.7.4.1.2 Tipo de Dato Carcter Muchos problemas requieren trabajar con variables cuyos valores son caracteres, tal es el caso de la variable result utilizada para identificar el resultado del tratamiento iniciado por un paciente, que puede tomar los valores E o F por ejemplo, que representa el xito o fracaso del mismo en cada uno de los pacientes. En el ejemplo referido al rendimiento acadmico de los alumnos se puede utilizar la variable rendim, que puede tomar los valores S y N, para representar si tuvo o no problemas de rendimiento. Un variable de tipo carcter es aquella que puede tomar uno de los caracteres del cdigo ASCII. La sigla que ASCII refiere a Cdigo Estndar Americano para el Intercambio de Informacin, es un cdigo normalizado que cuenta con 128 caracteres, que incluye nmeros, letras maysculas, minsculas y caracteres especiales. Actualmente, la mayora de los procesadores utilizan el cdigo ASCII ampliado que cuenta de 256 caracteres, entre los que se han agregado los caracteres del alfabeto griego. Numricos
Lgico
Entero Real
e. Tipos de Datos simples
f. Lgico o Booleano Carcter Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 25 Estos caracteres estn ordenados de 0 a 255, caracterstica que permite la comparacin entre ellos. Los dgitos estn ordenados en su propia secuencia numrica y las letras estn dispuestas acorde al orden alfabtico, precediendo las maysculas a las minsculas. En general, todas las computadoras manipulan los siguientes caracteres: Letras maysculas: A..Z. (excepto CH, , LL) Letras minsculas: a..z. (excepto ch, , ll) Dgitos decimales: 0..9. Carcter de espacio en blanco. Caracteres especiales: +, -, %,...@,. ., o Signos de puntuacin: , ; : Como se dijo, las variables de tipo carcter pueden tomar uno de los valores de este conjunto, el que se debe escribir entre apstrofes , para evitar confundirlo con el nombre de una variable, operador o nmero.
Entonces, para el caso del rendimiento de un alumno, la variable se deber declarar de la siguiente forma: caracter rendim Nombre del dato rendim Tipo de dato Caracter Valor N
1.7.4.1.3 Tipo de Dato Lgico Existen variables que pueden tomar los valores Falso o Verdadero, corresponden al tipo de dato lgico o Booleano. La variable result, puede ser tambin considerada de tipo booleano. booleano result Nombre del dato result Tipo de dato booleano Valor Falso El valor Falso de la variable result, indica que el tratamiento no dio resultado a ese paciente. Se llaman tipos ordinales, aquellos cuyos elementos estn ordenados discretamente, esto es, para cada elemento, salvo el primero y el ltimo, existe un anterior y otro posterior. De los tipos de datos estudiados, el nico que no es ordinal es el conjunto de los nmeros reales. Dado un nmero real no se puede determinar el anterior ni el siguiente, ya que entre dos nmeros reales siempre existe otro nmero real.
1.7.4.2 Tipos de Datos Estructurados 1.7.4.2.1 Tipo de Dato Cadena En muchos casos es necesario trabajar con variables cuyos valores son un conjunto de caracteres, por ejemplo las que se utilizan para representar nombres. En estos casos no es posible el uso del tipo carcter, por ello la mayora de los lenguajes de programacin cuentan con el tipo de dato cadena, que permite resolver la situacin planteada. Un dato tipo cadena puede tomar como valor una cadena de caracteres, esto es, una secuencia finita de caracteres encerrada entre comillas . Si la variable nomb es utilizada para representar los nombres de las carreras que se cursan en la Facultad de Ciencias Exactas, se puede declarar: cadena nomb Nombre del dato nomb Tipo de dato Cadena Valor Licenciatura en Ciencias de la Computacin Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 26 1.7.5 Expresiones Una expresin es la descripcin formal de un clculo, que al ser resuelto tiene un nico resultado. Se construyen con la combinacin de operandos y operadores. Los operadores indican el tipo de clculo a realizar y los operandos son constantes, variables u otras expresiones que se calculan con los operadores correspondientes. Segn los operadores utilizados las expresiones se clasifican en: - Aritmticas - Relacionales - Lgicas
1.7.5.1 Expresiones aritmticas Una expresin aritmtica es la descripcin de un clculo matemtico donde los operandos son variables o constantes numricas, los operadores son aritmticos y el resultado es un nmero. Operandos Operadores Tipo de Resultado Variables o Constantes numricas
+ suma - resta * multiplicacin / divisin real div divisin entera Raiz Resto
Numrico
La suma, resta y multiplicacin admiten operandos enteros y reales, por lo que su resultado puede ser entero o real. La divisin retorna un resultado entero o real, dependiendo del operador utilizado. Los operadores Raz y Resto se aplican slo a operandos enteros, siendo su resultado entero.
Dadas las declaraciones: entero a,b,c, d real r
Expresiones aritmticas vlidas: 1. a+b+5+d resultado entero 2. a-b* (r/2 ) resultado real 3. a/b+c-3.6 resultado real 4. (a+b)*(c-d)/e resultado real
El resultado de las expresiones es nico, pero depende de los valores asignados a las variables. As, para a=10, b=9 y r=6, el resultado de la evaluacin de la segunda expresin es 17.0. para a=30, b=9 y r=5, el resultado de la evaluacin de la segunda expresin es 7.5. Reglas de evaluacin de una expresin aritmtica Son las mismas reglas que se utilizan en matemtica. La expresin se comienza a evaluar de izquierda a derecha, si contiene un clculo entre parntesis, ste se resuelve primero. Si los parntesis estn anidados, un par de parntesis dentro de otro, primero se resuelve la expresin del parntesis interior. Tabla 1.1 Expresiones Aritmticas
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 27 Los operadores de una expresin aritmtica tienen un orden de precedencia, esto es, prioridad de ejecucin en caso que la expresin contenga distintos operadores sin especificacin de parntesis:
Orden de precedencia Operador 1 * / div 2 + - 3 Raz, Resto
En caso de operadores con la misma prioridad, las operaciones se realizan de izquierda a derecha. Si se desea alterar el orden natural, se deber utilizar parntesis. As, la expresin matemtica debe escribirse (A+B) / (C+D) Cul es la expresin que resulta si no se colocan los parntesis? En la expresin a-b*(r/2), primero resuelve el parntesis, luego el producto y finalmente la resta. En cambio en la expresin a-b*r/2, se resuelve primero el producto, su resultado se divide en 2 y finalmente se realiza la resta. Si los operandos de la expresin aritmtica son del mismo tipo, el resultado es del mismo tipo. Si son de distinto tipo, se trabaja a mxima precisin. As por ejemplo, si un operando es entero y otro real, el resultado es real.
1.7.5.2 Expresiones relacionales Las expresiones relacionales describen formalmente predicados lgicos que al asignar valores a las variables, se convierten en proposiciones verdaderas o falsas. Por ejemplo Alumnos mayores de 18 aos se puede expresar formalmente utilizando la variable edad como: edad > 18. Si la variable edad toma el valor 20, podemos decir la proposicin resultante es verdadera. Por lo tanto, una expresin relacional es una comparacin de dos operandos del mismo tipo, cuyo resultado es un valor lgico. Los operadores que intervienen en la expresin son los operadores relacionales. Los operandos deben ser del mismo tipo, por lo tanto se puede comparar - datos numricos (constantes, variables o expresiones numricas), - caracteres - cadenas Operandos Operadores Tipo de Resultado Datos del mismo tipo: ambos numricos, carcter, cadena , lgico. Expresiones numricas
> Mayor < Menor == Igual <> , != Distinto > = Mayor o Igual < = Menor o Igual
Booleano
Tabla 1.3 Expresiones Relacionales g. h.
Tabla 1.2 Orden de precedencia Operadores Aritmticos
D C B A + + Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 28 Ejemplos de expresiones relacionales vlidas: entero m,n caracter t, r 1. m <= n 2. (m+n) > (n*2) 3. r < t 4. t !=a Para el lote de prueba: m=-5, n=-17, r= d , t=A los resultados de las expresiones son: Expresin 1: Falso Expresin 2: Verdadero Expresin 3: Falso Expresin 4: Verdadero Se debe recordar que la evaluacin de las expresiones 3 y 4 es posible debido al orden de los caracteres en el cdigo ASCII.
1.7.5.3 Expresiones lgicas A partir de las expresiones relacionales podemos construir expresiones lgicas, utilizando los conectores de la Lgica de proposiciones. De este modo una expresin lgica es la descripcin formal de un predicado lgico compuesto con conectores lgicos, que tiene como resultado un valor lgico verdadero o falso. Por lo tanto en una expresin lgica: - Los operadores son los conectores lgicos: conjuncin (y)), disyuncin (o) y negacin (no). - Los operandos son predicados lgicos, estos predicados pueden ser: expresiones relacionales, variables o constantes de tipo lgico. - El resultado es un valor de tipo lgico ( verdadero o falso)
Operandos Operadores Tipo de Resultado Expresiones relacionales, variables o constantes de tipo lgico.
NO negacin Y conjuncin O disyuncin
Booleano
Para obtener el valor booleano que resulta de la evaluacin de una expresin lgica, se utilizan las tablas de verdad de la Lgica de Proposiciones. Estas se construyen combinando los valores posibles que pueden tomar los operandos A y B:
A B A y B A o B NO A V V V V F V F F V F F V F V V F F F F V
Como se puede inferir de la Tabla de verdad anterior: - La conjuncin de dos operandos es verdadera nicamente en el caso en que ambos operandos lo sean Tabla 1.4 Expresiones Lgicas i. j.
Tabla 1.5 Tabla de Verdad k. l.
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 29 - La disyuncin entre dos operandos es verdadera cuando al menos una de dichos operandos lo es. - La negacin transforma un operando verdadero en falso y viceversa. Los operadores lgicos, tienen el siguiente orden de precedencia. Orden de Precedencia Operador 1 NO 2 Y 3 O
Ejemplos Dado los siguientes enunciado Alumnos varones mayores de 18 aos Si consideramos las variables edad de tipo entero y sexo de tipo carcter, podemos definir foemalmente la siguiente expresin lgica: ( sexo == M ) Y ( edad >18) Operando Operando
Expresin relacional Expresin relacional Operador Esta expresin lgica est compuesta por dos expresiones relacionales conectadas con el operador lgico Y. Si las variables toman los valores edad=20 y sexo=F La evaluacin de la expresin lgica es la siguiente: sexo==M Y edad >18
falso verdadero
falso Dada la declaracin: entero p, q caracter c,d,e booleano r, a y el lote de prueba p=12 ; q=3 ; c= b ; d=m ; a=Falso ; r=Verdadero Las siguientes son expresiones lgicas vlidas:
1. Conectivo lgico
(p<= q) y ( q > 0)
expresin relacional expresin relacional
Expresin lgica
n. Tabla 1.6 Orden de precedencia Operadores Lgicos
m. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 30 El resultado para los valores del lote es Falso:
2. (c < d) y (c != d) Verdadero
V V
V
Si su valor de verdad, para el lote de prueba es: (a) O ( NO r) Falso
F F F Evaluacin por cortocircuito de expresiones lgicas La mayora de los compiladores utilizan evaluacin por cortocircuito, esto significa que detienen la evaluacin cuando se tiene certeza del resultado de la expresin. La evaluacin se realiza con los operadores Y y O, de la siguiente manera: Si la expresin lgica tiene la forma: Si ( ( exp 1) Y ( exp 2) ) Se evala exp2 slo cuando exp1 es verdadera, ya que si exp1 es falsa el resultado de la expresin lgica es falso independientemente del valor de exp 2. Si la expresin lgica tiene la forma: Si ( ( exp 1) O ( exp 2) ) Si exp1 es verdadera no evala exp2, ya que el resultado de la expresin lgica es verdadero, sin importar el valor de exp2.
1.8 Acciones Para construir un algoritmo son necesarias dos tareas: - Elegir la representacin adecuada para que los datos puedan ser manipulados por la computadora. - Determinar el conjunto de acciones, cuya ejecucin conducir a la solucin del problema planteado. Para determinar el ambiente, esto es los recursos con que cuenta el procesador, se han estudiado los tipos de datos y las operaciones permitidas para cada uno de ellos. Se necesita conocer ahora las acciones que puede realizar una computadora.
3. Conectivo lgico
( a ) O ( NO r )
Variable lgica Variable lgica (p<= q) y ( q > 0)
F V F
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 31 El procesador puede realizar las siguientes acciones: 1. Almacenar los datos en memoria. 2. Realizar operaciones aritmticas, relacionales y lgicas, mediante un subsistema conocido como Unidad Aritmtico-Lgica (UAL). 3. Reconocer y ejecutar acciones simples, como las de lectura y escritura, y acciones estructuradas. Se llama accin a cada uno de los pasos que el procesador ejecuta para resolver el problema. Cada accin tiene la caracterstica de modificar el ambiente del algoritmo. Una accin simple es un paso que es entendido en forma inmediata por el procesador y no puede ser descompuesto en otros pasos ms sencillos. Una accin estructurada es un paso compuesto por otras acciones simples.
Antes de comenzar este estudio, se indicar la convencin adoptada para especificar los formatos de las acciones y otros elementos que constituyen el seudocdigo, para evitar ambigedades en su interpretacin. - Los corchetes angulares <> indican que la expresin que encierran, debe ser sustituida a eleccin del programador. - Los trminos no encerrados entre corchetes angulares, deben ser escritos tal cual se muestran en el formato. - Los smbolos /*. */, indican que la expresin que encierran es un comentario que se utilizar para realizar las aclaraciones que se consideren pertinentes en el algoritmo.
1.8.1 Acciones Simples 1.8.1.1 Lectura La accin de lectura permite almacenar en una variable, un valor especificado desde un dispositivo externo, como el teclado. Es decir, que esta accin permite introducir al ambiente valores desde el mundo exterior. El formato de esta accin es:
Donde <nombre de variable> representa uno o ms nombres de variables del ambiente. En caso de varias variables, sus identificadores se separan con coma. Dada la declaracin de variables: cadena nomb /* Ambiente del algoritmo */ entero edad real x,y,z caracter result Leer nomb /* acciones de lectura */ Leer edad, result Leer x,y,z Estas acciones permiten que variables nombradas se instancien con los valores ingresados. Leer <nombre de variable, ... , ... >
Lectura Simples Asignacin Escritura Acciones
Estructuradas Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 32 1.8.1.2 Asignacin La accin de asignacin permite almacenar en una variable un valor que proviene de una constante, de otra variable o del resultado de una expresin. El formato de esta accin es:
Donde: <nombre de variable> es el nombre de la variable a la que el procesador le asignar un valor = representa el smbolo de asignacin <valor> puede ser una constante, una variable o el resultado de una expresin. Una asignacin modifica el valor almacenado en la variable que aparece a la izquierda de la asignacin, sin producir ningn efecto en la expresin que se encuentra a la derecha de la misma. Dadas las variables: cadena nomb entero edad real x,y,z caracter result booleano rendim Son ejemplos de asignaciones correctas: nomb= Informtica edad= 20 result= S rendim= Falso z= Raiz( x*x + y*y ) NOTA: Existen por tanto, dos formas de almacenar un valor en una variable, a travs de una accin de lectura desde dispositivo externo, o por medio de una asignacin desde el mismo programa.
1.8.1.3 Escritura La accin de escritura, permite comunicar al exterior valores del ambiente, a travs de un dispositivo tal como pantalla o impresora. El formato de esta accin es:
Donde: <argumento 1, argumento 2, ..., argumento n>, pueden ser: constantes o nombres de variables, expresiones aritmticas, relacionales o lgicas. En este caso en el dispositivo externo se muestra el resultado de la expresin. Las siguientes son distintas formas de utilizar la accin de escritura: Escribir nomb Escribir Los lados del triangulo rectngulo son , x,y,z Escribir Temperatura promedio , suma/ cant Para aplicar los conceptos hasta el momento analizados, realicemos el algoritmo que corresponde a una posible solucin del ejemplo 6, referido al proyecto presentado por los empleados de la mutual de la Universidad. <nombre de variable> = <valor>
o. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 33 1.8.2 Construccin del algoritmo El algoritmo estar delimitado por las palabras Comienzo y Fin y constituido por dos partes bien diferenciadas, el ambiente, en donde se declaran todas las variables que se necesitan para realizar las tareas, y las acciones propiamente dichas. Algoritmo Calculo Comienzo /*inicio del algoritmo */ real ancho, largo, radio, supp, long,supc, supr /*declaracin de variables - Ambiente */ Leer ancho, largo /*lectura de datos */ radio= largo/4 /*clculo del radio de la pileta*/ supp= 3.14 * radio * radio /*clculo superficie del fondo de piscina*/ long= 2 * 3.14 *radio /*clculo longitud de borde de piscina*/ supr= largo * ancho /*clculo de superficie de rectngulo */ supc= supr- supp /*clculo de superficie acubrir de csped*/ Escribir Superficie del fondo de la pileta , supp /*muestra resultados*/ Escribir Longitud a cubrir con cermico, 2* long Escribir Superficie a cubrir con csped, supc Fin /*fin del algoritmo */ En este algoritmo se han detallado paso a paso cada una de los clculos necesarios. El siguiente algoritmo permite obtener la misma salida, pero optimizando la cantidad de variables. Algoritmo Calculo1 Comienzo real ancho, largo, radio,supp Leer ancho, largo radio= largo/4 supp= 3.14 * radio * radio Escribir Superficie del fondo de la pileta , supp Escribir Longitud a cubrir con cermico, 4 * 3.14 * radio Escribir Superficie a cubrir con csped, largo * ancho - supp Fin Se debe notar que los nicos clculos cuyos resultados se han almacenado en variables, son los que se utilizan en ms de una oportunidad, para evitar repetirlos, de esa manera se optimiza cdigo y tiempo. Otro ejemplo de codificacin de este algoritmo podra ser: Algoritmo Calculo1 Comienzo constante pi=3.14159 real ancho, largo, radio,supp Leer ancho, largo radio= largo/4 supp= pi * radio * radio Escribir Superficie del fondo de la pileta , supp Escribir Longitud a cubrir con cermico, 4 * pi * radio Escribir Superficie a cubrir con csped, largo * ancho - supp Fin Como se observa pi ha sido previamente declarada como constante. Usted que piensa acerca de la utilidad de la declaracin de constantes en un algoritmo? Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 34 1.8.2.1 Asertos Precondiciones y Postcondiciones Definir asertos es una herramienta til en el proceso de construccin de algoritmos correctos. Asertos: Un aserto es una afirmacin sobre el estado del algoritmo. Por ejemplo tras ejecutarse la instruccin: Resta= A-1, siendo Resta y A de valores enteros, se est en condiciones de afirmar el siguiente aserto: el valor de Resta es menor que el valor de A, ya sea A de valor positivo o negativo. El objetivo de la verificacin formal es que se puedan establecer asertos sobre lo que se pretende que realice el algoritmo, basndose en las especificaciones y requerimientos, as demostrar, mediante argumentos razonados, que un determinado diseo cumple los asertos preestablecidos en lugar de esperar la ejecucin del programa.
Precondiciones y Postcondiciones Durante el desarrollo de una tarea es importante determinar qu condiciones deben darse al comienzo o entrada de la tarea, y cules se espera deben ser ciertas al finalizar la tarea, es decir a la salida. Los asertos que deben cumplirse a la entrada de una tarea reciben el nombre de Precondiciones. Si la operacin, tarea o accin se realiza sin que la precondicin se cumpla no tendremos garanta de los resultados obtenidos. Los asertos acerca de los resultados que se esperan en la salida, se llaman postcondiciones.
Por tanto en la resolucin de problemas determinaremos las entradas con sus precondiciones y las salidas con sus postcondiciones asociadas.
Ejemplo 8: A partir de los requerimientos de sus afiliados, los directivos de la mutual han aprobado la construccin de un trampoln, sobre una columna vertical de x metros de altura. Calcular la longitud de la escalera que deber construirse, que estar apoyada sobre dicha columna y separada y metros, medidos sobre la horizontal.
Representacin del problema:
Especificacin del problema Salida Datos de Entrada Proceso Longitud de la escalera Postcondicin: Nmero real positivo Altura del trampoln ( x ) Separacin de la escalera respecto de la columna vertical ( y ) Precondicin Nmeros reales positivos Clculo de longitud de la escalera utilizando teorema de Pitgoras (L 2 = x 2 + y 2 ) y
x
L ?
Entrada Precondiciones Proceso - Algoritmo Salida Postcondiciones Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 35 Algoritmo Escalera Comienzo real x,y Escribir Ingrese altura del trampoln y separacin respecto de la columna Leer x, y Escribir La longitud de la escalera es , raiz( x *x + y*y) Fin
Es importante destacar que en este algoritmo se ha incluido un mensaje previo a la lectura, en el que se indica los datos y el orden en que deben ser ingresados por teclado. Esta accin resulta de gran ayuda al programador, ya que de lo contrario debera recordar no slo los datos, sino tambin el orden en que ellos fueron especificados en el algoritmo para asegurar la correcta asignacin de los valores a las variables. Se debe tambin notar que, si bien raz se ha considerado como un operador aritmtico, es en realidad una funcin aplicada a un argumento que debe estar encerrado entre parntesis.
1.8.3 Traza o seguimiento de un Algoritmo. Una vez que se alcanza un resultado, es fundamental confrontarlo con reglas y restricciones del problema y verificar que efectivamente constituye una solucin. Para ello, nuevamente se deber leer la especificacin original del problema y asegurarse que todas las cuestiones planteadas se han resuelto consistentemente. Esta etapa puede ser muy enriquecedora, si se comparan diferentes alternativas de resolucin y se evalan las distintas estrategias aplicadas. Esta reflexin es fundamental para que la resolucin de una situacin particular permita desarrollar la capacidad general de abordar problemas. La traza de un Algoritmo se puede definir como la ejecucin manual de las acciones que lo constituyen. Consiste en seguir paso a paso las instrucciones del algoritmo con datos concretos de manera de copmprobar si la solucin adoptada en la fase de diseo resuelve el problema. Esto permite comprobar que dicho algoritmo funciona correctamente, detectar errores o cuando se crea conveniente simplificarlo para incrementar su eficacia y velocidad. El seguimiento se puede realizar utilizando una tabla en la que se muestra los valores que toman las distintas variables declaradas, a medida que se ejecutan las acciones. El siguiente ejemplo muestra como realizar el seguimiento del algoritmo correspondiente al ejemplo 6, tomando para ello el lote de prueba: largo= 20 m y ancho=16 m. Algoritmo Calculo2 Comienzo real ancho, largo, radio, supp 1. Leer ancho, largo 2. radio= largo/4 3. supp= 3.14 * radio * radio 4. Escribir Superficie del fondo de la pileta , supp 5. Escribir Longitud a cubrir con cermico, 4 * 3.14 * radio 6. Escribir Superficie a cubrir con csped, largo * ancho - supp Fin Seguimiento algoritmo Calculo2 Accin ancho largo radio supp Salida 1 16 20 2 5 3 78.5 4 Superficie del fondo de la pileta 78. 5 5 Longitud a cubrir con cermico 62.8 6 Superficie a cubrir con csped 241.5 Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 36 1.8.4 Acciones estructuradas Se llama flujo de control de un algoritmo al orden en que se ejecutan las acciones que lo constituyen Recordemos que cuando el algoritmo cuenta con un nmero reducido de acciones que se ejecutan una tras otra, en el mismo orden en el que aparecen, se habla de ejecucin secuencial. Tambin se vio que el flujo de control de un algoritmo puede ser alternativo , cuando se deben tomar decisiones que dependen de ciertas condiciones, o iterativo cuando es necesario repetir acciones varias veces. Se llaman acciones estructuradas a aquellas que determinan un flujo de control especfico; de ah que tambin se denominan estructuras de control. Las Acciones estructuradas, se ejecutan teniendo en cuenta los distintos tipos de flujo de control: secuencia, seleccin e iteracin.
1.8.4.1 Secuencia Una secuencia est representada por un conjunto de acciones que se ejecutan en forma consecutiva, una sola vez. En este caso el orden de ejecucin coincide con el orden fsico en que se representan las acciones.
El siguiente esquema representa esta estructura:
1.8.4.2 Seleccin Una seleccin es una Accin estructurada que provoca la ejecucin de una accin entre acciones alternativas. Las estructuras de seleccin o alternativa utilizadas son Alternativa Doble, Simple y Mltiple, cuyo seudocdigo se muestra a continuacin:
1.8.4.2.1 Alternativa Doble El esquema de la estructura de seleccin doble es el siguiente:
Accin 1 Accin 2
:
Accin n
p. q.
Figura 1.4 Esquema de estructura Secuencial Acciones a
Acciones b
V
F
Condicin
Figura 1.5 Alternativa Doble
Secuencia
Seleccin
Iteracin
Estructuras de Control
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 37 En la figura 1.5 se grafica la seleccin utilizando un rombo para representar la decisin y un rectngulo para representar un bloque de acciones secuenciales El seudocdigo para esta estructura es: Si <condicin> Entonces <accin simple o estructurada> Sino <accin simple o estructurada> Finsi Donde: Condicin es una variable lgica, expresin lgica o relacional, cuyo valor puede ser verdadero o falso. Las palabras Si, Entonces, Sino y FinSi, se llaman delimitadores. Esta estructura se interpreta as, primero se evala la condicin, si el resultado obtenido es verdadero, el procesador deber ejecutar la acciones que estn entre los delimitadores Entonces y Sino, en caso contrario ejecutar la accin simple o estructurada que est entre los delimitadores Sino y Finsi. Las acciones que siguen a Entonces (alternativa verdadera) o al Sino (alternativa falsa), dependiendo del estado de la condicin evaluada, se ejecutarn en forma excluyente una sola vez. Como se observa en el seudocdigo, las palabras Entonces, Sino as como las acciones que estn dentro de ellas, se encuentran desplazadas un poco ms a la derecha que el resto de la estructura. Este desplazamiento o sangra se denomina indentacin., y es utilizada para dar mayor claridad a los algoritmos.
Como ejemplo se construir el algoritmo correspondiente a la actividad 5, cuyas aserciones son Precondicin: El consumo actual y el consumo anterior son nmeros reales positivos. Poscondicin: El importe a pagar es un nmero real positivo. Algoritmo Consumos Comienzo constante precio_KW =0.0699 constante cargofijo =9.05 real consumo_actual,consumo_anterior , valor_limite, subtEnergia Escribir Ingrese consumos bimestrales actual y del mismo periodo ao anterior 1. Leer consumo_actual, consumo_anterior 2. subtEnergia = cargofijo + ((consumo_actual / 2) * precio_KW) 3. valor_limite = consumo_anterior + 100 Si (consumo_actual > valor_limite) Entonces 4. Escribir El usuario debe pagar un recargo de, subtEnerga * 0.20 5. Escribir Importe Subtotal Energa, subtEnerga*1.20 /*equivale a SubtEnerga + SubtEnerga *0.2 Sino 6. Escribir El usuario no debe pagar recargo, Importe Subtotal Energa , subtEnerga Finsi Fin El seguimiento del algoritmo para los lotes de prueba es: a. consumo_actual = 550 KW consumo_anterior= 420 KW b. consumo_actual = 450 KW consumo_anterior = 420 KW Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 38 Lote a Accin consumo_actual consumo_anterior subtEnerga valor_limite Salida 1 550 420 2 28.27 3 520 4 El usuario debe pagar un recargo de 5.65 5 Importe Subtotal Energa 33.92
Lote b Accin consumo_actual consumo_anterior subtEnerga valor_limite Salida 1 450 420 2 24.78 3 520 5 El usuario no debe pagar recargo, importe subtotal energa 24.78
1.8.4.2.2 Alternativa Simple Si el departamento informes de Energa San Juan, dispone que slo debe notificar al usuario cuando deba pagar recargo, no ser necesario realizar acciones cuando la condicin es falsa. ste, como muchos problemas a modelar, pueden requerir el uso de la estructura Si - Finsi sin necesidad de usar el delimitador Sino. Esta estructura se conoce como Alternativa Simple. El seudocdigo asociado es: Si (<condicin>) Entonces <accin simple o estructurada> Finsi El esquema de la estructura de seleccin simple es:
El siguiente algoritmo muestra una posible solucin al problema planteado. Algoritmo Consumos1 Comienzo constante precio_KW =0.0699 constante cargo fijo =9.05 real consumo_actual,consumo_anterior , valor_limite V r. s.
Acciones a t. u.
Condicin
Figura 1.6 Alternativa Simple
F
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 39 Escribir Ingrese consumos bimestrales actual y del mismo periodo ao anterior Leer consumo_actual, consumo_anterior, subtEnergia = cargo_fijo + ((consumo_actual / 2) *precio_KW) valor_limite = consumo_anterior + 100 Si (consumo_actual > valor_limite) Entonces Escribir El usuario debe pagar un recargo de , subtEnerga * 0.20 Escribir Importe Subtotal Energa , subtEnerga *1.20 Finsi Fin
1.8.4.2.3 Estructuras Alternativas Anidadas Ejemplo 9: Despus de reuniones de directorio, las autoridades de Energa San Juan decidieron modificar la disposicin y poner en vigencia un nuevo sistema que consiste en otorgar a sus usuarios premios y castigos. Se premiar a aquellos usuarios que redujeron su consumo por lo menos en 100kw respecto del mismo periodo del ao anterior, con una bonificacin del 15% sobre el importe total. Y al igual que en la disposicin anterior, aquellos usuarios que incrementaron su consumo en ms del 100kw sern castigados con un recargo del 20% del importe. Realizar un algoritmo que permita informar cual es su situacin a un usuario, del que se conocen los consumos del mismo perodo en los dos ltimos aos. Representacin del problema
Algoritmo Consumos2 Comienzo constante precio=0.0699 constante cfijo=9.05 real consumo_actual,consumo_anterior, valor_limite Escribir Ingrese consumos bimestrales actual y del mismo periodo ao anterior Leer consumo_actual,consumo_anterior subtEnergia = cfijo + ((consumo_actual / 2) * precio) valor_limite = consumo_anterior + 100 Si (consumo_actual > valor_limite) Entonces Escribir El usuario debe pagar un recargo de , SubtEnerga * 0.20 Escribir Importe Subtotal Energa , subtEnerga *1.20 Sino Si (consumo_actual < consumo_anterior - 100) Entonces Escribir El usuario tiene un descuento de , subtEnerga * 0.15 Escribir Importe Subtotal Energa , subtEnerga * 0.85 Sino Escribir NO corresponde bonificacin ni recargo, su importe es, subtEnerga Finsi Finsi Fin consumo anterior
Consumo 100 Consumo +100
Zona de bonificacion v. w.
Zona de recargo
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 40 Como se dijo, las acciones que siguen a la alternativa verdadera o falsa de una estructura Si... Finsi, pueden ser simples o estructuradas, en particular puede ser otra estructura alternativa, como la planteada en el ejemplo. En este caso, en donde un Si aparece dentro de otro Si, se habla de anidamiento de Si o estructuras alternativas anidadas
1.8.4.2.4 Alternativa mltiple Ejemplo 10: En una agencia de venta de automotores, se han codificado las distintas marcas de automviles para facilitar el tratamiento de la informacin. La tabla siguiente muestra las marcas de los automviles con el porcentaje correspondiente a un impuesto que debe agregarse al valor sugerido por fbrica. MARCA CODIGO PORCENTAJE Ford A 5% Peugeot B 7% Fiat C 8% Toyota D 7% Renault E 5% Construir el algoritmo que permita determinar el importe total que corresponde a un automvil cuyo valor y cdigo de marca se conocen. Como datos de entrada se necesitan el cdigo de la marca del automvil, su valor y el porcentaje que corresponde al impuesto. Precondicin: un cdigo de tipo caracter que puede tomar valores comprendidos entre A..E correspondiente a la marca y un nmero real positivo correspondiente al importe del automvil Como salida se debe obtener el importe que debera pagarse incluido el impuesto correspondiente. Postcondicin: un nmero real positivo Con las estructuras hasta ahora estudiadas, el algoritmo que muestra el proceso para la obtencin del resultado solicitado, puede ser el siguiente: Algoritmo Agencia Comienzo real imp, total caracter codigo Escribir Ingresar importe de fbrica y cdigo de automvil Leer imp, codigo /* Se lee el importe del automvil y el cdigo correspondiente a su marca Si (codigo==A) Entonces total= imp *1.05 Sino Si (codigo==B) Entonces total= imp *1.07 Sino Si (codigo==C) Entonces total= imp *1.08 Sino Si (codigo==D) Entonces total= imp *1.07 Sino Si (codigo==E) Entonces total= imp *1.05 Sino Escribir Se ingreso mal el cdigo Finsi Finsi Finsi Finsi Finsi Escribir Total a pagar por el automvil, incluido el impuesto, total Fin Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 41 Para casos como ste, en los que, dependiendo del valor de una variable o del resultado de una expresin se debe seleccionar una de entre varias alternativas, los lenguajes proveen la estructura de seleccin mltiple Segunfinsegun cuyo seudocdigo es el siguiente: Segun (<e>) valor 1: accin 1 valor 2: accin 2 : : valor n: accin n de otro modo: accin b finsegun Donde: e es el nombre de expresin de control o selector y puede ser una variable o expresin ordinal, valores enteros, carcter, pero no reales. valor 1, valor 2 son los valores (etiquetas) que puede tomar e. de otro modo, valor distinto a la secuencia de posibles valores previstos que puede tomar la variable e.
Se evala el selector o expresin de control, se compara con cada uno de los valores o etiquetas colocados en la estructura Segun..finsegun, y se ejecuta nicamente la accin- simple o estructurada-, que corresponde al valor obtenido. Una vez finalizada esta ejecucin, se contina con el cdigo que sigue a la estructura. En caso que el valor del selector no se corresponda con ninguna etiqueta, si no se coloca la opcin de otro modo, no se ejecuta ninguna accin. Se recomienda el uso de esta opcin para identificar posibles errores, como es el caso de ingresar un valor errneo que debe ser detectado. El ordenamiento de los valores o etiquetas en la estructura es arbitrario, pero no pueden aparecer ms de una vez.
El esquema correspondiente a la estructura de alternativa mltiple es:
Ejemplo Segun (codigo) A: total= imp *1.05 B: total= imp *1.07 C: total= imp *1.08 D: total= imp *1.07 E: total= imp *1.05 de otro modo: Escribir Se ingreso mal el cdigo finsegun e
Valor 1
Valor 2
Valor n
De otro modo
Accin 1
. . .
. . .
Accin 2
Accin n
Accin b
Figura 1.7 Alternativa Mltiple
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 42 Si para diferentes valores de e se debe realizar la misma accin, tales valores pueden escribirse en una lista, separados por comas. Por ejemplo: Segun ( mes ) 1,3,5,7,8,10,12 : dia =31 2 : dia =28 4, 6,9,11 : dia =30 finsegun Con esta estructura, la solucin del ejemplo 10 puede representarse con el siguiente algoritmo expresado en seudocdigo: Algoritmo Agencia1 Comienzo real imp, total carcter codigo Escribir Ingresar importe de fbrica y cdigo de automvil Leer imp, codigo Segn (codigo) A ,E : total= imp *1.05 B,D : total= imp *1.07 C : total= imp *1.08 de otro modo: Escribir Se ingres mal el cdigo finsegun Escribir Precio del automvil, incluido el impuesto, total Fin Esta estructura es utilizada para realizar mens, siendo esto un conjunto de opciones para que el usuario elija entre una de otras posibilidades. Ejemplo 11: Si un usuario de un cajero automtico puede realizar tres posibles transacciones: consulta de saldo, extraccin de fondos o depsito, el algoritmo que permite seleccionar la operacin puede ser el siguiente Precondicin: El saldo e importe son nmeros reales mayores o iguales a cero, la opcin un caracter Poscondiciones: El saldo actualizado es un nmero real mayor o igual a cero.
Algoritmo Cajero Comienzo real saldo, importe caracter opci Leer saldo Escribir Ingrese Escribir C consulta de saldo Escribir E extraccin Escribir D depsito Escribir T finalizar transaccin Escribir Ingrese opcin Leer opci Segn (opci) C ,c : Escribir Su saldo es , saldo
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 43 E,e : Escribir Ingrese monto a extraer , Leer importe Si (saldo > importe) Entonces Escribir Saldo anterior , saldo saldo= saldo - importe Escribir Saldo Actual, saldo Sino Escribir La operacin no puede ser realizada, su saldo actual es de , saldo Finsi D,d : Escribir Ingrese el monto a depositar Leer importe Escribir Saldo anterior , saldo saldo= saldo + importe Escribir Saldo Actual, saldo T,t : Escribir Ud. Ingres finalizar transaccin de otro modo: Escribir Cdigo incorrecto, intente nuevamente Finsegun Fin
1.8.4.3 Iteracin Las Acciones estructuradas iterativas o repetitivas, se utilizan cuando se debe repetir la ejecucin de una o ms acciones. Para referirse a las Acciones iterativas se usan los trminos ciclo o bucle. La accin o acciones que se repiten se llaman cuerpo del ciclo y cada repeticin del bucle se conoce como iteracin o pasada del bucle. Las estructuras iterativas que se conocen, difieren en el modo en que controlan el nmero de veces que el cuerpo del ciclo debe repetirse. La repeticin puede ser controlada por contador o por un variable centinela.
1.8.4.3.1 Estructura Para - FinPara La estructura ParaFinPara es una estructura iterativa, por cuanto representa la ejecucin repetida de una o ms acciones. En esta estructura, el nmero de veces que se ejecuta el conjunto de Acciones, es conocido con anticipacin, es un nmero fijo, por ello tambin se la conoce como repeticin definida o bucle controlado por contador. El seudocdigo que representa esta estructura es:
Donde: v variable que controla el ciclo o variable de control. vi variable que contiene el valor inicial de la variable v vf variable que contiene el valor final de la variable v. El cuerpo del ciclo puede contener acciones simples o estructuradas. La primera vez que se ejecuta la estructura Para-FinPara, v toma el valor vi y compara que no supere el valor de vf. En este caso se ejecutan las acciones del cuerpo del ciclo que estn entre los delimitadores Para y FinPara. Despus de la primera iteracin se incrementa en 1 el valor de v, y se vuelve a controlar que sea menor o igual a vf, en este caso se vuelve a iterar, se contina repitiendo el proceso hasta que el valor de v supere el valor de vf. Para v desde vi hasta vf accin 1 accin 2
accin n FinPara Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 44 Para v desde vi hasta vf con paso P accin 1 accin 2
accin n FinPara
La mayora de los lenguajes de programacin admiten que la variable de control se pueda incrementar o decrementar en un valor que puede ser distinto de 1. Por ello, el siguiente es el formato general de la estructura en donde el valor de Paso P, indica en cuanto se debe incrementar, o decrementar (si es negativo), la variable de control despus de cada iteracin.
El esquema que caracteriza a esta estructura de repeticin es:
Esta estructura se puede utilizar para resolver el problema referido a los 100.000 usuarios de Energa San Juan, a los que se debe informar su situacin respecto del rgimen de castigos aplicado. El algoritmo que corresponde a esta situacin puede ser:
Algoritmo Consumos Comienzo real consumo_actual,consumo_anterior constante precio=0.0699 constante cfijo=9.05 entero N, i /* se declara la variable de control i Escribir Ingrese cantidad de usuarios Leer N Para i desde 1 hasta N Escribir Ingrese consumo actual y consumo anterior Leer consumo_actual, consumo_anterior SubtEnergia = cfijo + ((consumo_actual / 2) * precio) Valor_limite = consumo_anterior + 100 Si (consumo_actual > valor_limite) Entonces Escribir El usuario debe pagar un recargo de , subtEnerga * 0.20 Escribir Importe Subtotal Energa , subtEnerga *1.20 Sino Si ( consumo_actual < consumo_anterior * 1.1 - 100) Entonces Escribir El usuario tiene un descuento de , subtEnerga * 0.15 Escribir Importe Subtotal Energa, subtEnerga * 0.85 Sino Escribir NO corresponde bonificacin ni recargo, importe es, subtEnerga Finsi Finsi FinPara Fin Cuerpo del Ciclo
Figura 1.8. Estructura Iterativa Para FinPara
Incrementa v
v = vi
V
v vf
F
Cuerpo del Ciclo
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 45 Los siguientes son ejemplos del uso de esta estructura iterativa: Ejemplo 12: Escribir el triple de los nmeros pares comprendidos entre 200 y 440. Algoritmo Triple Comienzo entero c Para c desde 200 hasta 440 Si ((c resto 2) == 0) Entonces Escribir el triple de, c , es , c*3 Finsi FinPara Fin
Actividad 9: Escriba un algoritmo que permita optimizar el algoritmo anterior. Ejemplo 13: Dado un nmero entero positivo N, escribir sus divisores. Algoritmo Divisores Comienzo entero i, N Leer N Escribir Nmeros divisores de, N Para i desde 1 hasta N/2 Si ((N resto i) == 0) Entonces Escribir i FinSi FinPara Fin
Actividad 10: Realice el seguimiento del algoritmo anterior para N=16 1.8.4.3.2 Estructura Mientras - FinMientras La estructura Mientras-FinMientras es una estructura iterativa, en la que el nmero de veces que se ejecuta el conjunto de Acciones, depende del valor de verdad de una condicin que se evala al comienzo del ciclo. El seudocdigo asociado es:
El comportamiento de esta estructura es el siguiente, las Acciones del cuerpo del ciclo se repiten mientras la condicin es verdadera. Cuerpo del Ciclo
Mientras (<condicin> ) accin 1 accin 2 accin 3
accin n FinMientras
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 46 Cuando la condicin es falsa se sale del ciclo y se contina con la Accin que sigue al FinMientras. Como la condicin se evala antes de la ejecucin de las acciones del cuerpo del ciclo, por lo que se lo denomina bucle pretest, las mismas podrn ejecutarse cero o ms veces, dependiendo del resultado de la condicin. El esquema correspondiente a su funcionamiento es:
En esta estructura, no se conoce con anticipacin el nmero de veces que se ejecutar el ciclo, por ello se la denomina estructura de repeticin no definida. En general para estos casos se utiliza una variable centinela para controlar la ejecucin. La variable centinela que indica fin de datos, es elegida con un valor diferente a los valores de ejecucin exitosa del ciclo. La ejecucin del bucle tambin puede ser controlado utilizando banderas de estado, esto es, variables booleanas que se definen con un estado inicial, por ejemplo falso y se redefine en verdadero, cuando dentro del bucle ocurre un suceso que implica su detencin.
Ejemplo 14: Leer nmeros positivos, mostrar los que son mltiplos de 5. El ingreso de valores finaliza cuando se lee el nmero cero. Precondicin: nmeros enteros mayores que cero Poscondicin: nmeros enteros positivos mltiplos de 5.
Algoritmo Multiplo Comienzo entero numero Escribir Ingresar un nmero positivo, finalizar con 0 Leer numero /* Lectura Anticipada Mientras ( numero > 0 ) Si ((numero resto 5) == 0) Entonces Escribir numero Finsi Escribir Ingresar un nmero positivo, finalizar con 0 Leer numero FinMientras Fin En este ejemplo se realiza una lectura antes de entrar al Mientras - FinMientras para poder evaluar la condicin la primera vez, esto se conoce como lectura anticipada. Adems, antes de finalizar la estructura se realiza una nueva lectura, que permite el ingreso de los distintos nmeros ya que de lo contrario el proceso se repetira siempre con el primer valor ledo. En este caso, si el primer nmero ingresado es positivo el proceso se repetir indefinidamente, producindose un bucle infinito. La lectura de diferentes valores (en este caso el valor cero) permite finalizar el ciclo, tal como lo prev el algoritmo. Figura 1.9 Estructura Iterativa Mientras-FinMientras
Cuerpo del Ciclo
Condicin
V
F
Cuerpo del Ciclo
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 47 Ejemplo 15: En una casa de comercio se desea determinar el valor de la deuda de un cliente moroso, cuyo nmero de identificacin es conocido. A su vez se ingresan por teclado, nmero de identificacin y deuda de cada uno de los morosos.
Algoritmo Deuda Comienzo entero numero, num real deuda booleano ban ban=falso Escribir Ingresar el nmero del usuario moroso Leer num Mientras ( ban==falso ) Escribir Ingrese los nmeros de los usuarios morosos y el importe de su deuda Leer numero, deuda Si (numero ==num ) Entonces ban=verdadero /* se cambia el estado de la bandera para detener las iteraciones Finsi Fin Mientras Escribir La deuda del usuario, num , es, deuda Fin Precondicin: Los nmeros de identificacin son nmeros enteros positivos y la deuda nmero real positivo. Poscondicin: nmero real positivo como valor de la deuda Ejercicio 16 Considerar nuevamente el enunciado de los usuarios de la empresa Energa San Juan, bajo el supuesto que se desconoce la cantidad de usuarios. Resolverlo teniendo en cuenta esta ltima restriccin. Para el ingreso de los datos, ser necesario determinar un elemento centinela, y asignarle, por ejemplo, al consumo actual el valor -1. El algoritmo puede ser: Algoritmo ConsumosOtro Comienzo real consumo_actual , consumo_anterior , subtEnerga, valor_limite constante precio=0.0699 constante cfijo=9.05 Escribir Ingrese consumo bimestral actual Leer consumo_actual /* Se elige como centinela Mientras (consumo_actual <> -1) Escribir Ingrese consumo bimestral correspondiente al mismo periodo del ao anterior Leer consumo_anterior subtEnergia = cfijo + ((consumo_actual / 2) * precio) Valor_limite = consumo_anterior + 100 Si (consumo_actual > valor_limite) Entonces Escribir El usuario debe pagar un recargo de , subtEnerga * 0.20 Escribir Importe Subtotal Energa , subtEnerga *1.20 Sino Si (consumo_actual < consumo_anterior * 1.1) Entonces Escribir El usuario tiene un descuento de , subtEnerga * 0.15 Escribir Importe Subtotal Energa , subtEnerga * 0.85 Sino Escribir NO corresponde bonificacin ni recargo, su importe es, subtEnerga Finsi Finsi Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 48 Escribir Ingrese consumo bimestral actual Leer consumo_actual /*Se actualizan los datos, ingresando el consumo de otro usuario Fin Mientras Fin
NOTA: En los procesos iterativos, el control de la repeticin de las acciones se realiza a partir de la informacin contenida en las variables. En el caso de la estructura Mientras, la condicin acta como variable de control del bucle, sta debe tener por tanto un valor inicial y actualizarse, ya que si su valor no cambia se tendr un bucle infinito.
Actividad 11: Realizar el seguimiento de los siguientes algoritmos, indicando los casos que pueden ocasionar errores de ejecucin. Justificar en estos casos la respuesta. 11.1 Algoritmo Receta Comienzo cadena nombre entero calorias Escribir Ingrese nombre del ingrediente de la receta, finalice con FIN Leer nombre Mientras ( nombre!=FIN ) Escribir Ingrese caloras del ingrediente Leer calorias Si ( caloras > 50) Entonces Escribir Intente reemplazar el ingrediente , nombre Finsi Escribir Ingrese nombre del ingrediente de la receta, finalice con FIN Leer nombre FinMientras Fin
Lote de prueba: Azcar 30 Manteca 80 Huevos 55 Harina 35 Leche 25 FIN
11.2 Algoritmo Deudas Comienzo entero numero, num real deuda booleano ban ban=falso Escribir Ingresar el nmero del usuario moroso Leer num Mientras( ban== falso ) Escribir Ingrese los nmeros de los usuarios morosos y el importe de su deuda Leer numero, deuda Si (numero ==num ) Entonces Escribir la deuda del usuario, num , es, deuda Finsi Fin Mientras Fin Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 49 Lote de prueba: nmero de usuario 3245 Lista de usuarios morosos: 2342 1189 890 3245 2727 657 4441 : 11.3 Algoritmo Ciclo Comienzo Entero i, num1, num2 Booleano z z=falso num2=2 Para i desde 1 hasta 5 Leer num1 Si ((num1 > num2) y (num1*2 30 > 0)) Entonces z = verdadero num2= num1 - 10 Escribir num2 finsi FinPara Si (z = = falso) Entonces Escribir nunca se cumpli la condicin Sino Escribir se cumpli la condicin finsi Fin Lote de prueba: 18, 6, 20, 5, 11,7
11.4 Algoritmo Control Comienzo Entero d, c booleano b b = verdadero d = 0 Leer c Mientras ( (c * 5 - 15 < > 0 ) y (b==verdadero)) d=d+2 Si (d - 7 < 2) Entonces Escribir El valor de d es:, d Escribir d + c Sino b=falso finsi Leer c Fin mientras Escribir valor de d es:, d Fin Lote de prueba: 1, 0, 4, -5, 6, 3 Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 50 Actividad 12: Leer pares de nmeros. Escribir para cada par su producto e indicar si la primera componente es mltiplo de la segunda. La lectura finaliza cuando el par ledo tiene ambas componentes nulas. Construir el algoritmo que resuelve el problema y realizar las siguientes actividades: - Identificar las distintas estructuras de control que se utilizan. - Identificar precondicin y postcondicin - Identificar la expresin que acta como condicin - Realizar el seguimiento para los siguientes pares de valores: (30,5) (20, 80) (20,0) (0,0) (2,5) (9,15) - Indicar: Cul es el ltimo par de nmeros ledo? Se muestra el producto del ltimo par de nmeros ledo? Por qu? Cuntas veces se ejecuta el cuerpo del ciclo? Qu valor de la condicin permite que se itere el ciclo? Qu valor de la condicin permite que finalice el ciclo? Cuntas veces se ejecutar, como mnimo, el cuerpo del ciclo del algoritmo, para cualquier lote de prueba?
Actividad 13: Dada la ecuacin -3x +y +4=0, leer pares de nmeros enteros e indicar cuales son races. El ingreso de pares finaliza cuando ambas componentes son cero. Construir el algoritmo que resuelve el problema e identificar precondicin y poscondicin.
Actividad 14: Leer un conjunto de 150 nmeros e indicar si est o no ordenado en forma descendente. Construir el algoritmo que resuelve el problema e identificar precondicin y poscondicin.
1.8.4.3.3 Estructura Hacer - Mientras En esta estructura iterativa, el nmero de veces que se ejecuta el conjunto de acciones depende del valor de verdad de una condicin que es evaluada al final del ciclo. En este caso el cuerpo del ciclo se ejecuta 1 o ms veces. El seudocdigo que caracteriza esta Accin es:
El esquema de esta estructura de repeticin es:
Hacer accin 1 accin 2
accin n Mientras(<condicin>)
F
x. V
Ciclo
y. Figura 1.10 Estructura Iterativa Hacer - Mientras
Condicin
z. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 51 Ejemplo 17: Algoritmo Par Comienzo entero nro caracter opcion Hacer Leer nro Si ((nro resto 2)== 0) Entonces Escribir El nmero es par Sino Escribir El nmero es impar Finsi Escribir Desea ingresar ms datos? (S/N) Leer opcion Mientras ((opcion = S ) o ( opcion == s)) Fin
Actividad 15 El siguiente algoritmo lee pares de nmeros enteros y muestra la suma de sus componentes hasta que dicha suma es mayor que 200. Algoritmo Sumas Comienzo entero n1,n2,suma Hacer Leer n1,n2 suma=n1+n2 Escribir suma Mientras (suma <= 200) Fin
Realizar el seguimiento del algoritmo para los pares de valores, (130,25) (-20,-180) (100,100) (0,250) (34,650) y responder: - Se muestra la suma del ltimo par de nmeros ledo? Por qu? - Qu valor de la condicin permite que se itere el ciclo? - Qu valor de la condicin permite que finalice el ciclo? - Cuntas veces se ejecutar el ciclo? - Cuntas veces se ejecutar, como mnimo, el ciclo del algoritmo, para cualquier lote de prueba?
1.8. 4.3.4 Bucles Anidados As como es posible encontrar un Si dentro de otro Si, dando origen a las estructuras al ternativas anidadas, los bucles anidados constan de un bucle externo con uno o ms bucles internos. Se pueden anidar las distintas estructuras iterativas con la restriccin que la estructura interna debe estar totalmente incluida en la externa, evitando solapamientos. El funcionamiento, para el caso de dos bucles anidados es el siguiente, por cada iteracin del bucle exterior, se ejecuta completamente el interno. Se contina de la misma manera hasta que el bucle exterior completa las iteraciones. El mismo criterio rige para ms de dos bucles anidados.
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 52 Los siguientes anidamientos son vlidos: Mientras ( condicin 1) Hacer Para M desde 5 hasta 45 Para j desde 15 hasta 1 con Paso -2
Mientras ( condicin 1) FinPara Fin Mientras Fin Mientras
FinPara Mientras (condicin 2)
En cambio no es vlido el anidamiento siguiente, debido a que el bucle interno no se ha terminado de ejecutar cuando ocurre una nueva repeticin del bucle externo: Mientras ( condicin 1)
Para M desde 5 Hasta 45
Fin Mientras FinPara
Ejemplo 18: El siguiente algoritmo permite construir la tabla de multiplicar de los nmeros 2 al 9 Algoritmo Tablas Comienzo entero i,j Para i desde 2 hasta 9 Escribir Tabla del numero, i Para j desde 1 Hasta 10 Escribir i , * , j = , i*j FinPara Escribir FinPara Fin
Para interpretar el funcionamiento de los bucles se realizar el seguimiento para la obtencin de la tabla del 2 y del 3. i j SALIDA 2 Tabla del nmero 2 1 2*1= 2 2 2*2= 4 3 2*3= 26 : : 10 2*10= 20
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 53
Ejercicio 19: El INPRES (Instituto Nacional de Prevencin Ssmica) ubicado en la ciudad de San Juan ha dividido el continente en 7 zonas ssmicas. Necesita realizar un estudio, para lo cual cuenta con la informacin de los sismos registrados en los ltimos 3 aos. Por cada zona se ingresa en forma ordenada, segn la fecha de ocurrencia, el nombre de la provincia, la magnitud del sismo registrado, en escala Ritcher, y profundidad del epicentro. Por cada zona, el ingreso de informacin finaliza con nombre de provincia NADA MAS. Se necesita realizar un algoritmo que permita mostrar por cada zona, el nombre de la o las ciudades en donde los sismos se produjeron con epicentros a una profundidad no mayor de 200 km y que supearon los 5 grados de magnitud.
Representacin de problema: En este tipo de problemas, para determinar la salida solicitada, conviene realizar una representacin hipottica de los datos de entrada, tratando de considerar todos los casos que se pudieran presentar, an los excepcionales.
Los datos hipotticos indican que en la zona 1 se registraron 6 sismos, 8 en la 2, mientras que en la zona 3 no se registraron sismos Precondicin: el nombre de la provincia es una cadena de caracteres, la magnitud del sismo registrado y la profundidad del epicentro son nmero reales positivos. La zona es un nmero entero Postcondicin: cadena de caracteres con el nombre de la o las ciudades que cumplen condicin
El proceso requiere el uso de dos estructuras anidadas. El bucle externo, para el tratamiento de cada zona, puede ser controlado por un contador, ya que se conoce de antemano que son 7 zonas. Para el bucle interno sin embargo, como la cantidad de sismos registrados no es conocida a priori y adems es variable para las distintas zonas, necesita el uso de un centinela. Conviene entonces, usar la estructura Para, de manera de considerar las zonas y Mientras para el tratamiento de los sismos de cada una de ellas.
3 Tabla del nmero 3 1 3*1= 3 2 3*2 =6 3 3*3 =9 : : 10 3*10=30
Zona 1 Florida 6.7 300 California 4.2 250 Carolina 5.9 180 California 3.8 400 Florida 7.1 200 Nevada 4.2 320 NADA MAS
aa. Zona 2 Kobe 8 120 Kobe 5.3 90 Kobe 7.8 200 Kobe 6.1 150 Tokio 6.3 350 Yamaguchi 5.2 280 Kioto 4.9 320 Osaka 7.3 189 NADA MAS
Zona 3 NADA MAS
Zona 7 San Juan 5.1 622 San Juan 4.2 180 Mendoza 6 278 Crdoba 3.5 542 San Luis 3.7 345 Catamarca 3.1 453 Mendoza 4 190 NADA MAS
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 54 El algoritmo que puede resolver esta situacin es: Algoritmo Sismos Comienzo entero zona, z cadena provincia real magni, prof Para z desde 1 hasta 7 Escribir Ingrese nombre de provincia - Finalice con NADA MAS Leer provincia Escribir ZONA , z Mientras (provincia != NADA MAS) Escribir Ingrese magnitud y profundidad Leer magni, prof Si ((magni > 5) y (prof<= 200)) Entonces Escribir provincia Finsi Escribir Ingrese nombre de provincia - Finalice con NADA MAS Leer provincia Fin Mientras FinPara Fin
1.9 Contadores y acumuladores En la vida diaria, nos enfrentamos constantemente a situaciones en las que se debe contar o sumar valores representativos de una problemtica en particular, es as que en los primeros aos escolares estas operaciones son bsicas para el aprendizaje. Situaciones como las que se ven representadas en las siguientes tablas permiten, por ejemplo, determinar la cantidad de equipos que intervienen en un campeonato (contar), calcular el total de goles realizados (acumular) determinar la magnitud promedio de los sismos registrados en una zona ssmica determinada (contar y acumular).
En este apartado trataremos de entender como una computadora puede realizar las operaciones de contar y sumar. Para definir un contador, se necesita una variable entera que permita calcular la frecuencia de un evento. El contador se debe inicializar con el valor 0 (cero) y luego se va incrementando en 1 (uno) cada vez que ocurre el evento que se desea contar.
entero conta /* declaracin de variable conta=0 /* inicializacin del contador conta = conta + 1 /*incrementa el valor del contador en una unidad, el resultado lo asigna nuevamente a la variable Equipo Goles Boca 21 River 20 Independiente 25 Racing 17 Estudiantes 23 Tabla 1.7 Provincia Magnitud Profundidad San Juan 5.1 622 San Juan 4.2 180 Mendoza 6 278 Crdoba 3.5 542 Tabla 1.8
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 55 Un acumulador o sumador es una variable de tipo entera o real, dependiendo de los valores a acumular, que permite almacenar sumas sucesivas. El acumulador se debe inicializar en 0 (cero) y luego va incrementando su valor en una constante o variable. entero v,acum /* declaracin de variable acum=0 /* inicializacin del acumulador acum = acum +v /* incrementa el valor del acumulador en el valor de la variable V
Ejemplo 20: El siguiente es el algoritmo que permite determinar la magnitud promedio de los sismos registrados en la zona ssmica de Argentina y la cantidad de sismos que se produjeron a una profundidad no mayor de 200 km. Algoritmo SismosProm Comienzo entero C, ct /* se necesitan 2 contadores cadena provincia real magni, prof, S /* el sumador S tiene el mismo tipo de la variable que acumula magni 1. C=0 /* inicializacin del contador fuera de la estructura iterativa 2. S=0 /* inicializacin del acumulador fuera de la estructura iterativa 3. ct=0 4. Escribir Ingrese nombre de la provincia, finalice con NADA MAS 5. Leer provincia Mientras (provincia != NADA MAS) Escribir Ingrese magnitud y profundidad de sismos registrados en Argentina 6. Leer magni, prof 7. S=S + magni /* se acumula cada una de las magnitudes 8. ct=ct+1 /* se cuentan los sismos registrados Si (prof<= 200) 9. Entonces C=C+1 /* se incrementa el contador, si se cumple la condicin especificada Finsi 10. Escribir Ingrese nombre de la provincia, Finalice con NADA MAS 11. Leer provincia FinMientras 12. Escribir Magnitud promedio de sismos registrados en Argentina, S/ct /* se muestran los resultados fuera de la estructura 13. Escribir Total de sismos con profundidad no mayor a 200 km , C Fin El siguiente es el seguimiento de este algoritmo considerando como lote de prueba la tabla 1.8 Accin C ct provincia magni prof S Salida 1 a 3 0 0 0 4 Ingrese nombre de la provincia, finalice con NADA MAS 5 San Juan 6 5.1 622 7 5.1 8 1 10 Ingrese nombre de la provincia, finalice con NADA MAS
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 56 Accin C ct provincia magni prof S Salida 6 4.2 180 7 9.3 8 2 9 1 10 Ingrese nombre de la provincia, finalice con NADA MAS 11 Mendoza 6 6 278 7 15.3 8 3 10 Ingrese nombre de la provincia, finalice con NADA MAS 11 Crdoba 6 3.5 542 7 18.8
8 4 10 Ingrese nombre de la provincia, finalice con NADA MAS 11 NADA MAS 12 Magnitud promedio de sismos registrados en Argentina , 4.29 13 Total de sismos con profundidad no mayor a 200 km , 2 Nota: Cuando se trabaja con estructuras anidadas debe prestarse especial atencin a la posicin dentro del algoritmo donde se inicializa, modifica y muestra el resultado de cada contador y acumulador utilizado, de lo contrario pueden obtenerse resultados inesperados .
Actividad 16: Dados dos nmeros enteros positivos a y b, calcular la potencia a b
Actividad 17: Dado un nmero entero positivo, calcular su factorial. Recordar que el factorial se define como: 1 si n=0 n! 1*2*3*.*n si n>0
Actividad 18: Una encuestadora del medio ha realizado una encuesta de opinin para determinar la intencin de voto para las prximas elecciones, respecto de los tres partidos mayoritarios de la provincia. Las personas fueron seleccionadas al azar. Para la encuesta se trabaj con encuestadores por los Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 57 distintos departamentos de la provincia, en donde fueron seleccionadas muestras proporcionales al total de habitantes. Por cada persona se registra edad, sexo ( F M) y cdigo de voto. El cdigo de voto es: A: Partido Justicialista B: Partido Radical C: Partido Bloquista D: Otros E: No sabe o no contesta En la sede central de la encuestadora se deben procesar los datos obtenidos, sabiendo que el ingreso de los mismos finaliza con edad =0, para informar: - Total de encuestados. - Porcentaje de votos para cada uno de los tems considerados (A..E). - Edad promedio de los votantes de cada partido poltico. - Partido ms votado por las mujeres.(suponiendo que los partidos obtuvieron distinta cantidad de votos)
Actividad 19: Considerar el enunciado anterior, pero suponiendo que la informacin ha sido ordenada por cada uno de los 19 departamentos. Por cada departamento se ingresa el nombre y los datos de los encuestados, que finalizan con edad =0. La salida que se desea obtenerse la siguiente:
Departamento 1: Angaco Total de encuestados _______
Porcentaje de votos: Partido Justicialista: _______ Partido Radical: _______ Partido Bloquista: _______ Otros _______ No sabe/ No contesta:_______
Edad promedio de los votantes Partido Justicialista: _______ Partido Radical: _______ Partido Bloquista: _______ Otros _______ No sabe/ No contesta:_______
Partido ms votado por las mujeres_______
Departamento 19 : Valle Frtil Total de encuestados _______
Porcentaje de votos: Partido Justicialista: _______ Partido Radical: _______ Partido Bloquista: _______ No sabe/ No contesta:_______
Edad promedio de los votantes Partido Justicialista: _______ Partido Radical: _______ Partido Bloquista: _______ No sabe/ No contesta:_______
Partido ms votado por las mujeres_______ : :
Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 58 Actividad 20: Una distribuidora mayorista posee 5 cajas. Se realiza un balance y como parte del mismo se desea obtener informacin a partir de los datos de las boletas confeccionadas a sus clientes, sabiendo que stos se procesan ordenados por caja. En cada boleta registra tipo de cliente, importe total. El tipo de cliente puede ser: 1.Mayorista 2.Almacn 3.Minorista. El ingreso por cada una, finaliza con importe = 0. Calcular los datos que permitan completar la siguiente planilla: Caja 1 Importe total Cantidad de boletas Mayoristas Almacn Minorista TOTAL : Caja 5 Importe total Cantidad de boletas Mayoristas Almacn Minorista TOTAL
1.10 Clculo de mximos y mnimos de un conjunto de valores Muchos problemas requieren determinar el menor o mayor valor de entre un conjunto de valores dados. Por ejemplo si se desea indicar la menor nota obtenida por los alumnos que rindieron un examen de ingreso a una universidad, o encontrar la temperatura mxima registrada en una zona determinada, o el rango de valores entre los que se encuentran los sueldos de empleados de una empresa, es necesario determinar un proceso que permita generalizar este tipo de clculos. Para obtener el mximo, se requiere definir una variable del mismo tipo de los datos, la que puede identificarse con el nombre max. Esta variable debe ser inicializada con un valor pequeo, elegido de tal manera de asegurar que cualquier otro valor que se ingrese ser superior a l. El clculo consiste en un proceso repetitivo en el que cada valor del conjunto es comparado con el de la variable max, sustituyndolo en caso de ser superior, de esta manera al finalizar el bucle, en la variable max queda almacenado el mayor valor procesado. Se debe notar que la eleccin del valor inicial como el menor de todos los posibles del lote, asegura que en la primera iteracin, se almacene en max el primer valor ledo, el cual ser reemplazado cada vez que se procese un valor mayor. TOTAL EMPRESA Importe total Cantidad de boletas Mayoristas
Almacn
Minorista
TOTAL Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 59 Ejemplo 21: Una empresa de servicios realiza mensualmente el control de asistencia de sus empleados, para lo cual cuenta con el nombre, documento y total de faltas de aquellos empleados que tuvieron inasistencias en el mes. Se necesita conocer el nombre y documento del empleado que registr mayor cantidad de faltas, suponiendo nico. Especificacin de problema Datos de Entrada Salida Proceso Nombre Documento Cantidad de faltas Precondicin : Nombre: ca- dena de caracteres, Documento nmero real y Cantidad de faltas: nmero entero Nombre y documento del empleado con mayor cantidad de faltas. Poscondicin: Nombre cadena de caracteres y documento un nmero real Proceso iterativo: controlado por centinela. Calcular y mostrar valor mximo Es claro que para procesar la informacin de los empleados con inasistencias, es necesario realizar un proceso iterativo. Como no se conoce el total de empleados en esta situacin sera conveniente utilizar la estructura Mientras definiendo como centinela el nmero de documento igual a cero. Se debe notar tambin que para responder a la solicitud planteada se necesitan definir tres variables auxiliares, que almacenen la cantidad mxima de inasistencias, el nombre y documento del empleado al que corresponde esa cantidad. El algoritmo para resolver esta situacin puede ser: Algoritmo Faltas Comienzo cadena nomb, nomax /* declaracin de variables entero cf,doc,documax,cfmax cfmax=0 /* se inicializa a variable con un valor pequeo Escribir Ingrese documento de empleado, finalice con 0 Leer doc Mientras ( doc<>0) Escribir Ingrese nombre y cantidad de inasistencia en el mes Leer nomb, cf Si ( cf > cfmax) Entonces cfmax= cf /* se modifica el valor del mximo por uno mayor documax=doc /* se almacena la informacin del empleado nomax= nomb Finsi Escribir Ingrese documento de empleado, finalice con 0 Leer doc FinMientras Escribir El empleado , nomax, documento, documax, registr la mayor cantidad de faltas Fin
Para los casos como el considerado, en que todos los datos son positivos, se puede seleccionar como centinela el cero o un nmero negativo. Pero si los valores a procesar pueden ser tambin negativos, como el caso de temperaturas, se deber prestar atencin al valor inicial seleccionado. Es decir que para el clculo del mximo o mnimo de un conjunto de valores, utilizando este procedimiento, es necesario conocer el rango posible de los datos a tratar. Unidad 1: Algoritmos Algoritmos y Resolucin de Problemas 60 El procedimiento para el clculo del mnimo sigue el mismo criterio, solamente que el valor con que se inicializa la variable que contendr el mnimo, deber ser lo suficientemente grande de manera de asegurar que es mayor que cualquiera de los datos a procesar. El valor de esta variable se actualizar cada vez que el nmero procesado sea menor, de manera que al finalizar el bucle, la variable tendr el menor de todos los valores.
Actividad 21 Realizar las modificaciones necesarias al algoritmo construido en la actividad 20 de tal manera que adems se pueda indicar, el nmero de caja que registr la venta total mxima y el tipo de cliente que menos compras realiza a la distribuidora.
Actividad 22 Defensa al Consumidor recibe numerosas quejas acerca del sabor a cloro en el agua que se consume en el gran San Juan. Por ello, ha decidido solicitar al departamento de qumica de la Universidad Nacional de San Juan, realizar un estudio del porcentaje de cloro en el agua , teniendo en cuenta 5 zonas. Se tomaron 10.000 muestras en las que se registr nmero de zona y porcentaje de cloro. Se necesita conocer el rango de variacin de los porcentajes encontrados y el nmero de zona al que corresponden dichos valores.
Actividad 23: Una ferretera mayorista tiene 5 zonas de reparto (1: Centro, 2:Noreste, 3: Noroeste, 4: Sureste, 5:Suroeste) y sus productos clasificados en tres rubros (1: pinturas, 2:materiales de construccin, 3: herramientas). Por cada zona se ingresan los siguientes datos de sus clientes: nombre, rubro de artculos y monto de de la compra. Se desea conocer por cada zona la cantidad de clientes, el nombre del cliente que realiz la mayor compra (suponiendo nico) y el total recaudado por rubro. Determinar adems el total recaudado por la ferretera.
1.11 Bibliografa - Casanova Faus, Asuncin Programacin Departamento de Sistemas Informticos y Compuacin- Escuel universitaris de Informtica ,Unuiversidad Politcnica de Valencia .Editor. servicio de Publicaciones ISBN 84-7721-233-3 1993 - Criado Clavero, M Asuncin.(2006) Programacin en Lenguajes Estructurados Alfaomega.Ra- Ma - De Giusti, Armando E., Madoz Maria y otros. Algoritmos, datos y programas con aplicaciones en Pascal, Delphi y Visual Da Vinci. LIDI. Facultad de Informtica Universidad Nacional de la Plata. - Polya George (1972) Cmo plantear y resolver problemas. Mxico. Editorial Trillas - Brassard, G. & Bratley, P. "Fundamentos de Algoritmia". Prentice-Hall. 1997. - Sonia V. Rueda Alejandro J. Garca, Programa de Ingreso 2003. Anlisis y Comprensin de Problemas. Fundamentos, Problemas Resueltos y Problemas Propuestos. Departamento de Ciencias e Ingeniera de la Computacin. Universidad Nacional del Sur. Noviembre de 2002 - Pginas web consultadas Algoritmos Fundamentales http://old.algoritmia.net/alg/ Algoritmos Computacionales http://www.monografias.com/ Enseando a Aprender Lissete Poggioli htpp:// www.fpolar.org.ve/poggioli/poggio51.htm Algoritmia: Bases y objetivos. http://old.algoritmia.net/intro/
Técnicas de cuestionamiento sistémico para tener más éxito en el trabajo Cómo aprender el arte de hacer preguntas paso a paso y aplicarlo con éxito como entrenador o directivo