Algoritmos en PSeInt.pdf

March 29, 2018 | Author: edu_manuel1995 | Category: Algorithms, Programming Language, Computer Programming, Computer Program, Array Data Structure


Comments



Description

Algoritmos en PSeIntJéfferson Beltrán Morales Algoritmos en PSeInt Algoritmos en PSeInt Jéfferson Beltrán Morales 2 3 Jéfferson Beltrán Morales Algoritmos en PSeInt. Todos los derechos reservados. No está permitida la reproducción total o parcial de este libro, ni su tratamiento informático, ni la transmisión de ninguna forma o por cualquier medio, ya sea electrónico, mecánico, por fotocopia u otros métodos, sin el permiso previo y por escrito del titular del Copyright. Copyright © 2015. Jéfferson Beltrán Morales. ISBN- 978-9942-21-557-4 Septiembre 2015 Quito – Ecuador Algoritmos en PSeInt CONTENIDO INTRODUCCIÓN. .............................................................................................. 6 OBJETIVO.......................................................................................................... 6 EL LIBRO COMO HERRAMIENTA DOCENTE.................................................. 6 ORGANIZACIÓN DEL LIBRO. ........................................................................... 6 ACERCA DEL AUTOR. ...................................................................................... 7 PARTE I: ALGORITMOS.................................................................................... 8 1 ALGORITMOS. ............................................................................................ 8 1.1 CARACTERÍSTICAS DE LOS ALGORITMOS. ..................................... 8 1.2 PARTES DE UN ALGORITMO. ............................................................ 8 1.2.1 DATOS Y TIPOS DE DATOS. .............................................................. 8 1.2.2 CONSTANTES Y VARIABLES. ............................................................ 9 1.2.3 SENTENCIAS O INSTRUCCIONES. .................................................... 9 1.2.4 OPERADORES Y EXPRESIONES. ...................................................... 9 1.2.5 ESTRUCTURAS DE CONTROL. ........................................................ 11 1.3 1.4 PASOS PARA CREAR UN ALGORITMO. .......................................... 11 REPRESENTACIÓN GRÁFICA DE LOS ALGORITMOS. ..................... 12 1.4.1 DESCRIPCIÓN NARRADA. ................................................................ 12 1.4.2 DIAGRAMAS DE FLUJO O FLUJOGRAMAS. .................................... 12 1.4.3 PSEUDOCÓDIGO............................................................................... 14 1.5 PSEINT. .............................................................................................. 14 PARTE II: ALGORITMOS EN PSeInt. .............................................................. 16 2 PROGRAMACIÓN ESTRUCTURADA....................................................... 16 2.1 ESTRUCTURA SECUENCIAL. ........................................................... 23 2.2 ESTRUCTURAS SELECTIVAS O CONDICIONALES. ....................... 26 2.2.1 ESTRUCTURA SELECTIVA “SI-ENTONCES”. .................................. 27 2.2.1.1 EXPRESIONES LÓGICAS. .......................................................... 31 2.2.1.2 ESTRUCTURAS ANIDADAS........................................................ 35 2.2.2 ESTRUCTURA DE SELECCIÓN MÚLTIPLE “SEGÚN”...................... 40 2.3 ESTRUCTURAS REPETITIVAS O ITERATIVAS. .............................. 45 2.3.1 ESTRUCTURA REPETITIVA “PARA”. ................................................ 46 4 Jéfferson Beltrán Morales 5 2.3.1.1 CONTADOR. ................................................................................ 47 2.3.1.2 ACUMULADOR O TOTALIZADOR. ............................................. 47 2.3.2 ESTRUCTURA ITERATIVA “MIENTRAS”. ......................................... 50 2.3.2.1 CENTINELAS. .............................................................................. 53 2.3.2.2 BANDERAS. ................................................................................. 55 2.3.3 ESTRUCTURA ITERATIVA “REPETIR”. ............................................ 58 2.4 ESTRUCTURA DE DATOS Y ARREGLOS............................................ 63 2.4.1 ESTRUCTURA DE DATOS. ............................................................... 64 2.4.2 ARREGLOS. ....................................................................................... 64 2.4.2.1 ARREGLO UNIDIMENSIONAL. ................................................... 68 2.4.2.1.1 PARTES DE UN ARREGLO. .................................................... 68 2.4.2.1.2 OPERACIONES CON ARREGLOS. ......................................... 69 2.4.3 ARREGLO BIDIMENSIONAL. ............................................................. 78 2.5 MODULARIDAD. .................................................................................... 82 2.5.1 PROCEDIMIENTOS Y FUNCIONES. ................................................. 83 2.5.1.1 IMPLEMENTACIÓN DE PROCEDIMIENTOS Y FUNCIONES..... 84 2.6 RECURSIVIDAD. ................................................................................. 102 2.7 ESTILO DE PROGRAMACIÓN. ........................................................... 108 BIBLIOGRAFÍA. ............................................................................................. 110 Algoritmos en PSeInt ALGORITMOS EN PSeInt INTRODUCCIÓN. Este libro muestra al estudiante y futuro programador, los conceptos básicos y fundamentos de los algoritmos computacionales, mediante el diseño y elaboración de algoritmos básicos y sencillos que se presentan comúnmente en el proceso de aprendizaje, utilizando técnicas algorítmicas estructuradas y modulares, como pseudocódigo y diagramas de flujo y herramientas especializadas, y de esta manera entender de manera más sencilla el fascinante mundo de la algoritmia y programación. Ya que un programador, es decir, la persona que diseña y construye sistemas computacionales o aplicaciones de software, antes de comenzar a interactuar con la computadora, tiene que aprender a pensar diferente a las demás personas, para poder analizar y resolver problemas mediante aplicaciones de software, los cuales primero debe plasmarlos en papel o en alguna herramienta de software específica para ello como PSeInt, para luego implementarlos en un lenguaje de programación. OBJETIVO. El objetivo del libro es servir como material de lectura y estudio en un curso introductorio a la programación, mostrando los fundamentos de los algoritmos computacionales mediante técnicas de programación estructurada y modular, usando PSeInt como herramienta para el diseño de algoritmos en pseudocódigo y/o diagramas de flujos. EL LIBRO COMO HERRAMIENTA DOCENTE. El libro es una guía y aporte sobre los fundamentos de algoritmos computacionales para los docentes de Programación I, de las carreras de Ingeniería Informática, Ingeniería Matemática, Ingeniería en Computación Gráfica e Ingeniería en Diseño Industrial de la Universidad Central del Ecuador. Puede ser extendido su uso en otras materias introductorias a la programación y algoritmos, pues las bases de la algoritmia son similares, está pensando su uso para la mitad de un semestre de un primer curso de programación, no pretende ser un manual de PSeInt, sino una guía práctica para el diseño de algoritmos mediante ejemplos, usando pseudocódigo y diagramas de flujo en PSeInt, mediante técnicas de programación estructurada y modular. La bibliografía principal se tomó del sitio web del desarrollador de PSeInt [14]. ORGANIZACIÓN DEL LIBRO. El libro se dividió en dos partes para efecto de un estudio gradual y de fácil lectura. Se inicia enunciando conceptos básicos sobre algoritmos 6 Se incluyen ejemplos en pseudocódigo y diagramas de flujo escritos en PSeInt. . con el diseño de algoritmos usando técnicas de programación estructurada y modular. es responsable del Desarrollo de Software y de la Gestión de Tecnología de Información y Comunicaciones en empresas privadas. para luego ponerlos en práctica en la segunda parte. ACERCA DEL AUTOR.7 Jéfferson Beltrán Morales computacionales. El autor tiene 15 años de experiencia como docente universitario en materias relacionadas a la matemática aplicada y al desarrollo de software. En el mismo número de años. 75. un valor de verdad como Verdadero o Falso. centrando la atención en los conceptos de la algoritmia computacional. Por ejemplo. siempre debe dar la misma salida. Cada instrucción debe ser clara y sin ambigüedad (hacen lo que deben hacer). un valor entero como 36. Al menos un dato es producido como salida del algoritmo. Repetible.2. Un algoritmo es un método para resolver un problema mediante una serie de pasos precisos. Es un conjunto de reglas para resolver determinado problema. tal como ‘B’. Exactitud/precisión. un dato puede ser un simple carácter. 1.Algoritmos en PSeInt PARTE I: ALGORITMOS. que determina la naturaleza del conjunto de valores que puede tomar. 1 ALGORITMOS. Las características que debe satisfacer un algoritmo computacional son:       Entrada. 1.1 CARACTERÍSTICAS DE LOS ALGORITMOS. Dada una misma entrada. Todos los datos tienen un “tipo” asociado con ellos. Salida.1 DATOS Y TIPOS DE DATOS.2 PARTES DE UN ALGORITMO. un número real como 5. entre otros. Los algoritmos computacionales se construyen utilizando un pseudolenguaje que usa elementos simples para su escritura. Son cero o más parámetros (datos) que ingresan al algoritmo para ser usados dentro de él. Cada instrucción puede ser verificada por una persona con una prueba manual que satisfaga los requerimientos planteados por el problema. definidos y finitos. describiendo de forma lógica su solución. Cada una de las acciones de que consta un algoritmo computacional se denomina sentencia (instrucciones o acciones) y éstas deben ser escritas en términos de cierto lenguaje comprensible para el computador. Finito. 8 . Eficiente. que es el lenguaje de programación. una cadena de caracteres como “Hola Mundo”. Terminará después de un número finito de pasos. Las diferencias piezas de información con las que un algoritmo computacional trabaja se conoce colectivamente como “datos”. antes que en la dificultad propia de un lenguaje de programación. Entre ellos se tienen: 1. para denotar que el valor situado a su derecha se almacena en la variable situada a la izquierda: o variable  Valor o Ejemplo: suma0 (la asignación sólo será válida si el valor es válido para el tipo de dato definido para la variable). pueden clasificarse en dos grupos:   A un dato cuyo valor no puede cambiar (se mantiene constante) durante la ejecución de un programa se lo denomina Constante. en realidad. condicionalmente o repetidamente.2. Una variable es. 1. Las constantes deben ser declaradas y asignadas un valor antes de su utilización. las sentencias se clasifican en ejecutables (especifican. Las sentencias describen acciones algorítmicas que pueden ser ejecutadas. a grandes rasgos.2 CONSTANTES Y VARIABLES. Estos datos.2. En general. la cual se utiliza para almacenar un valor en una variable. según su tipo y número. Las sentencias se clasifican. en:  Sentencias simples: Son sentencias que no contiene ninguna otra sentencia. sino que ayudan a su legibilidad) como la declaración de variables. En cambio. Los algoritmos computacionales y programas necesitan almacenar datos temporalmente para poder procesarlos y generar así la salida esperada. . El ejemplo más típico de sentencia simple.  Sentencias estructuradas: Son sentencias compuestas de otras sentencias que se ejecutan en secuencia. es la sentencia de asignación. los datos de un programa cuyo valor puede cambiar durante la ejecución del mismo se conocen como Variables. una posición o localidad de memoria donde se puede almacenar información. Otros ejemplos de sentencias simples son las de entrada/salida. tiene un nombre (Nombre de la Variable).4 OPERADORES Y EXPRESIONES. La operación de asignación suele representarse en pseudocódigo con el símbolo ‘’. y almacena un valor (Valor de la Variable).3 SENTENCIAS O INSTRUCCIONES. Existen tantos tipos de variables como tipos de datos diferentes.Jéfferson Beltrán Morales 9 1. por ejemplo.2. 1. operaciones de cálculos aritméticos y entradas/salidas de datos) y no ejecutables (no realizan acciones concretas ni afectan a la ejecución del programa. debe tenerse en cuenta que existen una serie de reglas para definir la prioridad en la que éstas se ejecutarán. “ >” (Mayor que). los cuales permiten obtener el resultado de la suma. Su resultado es un valor de verdad. La operación not (no) actúa sobre una sola condición simple u operando y simplemente. “ * ” y “ / ”.Algoritmos en PSeInt Las variables y constantes se pueden procesar utilizando operaciones y funciones adecuadas para sus tipos. Por ejemplo: a + b. Su resultado es un valor de verdad. se suele utilizar paréntesis para establecer la prioridad de aplicación de los operandos.69 * X 10 . etc. Su resultado es un número. etc. Por este motivo. etc. “ . c/d. de forma similar al modo en que los operadores aritméticos se utilizan con los valores numéricos. La operación or (o) es verdadera si uno de los dos operandos es verdadero. Se denomina expresión a un conjunto de variables y/o constantes unidas por operadores. Si en una expresión existe más de una operación. la multiplicación y la división de dos datos respectivamente. Existen otros operadores lógicos además de los mencionados.”. Los operadores aritméticos y los relacionales se utilizan de la siguiente forma: variable o constante operador variable o constante. se utilizan para expresar condiciones y describen una relación entre dos valores. Ejemplo de expresión: Cos (2*pi * X) + 75. Un operador es un símbolo o palabra que sirve para indicar la realización de una acción entre uno o dos valores que son llamados operandos. De relación: Los operadores de relación (o relacionales). c<>d. Ejemplos de operadores aritméticos son: “ + ”.  Lógicos: Estos operadores se utilizan con valores lógicos. Ejemplos de operadores relacionales son: “ < ” (Menor que). a<b. Existen diversos tipos de operadores. “ = ” (Igual a) y “ <> ” (Distinto a).. la resta. niega (o invierte) su valor. por ejemplo:   Aritméticos: Son apropiados únicamente para tipos de datos numéricos. La operación and (y) combina dos condiciones simples y produce un resultado verdadero sólo si los dos operandos son verdaderos. Estos operadores trabajan con operandos que son expresiones lógicas. es una actividad que debe realizarse con mucha responsabilidad.11 Jéfferson Beltrán Morales 1. o Lógica de negocio: Cálculos. De Repetición o Iteración: Repetición de una instrucción mientras se cumple una condición. lógica / comparación. pues son métodos para especificar el orden en que las instrucciones de un algoritmo se ejecutarán. Prueba del algoritmo. Se describen los pasos para resolver el problema. para comprobar que el algoritmo arroje los resultados deseados. 1. nunca se debe diseñar un algoritmo sin haberse hecho un análisis completo del problema. proceso de datos. a través del uso de las llamadas estructuras de control. o Validación de datos. . o Salida de resultados. Para diseñar un algoritmo se debe comenzar por identificar las tareas más importantes para resolver el problema y disponerlas en el orden en que han de ser ejecutadas. Para resolver cualquier problema. Es mejor solucionar problemas pequeños.3 PASOS PARA CREAR UN ALGORITMO. Diseño del algoritmo.2. existen métodos que permiten salir del flujo lineal. se refiere al orden en que se ejecutan las acciones individuales del mismo. El concepto de flujo de control a través de un algoritmo y luego del programa. Los pasos generales son: o Lectura de datos. se debe comprenderlo completamente. De Selección o Condicionales: Bifurcación condicional de una o más instrucciones. Las estructuras de control son fundamentales en el diseño de un algoritmo computacional. Las estructuras de control son:    Secuenciales: Sucesión simple de dos o más instrucciones o sentencias (una tras otra). etc. Los pasos para crear un algoritmo son:    Análisis del problema. Aunque un flujo normal de un programa estructurado es lineal. Se realiza las pruebas manuales necesarias mediante casos de prueba.5 ESTRUCTURAS DE CONTROL. 1. Ubicarse en un asiento 1. se procesan. denominadas líneas de flujo. Para diseñarlos se utilizan determinados símbolos o figuras. los símbolos se unen con flechas. Los algoritmos generalmente se representan mediante diagramas de flujo y pseudocódigo. Llegar a la Universidad 9. 1.Algoritmos en PSeInt En general. con los pasos del algoritmo escritos en el símbolo adecuado. Cepillarse los dientes 6. Para su elaboración se sigue las siguientes reglas: 12 . A partir de los datos de entrada. Son la representación gráfica de la solución algorítmica de un problema.4. Salir de casa 7. Este algoritmo se caracteriza porque sigue un proceso de ejecución común y lógico. que indican el orden en que los pasos deben ser ejecutados. que representan una acción dentro de la solución. Desayunar 5. Bañarse 3. Tomar el autobús 8. Se utiliza unos símbolos normalizados. El proceso se refiere a los cálculos que se deben hacer para obtener la salida deseada.4 REPRESENTACIÓN GRÁFICA DE LOS ALGORITMOS.4. los procesa y genera la salida. los algoritmos reciben datos de entrada. Ejemplo: Algoritmo para asistir a clases: 1. y se consigue la salida.2 DIAGRAMAS DE FLUJO O FLUJOGRAMAS. se describe textualmente paso a paso cada una de las actividades a realizarse. Vestirse 4. Levantarse 2.1 DESCRIPCIÓN NARRADA. Buscar el aula 10. Jéfferson Beltrán Morales Se escribe de arriba hacia abajo y de izquierda a derecha. jamás curvas. 5. Un inicio. Evitar cruce de flujos. La secuencia de un flujo normal en una solución de un problema es: 1. 2. Una lectura o entrada de datos. pueden ser difíciles de seguir si existen diferentes caminos. El proceso de datos. 4. 3. o Pueden usarse como modelos de trabajo en el diseño de nuevos algoritmos. Entre las ventajas de usar diagrama de flujos se tiene: o Rápida comprensión de las relaciones. 4. o Análisis efectivo de las diferentes secciones del algoritmo. o Acciones a seguir tras la salida de un símbolo de decisión. En cada paso expresar una acción concreta. Entre las desventajas podemos anotar: o Diagramas complejos y detallados suelen ser laboriosos en su planteamiento y diseño. . Siempre se usan flechas verticales u horizontales. 3. o Codificación eficaz de los algoritmos.13 1. o No existen normas fijas para la elaboración de los diagramas de flujo que permitan incluir todos los detalles que el usuario desee introducir. Un final Ejemplo: Dibujar un diagrama de flujo que imprima en pantalla “Hola Mundo”. Una salida de información. 2. o Comunicación con el usuario. o Documentación adecuada de los algoritmos. o Depuración y pruebas ordenadas de los algoritmos. sino una imitación y una versión abreviada de instrucciones reales de los lenguajes de programación. Se concibió para superar las dos principales desventajas de los diagramas de flujo: lento de crear y difícil de modificar sin un nuevo dibujo. 1. Pseudo = falso. Proceso HolaMundo Escribir 'Hola Mundo'. etc.5 PSEINT. le permite centrar su atención en los conceptos fundamentales de la algoritmia computacional. pero que respeta las directrices y los elementos de los lenguajes de programación.4. que a partir de un diagrama de flujo. Es una técnica para diseño de algoritmos. las operaciones que se aplicarán a los datos y la lógica que tendrá el algoritmo computacional para solucionar un determinado problema. es un pseudoentorno de desarrollo integrado (pseudo IDE) en español.Algoritmos en PSeInt o Diagramas de flujo muy grandes son difíciles de leer y seguir su secuencia. como se parece a un lenguaje de programación. Ejemplo: Escribir un algoritmo que imprima en pantalla “Hola Mundo”. Un compilador que convierte el pseudocódigo en código de un lenguaje de programación que la computadora puede comprender y ejecutar. de esta manera se puede ejecutar un algoritmo que realmente no es ejecutable. Utiliza un pseudolenguaje muy parecido a nuestro idioma. cuyas principales características son:     Un editor. El pseudocódigo no es realmente un código. PSeInt. que proporciona el medio para introducir el texto y los símbolos que constituyen el pseudocódigo fuente. 14 . PSeInt es una herramienta para asistir a un estudiante en sus primeros pasos en programación. Mediante un simple e intuitivo pseudolenguaje en español (complementado con un editor de diagramas de flujo). La principal ventaja es que. tutoriales. Un depurador que ayuda a analizar y corregir errores en tiempo de ejecución. Ayuda (manuales. minimizando las dificultades propias de un lenguaje y proporcionando un entorno integrado de trabajo con numerosas ayudas y recursos didácticos [14]. la evolución de pseudocódigo hacia un lenguaje de programación es más fácil. que permite definir las estructuras de datos. FinProceso 1. ejemplos.3 PSEUDOCÓDIGO.) integrada. JavaScript. Java. La configuración de Opciones de Lenguaje que se usó en los ejemplos del libro. pues hace que el pseudocódigo en PSeInt se parezca a un lenguaje de programación. Convierte pseudocódigo a código de varios lenguajes de programación. C++. El presente libro. PHP.Jéfferson Beltrán Morales 15   Convierte diagramas de flujo en pseudocódigo y viceversa. Pascal. Python 2. es la enviada por la Universidad Central del Ecuador. no pretende ser un manual de uso de PSeInt. entre ellos: C. C#. se trata de que la transición a un lenguaje de programación sea más fácil. MatLab. sino una guía de cómo crear algoritmos con la ayuda de PSeInt. . Python 3. QBasic Visual Basic. FinProceso 16 . Ejemplos: 12 23 0 -2. Programación Estructurada es una técnica en la cual la estructura de un algoritmo o programa se lo realiza tan claramente como sea posible mediante el uso de tres estructuras de control:    Secuenciales: Sucesión simple de dos o más instrucciones.  Manejo de las estructuras básicas de control. <acción 2>. Repetitivas o Iterativas: Repetición de una instrucción mientras se cumple una condición. . 2 PROGRAMACIÓN ESTRUCTURADA.  Sólo 3 tipos de datos básicos: o Numérico: Números. para ello usaremos un pseudolenguaje cuyas características son:  Sintaxis sencilla (sin la complejidad de los lenguajes de programación). sentencias o acciones (una tras otra). Escribiremos los algoritmos bajo el paradigma de la programación estructurada. . . Todo algoritmo en pseudocógido tiene la siguiente estructura general: Proceso <NombrePrograma> <acción 1>. Para separar decimales se utiliza el punto. (generalmente se usa comillas simples para un carácter y dobles para cadena de caracteres o texto)  Estructuras de datos: Arreglos. o Caracter: Caracteres o cadenas de caracteres encerrados entre comillas (pueden ser dobles o simples). <acción n>.14 o Lógico: Sólo puede tomar dos valores: VERDADERO o FALSO. Ejemplos 'hola' "hola mundo" '123' 'FALSO' 'etc'.3 3.Algoritmos en PSeInt PARTE II: ALGORITMOS EN PSeInt. Selectivas o Condicionales: Bifurcación condicional de una o más instrucciones. tanto enteros como reales. no será tomado en cuenta al interpretar el algoritmo. luego le sigue una secuencia de instrucciones (acciones) y finaliza con la palabra FinProceso. Se pueden introducir comentarios luego de una instrucción. asignaciones de variables. 2. Detectar errores de operaciones en los programas durante la fase de codificación. comenzando siempre con una letra. . o Las constates lógicas son Verdadero y Falso. o Los identificadores deben constar sólo de letras y números. En diagrama de flujo en cambio se usa la siguiente estructura general para diagramar algoritmos: Inicio Acciones Fin  Constantes e identificadores. Una secuencia de instrucciones es una lista de una o más instrucciones. Las acciones incluyen operaciones de entrada y salida.  Definición de variables. La instrucción Definir permite explicitar el tipo de una o más variables. pero la estructura contenida debe comenzar y finalizar dentro de la contenedora. o En las constantes numéricas. el punto ( . No puede haber instrucciones fuera del programa. ) es el separador decimal. hasta el fin de la línea. No puede haber instrucciones fuera del proceso. mediante el uso de la doble barra ( // ). aunque si comentarios. repetir o para.17 Jéfferson Beltrán Morales Se inicia con la palabra clave Proceso seguida del nombre del programa. pueden contener otras adentro. o Las constantes de tipo carácter se escriben entre comillas ( " ). aunque la asignación de tipos a los datos tiene dos objetivos principales: 1. Todo lo que precede a //. aunque si comentarios. Determinar cómo se ejecutarán las operaciones entre datos. cada una terminada en punto y coma. Las estructuras no secuenciales pueden anidarse. condicionales si-entonces o de selección múltiple y/o lazos mientras. Es decir. Esta definición puede ser opcional u obligatoria. o en líneas separadas. Una variable debe ser definida antes de ser utilizada por primera vez.  Asignación.141592653). La sintaxis es: Definir <var1> . Por consiguiente. La instrucción de asignación permite almacenar un valor en una variable. A menos que el programa conozca los tipos de datos no puede ejecutar correctamente la operación de suma. // incrementa en 1 el acumulador 18 . sólo con números. A los lenguajes que exigen que todos los datos utilizados deban tener sus tipos declarados explícitamente se los conoce como “fuertemente tipados”.0 a var acumulador<-acumulador +1. La única constante definida en PSeInt es PI (3.Algoritmos en PSeInt Una operación de suma no tiene sentido con caracteres de texto. El tipo de un dato puede ser convertido bajo ciertas condiciones a otro tipo. primero se evalúa la expresión de la derecha y luego se asigna el resultado a la variable de la izquierda. El tipo de la variable y el de la expresión deben coincidir.<expresión> . <variable> <.0. // se define la variable var como Real Definir acumulador Como Entero. si el compilador detecta una operación de suma de dos caracteres normalmente producirá un error. ya que los números enteros y los reales se almacenan de formas distintas en memoria. // acumulador es una variable Entero  Constantes. Ejemplo: var<-1. Ejemplo: Definir var Como Real. <varN> Como [Real/Entero/Logico/Caracter] . <var2> . Incluso entre tipos numéricos la operación de suma se almacena de modo distinto. Al ejecutarse la asignación. // asigna 1. Este mecanismo explícito de conversión de tipos de datos se suele denominar “CAST”. … . <expr2> . . Ejemplo: Leer cantidad. . . valor2.<variableN> . resp*2 . mostrará uno o más valores.  Otras Acciones Secuenciales. si se usa Escribir Sin Saltar. . Ejemplo: . Escribir “El Resultado es: ” . <exprN> . Con Escribir... el cursor luego de imprimir. Pueden incluirse una o más variables. Las instrucciones Escribir y Escribir Sin Saltar permiten mostrar valores al ambiente. .  Salidas. <expr2> . Estas instrucciones imprimen en pantalla los valores obtenidos de evaluar N expresiones.. . Leer valor1.. valor3. La instrucción Leer permite ingresar información por teclado.. como su nombre lo indica. Leer <variablel> . <variable2> . Escribir Sin Saltar <exprl>. Dado que puede incluir una o más expresiones. avanzará a la siguiente línea. borrar la pantalla y colocar el cursor en la esquina superior izquierda. <exprN> . por lo tanto el comando leerá uno o más valores. Esta instrucción lee N valores desde el ambiente (en este caso el teclado) y los asigna a las N variables mencionadas.19  Jéfferson Beltrán Morales Entradas. La instrucción "Borrar Pantalla" (o "Limpiar Pantalla") permite. Ejemplo: Escribir “Ingrese el nombre: ”.. el cursor se mantendrá en la misma línea. Escribir <exprl>. . Los N parámetros indican la cantidad de dimensiones y el valor máximo de cada una de ellas. para luego referirse a los mismos utilizando uno o más subíndices. indicando a continuación de la palabra clave la longitud y unidad de dicho intervalo.Algoritmos en PSeInt Borrar Pantalla.). Se pueden definir más de un arreglo en una misma instrucción. Los arreglos son estructuras de datos homogéneas (todos sus datos son del mismo tipo) que permiten almacenar un determinado número de datos bajo un mismo identificador. Dimension <identificador> (<max1>. La cantidad de dimensiones puede ser una o más. 20 . Esta instrucción define un arreglo con el nombre indicado en <identificador> y N dimensiones.  Arreglos. separándolos con una coma (. Para utilizar un arreglo. La instrucción "Esperar Tecla" detiene su algoritmo hasta que el usuario presione una tecla cualquiera de su teclado. lo cual determina cuantos elementos se almacenarán y como se accederá a los mismos. es decir. Las unidades válidas son Segundos y Milisegundos. Con mayor detalle se estudiará los arreglos más adelante. definirlo declarando los rangos de sus subíndices... Ejemplo: Esperar Tecla. y la máxima cantidad de elementos debe ser una expresión numérica positiva. indicando sus dimensiones. La instrucción "Esperar" también puede utilizarse para pausar el algoritmo durante un intervalo de tiempo predefinido. Pseudocódigo: La instrucción Dimension permite definir un arreglo. primero es obligatorio su dimensionamiento.  Dimensionamiento.. Ejemplo: Esperar 3 Segundos.<maxN>). Ejemplo: Definir vector...<identM>(<maxM1>.<max1N>). Diagrama de flujo: El gráfico que se usa en diagrama de flujo para la definición de variables y dimensionamiento de arreglos es el mismo que se utiliza para la asignación.41 * radio ^ 2 % Módulo (resto de la división resto <.base * altura - Resta stock <.Jéfferson Beltrán Morales 21 Dimension <ident1> (<max11>.disponible . Las siguientes tablas exhiben la totalidad de los operadores de este lenguaje reducido: Operador Significado Ejemplo Relacionales > Mayor que 3>2 < Menor que 'ABC'<'abc' = Igual que 4=3 <> Diferente que 4<>3 <= Menor o igual que 'a'<='b' >= Mayor o igual que 4>=5 & Conjunción (y / and).num % 2 entera) Lógicos Algebraicos .<maxMN>).venta / División porc <. matriz[10. Dimension vector[100].100 * parte / total ^ Potenciación sup <. PSeInt dispone de un conjunto básico de operadores y funciones que pueden ser utilizados para la construcción de expresiones más o menos complejas..suma+1 * Multiplicación area <... Es importante notar que es necesario definir un arreglo antes de utilizarlo.  Operadores y Funciones. ~(2<5) //falso + Suma suma <... (1=1 | 2=1) //verdadero ~ Negación (no / not). (7>4) & (2=1) //falso | Disyunción (o / or)..3.20].. matriz Como Entero. Retorna una nueva cadena resulta de unir las cadenas S1 y S2.S2) Significado Raíz Cuadrada de X Valor Absoluto de X Logaritmo Natural de X Función Exponencial de X Seno de X Coseno de X Tangente de X Arcoseno de X Arcocoseno de X Arcotangente de X Parte entera de X Entero más cercano a X Entero aleatorio en el rango [0.Algoritmos en PSeInt 22 La jerarquía de los operadores matemáticos es igual a la del álgebra. por lo que la primera letra será la 0 o la 1 de acuerdo al perfil del lenguaje utilizado. o están unidas por el operador | y la primera se evalúa como Verdadero. . Para el caso de los operadores & y |.X. Las posiciones utilizan la misma base que los arreglos. que si dos expresiones están unidas por el operador & y la primera se evalúa como Falso. la evaluación se realiza en cortocircuito.B) LONGITUD(S) MAYUSCULAS(S) MINUSCULAS(S) SUBCADENA(S.x-1] Entero aleatorio en el rango [A. A continuación se listan las funciones integradas disponibles: Función RC(X) o RAIZ(X) ABS(X) LN(X) EXP(X) SEN(X) COS(X) TAN(X) ASEN(X) ACOS(X) ATAN(X) TRUNC(X) REDON(X) AZAR(X) ALEATORIO(A.Y) CONCATENAR(S1. aunque puede alterarse mediante el uso de paréntesis. la segunda no se evalúa ya que no altera el resultado.B] Cantidad de caracteres de la cadena S Retorna una copia de la cadena S con todos sus caracteres en mayúsculas Retorna una copia de la cadena S con todos sus caracteres en minúsculas Retorna una nueva cadena que consiste en la parte de la cadena S que va desde la posición X hasta la posición Y (incluyendo ambos extremos). es decir. (Fase 4 del algoritmo) Si definimos las variables como: (fase 1 del algoritmo) long = Longitud. 3. Como habíamos mencionado anteriormente. 2. El objetivo del ejercicio es encontrar la longitud y el área de un círculo con un radio ingresado por teclado. Recibe un real y devuelve una variable numérica con la representación como cadena de caracteres de dicho real.Jéfferson Beltrán Morales 23 CONVERTIRANUMERO(X) CONVERTIRATEXTO(S) Recibe una cadena de caracteres que contiene un número y devuelve una variable numérica con el mismo. Se caracteriza porque una acción se ejecuta detrás de otra. etc. operaciones de asignación. inicialización de variables. radio = radio. Dentro de este tipo podemos encontrar operaciones de inicio/fin. Ejemplo 1: Se desea encontrar la longitud y el área de un círculo de radio ingresado por teclado. 2. Este tipo de estructura se basa en las 5 fases de que consta todo algoritmo o programa: 1. (Fase 5 del algoritmo) Sabemos que la longitud de un círculo viene dada por la fórmula 2 * PI * radio y que el área viene dada por PI * radio al cuadrado.1 ESTRUCTURA SECUENCIAL. un problema se puede dividir en acciones elementales o instrucciones. Lectura de datos. El flujo del programa coincide con el orden físico en el que se han ido poniendo las instrucciones. Las salidas serán entonces la longitud y el área. cálculo. hagamos el algoritmo: Pseudocódigo: Proceso Algoritmo1 . Salida. Solución. 4. Cálculo. 5. sumarización. area = área. Definición de variables (Declaración) Inicialización de variables. usando un número limitado de estructuras de control (básicas) y sus combinaciones que pueden servir para resolver dicho problema. Long. //salida del algoritmo FinProceso Diagrama de Flujo: 24 .PI * Radio ^ 2. //definición de variables Escribir "Ingrese el radio: ". Long Como Real. //asignación del valor del área Long <. //despliega en pantalla Leer Radio. Area. " Longitud: ". //Ingresa por teclado el radio Area <. Area.Algoritmos en PSeInt //este algoritmo calcula el área y la longitud de un círculo de radio //ingresado por teclado Definir Radio.2 * PI * Radio . //asignación del valor de la longitud Escribir "Area: ". 10.0. Escribir "Ingrese el sueldo de los 3 empleados". sueldo3 = salarios de los empleados Pseudocódigo: Proceso Algoritmo2 //Leer el sueldo de tres empleados y aplica un aumento del 10. 12% y 15% respectivamente. sueldoFinal3 Como Real. sueldoFinal3 <.sueldo2 * 1. sueldo3 Como Real.0. Leer el sueldo de tres empleados y aplicarles un aumento del 10%.0. Entradas: Salarios de los empleados.0. //incrementa el 10% al sueldo original //y lo asigna en sueldoFinal1 sueldoFinal2 <. sueldoFinal2.12. 12 y //15% respectivamente Definir sueldo1. sueldo2. //definición de variables Definir sueldoFinal1. //inicializamos variables sueldo2 <. Solución.Jéfferson Beltrán Morales 25 Ejemplo 2. //lee los sueldos sueldoFinal1 <.0. sueldo3. sueldo3 <.0. Desplegar el resultado. sueldo1 <. sueldoFinal3 = los sueldos finales sueldo1. Leer sueldo1. sueldoFinal2 <.sueldo1 * 1. Salidas: Sueldos finales. sueldo2. sueldo2. sueldoFinal1 <. //incrementa el 12% al sueldo original . 12% y 15% Cálculos: Sueldo final = sueldo inicial * (1+porcentaje/100) Definición de variables: sueldoFinal1. sueldoFinal2. Datos adicionales: aumentos del 10%. //incrementa el 15% al sueldo original //y lo asigna en sueldoFinal3 Escribir "Sueldos incrementados: ". sueldoFinal2.15. FinProceso Diagrama de flujo: 2." ". sueldoFinal1.sueldo3 * 1." ".Algoritmos en PSeInt //y lo asigna en sueldoFinal2 sueldoFinal3 <.2 ESTRUCTURAS SELECTIVAS O CONDICIONALES. sueldoFinal3. 26 . 1 ESTRUCTURA SELECTIVA “SI-ENTONCES”.2. Si la expresión toma el valor verdadero. . Estas condiciones se llaman expresiones lógicas. 2. . La cláusula sino es optativa. o booleanas. y otra sentencia en caso de que sea falsa. 2. si la condición es falsa no se ejecuta ninguna instrucción y la ejecución del programa continúa con la instrucción siguiente. entonces sólo se ejecutará la sentencia B y el control pasa de nuevo inmediatamente a la siguiente sentencia del programa. se necesita una sentencia de control que dirija a la computadora a ejecutar una sentencia si la expresión es verdadera. Dado que las expresiones lógicas toman el valor verdadero o falso.27 Jéfferson Beltrán Morales Con frecuencia nos enfrentamos a situaciones en las que se deben proporcionar instrucciones alternativas que pueden o no ejecutarse dependiendo de los datos de entrada. reflejando el cumplimiento o no de una determinada condición. Si la expresión toma el valor falso. La realización de acciones alternativas o decisiones se especifican utilizando condiciones que son verdaderas o falsas. se ejecutará la sentencia A y el control pasará a la sentencia inmediatamente siguiente. 3. en ese caso. Se evalúa la expresión lógica. La siguiente figura muestra el diagrama de flujo de la estructura “Si-Entonces”: EL pseudocódigo es: Si <condición> Entonces <instrucciones> Sino <instrucciones> FinSi La estructura “Si” funciona de la siguiente manera: 1. Construir un algoritmo que lea la calificación de un alumno en un examen. Entradas: Calificación. Salidas: Mensaje de aprobado si se cumple la condición. Solución. FinSi FinProceso. Datos adicionales: Un alumno aprueba si la calificación es mayor o igual que 7.Algoritmos en PSeInt Ejemplo 3. Variables: Cal = calificación Pseudocódigo: Proceso Algoritmo3 //lee la calificación de un alumno y escribe "Aprobado" si es mayor o //igual que 7 Definir cal Como Real. //declaro la variable Escribir "Ingrese la calificación del alumno: ". Si cal>=7 Entonces Escribir "Aprobado". Leer cal. Diagrama de flujo: 28 . escriba "Aprobado" en caso que esa calificación fuese mayor o igual que 7. Pseudocódigo: Proceso Algoritmo4 //escribe "Aprobado" si es mayor o igual que 7 o "Reprobado" caso //contrario Definir cal Como Real. //declaro la variable Escribir "Ingrese la calificación del alumno: ". Leer cal. Si cal>=7 Entonces Escribir "Aprobado". Sino .Jéfferson Beltrán Morales 29 Ejemplo 4. escriba "Aprobado" si su calificación es mayor o igual que 7 y "Reprobado" en caso contrario. Dada la calificación de un alumno en un examen. FinSi FinProceso Diagrama de flujo: Ejemplo 5.Algoritmos en PSeInt Escribir "Reprobado". luego imprimir el nuevo sueldo del trabajador. Pseudocódigo: Proceso Algoritmo5 //aumento el 15% si su sueldo es inferior a $1000 y 12% en caso //contrario 30 . Dado como dato el sueldo de un trabajador. aplicar un aumento del 15% si su sueldo es inferior a $1000 y 12% en caso contrario. FinProceso Diagrama de flujo: 2. Leer sueldo.1 EXPRESIONES LÓGICAS. nuevoSueldo.sueldo*1.Jéfferson Beltrán Morales 31 Definir sueldo. Sino NuevoSueldo <. nuevoSueldo Como Real.sueldo*1.2.12. Si sueldo<1000 Entonces NuevoSueldo <. FinSi Escribir "El nuevo sueldo es: ". //declaro la variable Escribir "Ingrese el sueldo del trabajador: ".15. .1. Algoritmos en PSeInt Sirven para plantear alternativas o decisiones y dan como resultado un valor booleano verdadero o falso. FinSi FinProceso Diagrama de flujo: 32 . Ejemplo 6: Operador lógico Y (“&”): Una escuela aplica dos exámenes a sus aspirantes. Pseudocódigo: Proceso Algoritmo6 //escribe aceptado si las 2 calificaciones son >= que 7. Si ((calif1>=7) & (calif2>=7)) Entonces Escribir "Estudiante aceptado". es decir. se cumple o no se cumple la condición. Las simples son las que usan operadores relacionales y las complejas las que usan operadores lógicos. calif2 Como Real. Escribir "Ingrese la nota 1: ". Escribir "Ingrese la nota 2: ". El aspirante que obtenga calificaciones mayores o iguales que 7 en ambos exámenes es aceptado. caso contrario es //rechazado Definir calif1. en caso contrario es rechazado. Se pueden clasificar en simples y complejas. Sino Escribir "Estudiante rechazado". Leer calif2. por lo que cada uno de ellos obtiene dos calificaciones denotadas como calif1 y calif2. Leer calif1. Leer calif1. Escribir "Ingrese la nota 1: ". caso //contrario es rechazado Definir calif1. nótese que también se usa operadores relacionales. Ejemplo 7: Operador lógico O (“|”): Una escuela aplica dos exámenes a sus aspirantes. éstos van acompañados de operadores relacionales. Por lo general cuando hay operadores lógicos. Si ((calif1>=9) | (calif2>=9)) Entonces . por lo que cada uno de ellos obtiene dos calificaciones denotadas como calif1 y calif2. Escribir "Ingrese la nota 2: ". El aspirante que obtenga una calificación mayor o igual que 9 en cualquiera de los exámenes es aceptado. Leer calif2.Jéfferson Beltrán Morales 33 En este ejemplo. en caso contrario es rechazado. calif2 Como Real. Pseudocódigo: Proceso Algoritmo7 //escribe aceptado si una de las 2 calificaciones es >= que 9. Sino Escribir "Estudiante rechazado". nos estaría indicando una instrucción XOR que es un tipo de OR pero exclusivo. no puede considerarse el caso en que tenga la misma nota en los dos exámenes. solo en uno de los dos. Si la instrucción nos dijera que obtenga una nota en cualquiera de los exámenes pero no en ambos. FinSi FinProceso Diagrama de flujo: La instrucción del ejemplo 7 equivale a OR ya que nos dice que puede ser en cualquiera de los exámenes no necesariamente en los dos. Es decir. 34 .Algoritmos en PSeInt Escribir "Estudiante aceptado". En ejemplo 6 la palabra ambos equivale a seleccionar la instrucción AND. Datos de salida: Pago. Datos de entrada: número de horas trabajadas y pago por hora normal. Solución. Lo primero que hay que determinar es si el trabajador trabajó horas extras o no. Definición de variables: ht = horas trabajadas het = horas extras que exceden de 8 ph = pago por hora normal phe = pago por horas extras he = horas extras pt = pago que recibe el trabajador .1. es decir. En los problemas en donde un bloque condicional incluye otro bloque condicional se dice que un bloque está anidado dentro del otro.2. Finalmente. Determinar la cantidad de dinero que recibirá un trabajador por concepto de las horas extras trabajadas en una empresa. es necesario tomar otra decisión.2 ESTRUCTURAS ANIDADAS. Dicho proceso puede repetirse numerosas veces.Jéfferson Beltrán Morales 35 2. el resto se consideran horas extras y que éstas se pagan al doble de una hora normal cuando no exceden de 8. pago total que recibirá el trabajador será: Pago = pago * hora normal * 40 + pago por horas extras. Si no trabajó horas extras tendremos: Pago = pago por hora normal * horas trabajadas. pueden contener otras adentro. sabiendo que cuando las horas de trabajo exceden de 40. Encontrar las horas extras de la siguiente forma: Horas extras = horas trabajadas . si las horas extras exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto al triple. Ejemplo 8. En la solución de problemas encontramos numerosos casos en los que luego de tomar una decisión y marcar el camino correspondiente a seguir. pero la estructura contenida debe comenzar y finalizar dentro de la contenedora.40 En caso que sí trabajó horas extras: Si horas extras>8 entonces a horas extras excedentes de 8=horas extras-8 y pago por horas extras = pago por hora normal * 2 * 8 + pago por hora normal * 3 * horas extras excedentes de 8 De otra forma (sólo horas al doble) pago por horas extras = pago por hora normal * 2 * horas extras. Recordemos que las estructuras no secuenciales se pueden anidar. Si he > 8 entonces //determinamos las horas a pagar al triple het <. Sino //se pagan al doble phe <.8. Escribir "Ingrese el valor por hora normal: ".40.ph * 2 * he.he .ht . Si ht > 40 entonces //determinamos las horas extras he <.ph * 2 * 8 + ph * 3 * het. FinSi //pago horas normales más horas extras pt <. phe. //las 8 se pagan al doble y el resto al triple phe <. het. ht Como Entero. pt Como Real. Leer ht.Algoritmos en PSeInt Pseudocódigo: Proceso Algoritmo8 Definir he. Leer ph.ph * 40 + phe. //variable de horas trabajadas Definir ph. //variables para pago Escribir "Ingrese las horas trabajadas: ". Sino //no hay horas extras 36 . FinSi Escribir "El valor a pagar es: ".ph * ht.Jéfferson Beltrán Morales 37 pt <. FinProceso Diagrama de flujo: . pt. Este es un ejemplo de los algoritmos conocidos como de Lógica Pura.Algoritmos en PSeInt Ejemplo 9. construir un algoritmo para escribir estos números en forma descendente. 38 . Dados los datos A. B y C que representan números enteros diferentes. ya que poseen muchas decisiones y muchas bifurcaciones. Escribir "Los números ordenados descendentemente son: ". La dinámica del problema es comparar dos números a la vez para conocer cuál es el mayor. Leer a. pero nos sirve para ejemplarizar estructuras anidadas.b. Entradas: A. B y C ordenados descendentemente.b." ".b. Si a>b Entonces Si a>c Entonces Si b>c Entonces Escribir a.b. B y C." ". Sino Escribir a. FinSi Sino Si b>c Entonces ." ".c." ". Pseudocódigo: Proceso Algoritmo9 //ordenar 3 números de mayor a menor Definir a. FinSi Sino Escribir c.b.c Como Entero.c.Jéfferson Beltrán Morales 39 Observación: Para ordenar números no es un algoritmo eficiente. Solución: Salida: A. Escribir "Ingrese 3 números: ".a." ".c." ". b. Este problema se podría resolver por estructuras selectivas anidadas o en cascada.a.c. FinSi Sino Escribir c." ". 40 .2. Con frecuencia es necesario que existan más de dos elecciones posibles. pero si el número de alternativas es grande puede plantear serios problemas de escritura y de legibilidad." "." ". FinSi FinSi FinProceso Diagrama de flujo: 2. Sino Escribir b." ".a.Algoritmos en PSeInt Si a>c Entonces Escribir b." ".c.a." ".2 ESTRUCTURA DE SELECCIÓN MÚLTIPLE “SEGÚN”. <número3>: <instrucciones> <. o Al ejecutarse. se evalúa el contenido de la variable y se ejecuta la secuencia de instrucciones asociada con dicho valor.> De Otro Modo: <instrucciones> FinSegun Reglas: o Esta instrucción permite ejecutar opcionalmente varias acciones posibles (distintas entre si). cuyo diagrama de flujo y pseudocódigo son: Diagrama de flujo: Pseudocódigo: Segun <variable> Hacer <número1>: <instrucciones> <número2>. se realizará una de las n acciones o lo que es igual. 3. si toma el valor 2 ejecutará la acción B. el flujo del algoritmo seguirá sólo un determinado camino entre los n posibles. La estructura de selección múltiple se implementa con la sentencia Según. o Cada opción está formada por uno o más números separados por comas. 2.n y según que elija uno de estos valores en la condición. si toma el valor N realizará la acción N.. 1. dependiendo del valor almacenado en una variable de tipo numérico. dos puntos y una secuencia de instrucciones.Jéfferson Beltrán Morales 41 Usando la estructura de decisión múltiple se evaluará una expresión que podrá tomar n valores distintos. . Esta estructura se representa por un selector el cual si toma el valor 1 ejecutará la acción A.….. despliegue el resultado: Pseudocódigo: //Ejemplo de estructura Segun Proceso Algoritmo10 Definir num1. el producto. la secuencia de instrucciones asociada se debe ejecutar cuando el valor de la variable es uno de esos números. la división y 0 en cualquier otro caso. si opc=3.num1+num2. num2. se puede agregar una opción final. cuya secuencia de instrucciones asociada se ejecutará sólo si el valor almacenado en la variable no coincide con ninguna de las opciones anteriores. Leer opc. Escribir "Ingrese los dos números a operar: ". 3: Si num2=0 Entonces Escribir "El denominador no puede ser 0". si opc=2. Segun opc Hacer 1: resp <. opc Como Entero.num1*num2. Escribir "Ingrese una opción: 1 (Suma). 2: resp <. num2. Leer num1.Algoritmos en PSeInt o Si una opción incluye varios números. denominada De Otro Modo. o Opcionalmente. 42 . 2 (Producto). Definir resp Como Real. 3 (División) :". resp <-0. Ejemplo 10: Escribir un algoritmo tal que si opc=1 realice la suma. FinProceso Diagrama de Flujo: Ejemplo 11. Dados como datos la categoría y el sueldo de un trabajador.resp. .0.num1/num2.Jéfferson Beltrán Morales 43 Sino resp <. calcule el aumento correspondiente teniendo en cuenta la siguiente tabla. FinSi De Otro Modo: resp <. Imprimir la categoría del trabajador y el nuevo sueldo. FinSegun Escribir "El resultado es : ". sueldo*0. De Otro Modo: 44 . Segun cat Hacer 1: inc <.07.08.1. 3: inc <. inc. Escribir "Ingrese el sueldo: ".15. Escribir "Ingrese la categoría: ". nuevoSueldo Como Real. 4: inc <.sueldo*0. Leer cat.sueldo*0. Leer sueldo.Algoritmos en PSeInt Incrementos Categoría Aumento 1 15% 2 10% 3 8% 4 7% Pseudocódigo: Proceso Algoritmo11 //ejemplo de estructura Segun Definir cat Como Entero. Definir sueldo.sueldo*0. 2: inc <. Los cálculos simples o la manipulación de pequeños conjuntos de datos se pueden realizar fácilmente a mano. pero las tareas grandes o repetitivas son realizadas con mayor eficiencia por una computadora. Las estructuras de control repetitivas son aquellas en las que una sentencia o grupos de sentencias se repiten muchas veces.". nuevo sueldo: ". Este conjunto de sentencias se denomina bucle. Escribir "Categoría: ". .sueldo + inc. FinSegun nuevoSueldo <.Jéfferson Beltrán Morales 45 inc<.cat. ciclo. lazo.0.nuevoSueldo. Las acciones que se repiten en un bucle constituyen el cuerpo del bucle. Las computadoras están especialmente preparadas para ejecutar tareas repetidamente.3 ESTRUCTURAS REPETITIVAS O ITERATIVAS. FinProceso Diagrama de Flujo: 2. o loop. y cada repetición del cuerpo del bucle se denomina iteración. 1 ESTRUCTURA REPETITIVA “PARA”. el valor <inicial> se asigna a la variable <variable>. 2. 46 . se incrementa la variable <variable> en <paso> unidades y se verifica si el valor almacenado en <variable> es mayor que el valor <final>. En la siguiente figura se muestra el diagrama de flujo de la estructura Para: El pseudocódigo es: Para <variable> <. Si se omite la cláusula Con Paso <paso>. que es la cantidad de unidades en las que se incrementará o decrementará la variable de control en cada iteración.Algoritmos en PSeInt Las estructuras repetitivas básicas son:    Estructura Para. la variable <variable> se incrementará en uno. Al llegar al final del bucle (FinPara).<inicial> Hasta <final> (Con Paso <paso>) Hacer <instrucciones> FinPara Al ejecutarse la sentencia Para la primera vez. Para aplicaciones de este tipo se utiliza la sentencia Para.3. Estructura Mientras. Algunos lenguajes permiten definir lo que se llama paso. denominada variable de control. En numerosas ocasiones se puede necesitar un bucle que se ejecute un número determinado de veces. Estructura Repetir. y cuyo número se conozca por anticipado. y a continuación se ejecuta las sentencias de instrucciones que forman el cuerpo del bucle. en caso negativo se vuelve a ejecutar todas las sentencias del interior del bucle hasta que la variable de control <variable> sea mayor que el valor final <final>. Esta sentencia requiere que conozcamos por anticipado el número de veces que se ejecutarán las sentencias del interior del bucle. <nombre del acumulador> + <valor variable>. el acumulador va aumentando en una cantidad variable. Es una variable que suma sobre sí misma un conjunto de valores para de esta manera tener la suma de todos ellos en una sola variable. Representación: <Nombre del acumulador> <. Pseudocódigo: Proceso Algoritmo12 //Ejemplo estructura Para Definir i. Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso o acción. Los contadores se utilizan con la finalidad de contar sucesos o acciones internas de un bucle. Se situará antes y fuera del bucle.1.Jéfferson Beltrán Morales 47 Es común usar en las estructuras repetitivas los contadores y acumuladores que los describimos a continuación: 2.suma Como Entero.<nombre del contador> + <valor constante>. deben realizar una operación de inicialización y posteriormente las sucesivas de incremento o decremento del mismo. La diferencia entre un contador y un acumulador es que mientras el primero va aumentando un valor constante.3.1. //inicializo el acumulador . Si en vez de incremento es decremento se coloca un menos en lugar del más.2 ACUMULADOR O TOTALIZADOR. Se desea resolver el problema usando estructura Para.1 CONTADOR. 2.i + 1.3. Ejemplo: i <. La inicialización consiste en asignarle al contador un valor. Calcular la suma de los cuadrados de los primeros 100 enteros y escribir el resultado. Ejemplo 12. Representación: <nombre del contador> <. FinProceso Diagrama de flujo: Ejemplo 13. Calcular la promedio de N números enteros y escribir el resultado.suma.0.Algoritmos en PSeInt suma <. FinPara Escribir "La suma de los 100 primeros enteros es: ". 48 . Pseudocódigo: // Calcula el promedio de una lista de N datos Proceso Algoritmo13 Definir i. numDatos Como Entero. Para i<-1 Hasta 100 Con Paso 1 Hacer suma <.suma + i*i. Leer dato. dato Como Real. Para i<-1 Hasta numDatos Hacer Escribir "Ingrese el dato ".i. FinPara promedio <. Leer numDatos.": ". acum <. Escribir "Ingrese la cantidad de datos:".acum / numDatos.acum + dato.0. FinProceso Diagrama de flujo: . Escribir "El promedio es: ".promedio. acum <.Jéfferson Beltrán Morales 49 Definir acum. promedio. Algoritmos en PSeInt 2.2 ESTRUCTURA ITERATIVA “MIENTRAS”. El diagrama de flujo y pseudocódigo de la estructura iterativa mientras son: 50 . La estructura iterativa Mientras es aquella en la que el número de iteraciones no se conoce por anticipado y el cuerpo del bucle se repite mientras se cumple una determinada condición.3. Por esta razón. se lo conoce como bucle condicional. a fin de evitarlo. Después de cada iteración la expresión lógica se evalúa y se verifica de nuevo. Esto significa que el bucle se ejecutará indefinidamente a menos que algo en el interior del mismo modifique la condición haciendo que su valor pase a falso. Como recordarás. Este proceso se repite mientras la expresión lógica sea verdadera. cero o más veces. ninguna acción se realiza y el programa sigue en la siguiente sentencia después del bucle. entonces se ejecuta el cuerpo del bucle y se evalúa de nuevo la expresión lógica <condición>. . Si se evalúa como falsa. entonces el bucle no termina nunca y se denomina bucle o loop infinito (en general. lo primero que sucede es la evaluación de la expresión lógica <condición>. es decir. Calcular la suma de los cuadrados de los primeros 100 números enteros y escribir el resultado. Ahora lo haremos con la estructura Mientras. las instrucciones del cuerpo del bucle deben contener alguna instrucción que modifique la o las variables involucradas en la expresión lógica <condición>. Solución. si cambia de verdadera a falsa la sentencia mientras finaliza. de modo que sea falsa en algún momento y así finalice la ejecución del ciclo. Si la expresión nunca cambia de valor. Ejemplo 14. resolvimos este ejercicio en la lección anterior pero utilizando la estructura Para. se puede ejecutar el bucle. esta situación no es deseable). Si la expresión lógica se evalúa como verdadera. Mientras que la condición sea verdadera el bucle se ejecutará.51 Jéfferson Beltrán Morales Diagrama de flujo: Pseudocódigo: Mientras <condición> Hacer <instrucciones> FinMientras Cuando la sentencia mientras se ejecuta. i <. //incremento el contador i <.suma Como Entero. para llevar la cuenta de las veces que entramos al cuerpo del bucle. cuando no se cumple la condición.1.Algoritmos en PSeInt En este caso. FinMientras Escribir "La suma de los 100 primeros enteros es: ". //inicializo el acumulador y el contador suma <.0. También es importante notar que esta variable se debe inicializar antes de entrar al cuerpo del ciclo y dentro del cuerpo se incrementará en uno cada vez que ingrese a él. Esta variable además nos sirve para compararla con el valor dado en la condición.i+1. se necesita un contador (un índice). Pseudocódigo: //Ejemplo estructura Mientras Proceso Algoritmo14 Definir i. Mientras i<=100 Hacer //sumo al acumulador suma <.suma + i*i. se sale del ciclo.suma. FinProceso Diagrama de flujo: 52 . Por ejemplo. 2. ya que nunca será una . un valor centinela en esta lista puede ser -1.Jéfferson Beltrán Morales 53 En las estructuras cíclicas condicionales es común controlar los ciclos con centinelas y banderas. la condición mientras especifica que el cuerpo del bucle debe continuar ejecutándose mientras la tarea no haya sido completada. En un bucle mientras controlado por tarea. esto puede ser controlado por centinelas. si se tienen las calificaciones de un test (comprendida entre 0 y 100).1 CENTINELAS. Centinelas son variables que toman valores adecuados para suspender el ingreso a un bucle.3.2. Escribir "Ingrese el gasto realizado: ". gasto2. -1 donde gastoi es el gasto número i y sumaGasto es el acumulador de gastos efectuados. Ejemplo 15.. Mientras gasto <> -1 Hacer sumaGasto <.sumaGasto + gasto.. Pseudocódigo: //Ejemplo de centinelas Proceso Algoritmo15 Definir gasto. . Si la lista de datos son números positivos.Algoritmos en PSeInt calificación válida y cuando aparezca este valor se terminará de ejecutar el bucle.. FinMientras Escribir "El gasto total es: ". Escribir "Ingrese -1 para salir".. Solución: Si definimos gasto1. -1 es el centinela de fin de datos. Escribir "Ingrese el gasto realizado: ". Leer gasto.sumaGasto. sumaGasto <. pero no sabemos exactamente cuántos fueron. Suponga que debemos obtener la suma de los gastos que hicimos en nuestro último viaje. un valor centinela puede ser un número negativo. gasto3.0. //leemos gasto fuera del bucle mientras Leer gasto. sumaGasto Como Real. FinProceso Diagrama de flujo: 54 . 2. son variables que pueden tomar solamente dos valores durante la ejecución del .3. flags o conmutadores. switch. Conocidas también como interruptores.2 BANDERAS.Jéfferson Beltrán Morales 55 2. FinSi 56 . i <..0. Mientras i <= num Hacer Si bandera = Verdadero Entonces serie <.serie + 1/i.1/N. Ejemplo 16: Leer un número entero N y calcular el resultado de la siguiente serie: 1 .Falso.1/2+ 1/3 .1/i. Se les suele llamar interruptores porque cuando toman los valores 0 ó 1 están simulando un interruptor abierto/cerrado o encendido/apagado. num Como Entero. Definir i. bandera <. Pseudocódigo: //Ejemplo de banderas Proceso Algoritmo16 Definir bandera Como Logico. o bien los valores booleanos True o False. Leer num. Definir serie Como Real. serie <.serie ... Escribir "Ingrese el valor de N: ".1. Sino serie <. bandera <. //inicializamos la bandera bandera <.Verdadero. +/.Algoritmos en PSeInt programa.Verdadero. los cuales pueden ser 0 ó 1.1/4+. FinProceso Diagrama de flujo: .i+1.Jéfferson Beltrán Morales 57 i <.serie. FinMientras Escribir "La suma de la serie es: ". 58 .3 ESTRUCTURA ITERATIVA “REPETIR”.Algoritmos en PSeInt 2.3. (Observe que los .59 Jéfferson Beltrán Morales La estructura iterativa Repetir es una bucle condicional como lo es también la estructura Mientras. por ejemplo es cuando el usuario digita una letra para salir como ‘S’ o ‘N’ para indicar si desea continuar o no. El diagrama de flujo de la estructura Repetir es el siguiente: El pseudocódigo de la estructura Repetir es: Repetir <instrucciones> Hasta Que <condición> Al ejecutarse esta instrucción. Se usa cuando el número de iteraciones no se conoce por anticipado (lo cual si se conoce en la estructura Para). Además. en el primero. el cuerpo del ciclo se ejecuta nuevamente y se vuelve a evaluar la condición. Esto se repite hasta que la condición sea verdadera. El bucle debe repetirse hasta que la respuesta del usuario sea ‘n’ o ‘N’. el bucle continúa hasta que la condición se hace verdadera (la condición se comprueba después de ejecutar la acción. la secuencia de instrucciones que forma el cuerpo del ciclo se ejecuta una vez y luego se evalúa la condición <condición>. el bucle continúa mientras la condición es verdadera (la cual se comprueba antes de ejecutar la acción. las instrucciones del cuerpo del ciclo serán ejecutadas al menos una vez. Si la condición es falsa. es decir se ejecuta cero o más veces) y en el segundo. Entonces. Note que. se ejecutará al menos una vez). Un ciclo Repetir controlado por centinela. a fin de evitar ciclos infinitos. dado que la condición se evalúa al final. La diferencia entre ambas es que la condición se sitúa al inicio (Mientras) o al final (Repetir) de la secuencia de instrucciones. el cuerpo del ciclo debe contener alguna instrucción que modifique la o las variables involucradas en la condición de modo que en algún momento la condición sea verdadera y se finalice la ejecución del ciclo. es decir. Solución.0. Repetir //sumo al acumulador suma <. Ejemplo 17: Calcular la suma de los cuadrados de los primeros 100 números enteros y escribir el resultado. Esto quiere decir. que en esta estructura el bucle se realizará por lo menos una vez. no con estructuras Para). Nuevamente resolveremos el ejercicio de las dos lecciones anteriores. Hasta Que i>100 60 . la condición ahora estará colocada al final del bucle para que primero se ejecute la instrucción y luego se verifique si la condición se cumple. Pseudocódigo: //Ejemplo estructura Repetir Proceso Algoritmo17 Definir i. En el bucle Mientras. A diferencia de la estructura Mientras. Como sabemos. También podrás observar que la condición está al revés. i <. la condición se evaluaba mientras era verdadera. ahora utilizando la estructura Repetir. //incremento el contador i <. //inicializo el acumulador y el contador suma <.suma Como Entero.1.Algoritmos en PSeInt centinelas solamente pueden usarse con las estructuras Mientras y Repetir.i+1.suma + i*i. en los bucles condicionales podemos usar una variable contador que debe inicializarse antes del ciclo e incrementarse dentro del bucle para controlar el número de veces que se ingresará al mismo. porque el bucle se repite hasta que la condición se cumpla. Pseudocódigo: //Ejemplo estructura Repetir con centinelas Proceso Algoritmo18 Definir suma. FinProceso Diagrama de flujo: Ejemplo 18. hasta que él decida no ingresar más números. Se desea calcular la suma de N números ingresados por el usuario..Jéfferson Beltrán Morales 61 Escribir "La suma de los 100 primeros enteros es: ". num Como Real.suma. . //inicializo la centinela Repetir Escribir "Ingrese un número: ". //sumo al acumulador suma <. //inicializo acumulador suma <. FinProceso Diagrama de flujo: 62 .suma.0. Hasta Que (resp='N' | resp='n') Escribir "La suma es: ". // leo la respuesta Leer resp. Leer num.Algoritmos en PSeInt Definir resp Como Caracter. //pregunto se desea continuar Escribir "Desea ingresar otro número (S/N): ".suma + num. 63 Jéfferson Beltrán Morales 2. Todas las variables que se han considerado hasta ahora son de tipo simple. puesto que una variable que se define con alguno de estos tipos sólo puede almacenar . real.4 ESTRUCTURA DE DATOS Y ARREGLOS. Una variable de tipo estructurado consiste en toda una colección de casillas de memoria. carácter. Los tipos de datos estudiados: entero. Una variable de tipo simple consiste de una sola localidad o “caja” de memoria y sólo puede contener un valor a la vez. lógico son considerados como datos de tipo simple. 1 ESTRUCTURA DE DATOS. puede representar a múltiples datos individuales. etc. La elección de la estructura de datos idónea dependerá de la naturaleza del problema a resolver y. Los datos de tipo estándar pueden ser organizados en diferentes estructuras de datos: estáticas y dinámicas.4.4. puede almacenar más de un elemento (valor) a la vez.Algoritmos en PSeInt un valor a la vez. Corresponden a este tipo los arreglos y registros. es decir. Un arreglo es una estructura de datos en la que se almacena una colección de datos del mismo tipo (por ejemplo. un arreglo es una colección finita. del lenguaje. reales. Dicho de otra forma. existe una relación de uno a uno entre la variable y el número de elementos (valores) que es capaz de almacenar.  Estructuras de Datos Dinámicas. 2. árboles y grafos. con la condición de que todos los elementos deben ser del mismo tipo. los sueldos de los empleados de una empresa).  Estructura de Datos Estáticas. en menor medida. Corresponden a este tipo las listas. para ello se utiliza un índice que especifique la posición relativa en el arreglo. 64 . Estructura de Datos es una colección de datos que se caracterizan por su organización y las operaciones que se definen en ella. homogénea y ordenada de elementos. En resumen. Son aquellas en las que se asigna una cantidad fija de memoria cuando se declara la variable y no puede ser modificada durante la ejecución del programa. Son aquellas en las que el espacio ocupado en memoria puede ser modificado en tiempo de ejecución. un arreglo y es una lista de un número finito n de elementos del mismo tipo que se caracteriza por:    Almacenar sus elementos en posiciones de memoria contiguas Tener un único nombre de variable (por ejemplo salarios) que representa a todos los elementos Permitir acceso directo o aleatorio a sus elementos individuales. que se puede tener un conjunto de datos enteros. 2. Las estructuras de datos tienen en común que un identificador o nombre. es decir. En cambio un dato de tipo estructurado.2 ARREGLOS. Estas estructuras no son soportadas en todos los lenguajes. Homogénea. Bidimensionales (tablas o matrices).. Multidimensionales (tres o más dimensiones). Todos los elementos del arreglo deben ser del mismo tipo. el segundo. Así se tienen los arreglos:    Unidimensionales (vectores). . es decir... y el n-ésimo elemento.. debe determinarse cuál será el número máximo de elementos que podrán formar parte del arreglo..65    Jéfferson Beltrán Morales Finita. Todo arreglo tiene un límite. el tercero. Los arreglos se clasifican de acuerdo con el número de dimensiones que tienen. Ordenada: Se puede determinar cuál es el primer elemento. nota100. Se imagina declarar las 100 variables... nota100. Para calcular la media: media  (nota1+nota2+.. nota3. Para la lista de calificaciones mayores que la media.+nota100)/100... FinSi Si nota2 > media Entonces Escribir nota2......... ¿cuántas instrucciones involucra? Definir nota1. nota2.. Supongamos también que hay 100 calificaciones... En la fase de lectura de datos. Leer nota1. FinSi … Si nota100 > media Entonces Escribir nota100... nota2. Leer una lista de calificaciones de un examen. Con lo estudiado hasta el momento. 4.. nota3.. deberá también compararse una por una: Si nota1 > media Entonces Escribir nota1. Suponga que se desea desarrollar un programa para: 1. por lo tanto serán 100 veces). . Encontrar su media. ¡Todavía falta ordenar la lista de calificaciones en orden ascendente! 66 . Escribir una lista de las calificaciones mayores que la media. nota2...Algoritmos en PSeInt Ejemplo..nota100 Como Entero. deberíamos utilizar 100 variables diferentes nota1...... de ese modo son 100 direcciones diferentes de memoria para almacenar las calificaciones del examen. 2...... FinSi Y después de muchísimas líneas de código. Ordenar la lista de las calificaciones en orden ascendente. (En la declaración real de un algoritmo en pseudocódigo no pueden usarse puntos suspensivos. 3. serán también 100 veces las instrucciones para ir leyendo cada valor. y la máxima cantidad de elementos debe ser una expresión numérica positiva.<identM>(<maxM1>.<maxN>). Queremos también que esta estructura se almacene en memoria principal para que su almacenaje y recuperación sea más rápida.<max1N>). declarar los rangos de sus índices... lo cual determina cuantos elementos se almacenarán y como se accederá a los mismos. Para poder utilizar un arreglo.. todos del mismo tipo y se puede acceder a cada elemento directamente especificando su posición en esta secuencia. Dimesion <identificador> (<max1>.. Los N parámetros indican la cantidad de dimensiones y el valor máximo de cada una de ellas. En el caso anterior... Se pueden definir más de un arreglo en una misma instrucción. . y esto es algo lento. Dimension <ident1> (<max11>. es decir. La instrucción Dimension permite declarar un arreglo.. separándolos con una coma (. sólo se puede acceder a un elemento buscando desde el principio de la lista. de esa manera se requerirá el mismo tiempo para acceder al elemento de la posición 100 que el de la posición 5. se debe inicializar sus elementos antes de utilizarlos  Definición y Dimensionamiento.<maxMN>). indicando sus dimensiones. matriz Como Entero. La cantidad de dimensiones puede ser una o más.20].. Dimension vector[100]. matriz[10. Es por ello que existen los arreglos. un nombre único y su dimensionamiento. Esta instrucción define un arreglo con el nombre indicado en <identificador> y N dimensiones... porque es fácil recorrer toda la lista de notas con unas pocas instrucciones. debemos indicar su tipo. Ejemplo: Definir vector.. Es importante notar que es necesario definir un arreglo antes de utilizarlo.67 Jéfferson Beltrán Morales Los arreglos nos permiten ahorrar instrucciones..).. Lo que se necesita es una estructura de acceso directo que permita almacenar y recuperar los datos directamente especificando su posición en la estructura. que están organizados en una secuencia de elementos. cuando el acceso a la información es secuencial. Al declarar un arreglo. 1. tamaño fijo significa que el tamaño del arreglo debe ser conocido en tiempo de compilación y homogéneo significa que todos sus elementos son del mismo tipo.4.2. los índices de elementos válidos van de 0 a 99 (aunque existen lenguajes que inician los índices de los arreglos en 1). a cada una de las cuales se puede acceder directamente mediante un número entero denominado índice del arreglo. vector[97] vector[98] vector[99] 2.1 ARREGLO UNIDIMENSIONAL.1 PARTES DE UN ARREGLO. y se diferencian por la posición que tiene cada elemento dentro del arreglo de datos. 68 . es decir. tamaño fijo y elementos homogéneos que se almacenan bajo un mismo nombre. Permiten hacer referencia a los componentes del arreglo en forma individual. Hacen referencia a los elementos que forman el arreglo. Finitos indica que hay un último elemento. especifican cuántos elementos tendrá el arreglo y además. vector[0] vector[1] vector[2] ……….Algoritmos en PSeInt 2.. de qué modo podrán accederse esos componentes.4. es decir. si declaramos un arreglo de 100 elementos.2. a los valores que se almacenan en cada una de las casillas del mismo. Generalmente los índices de los elementos de los arreglos inician en 0.   Los componentes. que identifica la posición del elemento dentro del conjunto. Los elementos del arreglo se almacenan en posiciones contiguas de memoria. Un arreglo de una dimensión (también conocido como vector) es un tipo de datos estructurado compuesto de un número de elementos finitos. Los índices. sólo que en lugar de leer el componente del arreglo. o Recorrido (acceso secuencial). modificación). o Actualización (inserción.0 Hasta 99 Con Paso 1 Hacer Leer vector[i]. Definir vector Como Real. Usamos los índices para recorrer los elementos del arreglo.  Lectura. El proceso de lectura de un arreglo consiste en leer y asignar un valor a cada uno de sus elementos. Es similar al caso de lectura. Dimension vector[100]. o Ordenación.. eliminación. Ejemplo: .2. 2. valor97 valor98 valor99  Componentes Definición y Dimensionamiento. Las operaciones que se pueden realizar con vectores durante el proceso de resolución de un problema son: o Lectura/ Escritura. lo escribimos. Ejemplo..4. o Búsqueda.2 OPERACIONES CON ARREGLOS. FinPara  Escritura. Ejemplo: Para i <.Jéfferson Beltrán Morales 69 valoro valor1 valor2 ………. o Asignación. Normalmente se realizan con estructuras repetitivas. Definir un arreglo llamado vector de 100 elementos de tipo Real.1. No es posible asignar directamente un valor a todo el arreglo.10. FinPara  Asignación. FinPara  Acceso Secuencial. Recorrido del vector es la acción de efectuar una acción general sobre todos los elementos de ese vector. Por ejemplo.  Actualización. Se debe tener en cuenta si el arreglo está o no ordenado.Algoritmos en PSeInt Para i <. Podemos recorrer el arreglo con una estructura repetitiva y asignar un valor a todos los elementos del arreglo. borrar o modificar algunos de los ya existentes.0 Hasta 99 Con Paso 1 Hacer Escribir vector[i]. Incluye añadir (insertar).5. Añadir datos a un vector consiste en agregar un nuevo elemento al final del vector.vector[1] / 2. //asigna una operación al arreglo vector //Se puede asignar un valor constante a todos los elementos del vector Para i <. siempre que haya espacio en memoria (recordemos que el tamaño de un arreglo es fijo). Ejemplo: Para i <. Ejemplo: vector[1] <. sino que se debe asignar el valor deseado en cada componente. (Recorrido).0 Hasta 99 Con Paso 1 Hacer vector[i] <. Siempre es importante inicializar las variables y por lo tanto también los arreglos. inicializar con 0 cada elemento del arreglo. FinPara  Inicialización. 70 . //asigna el valor 5 a la posición 1 del arreglo vector vector[10] <.0 Hasta 99 Con Paso 1 Hacer vector[i] <.0. El acceso a los elementos de un vector puede ser para leer en él o para escribir (visualizar su contenido). (i+1). FinPara //leo los elementos del arreglo Para i<-0 Hasta n-1 Con Paso 1 Hacer Escribir "Ingrese el valor ". Se desea ingresar una lista de n valores numéricos y calcular la suma. //supongamos que n es 10 n<-10. los números mayor y menor de dicha lista Pseudocódigo: //Ejemplo de arreglos Proceso Algoritmo19 Definir lista. mayor. Definir promedio como Real. //defino el arreglo y su tamaño Dimension lista[n]. FinPara . suma. //inicializo variables suma<-0. salvo que se trata de varias dimensiones y no sólo de una. Las partes de un arreglo unidimensional y las operaciones son las mismas que en los arreglos multidimensionales (pueden extenderse).Jéfferson Beltrán Morales 71 Observación. menor. Ejemplo19. Leer lista[i]." de la lista: ". //inicializo el arreglo Para i<-0 Hasta n-1 Con Paso 1 Hacer lista[i]<-0. n Como Entero. i. el promedio. mayor. //calculo la suma recorriendo el arreglo Para i<-0 Hasta n-1 Con Paso 1 Hacer suma<-suma+lista[i]. FinProceso Diagrama de flujo: 72 . //calculo los números mayor y menor de la lista Para i<-1 Hasta n-1 Con Paso 1 Hacer Si lista[i]>mayor Entonces mayor<-lista[i]. ".Algoritmos en PSeInt //inicializo los números mayor y menor con el primer //elemento del arreglo mayor<-lista[0]. ". menor. FinPara //calculo el promedio promedio<-suma/n. Escribir "Número mayor: ". menor<-mayor. suma. FinSi FinPara //presento los resultados Escribir "Suma: ". promedio. Promedio: ". Número menor: ". FinSi Si lista[i]<menor Entonces menor<-lista[i]. 73 Jéfferson Beltrán Morales . //no es "" el nombre no se necesita buscar un repetido Si nombre<>"" Entonces Para i <. // leer la lista cant <.0 Hasta cant-1 Hacer Si nombre=lista[i] Entonces 74 . Repetir // leer un nombre y ver que no esté ya en la lista Leer nombre. Ingresar una lista de nombres (la lista termina cuando se ingresa un nombre en blanco).nombre.j.cant+1. Dimension lista[200]. Definir seRepite Como Logico. no se permite ingresar nombres repetidos y luego ordenar y presentar la lista. lista[cant] <.posMenor Como Enteros.i. Pseudocódigo: //Ordenamiento de un arreglo Proceso Algoritmo20 Definir nombre.Falso.Algoritmos en PSeInt Ejemplo 20. cant <.lista. seRepite <. Escribir "Ingrese un nombre (enter en blanco para terminar):". Definir cant.0. Mientras nombre<>"" Hacer Escribir "Ingrese un nombre: ".aux Como Cadenas. Leer nombre. Escribir "Ingrese un nombre: ".Verdadero.i. FinSi FinPara FinSi Hasta Que ~ seRepite FinMientras // ordenamos la lista Para i <.aux.cant. //salgo del bucle pues es ya //repetido y no necesito seguir buscando i <.i+1 Hasta cant-1 Hacer Si lista[j] < lista[posMenor] Entonces posMenor <.lista[posMenor]. FinSi FinPara // intercambia el que estaba en i con el menor que encontró aux <. lista[i] <.0 Hasta cant-2 Hacer // busca el menor entre i y cant posMenor <.Jéfferson Beltrán Morales 75 seRepite <. Escribir "Nombre repetido".lista[i]. Para j <. FinPara . lista[posMenor] <.j. FinPara FinProceso Diagrama de flujo: 76 .lista[i].Algoritmos en PSeInt // mostrar como queda la lista Escribir "La lista ordenada en forma ascendente es:". Para i <.0 Hasta cant-1 Hacer Escribir " ". 77 Jéfferson Beltrán Morales . m.j] matriz[i. etc.).1] …. 1 2 J N 1 matriz[0. n. Dimension matriz[10.4. matriz2.20]. en numerosas ocasiones es necesario trabajar con datos que tengan más de una dimensión (se representan por ejemplo como tablas de doble entradas.. Se desea realizar la suma de dos matrices.Algoritmos en PSeInt 2.1] ….0] matriz[1. Para localizar o almacenar un valor en el arreglo se deben especificar dos posiciones (dos subíndices). ingresar las dimensiones por teclado.3 ARREGLO BIDIMENSIONAL. matriz3 Como Entero. las filas y columnas de las matrices inician en 0).1] …. 78 .nM 1.n-1] matriz[mmatriz[mmatriz[m-1. Ejemplo: Definir una arreglo bidimensional de 10 filas y 20 columnas de números enteros llamado matriz.j] matriz[0. j. Una matriz se representa como una tabla. Un arreglo bidimensional (matriz o tabla) es un arreglo con dos índices. uno para la fila y otro para la columna. matriz[0. Hasta ahora hemos visto cómo se puede manipular información con una sola columna o lista de entrada con los llamados vectores.. Pseudocódigo: //Ejemplo de matrices Proceso Algoritmo21 Definir i. matriz[i. Sin embargo.j] matriz[1. matriz1.. Internamente en memoria se reservan MxN posiciones consecutivas para almacenar todos los elementos del arreglo.j] 1] Ejemplo 21. I matriz[i.  Declaración de una matriz. matriz[1.n-1] 2 matriz[1. cubos. Definir matriz Como Entero. o arreglos de una dimensión..1] …..n-1] …. donde: 1≤I≤M y 1≤J≤N (observe que al igual que en los vectores.0] matriz[0.0] matriz[m-1.0] matriz[i. 1. //ingreso la primera matriz Escribir "Ingrese la matriz A:".j].j+1. Para i <. matriz3[m. Leer n."]".".j+1. //ingreso la segunda matriz Escribir "Ingrese la matriz B:".n]."]". FinPara FinPara . Para i <.Jéfferson Beltrán Morales 79 Escribir "Ingrese el número de filas: ". Limpiar Pantalla.n].j].0 Hasta n-1 Con Paso 1 Hacer Escribir "Ingrese el valor A[".". FinPara FinPara Limpiar Pantalla.0 Hasta n-1 Con Paso 1 Hacer Escribir "Ingrese el valor B[". Escribir "Ingrese el número de columnas: ".". Leer matriz1[i. //defino la dimensión de las matrices Dimension matriz1[m.i+1.". matriz2[m.i+1.n]. Leer m. Leer matriz2[i.0 Hasta m-1 Con Paso 1 Hacer Para j <.0 Hasta m-1 Con Paso 1 Hacer Para j <. ".0 Hasta m-1 Con Paso 1 Hacer Para j <.". FinPara FinPara FinProceso Diagrama de flujo: 80 ."]=". Limpiar Pantalla.matriz1[i..i+1.j].Algoritmos en PSeInt Escribir "Presione enter. Para i <..matriz3[i.". Escribir "C[".0 Hasta n-1 Con Paso 1 Hacer matriz3[i.j] + matriz2[i. Esperar Tecla.j] <.j].j+1. //sumo las matrices y las presento en pantalla Escribir "La suma de A+B es:". 81 Jéfferson Beltrán Morales . idealmente. o Los procedimientos se pueden ejecutar más de una vez en un programa y en diferentes programas. la solución se divide o segmenta en módulos que ejecutan partes o tareas específicas. Estos sub problemas se implementan mediante módulos o subprogramas. 2. de modo que normalmente un proyecto de programación se compone de un programa principal y un conjunto de subprogramas. Los subprogramas son una herramienta importante para el desarrollo de algoritmos y programas. Un subprograma realiza una tarea concreta que se describe con una serie de instrucciones y que.5 MODULARIDAD. 82 . que permite descomponer un problema complejo en sub problemas hasta que éstos sean concretos y fáciles de resolver. ahorrando en consecuencia tiempo de programación. o Aumenta la facilidad de depuración y búsqueda de errores en un programa ya que éstos se pueden aislar fácilmente depurándose sus errores individualmente antes de su inclusión en bibliotecas independientes y de ser llamados en el programa principal. Cuando un problema es complejo o extenso.Algoritmos en PSeInt 2. se puede utilizar en otros programas eliminando la duplicación innecesaria de código (reutilización de código). Cuando existe un grupo de instrucciones o una tarea específica que deba ejecutarse en más de una ocasión. Las ventajas más sobresalientes de utilizar subprogramas o módulos son: o El uso de subprogramas facilita el diseño descendente y modular. en esencia. se puede ver como una caja negra (encapsulamiento) que ejecuta una tarea en particular en un programa. El descomponer un programa en módulos independientes más simples se conoce también como el método de "Divide y vencerás". con las llamadas a los mismos dentro del programa principal. Una vez que el módulo se ha escrito y comprobado. acepta entradas y produce ciertas salidas. ¿Cuándo es útil la modularización? Este enfoque de segmentación o modularización es útil en dos casos: 1.  Ventajas de la Programación Modular. Una estrategia para la resolución de problemas complejos con computadoras es la división o descomposición del problema en otros problemas más pequeños y fáciles de resolver. Un subprograma. debería ser independiente de otros subprogramas. que son unidades de programas diseñados para ejecutar una tarea específica. Un parámetro es. Por consiguiente. ya que éstos no siempre son necesarios. Son funciones definidas el programador con el propósito de ejecutar alguna función específica.5. mientras que los de salida son aquellos cuyos valores se calcularán en el . hay dos tipos de parámetros: parámetros de entrada y parámetros de salida. uno o varios valores. Un parámetro es un medio para pasar información – valores a variables – del programa principal a un subprograma y viceversa. prácticamente. 2. Una de las características importantes y diferenciadoras de los subprogramas es la posibilidad de comunicación entre el programa principal y los subprogramas (o entre dos subprogramas). y que por lo general se usan cuando se trata de hacer algún cálculo que será requerido en varias ocasiones en la parte principal del algoritmo. Esta comunicación se realiza a través de una lista de parámetros. Las funciones normalmente devuelven un sólo valor a la unidad de programa (programa principal u otro subprograma) que los referencia (que los llama o invoca).83 Jéfferson Beltrán Morales o El uso de subprogramas facilita la división de tareas de programación entre un equipo de programadores. Las funciones se dividen en estándares y definidas por el usuario. Las funciones y procedimientos están compuestos por un grupo de sentencias a las que se asigna un nombre (identificador) y constituyen una unidad de programa a la que se puede invocar desde el programa principal u otra función o procedimiento. Los procedimientos pueden devolver cero.1 PROCEDIMIENTOS Y FUNCIONES. Los de entrada son aquellos cuyos valores deben ser proporcionados por el programa principal. Son funciones proporcionadas por lenguaje de programación. o El uso de módulos facilita la proyección y la comprensión de la lógica subyacente para el programador y el usuario. Los subprogramas en programación estructurada se clasifican en procedimientos y funciones.   Estándar. Definidas por el usuario. No es obligatorio que un subprograma utilice parámetros. una variable cuyo valor debe ser o bien proporcionado por el programa principal al subprogramas o ser devuelto desde el subprogramas al programa principal. Una variable local sólo está disponible durante el funcionamiento del mismo. cuyos valores se pueden utilizar sólo dentro del subprograma en el que están declaradas. <- nombre_de_la_funcion(argumento_1. A diferencia de las variables locales. la local prevalecerá sobre la global dentro del módulo en que ha sido declarada.5. tienen el mismo nombre.1. es una buena práctica evitar el uso de variables globales desde subprogramas a menos que sea estrictamente necesario... Hay que tener especial precaución al trabajar con variables globales. y se comportarán como variables locales únicamente dentro de dicho bloque o estructura. 84 . una global y una local. Las variables también pueden ser declaradas dentro de un bloque o estructura de control. En PSeInt el pseudocódigo para la implementación de procedimientos y funciones se realiza de la siguiente manera: SubProceso variable_de_retorno argumento_2.Algoritmos en PSeInt subprograma y se deben devolver al programa principal para su proceso posterior. y su valor se pierde una vez que el subprograma termina. y se dice que es local al subprograma. ) acción 1. las variables globales pueden ser utilizadas en el programa principal y en todos los subprogramas. Si dos variables.  Visibilidad de las variables. . Por lo general. Una variable local es una variable que está declarada dentro de un subprograma. Las variables que intervienen en un programa con subprogramas pueden ser de dos tipos: variables locales y variables globales. Dos variables locales pueden tener el mismo nombre siempre que estén declaradas en funciones o procedimientos diferentes. ya que al ser recursos compartidos todos los subprogramas pueden tener acceso simultáneo a ellas y se pueden producir errores lógicos debidos a la concurrencia.1 IMPLEMENTACIÓN DE PROCEDIMIENTOS Y FUNCIONES. permanecen activas durante toda la ejecución del programa. Las variables declaradas en el programa principal se denominan variables globales. 2. Para invocar o llamar a un SubProceso (función o procedimiento) se debe utilizar su nombre y entre paréntesis los parámetros. Además. los arreglos se pasan por referencia. El paso por referencia implica que si el SubProceso modifica el argumento. son equivalentes) seguida de la variable de retorno. y finalmente. entonces pueden omitirse el identificador variable_de_retorno y el signo de asignación. Si el subproceso no recibe ningún valor pueden colocarse los paréntesis vacíos u omitirse. . pero si la función retorna algún valor. que podrán ser expresiones sólo si el tipo de pasaje es por referencia. el signo de asignación. . . . Si no se indica. Una llamada puede ser en sí una instrucción. mientras que el paso por valor implica que el SubProceso opera con una copia de la variable (o el resultado de la expresión) que se utilizó en la llamada. FinSubproceso Comienza con la palabra clave SubProceso (o Función. en este caso el SubProceso se denomina una función. por lo que las modificaciones que aplique el SubProceso no se verán reflejadas fuera de la misma. Si el SubProceso no retorna ningún valor. se denomina procedimiento. es decir. las demás expresiones por valor. colocar directamente el nombre y los argumentos a continuación de la palabra clave SubProceso.Jéfferson Beltrán Morales 85 acción 1. la lista de argumentos entre paréntesis. finalizando la primer línea con el nombre del subproceso. se modificará en realidad la variable que se utilizó en la llamada. Realizar una función que acepte dos números como parámetros y devuelva la suma de dichos números. acción n. también puede utilizarse como operando dentro de una expresión. Ejemplo 22. variables de retorno y argumentos son las mismas que para cualquier identificador en pseudocódigo. Las reglas para los nombres de subprocesos. el nombre del subproceso. opcionalmente pueden agregarse las palabras claves Por Valor o Por Referencia para indicar el tipo de paso de variables en cada argumento. Leer num1. Crearemos una función llamada sumarNumeros que será llamada en el programa principal. parametro2 Por Valor) definir suma como Real. num2<-0. Nótese que los nombres de los parámetros en la definición 86 . num1<-0. FinSubproceso Proceso Algoritmo22 Definir suma.Algoritmos en PSeInt Solución. suma<-sumarNumeros(num1. num2 como Real. suma<-parametro1+parametro2. Escribir "La suma es: ". los cuales son pasados al subprograma como parámetros de entrada Por Valor. Escribir "Ingrese el segundo número".sumarNumeros(parametro1 Por Valor. suma<-0. Pseudocódigo: Subproceso suma <. FinProceso En este ejemplo. Esta función la podemos invocar desde el programa principal u otra función o procedimiento. Escribir "Ingrese el primer número". La función “sumarNumeros” calcula la suma y la devuelve como un parámetro de salida y se asigna en la variable suma. Leer num2.num2). num1. vemos la definición (declaración) de una función en pseudocódigo para calcular la suma de dos números reales. suma. no puede haber dentro del mismo programa dos funciones con la misma firma. Al nombre de la función junto con la lista ordenada de sus parámetros de entrada se lo conoce como firma de la función. Sin embargo. Diagrama de flujo: Observe como dentro del programa principal se llama o invoca a la función “sumarNumeros”. Nótese también que el compilador chequeará previamente que el tipo de dato del parámetro de salida de la función (en este caso un número real) pueda ser asignado a la variable suma según su tipo. A primera vista. además que se reutiliza código en cada llamada a una función o procedimiento.87 Jéfferson Beltrán Morales (parametro1 y parametro2) no necesariamente tienen que ser los mismos que los utilizados en la invocación (num1 y num2). sino que la organización de un programa en funciones y/o procedimientos lo hace más fácil de escribir y depurar. En general. . se le pasa num1 y num2 como parámetros por valor y el resultado se asigna en la variable suma. no sólo no es así. las funciones parecen dificultar la escritura de un programa. SubProceso bienvenida (nombre) Escribir "Bienvenido " +nombre. Se desea crear un procedimiento que de la bienvenida al usuario que ingresa al programa.Algoritmos en PSeInt Ejemplo 23. FinSubProceso 88 . //llamada al procedimiento bienvenida(nombre). A primera vista. no sólo no es así. Diagrama de flujo: . Escribir "Ingrese su nombre". FinProceso Al nombre del procedimiento junto con la lista ordenada de sus parámetros de entrada se lo conoce como firma del procedimiento.Jéfferson Beltrán Morales 89 Proceso Algoritmo23 Definir nombre Como Caracter. En general. Sin embargo. los procedimientos parecen dificultar la escritura de un programa. no puede haber dentro del mismo programa dos procedimientos con la misma firma. sino que la organización de un programa en funciones y/o procedimientos lo hace más fácil de escribir y depurar. Leer nombre. además que se reutiliza código al llamar a las funciones o procedimientos haciendo más eficiente la escritura de un programa y el mantenimiento del mismo. sumar (num1. num2) Definir suma como Real. num2) Definir multiplicacion como Real.multiplicar (num1. FinSubProceso 90 .Algoritmos en PSeInt Note como en el programa principal se llama o invoca al procedimiento llamado “bienvenida”. multiplicacion <. multiplicación y división) de dos números. suma <.num1 * num2.num1 + num2. Ejemplo 24. Pseudocódigo: SubProceso suma <. resta. Use funciones y procedimientos. Realizar un algoritmo que calcule las operaciones matemáticas básicas (suma. FinSubProceso SubProceso multiplicacion <. Escribir "CALCULADORA". Escribir "El resultado del producto es: ".num1 .num2. division <. restar(num1. Escribir "Ingrese el primer número: ".dividir (num1. num2) Definir resta como Real. FinSi FinSubProceso Proceso Algoritmo24 Definir num1. multiplicar(num1.restar (num1. num2<-0. Escribir "El resultado de la resta es: ".num2). dividir(num1. FinSubProceso Subproceso calculadora (num1. Si num2!=0 Entonces Escribir "El resultado de la división es: ". num1<-0. FinSubProceso SubProceso division <.num2). .num2). num2) Definir division como Real. Sino Escribir "El resultado de la división es: Denominador igual a 0".num2 como Real. num2) Escribir "El resultado de la suma es: ".Jéfferson Beltrán Morales 91 SubProceso resta <.num1 / num2.num2). sumar(num1. resta <. Diagrama de flujo: 92 . armando de esta manera el programa deseado.num2). FinProceso En el programa principal se orquesta (invoca) al resto de funciones o procedimientos.Algoritmos en PSeInt Leer num1. el procedimiento calculadora imprime en pantalla el resultado de las operaciones matemáticas básicas calculadas con funciones dentro del procedimiento. solamente debe haber escritura. Leer num2. Note que en el programa principal no existe lógica de negocio. lectura. calculadora(num1. Escribir "Ingrese el segundo número: ". validación de datos de entrada y llamadas a funciones y/o procedimientos. 93 Jéfferson Beltrán Morales . Realice la suma de dos matrices usando funciones y/o procedimientos.Algoritmos en PSeInt Ejemplo 25. Pseudocódigo: //Ejemplo de matrices con procedimientos y paso de valores por referencia //(matrices) y por valor //los arreglos por defecto se pasan por referencia //las variables por defecto se pasan por valor 94 . ingresar las dimensiones por teclado. j+1.j]<-matriz1[i." ". j Como Entero."]".i+1.". n ) Definir i."]=". Para i<-0 Hasta m-1 Con Paso 1 Hacer Para j<-0 Hasta n-1 Con Paso 1 Hacer Escribir "Ingrese el valor M[". FinPara .".j]. j Como Entero.j+1.matriz[i. n Por Valor ) Definir i.Jéfferson Beltrán Morales 95 SubProceso leerMatriz (matriz Por Referencia.j]. matriz3 por referencia. m Por Valor.j Como Entero. Para i<-0 Hasta m-1 Con Paso 1 Hacer Para j<-0 Hasta n-1 Con Paso 1 Hacer Escribir sin Saltar "C[". FinPara FinPara FinSubProceso SubProceso escribirMatriz (matriz .j]. n) Definir i. matriz2.j]+matriz2[i. m .". FinPara FinSubProceso SubProceso sumarMatrices (matriz1. Leer matriz[i.". FinPara Escribir "". m.i+1. Para i<-0 Hasta m-1 Con Paso 1 Hacer Para j<-0 Hasta n-1 Con Paso 1 Hacer matriz3[i. Escribir "La suma de matrices es:".n]. matriz3.n]. leerMatriz(matriz2.". 96 . Limpiar Pantalla. //ingreso la primera matriz Escribir "Ingrese la matriz A:". m.m. Leer n.Algoritmos en PSeInt FinPara FinSubProceso Proceso Algoritmo25 Definir i.matriz3 Como Entero. matriz3[m. matriz2.. leerMatriz(matriz1. Escribir "Presione enter.matriz2.n].n).matriz1. Escribir "Ingrese el número de columnas: ".n. Esperar Tecla.j. //sumo las matrices y las presento en pantalla sumarMatrices(matriz1. Escribir "Ingrese el número de filas: ". matriz2[m.. //ingreso la segunda matriz Escribir "Ingrese la matriz B:". n).m. Leer m. Limpiar Pantalla.m. //defino la dimensión de las matrices Dimension matriz1[m.n). Limpiar Pantalla. note como ahora al usar funciones y/o procedimientos se hace más fácil de leer el programa. habíamos realizado el mismo ejercicio.Jéfferson Beltrán Morales 97 escribirMatriz(matriz3 . n). Los arreglos por defecto se pasan por referencia y las variables por defecto se pasan por valor. FinProceso En uno de los ejercicios anteriores. m . además de ser eficiente la escritura del mismo al no reescribir por ejemplo el mismo código cuando se lee cada matriz. Diagrama de flujo: . Algoritmos en PSeInt 98 . 99 Jéfferson Beltrán Morales . vocales Como Caracter. Realizar un algoritmo que ingrese una cadena de caracteres y cuente el número de vocales.j) Entonces cantVocales<-cantVocales+1. Pseudocódigo: SubProceso cantVocales <. i.cuentaVocales ( frase ) Definir cantVocales.i. cantvocales<-0. // lista de letras que vamos a buscar vocales<-"aeiouáéíóúü".Algoritmos en PSeInt 100 Ejemplo 26. j como Entero. Definir i. . Definir vocales como Caracter. // pasamos toda la frase a minúsculas para no tener que preguntar 2 //veces por cada vocal frase<-Minusculas(frase). FinSi FinPara FinPara FinSubProceso Proceso Algoritmo26 Definir frase. // compara todas las letras de frase con las de vocales y contar //coincidencias Para i<-0 hasta Longitud(frase)-1 Hacer Para j<-0 hasta Longitud(vocales)-1 Hacer Si Subcadena(frase.cantVocales Como Entero.j.j.i)=Subcadena(vocales. cantVocales<-cuentaVocales(frase). Escribir "La frase contiene ".".cantVocales. FinProceso En este ejercicio se usa las funciones propias de PSeInt para el manejo de cadenas de caracteres. Diagrama de flujo: ." vocales. Leer frase.Jéfferson Beltrán Morales 101 Escribir "Ingrese una frase". además se crea una función para contar el número de vocales de una frase. La recursión aparece en la vida diaria. es decir. y la solución general del problema se obtiene juntando todos los componentes resueltos. Es una poderosa herramienta de programación como alternativa a algoritmos iterativos (cuando es “casi” imposible resolver con estructuras iterativas). Es un proceso extremadamente potente. en estructuras de datos y en muchos otros problemas. por lo que hay que saber cuándo y cómo aplicarla. en problemas matemáticos. Se dice que un proceso es recursivo si forma parte de sí mismo. . que se define en función de sí mismo. En otras palabras.Algoritmos en PSeInt 102 2. es el proceso de resolver un problema reduciéndolo a uno o más sub problemas que son idénticos en su estructura al problema original y más simples de resolver. Una vez que se ha subdividido el problema original. Recursividad.6 RECURSIVIDAD. hasta que los sub problemas llegan a ser tan simples que se pueden resolver sin realizar más subdivisiones. se utiliza la misma técnica de descomposición para subdividir cada uno de estos sub problemas en otros que son menos complejos. un método es recursivo si contiene invocaciones a sí mismo. Jéfferson Beltrán Morales 103 En resumen, la recursividad consiste en:   En el cuerpo de sentencias del SubPrograma (función) se invoca al propio SubPrograma (función) para resolver “una versión más pequeña” del problema original. Habrá un caso (o varios) tan simple que pueda resolverse directamente sin necesidad de hacer otra llamada recursiva. En general el pseudocódigo de un algoritmo recursivo es el siguiente: SubProceso variable_de_retorno <- nombre_funcion_recursiva(argumento_1, argumento_2, ... ) acción 1; acción 2; . acción n; variable_de_retorno argumento_2, ... ) <- nombre_funcion_recursiva(argumento_1, FinSubproceso Las condiciones que debe cumplir un algoritmo recursivo son:  Asegurar que existe una condición de salida, en la que no se producen llamadas recursivas (caso base).  Asegurar que se cubren todos los posibles casos entre el caso base y los casos no base.  Cada llamada, en el caso no base, conduce a problemas cada vez más pequeños que terminarán en el caso base. Ejemplo 27. Calcular el factorial de un número entero usando un algoritmo recursivo. Solución. Recordemos la definición recursiva del factorial: n! = n * (n-1)! , si n > 1 1! = 1 Por lo tanto, tenemos los casos: Si n = 1 (caso base) Retornar 1 Algoritmos en PSeInt Si n > 1 Retornar n * factorial(n – 1) Sea factorial(n) la función que calcula el factorial de un número entero n, sea n=4, entonces: factorial (4) = 4 * factorial (3) = 4 * 6 = 24 factorial (3) = 3 * factorial (2) = 3 *2 = 6 factorial (2) = 2 * factorial (1) = 2 * 1 = 2 factorial (1) = 1 Pseudocódigo: //Ejemplo de recursividad Subproceso fact <- factorial (n) Definir fact como Entero; Si n>1 Entonces fact <- n*factorial(n-1); Sino fact <- 1; FinSi FinSubproceso Proceso Algortimo27 Definir n como Entero; n<-0; Escribir "Factorial de un número entero"; Escribir "Ingrese en valor de n: "; Leer n; Escribir "El factorial de ",n," es ", factorial(n); FinProceso Diagrama de flujo: 104 105 Jéfferson Beltrán Morales A veces, podemos encontrar una solución iterativa simple, que haga que el algoritmo sea más eficiente. entonces: factorial (4) = 4*3*2*1 = 24 Pseudocódigo: Subproceso fact <. Escribir "Factorial de un número entero". se tiene que: n! = n * (n-1)!. Calcular el factorial de un número entero usando un algoritmo iterativo. i como Entero. que es la definición iterativa de factorial. fact<-1. Para i <. (2)! = (2) * (1)! De donde: n!=n*(n-1)*(n-2)*…*1. Solución. FinPara FinSubProceso Proceso Algortimo28 Definir n como Entero.1 Hasta n Con Paso 1 Hacer fact<-fact*i. sea n=4. Se define el factorial como: n! = n * (n-1)! . . n<-0.factorial (n) Definir fact. si n>1 (n-1)! = (n-1) * (n-2)! (n-2)! = (n-2) * (n-3)! …….Algoritmos en PSeInt 106 Ejemplo 28. si n > 1 1! = 1 De acuerdo con esta definición. Sea factorial(n) la función que calcula el factorial de un número entero n. FinProceso Diagrama de flujo: . Leer n. factorial(n). Escribir "El factorial de "." es ".Jéfferson Beltrán Morales 107 Escribir "Ingrese en valor de n: ".n. (factorial(n) genera n llamadas recursivas). y facilidad para comprobar y convencerse de que la solución del problema es correcta. 2. sencilla y elegante. Una simple llamada puede generar un gran número de llamadas recursivas. .  Desventajas.7 ESTILO DE PROGRAMACIÓN. El valor de la recursividad reside en el hecho de que se puede usar para resolver problemas sin fácil solución iterativa. favoreciendo la resolución de problemas complejos de manera natural. La principal ventaja es la simplicidad de comprensión y su gran potencia. dado que para permitir su uso es necesario transformar el programa recursivo en otro iterativo. La recursividad se debe usar cuando sea realmente necesaria. es decir. Observación. que utiliza bucles y pilas para almacenar las variables.Algoritmos en PSeInt  108 Ventajas. cuando no exista una solución iterativa simple. El principal inconveniente es la ineficiencia tanto en tiempo como en memoria. Y. Los comentarios son una parte fundamental de la documentación de un programa. funciones y procedimientos. Aunque la experiencia proporciona el estilo. existen una serie de reglas que se recomiendan seguir desde el principio del aprendizaje de la programación. y tienen importancia primordial en las fases de análisis. así como también dejar una línea en blanco entre partes importantes o que estén lógicamente separadas. La legibilidad de los programas aumenta considerablemente utilizando comentarios.109 Jéfferson Beltrán Morales El buen estilo de programación es. una de las características más importantes que debe tener un buen programador. Los comentarios son considerados parte del código fuente por más que sean ignorados en las etapas de compilación y ejecución. Identación. situado en el programa e ignorado por el compilador. Espacios y Líneas en Blanco. sin lugar a dudas. Un comentario es un texto explicativo más o menos largo.      Comentarios. Las variables. nombres de subprogramas y nombres de programas deben ser significativos para orientar al usuario o a otros programadores sobre lo que representan: X. No es raro encontrar programas en los cuales los comentarios ocupan más lugar. que las propias instrucciones. incluso. es una práctica habitual realizar una identación (o tabulación) en cada uno de los bloques y unidades de programas fundamentales para mejorar la legibilidad del código fuente. Elección de nombres significativos para variables. de corregir y de mantener. . JJ no son identificadores significativos. Validación. constantes. Aunque no suele ser requerido por los compiladores de los lenguajes de alto nivel. puesta a punto y mantenimiento. ya que ayudan al programador y a otras personas a la comprensión del mismo. Un programa con buen estilo es más fácil de leer. Los programas no pueden considerarse correctos hasta que han sido validados utilizando un rango amplio de datos de prueba para contemplar todas las posibles direcciones que el flujo de control puede tomar en tiempo de ejecución. Con el mismo fin de mejorar le legibilidad y comprensibilidad del programa es recomendado utilizar espacios en blanco antes y después de un operador. 4 “Lógica Simbólica”. Copi. Editorial Mc Graw Hill. Editorial Mc Graw Hill. 1991. Editorial Alfaomega rama. Luis Joyanes Aguilar.E. 1993.sourceforge. Libro de Problemas. 1999. Editorial Prentice Hall.C. Sanford Leestma y Larry Nyhoff. 7 “Introducción a la Ciencia de las Computadoras”. 12 “Metodología de la Programación.. Editorial Mc Graw Hill. del Rosario Bores Rangel y Román Rosales Becerril. 1996. Byron S. 5 “Programación en Pascal”.A. 1995. 1a Edición Editorial Alfaomega.S. Murray. Metodología. Gottfried. 4ª Edición. Editorial C. Editorial Mc Graw Hill. 1ª Edición. 1999. Luis Joyanes Aguilar y Angel Hermoso.0 Manual de Referencia”. Luis A. Mark Andrews. Francisco Javier Ceballos .1ª Edición. 6 “Cómo programar en C/C++”. 1996.Algoritmos en PSeInt 110 BIBLIOGRAFÍA. Chris Pappas y William H. 8 “Aprenda Visual C++ Ya”. Editorial Prentice Hall. 1 “Fundamentos de Informática”. 10 “Computación. Algoritmos. Deitel/Deitel. Diagramas de Flujo y programas” Tomos I y II. 2 “Fundamentos de Programación”. Ureña y otros. Luis Joyanes Aguilar. Lógica Computacional y Programación”. 1ª Edición. 9 “Visual C++ 6. Osvaldo Cairó Battistutti. 3 “Pascal y Turbo Pascal enfoque práctico”. Rodríguez Baena y Fernández Azuela. 14 http://pseint. Editorial Mc Graw Hill. Irving M. Editorial Mc Graw Hill. Editorial Alfaomega ra-ma.net/ . 13 “Enciclopedia del Lenguaje C”. 1999. Ma. 11 “Programación en C”.
Copyright © 2024 DOKUMEN.SITE Inc.