Vista previa del material en texto
<p>Roy Aguilera Jinesta</p><p>Ana Gabriela Bejarano Salazar</p><p>Fundamentos de programación</p><p>Algoritmos, diagramas de flujo</p><p>y pseudocódigo</p><p>Versión preliminar</p><p>ii</p><p>Productora académica</p><p>Kay Guillén Díaz</p><p>Encargados de cátedra</p><p>Ana Gabriela Bejarano Salazar</p><p>Carlos Andrés Morales Granados</p><p>Especialista en contenidos</p><p>Suhany Chavarría Artavia</p><p>Corrección de estilo</p><p>Vanessa Villalobos Rodríguez</p><p>Figuras</p><p>Todas la imágenes e íconos utilizados en</p><p>esta obra son de uso libre o de dominio</p><p>público. Fueron tomadas de Canva con</p><p>licencia Canva Pro y de Icon-Icons.com.</p><p>Esta unidad didáctica se confeccionó en</p><p>la UNED, en el 2021, para utilizarse en las</p><p>asignaturas Introducción a la Lógica, có-</p><p>digo 2109, del Bachillerato en Informá-</p><p>tica Educativa de la Escuela de Ciencias</p><p>de la Educación; y Lógica para Compu-</p><p>tación, código 3071, del Diplomado en</p><p>Informática de la Escuela de Ciencias</p><p>Exactas y Naturales.</p><p>Universidad Estatal a Distancia</p><p>Vicerrectoría Académica</p><p>Escuela de Ciencias de la Educación</p><p>Escuela de Ciencias Exactas y Naturales</p><p>iii</p><p>Presentación</p><p>Estimada persona estudiante:</p><p>Este material educativo expone una temática que es la base del conoci-</p><p>miento para los primeros pasos en la programación. La lógica que se em-</p><p>plee para programar, o crear aplicaciones informáticas, trasciende niveles</p><p>educativos, ya que muchos planes de estudio incluyen en su perfil alguna</p><p>asignatura que involucre la aplicación de los conceptos lógico matemáticos</p><p>para la resolución de problemas.</p><p>Dicho estudio de la lógica se lleva a cabo no solo a nivel universitario, sino</p><p>también en educación primaria y secundaria. Inclusive, en carreras sin ten-</p><p>dencia tecnológica, se dedica una pequeña parte del estudio al aprendizaje</p><p>de los contenidos detallados en este material, pues la lógica fomenta el</p><p>análisis de los problemas, ayuda a identificar relaciones de causa y efecto,</p><p>potencia el pensamiento abstracto y facilita la visualización de soluciones.</p><p>Todas esas acciones se pueden orientar a cualquier ámbito de trabajo, ya</p><p>que, en todas las ciencias, se debe resolver algún problema.</p><p>iv</p><p>Así pues, esas capacidades de pensamiento para analizar y resolver proble-</p><p>mas de manera lógica se tornan trascendentales en carreras cuyo énfasis</p><p>es la tecnología informática, por ejemplo: Ingeniería Informática o Informá-</p><p>tica Educativa.</p><p>Sin importar el programa, el lenguaje o el paradigma de programación que</p><p>se utilice, los fundamentos de la lógica de programación son los mismos y</p><p>forman la piedra angular donde se soporta la creación de programas que</p><p>debemos tener claros, ya sea para aplicarlos en una organización o para</p><p>explicarlos a otras personas.</p><p>Así que, si su interés es construir aplicaciones web o de escritorio para em-</p><p>presas o personales, hacer videojuegos, crear programas educativos, pro-</p><p>gramar robots, generar animaciones, enseñar a programar, estimular el</p><p>pensamiento lógico o simplemente conocer acerca del maravilloso mundo</p><p>de la programación, este material educativo es ideal para dar los primeros</p><p>pasos en firme hacia su nuevo reto de aprendizaje.</p><p>Esta unidad didáctica se compone de cinco capítulos. Cada uno de ellos</p><p>brinda información acerca de un tema específico y se complementan con</p><p>explicaciones y ejemplos claros fortalecidos con ejercicios de autoevalua-</p><p>ción y sus respectivas respuestas.</p><p>El primer capítulo, llamado “Historia de la computación y la informática”, se</p><p>enfoca en la historia y el desarrollo estas ciencias, en las cuales se describen</p><p>los principales avances tecnológicos y se brinda información complemen-</p><p>taria de las mujeres y de los hombres que han contribuido a su desarrollo</p><p>y que sentaron las bases de la tecnología que disfrutamos hoy, así como</p><p>las innovaciones que surgen cada día.</p><p>v</p><p>El segundo capítulo se orienta al ámbito matemático y se denomina “Sis-</p><p>temas numéricos, operadores y precedencia”. En él, se explican cuatro sis-</p><p>temas numéricos: decimal, binario, octal y hexadecimal, y los métodos de</p><p>conversión entre ellos. Luego, se destacan diversos tipos de operadores</p><p>tanto matemáticos como relacionales y lógicos, detallando, de manera</p><p>clara, su representación, funcionamiento y su orden jerárquico al momento</p><p>de resolver expresiones.</p><p>El tercer capítulo, titulado “Resolución de algoritmos con diagramas de</p><p>flujo y pseudocódigo”, es el más extenso y se adentra en los fundamentos</p><p>de la lógica para programación. Se inicia con la conceptualización de algo-</p><p>ritmo, sus características, estructura y formas de representarlo. Después, se</p><p>explican detalladamente las variables y las constantes, considerando los ti-</p><p>pos de datos, la forma en que se deben nombrar y su manipulación en los</p><p>programas informáticos. Una vez que se estudian las variables y las cons-</p><p>tantes, se abordan las diversas estructuras de decisión y de repetición que</p><p>se emplean al programar.</p><p>Las primeras —las estructuras de decisión— sirven para tomar decisiones,</p><p>es decir, si el programa hace una u otra acción, y se conocen como los SI</p><p>(Si, Si-Sino, Si anidado, Según); mientras que las segundas, se denominan</p><p>ciclos (Mientras, Repetir y Para), y se emplean para repetir un grupo de</p><p>instrucciones dependiendo del valor de una expresión.</p><p>El cuarto capítulo, identificado como “Arreglos unidimensionales y multidi-</p><p>mensionales”, aborda el concepto de arreglos, los cuales son estructuras</p><p>en la memoria de la computadora para almacenar datos temporalmente.</p><p>vi</p><p>En esta sección, se define qué es un arreglo, se caracterizan dos tipos (vec-</p><p>tores y matrices), se explica su manejo en la programación y su relación con</p><p>las estructuras de repetición.</p><p>El quinto y último capítulo se llama “Subprocesos” y trata acerca de los</p><p>subprocesos o subprogramas. Este concepto es muy utilizado en la progra-</p><p>mación y propone que un problema es más sencillo de resolver si se divide</p><p>en partes más pequeñas y menos complejas. Esto se aplica a los programas</p><p>informáticos al construirlos en secciones simples, que se enfocan en realizar</p><p>una sola tarea, pero que se vinculan entre sí para formar un todo. En el</p><p>capítulo, se definen y se caracterizan los dos tipos de subprocesos que exis-</p><p>ten: los procedimientos y las funciones. También, se explica su manejo en</p><p>la programación y los detalles fundamentales en cuanto al envío de datos</p><p>entre subprocesos.</p><p>Antes de iniciar su aventura de estudio de este texto, es recomendable que</p><p>domine algunos conceptos matemáticos básicos, por ejemplo:</p><p>• Operaciones aritméticas: suma, resta, multiplicación, división, poten-</p><p>ciación.</p><p>• Operadores matemáticos y relacionales (>, =, ), tanto</p><p>su representación como su concepto.</p><p>• Cálculo de sumatorias, promedios, porcentajes, fracciones y regla de</p><p>tres.</p><p>Esos y otros conceptos útiles se pueden estudiar en asignaturas que se</p><p>ofertan en los primeros años de estudio de la carrera. Esto facilitará la com-</p><p>prensión del material con lo cual podrá obtener un mayor provecho de su</p><p>proceso de aprendizaje. Sin embargo, el abordaje de los temas del presente</p><p>vii</p><p>trabajo tiene explicaciones claras de los conceptos que serán fundamenta-</p><p>les para la comprensión de todo el contenido.</p><p>Al finalizar el estudio de este material educativo, usted deberá ser capaz de</p><p>construir algoritmos secuenciales en forma de pseudocódigos o de diagra-</p><p>mas de flujo. También, se espera que pueda definir e identificar, con total</p><p>claridad, la estructura de un algoritmo y posibles errores lógicos; para</p><p>luego, proponer soluciones eficientes basadas en la lógica de programa-</p><p>ción. Además, deberá implementar, de manera eficiente, estructuras de de-</p><p>cisión y de repetición en la construcción de algoritmos con una arquitec-</p><p>tura que involucre subprocesos.</p><p>¿Cómo utilizar este libro?</p><p>Con el fin de facilitar el proceso de autoaprendizaje de los temas presen-</p><p>tados, se hace uso de una serie de componentes</p><p>una lista de</p><p>100 invitados a una boda en un programa, se necesitarían 100 variables</p><p>(una por persona); pero con vectores, se emplearía un solo vector con 100</p><p>‘espacios’ o campos, para almacenar en cada uno el nombre de los invita-</p><p>dos.</p><p>El capítulo 4 nos interna en el mundo de los arreglos. Estas estructuras de</p><p>datos requieren del entendimiento de su estructura y de la forma de cómo</p><p>gestionarlos. También presentan una estrecha relación con el uso de ciclos.</p><p>En su inicio, el capítulo explica los dos tipos de arreglos que se estudiarán</p><p>y detalla sus características generales. Posteriormente, ahonda en los arre-</p><p>glos unidimensionales o vectores. Por medio de ejemplos, se demuestra su</p><p>Guía de lectura</p><p>346</p><p>declaración, dimensionamiento, llenado, muestra y modificación. De la</p><p>misma forma, se explican las matrices o arreglos multidimensionales.</p><p>El capítulo incluye gran cantidad de ejemplos y explicación tanto de su ló-</p><p>gica como de su ejecución. Además, se desarrollan ejercicios con sus res-</p><p>pectivas respuestas.</p><p>Finalmente, se presenta un resumen que resalta las similitudes y las dife-</p><p>rencias de los vectores y de las matrices.</p><p>4.2 Arreglos</p><p>Los arreglos son un conjunto de variables dispuestas en una sola estructura</p><p>inseparable y organizada, de modo que facilitan el almacenamiento de va-</p><p>rios datos a la vez. En este apartado, se analizarán qué son y cómo funcio-</p><p>nan, además de los tipos de arreglos que existen.</p><p>4.2.1 Definición de arreglos</p><p>Antes de definir un arreglo, es preciso recordar la conceptualización de una</p><p>variable. De forma muy resumida, una variable es un espacio reservado en</p><p>la memoria RAM, en el cual se almacena un dato para el algoritmo. La de-</p><p>finición de arreglo es muy similar a la de una variable. Ambos son espacios</p><p>en memoria RAM, pero la diferencia es que el arreglo es una estructura que</p><p>puede almacenar más de un dato para el algoritmo. Podríamos decir que</p><p>un arreglo es la unión de dos o más variables y que se ubican en una misma</p><p>estructura y que solo pueden ser de un tipo de dato.</p><p>Los arreglos pueden ser de una sola fila con muchos campos, en cuyo caso</p><p>se estaría ante un vector, o bien, pueden tenerse muchas filas con varias</p><p>347</p><p>columnas, parecido a un tablero de ajedrez, lo que indicaría el uso de una</p><p>matriz. Observe las figuras 4.1 y 4.2, para identificar las semejanzas y dife-</p><p>rencias entre ambos.</p><p>La figura 4.1 muestra tres vectores: Nombre, Apellido y Profesión, para</p><p>almacenar los datos de cuatro personas.</p><p>En el vector Nombre, se tiene cuatro campos numerados en los índices de</p><p>0 a 3 para un total de cuatro nombres. En el índice 0, está el nombre Ada;</p><p>en el índice 1, Hedy; en el índice 2, Evelyn; y en el índice 3, Lynn.</p><p>FIGURA 4.1. Ejemplo de 3 vectores</p><p>En el vector Apellido, se muestran cuatro campos numerados en los ín-</p><p>dices de 0 a 3 para un total de cuatro apellidos. En el índice 0 está el ape-</p><p>llido Lovelace; en el índice 1, Lamarr; en el índice 2, Bezerin; y en el</p><p>índice 3, Conway. Cada dato está asociado al vector anterior, es decir, el nombre</p><p>348</p><p>que se ubica en el primer índice del vector anterior tiene relación con el primer</p><p>índice del vector apellido, y así sucesivamente.</p><p>En el vector Profesión, se muestran cuatro campos numerados en los</p><p>índices de 0 a 3 para un total de cuatro aportes que realizaron estas per-</p><p>sonas a la informática, tecnología y computación. En el índice 0, está el</p><p>aporte de Ada Lovelace, quien fue la primera programadora. En el índice</p><p>1, se ubica la colaboración de Hedy Lamarr, a quien se le debe el wifi y</p><p>bluetooth. En el índice 2, se encuentra la contribución de Evelyn Bere-</p><p>zin, quien es la precursora de procesadoras de texto; y, finalmente, en el</p><p>índice 3, se ubica el desarrollo hecho por Lynn Conway, quien realizó los</p><p>diseños de los microchips actuales.</p><p>En dicho ejemplo, nótese que todos los datos son de tipo Cadena; por lo</p><p>tanto, se podrían agrupar en una matriz para tener la misma representación</p><p>sin necesidad de tener tres arreglos independientes. En la figura 4.2, se</p><p>aprecian los mismos datos, pero en un arreglo multidimensional.</p><p>FIGURA 4.2. Ejemplo de una matriz con los datos y aportes de cuatro personas</p><p>349</p><p>En el caso de la matriz Persona, se observa que se tienen exactamente los</p><p>mismos datos que en los tres vectores anteriores. La diferencia es que</p><p>ahora se presenta un arreglo con dos dimensiones o matriz, en el cual el</p><p>primer número del índice indica la fila; y el segundo número del índice, la</p><p>columna.</p><p>Así, tendríamos que, en la fila 0, columna 0, está el nombre Ada; en la fila 1,</p><p>columna 0, se ubica el apellido de Ada, el cual es Lovelace; y, en la fila 2,</p><p>columna 0, se encuentra la profesión de Ada Lovelace, quien fue progra-</p><p>madora, y así sucesivamente con el resto de la información.</p><p>En esta matriz, la información se elaboró para que, en la primera fila, se</p><p>colocaran los nombres; en la segunda, los apellidos; y, en la tercera, su con-</p><p>tribución en la historia de la computación e informática.</p><p>Aunque la información se complete por filas, en este caso en particular,</p><p>debería imprimirse por columnas para que se muestre la persona y su</p><p>aporte a la informática. En consecuencia, más adelante, se estudiará cómo</p><p>realizar este guardado y recorrido de la matriz.</p><p>Los números entre corchetes (los índices) no son parte de la información que se</p><p>almacena en el arreglo. Estos sirven para recorrerlo y pasan a ser el campo de iden-</p><p>tificación único de la información que se almacena.</p><p>Para tomar en cuenta</p><p>350</p><p>4.2.2 Características de los arreglos</p><p>En cuanto a las características de los arreglos, estos poseen un nombre y</p><p>se les debe especificar el tipo de dato que son capaces de almacenar. Las</p><p>normas para esas características son las estipuladas para las variables en el</p><p>capítulo 3, apartado 3.4.</p><p>Un detalle esencial es que todos los datos que almacena un arreglo son del</p><p>mismo tipo, por ejemplo: si se declara un arreglo de tipo Entero, este solo</p><p>podrá almacenar valores enteros en cada uno de sus espacios; de la misma</p><p>forma se trabaja si se declara de tipo Real, Cadena o Logico (Boo-</p><p>leano).</p><p>Además del nombre y del tipo de dato, los arreglos tienen dimensión. Esta</p><p>última es básicamente el tamaño (cantidad de campos) que el arreglo ten-</p><p>drá y se debe definir antes de utilizarse en el algoritmo. El tamaño del arre-</p><p>glo no se podrá cambiar durante la ejecución del programa. Tal caracterís-</p><p>tica también establece una clasificación para los arreglos. Los de una di-</p><p>mensión se llaman vectores; y los de dos dimensiones, matrices.</p><p>El cuadro 4.1 muestra un resumen de las características de los tres tipos de</p><p>elementos.</p><p>CUADRO 4.1. Comparación entre variable, vector y matriz</p><p>Elemento Característica Ejemplo de declaraciones en PSeInt</p><p>Variable Almacena un único dato.</p><p>Por ejemplo, el número 3.</p><p>Definir num como Entero;</p><p>num=3;</p><p>Vector Almacena varios datos en</p><p>una misma estructura. El</p><p>vector de la imagen puede</p><p>almacenar cinco datos del</p><p>Dimension num[5];</p><p>1 13 38 5 10</p><p>351</p><p>4.3 Vectores</p><p>Los vectores son arreglos unidimensionales. Tienen una sola fila con varias</p><p>columnas, las cuales le brindan la dimensión o el tamaño al arreglo y se</p><p>pueden representar como se muestra a continuación. A los números que</p><p>se ubican debajo del arreglo entre corchetes ([]) se les denomina índice</p><p>y ayudan a identificar cada campo del arreglo. Cada campo posee un nú-</p><p>mero único e irrepetible. Enseguida, se muestran ejemplos con diferentes</p><p>tipos de datos:</p><p>Damaris Guillermo Ana Jorge Esther</p><p>[0] [1] [2] [3] [4]</p><p>FIGURA 4.3. Vector de 5 posiciones (celdas) con nombres de personas y el índice inicia en 0</p><p>mismo tipo, por ejemplo,</p><p>cinco números de tipo</p><p>Entero. El vector tiene</p><p>solo un índice.</p><p>Matriz Almacena varios datos en</p><p>una misma estructura. La</p><p>matriz de la imagen puede</p><p>almacenar quince datos</p><p>del mismo tipo, por ejem-</p><p>plo, quince</p><p>números</p><p>reales. Asimismo, el arre-</p><p>glo del ejemplo tiene tres</p><p>filas y cinco columnas, es</p><p>decir, dos dimensiones</p><p>que se indican en los dos</p><p>índices de [filas, co-</p><p>lumnas].</p><p>Dimension num[3,5]</p><p>15,0 65,1 32 25,9 20,2</p><p>13,6 9 42 12,73 32</p><p>10 6 7,1 25 2</p><p>352</p><p>87654312 25272360 67985423 22343260</p><p>[0] [1] [2] [3]</p><p>FIGURA 4.4. Vector de 4 posiciones (celdas) con número de teléfono y el índice inicia en 0</p><p>565,53 566,55 567,26 567,06 566,38 567,47</p><p>[0] [1] [2] [3] [4] [5]</p><p>FIGURA 4.5. Vector de 6 posiciones (celdas) con el tipo de cambio del dólar durante 6 días y el ín-</p><p>dice inicia en 0</p><p>565,53 566,55 567,26 567,06 566,38 567,47</p><p>[0] [1] [2] [3] [4] [5]</p><p>FIGURA 4.6. Vector de 6 posiciones (celdas) con el tipo de cambio del dólar durante 6 días y el</p><p>índice inicia en 0</p><p>V C S D</p><p>[0] [1] [2] [3]</p><p>FIGURA 4.7. Vector de 4 posiciones (celdas) con el estado civil de personas y</p><p>el índice inicia en 0</p><p>Se puede observar que, en cada celda del vector, se almacenan valores por</p><p>separado; eso sí, todos son del mismo tipo de dato. En el vector con nú-</p><p>meros de teléfonos, se tienen datos de tipo Entero. En el vector con nom-</p><p>bres, datos de tipo Cadena. En el vector del tipo de cambio del dólar, hay</p><p>datos de tipo Real; y en el del estado civil, los datos del tipo Caracter.</p><p>Cada vector debe tener un nombre y cada campo o celda se maneja de</p><p>forma individual; por lo tanto, si se desea modificar o mostrar un dato, se</p><p>debe usar el nombre del vector y el número de celda donde está ubicado</p><p>el dato, por medio del índice.</p><p>353</p><p>4.3.1 Nombre del vector, índice y contenido</p><p>Observe, en la figura 4.8, el vector de Invitados, en el cual se ha almace-</p><p>nado el nombre de siete personas. Note que, aunque el último índice del</p><p>arreglo termine en 6, siempre se cuenta con siete datos del vector porque</p><p>el índice 0 cuenta como el primer elemento.</p><p>María</p><p>Rojas</p><p>José</p><p>Campos</p><p>Ana</p><p>Herrera</p><p>Karol</p><p>Montoya</p><p>Enrique</p><p>Zamora</p><p>Roy</p><p>Aguilar</p><p>Esther</p><p>Salazar</p><p>[0] [1] [2] [3] [4] [5] [6]</p><p>FIGURA 4.8. Vector Invitados con datos de 7 personas</p><p>El vector Invitados almacena el nombre y apellidos de personas; por lo</p><p>tanto, el tipo de dato del que se declaró el vector es Cadena. Al recorrer el</p><p>vector con cada uno de los índices, la posición con el número de cada uno</p><p>de los espacios en el vector, se obtendrían los siguientes datos:</p><p>Invitados [0]= ‘María Rojas’</p><p>Invitados [1]= ‘José Campos’</p><p>Invitados [2]= ‘Ana Herrera’</p><p>Invitados [3]= ‘Karol Montoya’</p><p>Invitados [4]= ‘Enrique Zamora’</p><p>Invitados [5]= ‘Roy Aguilar’</p><p>Invitados [6]= ‘Esther Salazar’</p><p>El índice es el número entre corchetes del arreglo y se emplea para acceder</p><p>al contenido de cada campo.</p><p>Donde Invitados corresponde al nombre del vector, los corchetes []</p><p>siempre se colocan a la derecha del nombre del arreglo para indicar, entre</p><p>354</p><p>estos, el número del índice que señala la posición del arreglo donde se</p><p>ubica la información o contenido.</p><p>A la posición entre los corchetes se le denomina índice y note que, en el</p><p>caso de un vector, solo se tiene un número o índice, porque el arreglo es</p><p>unidimensional. En lugar de corchetes, también se pueden usar paréntesis</p><p>como se muestra en la figura 4.9:</p><p>FIGURA 4.9. Declaración de un vector de tipo Entero en PSeInt</p><p>4.3.2 Declaración y dimensionamiento de un vector</p><p>Al igual que las variables, los vectores deben declararse y se realiza con la</p><p>siguiente sintaxis:</p><p>Definir Nombre del vector Como tipo de dato;</p><p>Donde Nombre del vector será el identificador que se le otorgará al</p><p>arreglo para su manejo en el algoritmo; y tipo de dato será la definición</p><p>de los valores que podrá almacenar el arreglo, ya sea datos de tipo Real,</p><p>Entero, Caracter, Cadena o Logico.</p><p>Si se declara un vector que almacene datos numéricos de tipo Real, por</p><p>ejemplo, salarios, se haría así:</p><p>Definir VecSalarios Como Real;</p><p>355</p><p>Luego de declarar un arreglo, se debe dimensionar. Esto se hace para es-</p><p>pecificar el tamaño máximo (cantidad de celdas) que tendrá el vector. La</p><p>dimensión del vector se realiza de la siguiente forma:</p><p>Dimension VecSalarios (5);</p><p>El dimensionamiento de un arreglo siempre será un número de tipo En-</p><p>tero, ya que no puede existir un arreglo con, por ejemplo, de 5.7 celdas;</p><p>o tiene 5 o tiene 6 celdas. Por ende, la cantidad de posiciones que posee</p><p>un vector siempre será un Entero. En el ejemplo de la figura 4.10, se evi-</p><p>dencia la declaración y el dimensionamiento de un vector de 10 posiciones:</p><p>FIGURA 4.10. Declaración de un vector de tipo Entero en PSeInt</p><p>Como se observa en la ilustración anterior, en la línea 2, se declara</p><p>una variable de tipo Entero. Sin embargo, para que sea un vec-</p><p>tor, debe escribirse la línea 3 con la instrucción Dimension Vec-</p><p>tor (10). En el caso de DFD, no se escribe el tipo de dato, sino</p><p>que se le asigna directamente a la variable un valor, por lo que la</p><p>declaración de un vector de 10 posiciones corresponde a la ilus-</p><p>tración 4.11.</p><p>4.3.3 Tamaño del vector dado por un usuario</p><p>Un arreglo puede ser dimensionado tanto por quien programa el</p><p>algoritmo como por el usuario que emplea el sistema. La forma</p><p>Es la cantidad de celdas</p><p>que tendrá el arreglo.</p><p>DIMENSIONAR</p><p>FIGURA 4.11. Declaración de un vec-</p><p>tor de tipo Entero en DFD</p><p>356</p><p>que estudiamos antes es un dimensionamiento por programación. Ahora,</p><p>veremos un dimensionamiento por el usuario.</p><p>En el dimensionamiento por usuario, el arreglo se declara y, antes de di-</p><p>mensionarlo, se consulta la cantidad de celdas que se desean. La respuesta</p><p>del usuario se almacena en una variable de tipo Entero y, con esta varia-</p><p>ble, se hace el dimensionamiento. Observe el siguiente ejemplo (figura</p><p>4.12):</p><p>FIGURA 4.12. Tamaño del vector dado por el usuario en PSeInt</p><p>En el pseudocódigo anterior, se muestra únicamente la declaración (línea</p><p>2) y el dimensionamiento de un vector (línea 7). Observe que antes de di-</p><p>mensionar el arreglo, se le solicita al usuario el tamaño (en la línea 5) y se</p><p>lee en la variable Tamanio (línea 6), o lo que es igual, la cantidad de celdas.</p><p>Luego, en la instrucción Dimension, se utiliza la variable Tamanio en lu-</p><p>gar de un número de tipo Entero específico (línea 7).</p><p>En el caso de DFD, el diagrama que se emplearía para solicitarle al usuario</p><p>que dimensione el vector V,se muestra en la figura 4.13.</p><p>357</p><p>FIGURA 4.13. Tamaño del vector dado por el usuario en DFD</p><p>La diferencia de que el usuario defina el tamaño del arreglo en compara-</p><p>ción con el dimensionamiento desde la programación es que, en cada eje-</p><p>cución del algoritmo, puede emplear un tamaño de vector diferente, ajus-</p><p>tado a las necesidades del usuario. Ahora, es importante aclarar que este</p><p>tamaño dado por el usuario no cambia durante la ejecución del programa,</p><p>es decir, si el usuario define un tamaño de 20, se trabajará con ese tamaño</p><p>hasta que finalice la ejecución del algoritmo. Ya en otra ejecución el usuario</p><p>podrá especificarlo u otro tamaño para el arreglo.</p><p>4.3.4 Manejo de un vector por medio de índices</p><p>Para el manejo de un arreglo, siempre se debe considerar la celda donde</p><p>se desea gestionar un dato, ya sea almacenarlo, modificarlo o mostrarlo.</p><p>Regresando al uso de variables, para almacenar un dato, se le asigna la</p><p>Diagrama de flujo Algoritmo en lenguaje natural</p><p>1. Inicio del diagrama.</p><p>2. Declaración de la variable que almace-</p><p>nará el tamaño del vector dado por el</p><p>usuario.</p><p>3. Consulta al usuario.</p><p>4. Lectura del dato digitado por el usuario</p><p>y almacenado en la variable tam.</p><p>5. Declaración del vector con el tamaño in-</p><p>dicado por el usuario.</p><p>6. Fin del diagrama de flujo.</p><p>358</p><p>información a la variable por medio de un operador de asignación (=) de</p><p>la siguiente forma:</p><p>Numero=5;</p><p>Donde Numero es una variable a la que se le está asignando el valor 5, por</p><p>ende, Numero vale, de ahí en adelante, 5.</p><p>Ahora, si se trata</p><p>de hacer lo mismo con el vector, se debe indicar la celda</p><p>donde se almacenará el dato, para eso se utiliza un elemento llamado ín-</p><p>dice. El índice es una variable de tipo Entero que funcionará como indi-</p><p>cador del número de celda donde se desea trabajar.</p><p>Siempre se debe emplear el índice. Observe el cuadro 4.2 con asignaciones</p><p>correctas y erróneas de un valor a un vector.</p><p>CUADRO 4.2. Usos correctos e incorrectos de índices en la asignación de valores</p><p>de un vector</p><p>Uso correcto de</p><p>asignación de datos</p><p>Comentario</p><p>sobre el uso</p><p>correcto</p><p>Uso erróneo de</p><p>asignación de</p><p>datos</p><p>Comentario sobre</p><p>el error</p><p>Vector[i]= 15; El índice i está</p><p>dentro de los</p><p>corchetes y refe-</p><p>rencia a alguna</p><p>posición del</p><p>arreglo.</p><p>Vector = 15; No se indica el ín-</p><p>dice</p><p>Vector 1 = 15; El índice no está en-</p><p>tre corchetes</p><p>Vector[2]= 15; En este caso, se</p><p>realiza una asig-</p><p>nación directa</p><p>del valor 15 al</p><p>vector en la posi-</p><p>ción 2.</p><p>1=15; Falta el nombre de</p><p>la variable y el cor-</p><p>chete del índice.</p><p>(1)= 15; Falta el nombre de</p><p>la variable</p><p>359</p><p>Gráficamente, la asignación del valor 15 a la celda 2, se observaría de la</p><p>como se muestra en la figura 4.14:</p><p>15</p><p>[1] [2] [3] [4] [5]</p><p>FIGURA 4.14. Vector de 5 posiciones (celdas)</p><p>Al analizar el vector anterior, se aprecia una característica fundamental de</p><p>los arreglos: la numeración de las celdas ubicada en la parte inferior de</p><p>este, a la cual se le denomina índice.</p><p>En todos los arreglos, las celdas están identificadas con números de tipo</p><p>Entero. Esta identificación inicia con el número cero o con uno. La mayoría</p><p>de los lenguajes tienen por defecto que los arreglos inician con el cero, por</p><p>ende, es una buena práctica acostumbrarse a iniciar la numeración de las</p><p>celdas con ese número, a menos que el lenguaje indique lo contrario.</p><p>Se debe tener claro la relación entre la dimensión del arreglo y la numera-</p><p>ción de las celdas. Si un arreglo es de 10 posiciones, la numeración de sus</p><p>celdas irá de 0 a 9 porque el 0 también cuenta como un número, o bien,</p><p>de 1 a 10. En la figura 4.15, se observa un vector de 10 posiciones con el</p><p>índice que inicia en 0, en el cual se muestra los productos comprados por</p><p>una familia.</p><p>FIGURA 4.15. Vector de 10 posiciones con el índice que inicia en 0</p><p>Ahora, observe el mismo vector, pero esta vez el índice inicia en 1.</p><p>FIGURA 4.16. Vector de 10 posiciones con el índice que inicia en 1</p><p>Arroz Frijoles Sal Aceite Café Azúcar Atún Cebolla Verduras Macarrones</p><p>0 1 2 3 4 5 6 7 8 9</p><p>Arroz Frijoles Sal Aceite Café Azúcar Atún Cebolla Verduras Macarrones</p><p>1 2 3 4 5 6 7 8 9 10</p><p>360</p><p>En el cuadro 4.3, se muestran el uso de corchetes [] o paréntesis () en</p><p>arreglos unidimensionales o multidimensionales. En este texto, por razones</p><p>de comodidad, se utilizarán los corchetes; pero, en algunos ejemplos, estos</p><p>pueden cambiar por paréntesis sin afectar la lógica del ejercicio.</p><p>CUADRO 4.3. Sintaxis de los vectores y matrices en DFD y PSeInt</p><p>Sintaxis en DFD</p><p>Se emplean solo paréntesis</p><p>Sintaxis en PSeInt</p><p>Se pueden emplear paréntesis o</p><p>corchetes</p><p>Vector(i) Vector(i)</p><p>Vector[i]</p><p>Matriz(i,j) Matriz(i,j)</p><p>Matriz[i,j]</p><p>4.3.5 Llenado manual de un vector sin ciclos</p><p>¿Qué pasaría si se desea llenar el vector de cinco posiciones con ceros? Es</p><p>decir que, en cada posición, se almacene dicho número. Una forma de ha-</p><p>cer esto es asignando en cada posición el 0 de la siguiente manera:</p><p>Vector[0]=0;</p><p>Vector[1]=0;</p><p>Vector[2]=0;</p><p>Vector[3]=0;</p><p>Vector[4]=0;</p><p>FIGURA 4.17. Fragmento del pseudocódigo que asigna el valor 0 a todas las celdas</p><p>de un vector de 5 posiciones</p><p>Luego de las instrucciones anteriores se tendría el siguiente vector.</p><p>0 0 0 0 0</p><p>0 1 2 3 4</p><p>FIGURA 4.18. Vector de 5 posiciones con contenido 0</p><p>361</p><p>El método de llenado anterior es ineficiente y no se utiliza de ese modo,</p><p>primero, por la ineficiencia que implica; y, segundo, porque para el llenado</p><p>de este tipo de estructuras siempre se emplean ciclos con una variable para</p><p>identificar el índice de la celda a la que se le asignará el valor.</p><p>A continuación, se empleará la variable de tipo Entero denominada</p><p>Celda. Seguidamente, se llenará el vector de números 9, pero utilizando</p><p>la variable Celda. Si se realizara con el método ineficiente (sin ciclos), se</p><p>debería hacer un pseudocódigo como el de la figura 4.19:</p><p>Celda=0;</p><p>Vector(Celda)=9;</p><p>Celda=1;</p><p>Vector(Celda)=9;</p><p>Celda=2;</p><p>Vector(Celda)=9;</p><p>Celda=3;</p><p>Vector(Celda)=9;</p><p>Celda=4;</p><p>Vector(Celda)=9;</p><p>FIGURA 4.19. Fragmento del pseudocódigo que asigna el valor 9 a todas las cel-</p><p>das de un vector de 5 posiciones</p><p>Como se puede observar, ahora el método ineficiente lo es aún más, pero</p><p>muestra algo interesante, al utilizar una variable en lugar de un número</p><p>determinado para el campo que representa a la posición del vector, se</p><p>puede modificar el valor de dicha variable y se modificará también el índice</p><p>que hace referencia a la posición. Seguidamente, se explicará cómo llenar</p><p>un arreglo unidimensional con un método más eficiente.</p><p>362</p><p>4.3.6 Llenado de un vector con ciclos</p><p>Para llenar un arreglo unidimensional, se emplea un ciclo a fin de hacer que</p><p>el método de llenado del vector sea eficiente. Si se retoma el ejemplo an-</p><p>terior del llenado del vector de cinco posiciones con el número 9, el si-</p><p>guiente pseudocódigo es la forma de completarlo:</p><p>FIGURA 4.20. Pseudocódigo con el llenado del número 9 a todas las celdas de un</p><p>vector de dimensión 5</p><p>Como se observa en el pseudocódigo anterior, en la línea 2, se definen el</p><p>vector y el índice de este; y en la línea 3, se define el tamaño o la dimensión</p><p>del vector. En este caso, se declaró de 5 posiciones.</p><p>En la línea 4, el ciclo inicia con el índice celda en 0 y llega hasta una lon-</p><p>gitud de 4, porque hay que recordar que el 0 cuenta como la primera uni-</p><p>dad del arreglo.</p><p>En la línea 5, se le asigna al Vector, en la posición de celda, el valor de</p><p>9. Como el ciclo se encarga del incremento automático del índice, cada</p><p>posición se llenará automáticamente con el número 9.</p><p>El diagrama de flujo del pseudocódigo anterior, con una leve variación en</p><p>la asignación del valor (en lugar de un 9 se usa un 5). Así se muestra en la</p><p>figura 4.21.</p><p>363</p><p>FIGURA 4.21. Diagrama de flujo para llenar un vector de 5 posiciones</p><p>4.3.7 Llenado de un vector con información brindada por el usuario</p><p>Hasta aquí se ha analizado el llenado de un vector de forma automática,</p><p>pero ¿cómo se le solicita al usuario que introduzca el contenido al arreglo?</p><p>Para agregar la información, se debe utilizar el ciclo Para y, al igual que</p><p>con las variables, Leer la variable donde se almacenará el contenido. El</p><p>pseudocódigo sería el siguiente (figura 4.22):</p><p>1</p><p>1</p><p>364</p><p>// Llenado del vector</p><p>Escribir "Digite los datos para el vector";</p><p>Para Celda=0 Hasta 4 Hacer</p><p>Leer Vector[Celda];</p><p>FinPara</p><p>FIGURA 4.22. Pseudocódigo que solicita al usuario los datos del contenido del arreglo</p><p>La primera modificación al pseudocódigo es el envío de un mensaje a pan-</p><p>talla solicitándole al usuario que digite la información; esto se realiza antes</p><p>del ciclo Para. La otra modificación es la instrucción Leer, dentro del ciclo</p><p>Para. Con la instrucción Leer, el usuario digitará la información para lle-</p><p>nar el vector.</p><p>En la figura 4.23, se muestra el detalle de un pseudocódigo (líneas 4 a la 7),</p><p>en el cual se llena un vector con información que digita el usuario.</p><p>FIGURA 4.23. Llenado de un vector con la información del usuario</p><p>Observe que, en la línea 4, se le envía un mensaje al usuario para que digite</p><p>los datos. Esta instrucción no debe colocarse dentro del ciclo Para, porque</p><p>se repetiría todas las veces que se ejecute el ciclo.</p><p>En la línea 5, se inicia el ciclo para recorrer el vector y, en la línea 6, se asigna</p><p>a cada posición del vector, desde la posición 0 hasta la posición 4 (recuerde</p><p>que el 0 cuenta como una unidad, por ende, se están</p><p>llenando las 5 posi-</p><p>ciones del vector) el dato suministrado por el usuario.</p><p>365</p><p>El pseudocódigo anterior generaría la siguiente salida en pantalla, asu-</p><p>miendo que el usuario digitó 20, 30, 40, 50 y 60 como datos de entrada:</p><p>FIGURA 4.24. Pantalla con la ejecución del programa anterior</p><p>El diagrama de flujo del pseudocódigo de la figura 4.23 se muestra en la</p><p>figura 4.25.</p><p>FIGURA 4.25. Diagrama de flujo para cargar un vector con los datos del usuario y modificarlo</p><p>1</p><p>1</p><p>366</p><p>Al igual que con las variables, los arreglos pueden recibir información de</p><p>tipo Cadena o Caracter. El ejemplo de la figura 4.26 muestra el llenado</p><p>de un vector por medio de un ciclo Para, con información de texto digi-</p><p>tada por el usuario.</p><p>Al ejecutar las instrucciones, se observa que, cada vez que se ingresa al</p><p>ciclo, la variable Celda modificará su valor. La primera vez que se ingresa</p><p>al Para, Celda tiene un valor de 0 y se ejecuta la instrucción Leer Vec-</p><p>tor(Celda); por ende, se almacenará la información de texto digitada</p><p>por el usuario en la posición 0 del vector. La información que se recibirá</p><p>del usuario es de tipo texto. En el segundo ingreso al ciclo, Celda vale 1 y</p><p>se vuelve a ejecutar la asignación en el vector; todo este proceso de ingre-</p><p>sos y de asignaciones se repite 2 veces más (para un total de 5). El ciclo</p><p>finaliza cuando Celda tenga un valor de 5, ya que va de 0 a 4; con ese</p><p>valor (5), no entrará al ciclo.</p><p>FIGURA 4.26. Pseudocódigo con el llenado de un vector de 5 posiciones con elementos de texto digitado</p><p>por el usuario</p><p>367</p><p>Un ejemplo de ejecución del algoritmo anterior sería el siguiente.</p><p>FIGURA 4.27. Ejecución del pseudocódigo con el llenado de un vector con elementos de texto</p><p>4.3.8 Llenado de un vector con la función Azar o Random</p><p>Existe otra forma de llenar un vector automáticamente con números alea-</p><p>torios. Esto se realiza con la función Azar, es decir, que los números los</p><p>dará el sistema aleatoriamente dentro de un rango que se debe definir. Esta</p><p>opción genera, de manera rápida, el llenado del arreglo.</p><p>La función Azar posee la siguiente estructura Azar(N); donde N es la</p><p>cantidad de números con que se dispondrá para elegir un valor aleatorio</p><p>que inicia de 0. Por ejemplo: Azar(5)seleccionará un número aleatorio</p><p>entre 0 y 4 (0, 1, 2, 3, 4); mientras Azar(10), un valor entre 0 y 9.</p><p>El número generado por la función Azar debe almacenarse en una variable</p><p>o en una posición del arreglo, por cuanto se debe hacer de la siguiente</p><p>forma: Variable=Azar(5);</p><p>Si la asignación se realiza en un arreglo, se le debe asignar el valor de la</p><p>función Azar a una posición del vector, lo cual se lleva a cabo dentro de</p><p>368</p><p>un ciclo. La instrucción específica de llenado sería la siguiente:</p><p>Vector[Celda]= Azar(15);</p><p>En la figura 4.28, se muestra un vector de 5 posiciones, cuyos valores son</p><p>aleatorios con números del 0 al 4.</p><p>FIGURA 4.28. Pseudocódigo para el llenado de un vector de forma aleatoria</p><p>En el pseudocódigo, se observa que el cambio se realiza en</p><p>la línea 5, donde se emplea la función Azar para generar</p><p>un valor del 0 al 4 y se asigna a una celda del vector. Este</p><p>proceso se repite en cada posición del arreglo.</p><p>El diagrama de flujo del pseudocódigo se presenta en la</p><p>figura 4.29.</p><p>Note que en el programa DFD, empleado para crear el dia-</p><p>grama de flujo, la función para números aleatorios se llama</p><p>Random, pero su funcionamiento es el mismo que la deno-</p><p>minada Azar en PSeInt.</p><p>Hasta el momento, el rango con la función Azar ha ido</p><p>desde 0 hasta un número menos del indicado entre parén-</p><p>tesis; pero si se desea variar el rango, se puede hacer de</p><p>forma sencilla.</p><p>FIGURA 4.29. Diagrama de flujo para el lle-</p><p>nado de un vector de forma aleatoria</p><p>369</p><p>Suponga que se desea simular el comportamiento de un dado. Este posee</p><p>números del 1 al 6. Si se escribe Azar(6), esto generará un número en</p><p>el rango de 0 a 5; pero si se desea que el rango inicie en 1 e incluya al</p><p>número 6, simplemente se le suma una unidad al número generado por</p><p>la función Azar, es decir, Azar(6)+1.</p><p>Como se aprecia en el ejemplo anterior, a la función Azar se le pueden</p><p>aplicar operaciones aritméticas, por ende, los rangos que se pueden crear</p><p>son muy variados.</p><p>Si se toma el ejemplo del llenado del vector usando la función Azar (Ran-</p><p>dom), pero se modifica para que se llene con números en un rango de 50</p><p>a 100, se tendría el siguiente pseudocódigo:</p><p>FIGURA 4.30. Pseudocódigo con llenado de valores aleatorios del 50 al 100</p><p>Observe que la única línea que cambia es la 5 y lo que se modificó fue el</p><p>rango y la suma a la función Azar. En un diagrama de flujo, el cambio sería</p><p>el mismo que en el pseudocódigo.</p><p>4.3.9 Mostrar en pantalla un vector</p><p>Al igual que el llenado de un vector (figura 4.22), para exponer la informa-</p><p>ción almacenada previamente en este, se requerirá de un ciclo para mos-</p><p>370</p><p>trarlo. Para ello, se utiliza el mismo método de llenado, pero con un pe-</p><p>queño cambio dentro del ciclo Para. El siguiente fragmento de pseudocó-</p><p>digo (figura 4.31) presenta el contenido de un vector:</p><p>Para Celda=0 Hasta 4 Con Paso 1 Hacer</p><p>Escribir Vector(Celda);</p><p>FinPara</p><p>FIGURA 4.31. Pseudocódigo que muestra en pantalla el contenido de un vector</p><p>Como se puede observar, tanto para el pseudocódigo de llenado (figura</p><p>4.22) como para el de mostrar en pantalla, se utiliza un ciclo Para. La dife-</p><p>rencia es que se cambia la instrucción Leer Vector[Celda] por la ins-</p><p>trucción Escribir Vector[Celda].</p><p>Un error común es tratar de mostrar el vector como si fuese una variable,</p><p>de esta forma: Escribir Vector; esto se tomará como un error, ya que</p><p>no se puede presentar el arreglo de una sola vez sin especificar su celda.</p><p>Un vector se llena posición por posición y se debe mostrar posición por</p><p>posición; además, si más adelante se desea modificar el contenido de un</p><p>vector, se debe hacer posición por posición.</p><p>A continuación, en la figura 4.33, se observa el pseudocódigo completo de</p><p>llenado y muestra de un vector, con enmarcado de la sección de muestra:</p><p>371</p><p>El pseudocódigo anterior mostraría la siguiente salida en pantalla (figura</p><p>4.33).</p><p>Para obtener una visualización del vector de forma horizontal, se utiliza la</p><p>instrucción Sin Saltar y un espacio en blanco entre comillas, en el co-</p><p>mando Escribir, de la siguiente forma:</p><p>FIGURA 4.33. Programa para cargar y mostrar un vector con datos de tipo Cadena</p><p>FIGURA 4.32. Ejecución del programa para mostrar en una sola línea, los datos</p><p>digitados por el usuario</p><p>372</p><p>Escribir Vector(Celda), “ ”, Sin Saltar;</p><p>Haremos una modificación a la parte de muestra del vector para que se</p><p>visualice horizontalmente y con el carácter “|” como división entre los</p><p>nombres:</p><p>Escribir “|”, Vector(Celda), Sin Saltar;</p><p>El pseudocódigo quedaría de la siguiente forma (figura 4.34):</p><p>La salida en pantalla se muestra en la figura 4.35:</p><p>FIGURA 4.34. Programa para mostrar en una sola línea, los datos digitados por el usuario</p><p>373</p><p>4.3.10 Modificación de un vector</p><p>Al igual que para llenar y mostrar un vector, si se desea modificar los valores</p><p>de un arreglo, se debe hacer celda por celda.</p><p>Considerando el ejemplo en el cual se le asignó el valor de 9 a todas las</p><p>posiciones del arreglo (figura 4.19), se realizará una operación para modi-</p><p>ficar el contenido aumentándolo en una unidad, es decir, el vector quedará</p><p>lleno en cada posición con el número 10.</p><p>El ejercicio completo consiste en un ciclo que llena el vector con el número</p><p>9, luego, se muestra en la pantalla; posteriormente, se modificará el con-</p><p>tenido de cada celda del vector aumentándola en una unidad; y, por último,</p><p>se muestra el vector modificado. Para la modificación del contenido de</p><p>cada celda del vector, se utilizará el siguiente pseudocódigo:</p><p>FIGURA 4.35. Ejecución del programa para mostrar en una sola línea, los datos digita-</p><p>dos por el</p><p>usuario</p><p>374</p><p>Para Celda=0 Hasta 4 Con Paso 1 Hacer</p><p>Vector [Celda]=Vector[Celda]+1;</p><p>FinPara</p><p>FIGURA 4.36. Pseudocódigo incrementa en el contenido de una celda de un vector</p><p>En el fragmento anterior, la instrucción Vector[Celda]= Vector</p><p>[Celda]+1 realiza la función de un acumulador, es decir, que sobre su</p><p>valor original (un 9) asigna lo que tiene almacenado (el 9) y le agrega una</p><p>unidad, así hace que el nuevo valor sea un 10.</p><p>Esto funciona igual que con las variables. La única variación es el uso del</p><p>índice para identificar el contenido en un arreglo. El pseudocódigo com-</p><p>pleto se muestra en la figura 4.37.</p><p>FIGURA 4.37. Pseudocódigo para modificar los valores de vector</p><p>Un acumulador, tam-</p><p>bién llamado contador,</p><p>es una va-riable a la</p><p>cual se le incrementa el</p><p>valor numérico que</p><p>contiene dentro del</p><p>proceso de un ciclo.</p><p>Acumulador</p><p>375</p><p>Observe que, en la línea 12, se tiene el acumulador Vector[celda] (que</p><p>se ubica a la izquierda de la expresión) y varía con la expresión de la dere-</p><p>cha Vector[celda]+1 el contenido del arreglo. En las líneas de la 15 a la</p><p>17, se emplea el ciclo para poder imprimir el vector modificado. La salida</p><p>del pseudocódigo anterior es la siguiente (figura 4.38):</p><p>Ahora, realice el diagrama de flujo en DFD del pseudocódigo anterior. Se le</p><p>ofrece una guía de instrucciones para que corrobore la respuesta.</p><p>Inicio</p><p>Vector(5) 0</p><p>Celda 0</p><p>Para Celda 0 , 4 , 1</p><p>Vector(Celda) 9</p><p>Fin(Para)</p><p>“Vector”</p><p>Para Celda 0 , 4 , 1</p><p>Vector(Celda)</p><p>Fin(Para)</p><p>Para Celda 0 , 4 , 1</p><p>Vector(Celda) Vector(Celda) + 1</p><p>FIGURA 4.38. Pantalla con la ejecución del programa anterior</p><p>376</p><p>Fin(Para)</p><p>“Vector Modificado”</p><p>Para Celda 0 , 4 , 1</p><p>Vector(Celda)</p><p>Fin(Para)</p><p>Fin</p><p>FIGURA 4.39. Detalle de las instrucciones del diagrama de flujo</p><p>Ya se han analizado diversos procesos de los arreglos: su declaración, di-</p><p>mensionamiento, llenado, muestra, modificación; y las estructuras que se</p><p>emplearon para esas acciones son las mismas que para cualquier trabajo</p><p>con arreglos, es decir, siempre se utilizarán los ciclos. A continuación, se</p><p>muestran ejemplos más complejos, que conservan esas estructuras básicas.</p><p>4.3.11 Ejemplos con vectores</p><p>Como se mencionó, se revisarán ejemplos en los cuales se aplica lo visto</p><p>hasta aquí. Se utiliza el programa PSeInt y DFD, por ende, se debe consi-</p><p>derar que, cada vez que se menciona una instrucción, una función o un</p><p>procedimiento, refieren a los que están definidos en estas herramientas.</p><p>Ejemplo 1: Llenar vector con números aleatorios</p><p>El siguiente pseudocódigo, que se muestra en las figuras 4.40 y 4.41, y dia-</p><p>grama de flujo (en figuras, de la 4. 42 a la 4.43), llenan un vector de 50</p><p>posiciones con números aleatorios del 1 al 75. Luego, despliegan en pan-</p><p>talla la cantidad de números pares, impares, múltiplos de 3 y múltiplos de</p><p>5 que hay en el vector. Finalmente, muestran el vector completo.</p><p>377</p><p>Empecemos analizando el pseudocódigo:</p><p>La figura 4.40 muestra la primera parte del pseudocódigo. En las líneas de</p><p>la 1 a la 14, se realiza la declaración de las variables y su inicialización. En</p><p>las líneas de la 17 a la 19, se carga el valor con los valores aleatorios del 1</p><p>al 75 por medio de un ciclo Para.</p><p>1. En la figura 4.41, entre las líneas 26 y 36, se observa el uso de es-</p><p>tructuras de decisión (Si) dentro de un ciclo Para. Estas se emplean</p><p>para determinar si el número es par, impar, múltiplo de 3 o múltiplo</p><p>de 5. Esta lógica se estudió en el capítulo 3 de esta unidad didáctica.</p><p>FIGURA 4.40. Parte 1 de 2 pseudocódigo que llena un vector de 50 posiciones con números aleatorios entre 1 y 75</p><p>378</p><p>Después de cada decisión (líneas 24, 26, 29 y 32), se observa que</p><p>existen contadores para determinar la cantidad de números de cada</p><p>tipo (par, impar, múltiplo de 3 o múltiplo de 5) que están en el arre-</p><p>glo.</p><p>El ciclo Para sirve para recorrer el vector posición por posición y se</p><p>evalúa en cada celda si el valor que contiene, Vector[Celda], es</p><p>divisible entre 2, 3 y 5. Si el valor del residuo es igual a 0, se suma</p><p>FIGURA 4.41. Parte 2 de 2 pseudocódigo que determina la cantidad de números pares, impares, múltiplos de 3 y</p><p>múltiplos de 5 que hay en un vector de 50 posiciones con números entre 1 y 75 llenado al azar</p><p>379</p><p>una unidad a los contadores respectivos (CantidadPar, Canti-</p><p>dadImpar, CantidadMultTres y CantidadMultCinco).</p><p>Finalmente, en las líneas de la 39 a la 45, que se presentan en la</p><p>figura 4.41, se muestra en pantalla el reporte de la información eva-</p><p>luada en el Vector; y en las líneas de la 48 a la 52, el contenido del</p><p>Vector generado.</p><p>2. Seguidamente, en las figuras</p><p>de la 4.42 a la 4.44, se mues-</p><p>tra el diagrama de flujo que</p><p>presenta la misma lógica del</p><p>pseudocódigo anterior.</p><p>FIGURA 4.42. Parte 1 de 3 diagrama que llena un vector de 50 po-</p><p>siciones con números entre 1 y 75, y determina la cantidad de</p><p>números pares, impares, múltiplos de 3 y múltiplos de 5 que hay</p><p>en este</p><p>380</p><p>FIGURA 4.43. Parte 2 de 3 diagrama que llena un vector de 50 posiciones con números entre</p><p>1 y 75, y determina la cantidad de números pares, impares, múltiplos de 3 y múltiplos de 5</p><p>que hay en este</p><p>381</p><p>Ejemplo 2: Registro de atletas, sus marcas y promedios</p><p>En el segundo ejemplo, se le solicita al usuario los nombres de cinco atletas</p><p>y sus respectivas marcas en la competencia de lanzamiento de martillo. Los</p><p>nombres los debe almacenar en un vector llamado VecNombres; y las</p><p>distancias de las marcas, en otro arreglo llamado VecDistancias. Luego</p><p>de introducir los datos, se debe mostrar el siguiente menú:</p><p>FIGURA 4.44. Parte 3 de 3 diagrama que llena un vector de 50 posiciones con números entre 1</p><p>y 75, y determina la cantidad de números pares, impares, múltiplos de 3 y múltiplos de 5 que</p><p>hay en este</p><p>382</p><p>1. Atleta con la distancia más baja.</p><p>2. Atleta con la distancia más alta.</p><p>3. Promedio de las distancias.</p><p>4. Modificar datos.</p><p>5. Salir.</p><p>La funcionalidad de cada opción del menú es la siguiente:</p><p>1. Atleta con la distancia más baja: muestra el nombre y la</p><p>distancia del atleta con la menor distancia de todas.</p><p>2. Atleta con la distancia más alta: muestra el nombre y la</p><p>distancia del atleta con la mayor distancia de todas.</p><p>3. Promedio de las distancias: debe mostrar el promedio de</p><p>las distancias reportadas.</p><p>4. Modificar datos: debe consultarle al usuario cuál nombre de</p><p>atleta desea cambiar. Una vez localizado el dato, debe preguntar el</p><p>nuevo nombre y la nueva distancia; ambos valores deben quedar</p><p>actualizados en los arreglos. Al encontrar y cambiar los datos, debe</p><p>mostrar el siguiente mensaje: Datos cambiados con éxito.</p><p>3. De no encontrar el nombre buscado al inicio, debe enviar el si-</p><p>guiente mensaje: Nombre NO encontrado, y consulta lo siguiente:</p><p>¿Desea buscar de nuevo con otro nombre? S/N. De</p><p>acuerdo con la respuesta (S o N), busca de nuevo o sale al menú.</p><p>Asuma que el usuario digitará solo S o N como respuesta a esta pre-</p><p>gunta.</p><p>4. El nombre que digite el usuario puede buscarlo en mayúscula o mi-</p><p>núscula, esto no debe ser un impedimento para encontrar el dato.</p><p>Para esto, investigue la función Mayúsculas propia del programa.</p><p>5. Salir: esta opción muestra el siguiente mensaje Saliendo… por</p><p>favor espere. Espere de 1 a 3 segundos y salga del algoritmo.</p><p>Para ese tiempo, utilice la función Espera, y el dato de 2 a 3 se-</p><p>gundos lo determina con una función Azar.</p><p>383</p><p>Considere lo siguiente:</p><p>✓ El nombre y los dos apellidos se almacenan en una sola celda.</p><p>✓ Asuma que no habrá nombres ni distancias repetidas.</p><p>✓ La distancia puede tener metros y centímetros. Al ser una compe-</p><p>tencia de élite, no se admiten distancias inferiores a 75.5 metros.</p><p>Debe validar este detalle, de forma que si se digita una distancia</p><p>menor se solicite nuevamente hasta que sea válida.</p><p>✓ Una vez que se muestran los resultados</p><p>en las opciones de la 1 a la</p><p>4 del menú, se debe mostrar un mensaje que diga: Presione</p><p>cualquier tecla para regresar al menú. Al presionar una</p><p>tecla, se debe mostrar de nuevo el menú en una pantalla limpia.</p><p>✓ Debe validar la opción que digita el usuario para el menú; es decir,</p><p>si digita una opción que no está dentro del menú, se le debe indicar</p><p>mediante un mensaje de error y se le debe solicitar de nuevo hasta</p><p>que digite una opción correcta.</p><p>✓ Para este ejemplo, se implementarán las siguientes funciones pro-</p><p>pias del programa:</p><p>o Limpiar Pantalla: borra lo que está en pantalla.</p><p>o Esperar Tecla: detiene (pausa) la ejecución del algoritmo</p><p>hasta que se presione una tecla.</p><p>o Esperar X segundos: detiene (pausa) la ejecución del al-</p><p>goritmo hasta que se cumplan los segundos especificados en</p><p>X.</p><p>o Mayusculas: convierte una cadena de caracteres a mayús-</p><p>culas.</p><p>A continuación, analizaremos el pseudocódigo. Debido a su extensión, se</p><p>dividirá en siete partes.</p><p>I Parte: Declaraciones, dimensionamientos inicialización y</p><p>llenado de arreglos</p><p>En esta primera parte del código, que se muestra en las figuras 4.45 y 4.46,</p><p>se declaran las variables (líneas de la 3 a la 7). Podemos notar que usamos</p><p>384</p><p>cuatro tipos diferentes de datos, a saber: Entero, Real, Cadena y</p><p>Logico. Luego, tenemos la dimensión de los arreglos: uno para almacenar</p><p>los nombres y otro para las distancias, en las líneas 10 y 11. Posterior al</p><p>dimensionamiento, en las líneas que van de la 14 a la 23, encontramos la</p><p>inicialización de variables.</p><p>FIGURA 4.45. Pseudocódigo de declaración de variables, dimensionamiento de vectores e inicialización, para el</p><p>programa de registro de información de atletas en lanzamiento del martillo</p><p>385</p><p>La última parte de esta sección del pseudocódigo es el llenado de los arre-</p><p>glos. Primero, se procesa el nombre del primer atleta y, luego, la distancia</p><p>de su lanzamiento. Para el nombre, utilizamos la función Mayúsculas.</p><p>Esto lo hacemos para que todos los nombres que se ingresen al arreglo se</p><p>almacenen en mayúsculas, aunque se digiten en minúscula.</p><p>Primero, se asigna a una celda el nombre del atleta que digitó el usuario,</p><p>luego se emplea la función Mayusculas; y, entre paréntesis, le enviamos</p><p>el dato (nombre) que está en la celda del vector. La función retorna el</p><p>mismo texto, pero con todos sus caracteres en mayúscula y se asigna este</p><p>dato a la misma celda donde estaba el texto original. Por ejemplo, si se</p><p>digita el nombre Xinia, convertimos ese texto a mayúsculas, es decir, XI-</p><p>NIA, y lo asignamos a la celda que veníamos trabajando; por lo tanto, al</p><p>final en el arreglo, solo tendremos el nombre en mayúscula. Esto nos será</p><p>muy útil en la búsqueda de nombres más adelante.</p><p>Una vez llena la primera celda del vector de nombres, llenamos la primera</p><p>celda del vector para las distancias (figura 4.46). En este punto, validamos</p><p>la distancia reportada por medio de un condicional y un ciclo. Para cada</p><p>distancia, se evalúa si es mayor o igual a 75.5. Si la condición se cumple,</p><p>FIGURA 4.46. Pseudocódigo de declaración de variables, dimensionamiento de vectores e inicialización, para el programa</p><p>de registro de información de atletas en lanzamiento del martillo</p><p>386</p><p>sale del ciclo; de lo contrario, se repite nuevamente la solicitud del dato.</p><p>Esto se hace hasta que la distancia cumpla con la condición estipulada en</p><p>el Hasta que.</p><p>II Parte: Menú</p><p>En la segunda parte del pseudocódigo, que se muestra en la figura 4.47,</p><p>analizaremos el menú y la validación de la opción que digite el usuario.</p><p>Luego de llenar los arreglos, se habilita un ciclo Repetir, línea 51 con todo</p><p>lo que se debe hacer en el menú, desde mostrarlo hasta ejecutar las opcio-</p><p>nes que elija el usuario. Este primer ciclo se inicia en la figura 4.46, pero</p><p>termina en la 4.51.</p><p>FIGURA 4.47. Pseudocódigo que muestra la forma como se construye el menú y se lee la opción seleccionada</p><p>por el usuario en la variable OpcionMenu</p><p>387</p><p>La muestra del menú se hace dentro de otro ciclo Repetir, con la idea de</p><p>validar la opción que se digite. Como podemos ver, primero, se muestran</p><p>las instrucciones y opciones del menú. El usuario debe digitar un número</p><p>entre 1 y 5, correspondiente a las opciones dadas. Luego de leer el dato</p><p>digitado, se utiliza una estructura Si, donde se evalúa si el valor digitado</p><p>es diferente a las opciones del menú; en caso de que lo sea, se muestran</p><p>los mensajes respectivos. Luego se evalúan las condiciones del Hasta</p><p>que; y si el valor no es igual a ninguna de las opciones del menú, el ciclo</p><p>se repite y se muestra el menú de nuevo.</p><p>Si el valor que se digitó fue una de las opciones del menú, entonces no se</p><p>ingresa al Si, y se cumple con alguna de las opciones del menú, por lo que</p><p>se sale de este y se continúa con la siguiente instrucción.</p><p>El valor con el que termina la variable OpcionMenu luego del ciclo está</p><p>validado, es decir, que es una de las opciones del menú; por lo tanto,</p><p>podemos usarlo sin problema en la estructura Según.</p><p>A continuación, se mostrarán los fragmentos del pseudocódigo referente a</p><p>cada opción del menú. Nótese que todas esas opciones están dentro de</p><p>una estructura Según, línea 74 de la figura 4.48, y, a su vez, está dentro del</p><p>Repetir.</p><p>III Parte: Primera opción del menú (dentro del ciclo Repetir</p><p>que inició en la línea 51)</p><p>En la opción 1, primero, le asignamos a una variable el valor contenido en</p><p>la primera celda del vector. Esto es para evitar errores por el valor inicial (el</p><p>que asignamos en la inicialización) de la variable.</p><p>388</p><p>El valor inicial de la variable MenorDistancia, en la línea 18, fue 0. Ahora,</p><p>el VectorDistancia está lleno de valores superiores a 0 (recordemos</p><p>que las distancias reportadas por el usuario deben ser iguales o mayores a</p><p>75.5); por consiguiente, en primera instancia, se le debe asignar a esta</p><p>variable el valor de la primera posición del vector (línea 76). Si no se hiciera</p><p>esto, se estaría comparando el valor 0 con cada una de las distancias alma-</p><p>cenadas y obtendríamos que la distancia menor es de 0, lo cual es un error;</p><p>de ahí la importancia de la línea 76.</p><p>El segundo bloque de instrucciones, que inicia en la línea 82, es un ciclo</p><p>Para, con una estructura Si adentro. El ciclo va de 0 a 4 (utilizando la</p><p>variable Celda). En cada ingreso ejecuta la condición Si, la cual compara</p><p>FIGURA 4.48. Pseudocódigo que muestra las acciones por realizar cuando se elige la opción 1 del menú: Atleta con</p><p>la distancia más baja</p><p>389</p><p>el contenido de la celda con la variable MenorDistancia. En caso de que</p><p>la condición sea verdadera, asigna a MenorDistancia el valor que tiene</p><p>esa celda, ya que el valor de la celda es menor al valor de la variable, lo que</p><p>nos indica que tenemos un nuevo valor menor.</p><p>La instrucción de la línea 85 almacena, en una variable llamada CeldaAux,</p><p>el valor de la variable Celda para saber en qué posición del vector se en-</p><p>cuentra la menor distancia.</p><p>El último bloque de código (líneas 90 a la 97) es para mostrar los resultados</p><p>de la revisión de distancias. Notemos que se utiliza la variable CeldaAux</p><p>para visualizar la posición exacta donde se encuentra la menor distancia y</p><p>a cuál atleta pertenece. Recordemos que el nombre del atleta y su distancia</p><p>están en vectores diferentes, pero en las mismas posiciones.</p><p>IV Parte: Opción 2 del menú: Atleta con la distancia más alta</p><p>Seguimos dentro del ciclo Repetir que inició en la línea 51.</p><p>En la opción 2, Atleta con la distancia más alta, se hace lo</p><p>mismo que en la opción 1, pero cambiamos la variable MenorDistancia</p><p>por MayorDistancia y el signo relacional de la línea 107. La lógica y su</p><p>orden son los mismos que para la primera opción.</p><p>390</p><p>IV Parte: Opción 3 del menú: Promedio de las distancias</p><p>Siempre dentro del ciclo Repetir que inició en la línea 51.</p><p>La opción 3 inicia con una asignación a las variables</p><p>SumatoriaDistancias y PromedioDistancias de 0. Luego, se inicia</p><p>un ciclo Para, donde se suman todas las distancias de los atletas. Esta</p><p>sumatoria se hace mediante la técnica de acumulador, es decir, se almacena</p><p>en la variable SumatoriaDistancias el valor de ella misma más el valor</p><p>de cada una de las celdas del vector.</p><p>Posterior a la suma de las distancias, se calcula su promedio (línea 136) y</p><p>se muestra el resultado, por medio de un reporte (líneas 139 a la 142).</p><p>FIGURA 4.49. Pseudocódigo que muestra la acciones a realizar cuando se elige la opción 2 del menú: Atleta con la</p><p>distancia más alta</p><p>391</p><p>V Parte: Cuarta opción del menú: Modificar datos</p><p>Aún dentro del ciclo Repetir que inició en la línea 51.</p><p>En esta opción, que inicia en la línea 145 de la figura 4.51, se tiene un ciclo</p><p>Repetir para todo su proceso que va desde la línea 146 hasta la 186;</p><p>dentro de este, se inicia con una asignación a la variable de tipo Logico</p><p>(Verdadero o Falso), llamada NombreEncontrado, de falso. Luego,</p><p>solicita y lee un nombre para buscar y pasa ese nombre a mayúsculas.</p><p>Posterior al último paso, se inicia un ciclo Para (línea155), donde se evalúa</p><p>si el nombre digitado por el usuario es igual a alguno de los nombres que</p><p>se encuentran en el vector (esto se hace celda por celda). En caso de que</p><p>la condición del Si se cumpla, se solicita el nombre nuevo y se almacena</p><p>FIGURA 4.50. Pseudocódigo que muestra las acciones por realizar cuando se elige la opción 3 del menú: Promedio</p><p>de distancias</p><p>392</p><p>en el vector de nombres (esto se hace en la misma posición donde se en-</p><p>contró el nombre buscado). Para terminar la gestión de este primer dato,</p><p>se pasa el nuevo nombre a mayúsculas.</p><p>Luego de procesar el nombre, se ejecuta la solicitud, la lectura y la</p><p>validación de la nueva distancia. Este bloque de pseudocódigo es igual al</p><p>utilizado en el llenado inicial del vector. En la parte final de ese Si, se</p><p>muestra un mensaje al usuario y se asigna un valor de 5 a la variable Celda.</p><p>Esto sirve para salir del ciclo Para de una vez y no seguir ejecutándolo;</p><p>además, se asigna un valor de verdadero a la variable</p><p>NombreEncontrado.</p><p>Fuera del ciclo Para, se evalúa si la variable NombreEncontrado es</p><p>Falso (línea 181). Si lo es, se le muestra un mensaje al usuario y se consulta</p><p>si se desea buscar otro nombre. El ciclo Repetir finaliza con una condición</p><p>que evalúa si la variable OpcionUsuario tiene un valor de N o n o si la</p><p>variable NombreEncontrado es verdadera. Si alguna de estas condicio-</p><p>nes se cumple, quiere decir que el usuario no desea buscar más nombres</p><p>o que el nombre se encontró. En cualquiera de esos casos, el ciclo finaliza.</p><p>VI Parte: Opción Salir del menú</p><p>Recuerde que nos mantenemos dentro del ciclo Repetir que inició en la</p><p>línea 51.</p><p>Esta opción se ejecuta si ninguna de las cuatro anteriores lo hizo. Esto</p><p>quiere decir que el usuario digitó la opción 5 del menú y desea salir de la</p><p>aplicación, por ende, se le muestra un mensaje y se espera de 1 a 3 segun-</p><p>dos para salir de la estructura Según, que inicio en la línea 74 y tiene su fin</p><p>393</p><p>en la línea 194. También, podemos notar que el ciclo Repetir de la línea</p><p>51 tiene su fin en el Hasta que de la línea 195 (figura 4.52).</p><p>FIGURA 4.51. Pseudocódigo que muestra las acciones por realizar cuando se elige la opción 4 del menú: Modificar datos</p><p>394</p><p>4.3.12 Ejemplo 3: Ordenar e invertir un vector</p><p>Este algoritmo debe ordenar o invertir un vector. El usuario determina lo</p><p>que desea hacer mediante el siguiente menú:</p><p>Digite una de las siguientes opciones para el</p><p>vector:</p><p>1. Llenar.</p><p>2. Ordenar.</p><p>3. Invertir.</p><p>4. Salir.</p><p>Explicación de las opciones del menú</p><p>1. Llenar: llena el vector con números aleatorios del 10 al 99, pero</p><p>los números deben ser de tipo Real, es decir, pueden tener o no</p><p>decimales; realice algún cálculo para que cada número tenga un dí-</p><p>gito decimal del 0 al 9, también de forma aleatoria.</p><p>2. Ordenar: ordena el arreglo de menor a mayor (ascendentemente).</p><p>Debe mostrar el vector original y el ordenado. No puede utilizar otro</p><p>vector; por lo tanto, se debe modificar el vector que se llenó al inicio.</p><p>3. Invertir: invierte el orden de los elementos del vector de la si-</p><p>guiente forma: el contenido de la primera celda del vector original</p><p>pasa a ser el contenido de la última celda del vector invertido; la</p><p>FIGURA 4.52. Pseudocódigo que muestra la acciones por realizar cuando se elige la opción 5</p><p>del menú: Salir</p><p>395</p><p>segunda será la penúltima, y así sucesivamente. Debe mostrar el</p><p>vector original y el ordenado. No puede utilizar otro vector.</p><p>4. Salir: muestra un mensaje de despedida y sale del programa luego</p><p>de un segundo.</p><p>Considere los siguientes puntos:</p><p>✓ El tamaño del vector lo define el usuario, debe ser mayor o igual a 5</p><p>y menor o igual a 50. Esto debe validarlo.</p><p>✓ Debe validar la opción que digite el usuario en el menú. Si digita una</p><p>opción incorrecta, se le debe solicitar de nuevo hasta que digite un</p><p>dato válido.</p><p>✓ En caso de elegir la opción 2 o 3 del menú, se debe validar si el</p><p>vector no se ha llenado. En tal caso, se le indica al usuario mostrando</p><p>el siguiente mensaje: Vector vacío, debe llenar el vec-</p><p>tor. Luego del mensaje se le indica lo siguiente: Presione cual-</p><p>quier tecla parea volver al menú.</p><p>✓ Luego de mostrar los resultados de Ordenar o Invertir el vector,</p><p>debe mostrar el siguiente mensaje Presione cualquier tecla</p><p>para volver al menú.</p><p>✓ Para el mensaje de presionar cualquier tecla, debe utilizar la función</p><p>Esperar tecla.</p><p>A continuación, analizaremos el pseudocódigo del ejemplo anterior y, al</p><p>igual que en el segundo ejemplo, haremos el análisis del pseudocódigo por</p><p>partes.</p><p>I Parte: Declaraciones, inicializaciones y dimensionamiento</p><p>con validación</p><p>En la primera sección del código, se efectúa la declaración de variables con</p><p>tipos de datos Entero, Real y Logico. Posteriormente, se inicializan las</p><p>variables y se procede con la validación del tamaño del arreglo.</p><p>396</p><p>Para la validación, se emplea un ciclo Repetir, en el cual se le pregunta</p><p>al usuario el tamaño del vector y se revisa que el valor digitado esté entre</p><p>5 y 50 (línea 19). Si ese valor es menor a 5 o mayor a 50, se emite un</p><p>mensaje de error; pero si el tamaño propuesto está dentro del rango (5 a</p><p>50), se dimensiona el arreglo y se sale del ciclo.</p><p>FIGURA 4.53. Pseudocódigo que muestra las acciones iniciales del programa, inicialización y validación de</p><p>variables y el vector</p><p>397</p><p>II Parte: Menú y validación</p><p>Esta parte del código inicia con un primer ciclo Repetir (línea 27), que</p><p>tendrá dentro de sí la estructura del menú y el desarrollo de cada una de</p><p>las opciones que el usuario elija. Puede verificar que este ciclo Repetir se</p><p>extiende desde la línea 27 hasta la 133 al final del código.</p><p>Posteriormente, se abre un segundo ciclo Repetir (línea 30), el cual deta-</p><p>lla la impresión del menú, se lee el dato y luego se implementa un Si para</p><p>comparar lo digitado con las opciones del menú. Si ese dato es diferente a</p><p>1, 2, 3 y 4, se muestra un mensaje de error. El ciclo finalizará cuando la</p><p>variable OpcionMenu sea igual a 1, 2, 3 o 4.</p><p>III Parte: Opción 1 del menú (dentro del ciclo Repetir</p><p>iniciado en la línea 27): Llenar</p><p>La primera opción del menú se emplea para llenar el arreglo. Para esto, se</p><p>emplea un ciclo Para, pero con una pequeña variante en el dato del Hasta</p><p>FIGURA 4.54. Pseudocódigo que despliega el menú de opciones y valida la selección del usuario</p><p>398</p><p>que, el cual no habíamos utilizado antes. En la línea 52, el Hasta del ciclo</p><p>Para utiliza la variable TamanioVector con una resta</p><p>(TamanioVector-1). Esto obedece a que TamanioVector lo determina</p><p>el usuario, pero al usarlo como límite, debemos quitarle una unidad porque</p><p>el conteo de las celdas inicia en 0.</p><p>Por ejemplo, si el usuario determinó que el tamaño del vector es 10,</p><p>significa</p><p>que TamanioVector es igual a 10 y que el arreglo tiene diez</p><p>celdas; no obstante, la numeración de estas va de 0 a 9, por ende,</p><p>usamos TamanioVector-1, para que nuestro límite sea 9. Esta</p><p>instrucción (TamanioVector-1) es una operación aritmética, cuyo</p><p>resultado siempre será, para este ejemplo, 9 por eso se utiliza como límite;</p><p>pero es importante aclarar que el valor de TamanioVector no se está</p><p>cambiando, ya que no se utiliza un operador de asignación (=).</p><p>Con el detalle del límite claro, analicemos el llenado del vector en cuanto a</p><p>su contenido. El arreglo debe tener números aleatorios del 10 al 99, pero</p><p>pueden tener o no decimales. Esto brinda la siguiente situación: podemos</p><p>generar los números al azar en el rango establecido sin problema, pero los</p><p>FIGURA 4.55. Pseudocódigo para llenar el arreglo VectorNumeros, correspondiente a la opción 1 del menú</p><p>399</p><p>números serán únicamente de tipo Entero, por lo que no tienen decima-</p><p>les.</p><p>La solución es bastante simple; primero, en la línea 53, asignamos un nú-</p><p>mero aleatorio (del 10 al 99) a una celda del vector. Luego, en la línea 54,</p><p>asignamos a la misma celda la suma del contenido de esa celda más un</p><p>número aleatorio del 0 al 9, pero dividido entre 10.</p><p>Veamos un ejemplo, supongamos que el número aleatorio inicial (10 al 99)</p><p>es 15. Luego, generamos otro número al azar, pero del 0 al 9; imaginemos</p><p>que es 7. Ese número lo dividimos entre diez (7/10), por lo que daría 0.7.</p><p>Finalmente, ese 0.7 lo sumamos al contenido de la celda, es decir, a 15,</p><p>por cuanto el 15 se convierte en un 15.7.</p><p>De esa forma, nuestro arreglo tendrá números aleatorios del 10 al 99, pero</p><p>con decimales. También puede que no los tenga, ya que el segundo Azar</p><p>puede darnos un 0; por lo tanto, se dividiría 0 entre 10 y el resultado se</p><p>suma al número aleatorio de la celda.</p><p>Luego de llenar el vector, se cambia el valor de la variable Boolena</p><p>(Logico) VectorLleno a Verdadero. Esta variable nos indicará, como</p><p>es el caso, que el vector tiene datos; y si el valor de esta variable es Falso,</p><p>significa que el vector aún no tiene valores. Esto nos servirá para determinar</p><p>si ingresamos a las opciones 2 y 3 del menú, ya que no podríamos ordenar</p><p>o invertir el arreglo si no tiene valores en su interior.</p><p>400</p><p>IV Parte: Opción 2 del menú (dentro del ciclo Repetir iniciado</p><p>en la línea 27): Ordenar</p><p>En esta opción del menú, que se muestra en la figura 4.56 (línes 62), se</p><p>valida primero si el arreglo está vacío o no, para lo que se utiliza la variable</p><p>de tipo Logico llamada VectorLleno. Si es igual a Verdadero, quiere</p><p>decir que VectorNumeros ya tiene datos; y, por ende, se podrán ejecutar</p><p>las instrucciones dentro del Si de la línea 62. De lo contrario (Sino de la</p><p>línea 89), se le muestra al usuario un mensaje que indica que el vector está</p><p>vacío y que debe llenarlo primero.</p><p>FIGURA 4.56. Pseudocódigo para ordenar el arreglo VectorNumeros, correspondiente a la opción 2 del menú</p><p>401</p><p>Dentro del Si, primero se muestra en pantalla el vector original, ya que el</p><p>ordenamiento se realizará en este mismo arreglo. Para esto, se utiliza un</p><p>ciclo Para, que va de la línea 65 a la 67. Notemos que, aparte del conte-</p><p>nido de una celda, se emplea un espacio en blanco (entre comillas) y la</p><p>instrucción Sin Saltar, lo cual tiene como efecto que se impriman los</p><p>datos del vector con espacio entre cada elemento y en línea horizontal.</p><p>Luego de la muestra del vector, se ordena sus elementos de menor a ma-</p><p>yor, para lo cual emplearemos dos ciclos Para, uno dentro de otro; dos</p><p>variables para identificar celdas (Celda y CeldaAux); una estructura Si</p><p>dentro del ciclo Para interno y una variable para almacenar de forma tem-</p><p>poral un elemento del vector (CeldaTemporal).</p><p>Así pues, compararemos el primer elemento del vector con cada uno de los</p><p>otros elementos. Si alguno de los dos es menor al otro, entonces los cam-</p><p>biaremos de posición. Veamos en detalle la lógica utilizada con un ejemplo</p><p>y siguiendo el bloque de pseudocódigo de las líneas 70 a la 78.</p><p>Tomemos el siguiente vector como ejemplo:</p><p>13.0 11.9 20.2 74.5 65.6</p><p>FIGURA 4.58. Vector lleno de números reales de ejemplo</p><p>FIGURA 4.57. Pseudocódigo para comparar el vector</p><p>402</p><p>El tamaño del vector es de 5, por lo que la variable TamanioVector tiene</p><p>ese valor. Sin embargo, notemos que, en los ciclos Para, empleamos</p><p>TamanioVector-1, ya que la numeración de las celdas va de 0 a 4. Si no</p><p>hacemos esa resta en el límite del ciclo, se llegaría hasta la celda numerada</p><p>con 5, lo cual es un error pues no existe; es claro que tenemos una quinta</p><p>celda, pero la misma está identificada con el número 4.</p><p>Contenido 13.0 11.9 20.2 74.5 65.6</p><p>Número de celda (índice) [0] [1] [2] [3] [4]</p><p>FIGURA 4.59. Vector lleno de números reales de ejemplo e indicación de los índices de las celdas</p><p>Ahora, analicemos el orden de ejecución de los ciclos Para anidados.</p><p>Cuando tenemos un Para dentro de otro, se ingresa, primero, al Para</p><p>externo (Para Celda=0 Hasta TamanioVector-1 Con Paso 1</p><p>Hacer), luego se ingresa al Para interno (Para CeldaAux=Celda</p><p>Hasta TamanioVector-1 Con Paso 1 Hacer). Este ciclo interno</p><p>tiene la particularidad de que su variable de control (CeldaAux) se</p><p>inicializa con el mismo valor de la variable Celda, del ciclo externo. Esto</p><p>hace que el ciclo interno se ejecute una vez menos cada vez que se reinicia.</p><p>La primera vez que se pasa del Para externo al interno, este último se eje-</p><p>cuta cinco veces. La segunda vez que se hace ese mismo paso de un ciclo</p><p>a otro, el interno se hace cuatro veces. La tercera vez se realizan tres ejecu-</p><p>ciones. La cuarta vez que se pasa de un ciclo a otro, las ejecuciones del</p><p>interno son dos; mientras que la última (quinta) vez que se hace el cambio,</p><p>el ciclo interno se ejecuta una vez.</p><p>403</p><p>Una vez aclarado cómo se ejecutan los ciclos Para anidados de nuestro</p><p>ejemplo y los detalles del proceso de ordenamiento, analizaremos los in-</p><p>gresos a los ciclos, con el fin de entender el proceso lógico.</p><p>Primero, debemos notar que cada vez que se ingresa al ciclo Para interno</p><p>se ejecuta un Si que compara si el contenido de la celda del arreglo Vec-</p><p>torNumeros identificada con la variable CeldaAux es menor al contenido</p><p>de la celda del mismo arreglo identificada con la variable Celda. Depen-</p><p>diendo del cumplimiento de la condición del Si, se ejecutan ciertas accio-</p><p>nes.</p><p>a) Ejecución 1 de 5 del Para externo</p><p>i. Ejecución 1 de 5 del Para interno</p><p>Estado al inicio del ciclo Estado al final del ciclo</p><p>Celda: 0 Celda: 0</p><p>CeldaAux: 0 CeldaAux: 0</p><p>VectorNumeros:</p><p>13.0 11.9 20.2 74.5 65.6</p><p>VectorNumeros:</p><p>13.0 11.9 20.2 74.5 65.6</p><p>CeldaTemporal: 0 CeldaTemporal: 0</p><p>Pseudocódigo del Si (línea 72)</p><p>FIGURA 4.60. Pseudocódigo para comparar contenidos del mismo vector, ejecución 1 del Para externo y 1 del Para interno</p><p>Se evalúa si el contenido de la celda del vector identificada con CeldaAux</p><p>es menor al contenido del arreglo en la posición Celda (línea 72). En esta</p><p>404</p><p>primera ejecución del ciclo interno, ambas variables tienen el mismo valor</p><p>(0), por lo que la condición la podemos ver de la siguiente forma:</p><p>Si VectorNumeros(0)</p><p>0 CeldaTemporal: 11.9</p><p>405</p><p>Pseudocódigo del Si (línea 72)</p><p>FIGURA 4.61. Pseudocódigo para comparar contenidos del mismo vector, ejecución 1 del Para externo y 2 del Para interno</p><p>Se realiza la misma comparación que en el paso anterior (si el contenido</p><p>de la celda del vector identificada con CeldaAux es menor al contenido</p><p>del arreglo en la posición Celda), pero observemos que la numeración de</p><p>las celdas ya no es la misma, debido a que CeldaAux vale 1. La expresión</p><p>es esta:</p><p>Si VectorNumeros(1)</p><p>del Para externo y 2 del Para interno</p><p>En esta segunda ejecución del Para interno, la variable CeldaAux tiene</p><p>un valor de 4. La comparación será la siguiente:</p><p>Si VectorNumeros(4)</p><p>didácticos que le permiten</p><p>al estudiante identificar algunos elementos importantes.</p><p>En la ventana de cada capítulo (la primera página), se presenta el título y el</p><p>número del capítulo, además de un sumario en un recuadro. Este último</p><p>consiste en los títulos principales que conforman el capítulo.</p><p>viii</p><p>En el reverso, se encuentran los objetivos de aprendizaje que el estudiante</p><p>debe alcanzar al finalizar el estudio del capítulo y se dividen en objetivo</p><p>general y en objetivos específicos. También, se presenta una lista de con-</p><p>ceptos clave.</p><p>Cada capítulo inicia con una pequeña introducción, así como una breve</p><p>guía de lectura sobre su ordenamiento y que se encuentra señalado por el</p><p>siguiente icono.</p><p>Guía de lectura</p><p>ix</p><p>Tanto las figuras como los cuadros que se utilizan en el libro contienen una</p><p>leyenda con un número y la descripción. El número está compuesto por</p><p>dos números: el primero identifica el capítulo en el que se encuentra y el</p><p>segundo es un consecutivo. La leyenda está al pie, en las figuras y en los</p><p>cuadros en la parte superior.</p><p>Otro recurso que el lector encontrará es el cuadro al margen, en el cual</p><p>encontrará la definición de un concepto importante que se utiliza en el</p><p>texto y que está resaltado en negrita.</p><p>x</p><p>Como parte del proceso de enseñanza-aprendizaje guiado, se presentan a</p><p>lo largo del texto algunos recuadros, titulados “Para saber más”, en los que</p><p>se les motiva a investigar y a profundizar sobre algunos temas. Asimismo,</p><p>proporciona lugares en internet donde podrá encontrar más información</p><p>con sus respectivos enlaces y el código QR del sitio.</p><p>Los códigos QR (Quick Response Code o “código de respuesta rápida”), son</p><p>un “atajo” para acceder a las direcciones en la red sugeridas. Debe disponer</p><p>de conexión a internet, una tableta o teléfono inteligente (smartphone) y</p><p>una app –o aplicación– para leer este tipo de imágenes. Por lo general, los</p><p>sistemas operativos las incluyen, o bien, se pueden descargar gratuita-</p><p>mente de tiendas y de repositorios.</p><p>xi</p><p>En ocasiones, es necesario resaltar algún dato o situación importante que</p><p>no se debe obviar, y lo encontrará en un recuadro como este:</p><p>En los casos en que es necesario llamar la atención sobre un tema por con-</p><p>siderar, se encuentra el siguiente icono:</p><p>O bien, si se desea que se tome un momento para reflexionar en lo que se</p><p>ha leído, se plantea de la siguiente forma:</p><p>Por último, se utilizan una serie de iconos en la columna auxiliar (columna</p><p>que se deja libre en el margen externo de la hoja) para resaltar algunas</p><p>secciones esenciales en el texto, que se muestran a continuación:</p><p>Nota</p><p>Podemos observar que, con solo un operador (interruptor)</p><p>OR esté activado (T), el bombillo se encenderá (T).</p><p>Para reflexionar...</p><p>• ¿Conocía el aporte de las mujeres a la historia de la</p><p>computación y de la ciencia?</p><p>• ¿Qué opina del papel de la mujer actual en estas áreas?</p><p>• ¿Notó, durante la lectura, que los matemáticos han</p><p>realizado grandes aportes a la programación?</p><p>xii</p><p>Icono Descripción</p><p>Señala el inicio de los ejercicios de autoevaluación. Consiste en una</p><p>serie de actividades que se le plantean con el fin de que medir su</p><p>nivel de aprendizaje al finalizar la lectura del capítulo o del apar-</p><p>tado.</p><p>Aquí encontrará las respuestas de los ejercicios de autoevaluación.</p><p>No haga trampa y no los revise hasta no haber intentado resolver-</p><p>los usted mismo; solo así podrá saber qué puntos debe repasar an-</p><p>tes de seguir con su estudio.</p><p>Este ícono se encuentra en “Referencias” y contiene el nombre de</p><p>los textos que se utilizan como respaldo teórico.</p><p>Un apartado básico es el “Glosario”, en el cual localiza la definición</p><p>de palabras que debe dominar en el área de la programación.</p><p>“Lecturas recomendadas”, como su nombre lo indica, tiene una lista</p><p>de texto, digitales o físicos, que se recomienda consultar.</p><p>Esperamos que esta obra le ayude a alcanzar sus objetivos de estudio.</p><p>Atentamente, el equipo de producción.</p><p>xiii</p><p>¿Sabe qué es Promade? ¿Quiere colaborar en</p><p>la mejora de este material didáctico?</p><p>El libro que está en sus manos fue especialmente diseñado para usted. Un</p><p>equipo multidisciplinario de profesionales veló por su calidad académica,</p><p>gracias a un riguroso proceso de revisiones y a una mediación didáctica</p><p>apropiada, de acuerdo con las necesidades propias de una persona que</p><p>estudia en el sistema de educación a distancia.</p><p>En el Programa de Producción de Material Didáctico Escrito (Promade), se</p><p>elaboran los materiales escritos que las asignaturas de la UNED requieren.</p><p>Desde la fundación de la Universidad, en 1977, este departamento ha sido</p><p>el eje de la producción de aquellos materiales que son el principal objeto</p><p>de consumo didáctico de nuestros estudiantes, lo cual nos compromete a</p><p>una producción intensa y permanente. Estas obras han llegado a constituir</p><p>un acervo nacional e internacional: se utilizan con gran éxito en la UNED y,</p><p>también, en diferentes instituciones educativas públicas y privadas de nivel</p><p>superior y medio del país, así como fuera de Costa Rica.</p><p>Usted puede contribuir con el mejoramiento de los materiales que produ-</p><p>cimos, enviando sus observaciones y comentarios sobre la unidad didáctica</p><p>al correo infopromade@uned.ac.cr. Recuerde incluir el nombre del material</p><p>xiv</p><p>y del autor o autores. Y si el libro le gustó, también cuéntenos… ¡Nos en-</p><p>cantaría conocer su experiencia!</p><p>VectorNumeros(5). El</p><p>contenido de esa celda es 15.1, por lo que CeldaTemporal tendría ese</p><p>valor.</p><p>En la línea 107, se le asigna al vector, en la posición 5 (TamanioVector-</p><p>1-Celda), lo que tiene el mismo vector en la posición Celda, es decir, el</p><p>contenido de VectorNumeros(0), que es 45.6. Este paso cambia el</p><p>valor de la primera posición y lo copia en la última posición del vector. El</p><p>último valor lo habíamos copiado en CeldaTemporal, por lo que no lo</p><p>hemos perdido.</p><p>Finalmente, en la línea 108, se asigna a VectorNumeros(Celda), es decir</p><p>VectorNumeros(0), el contenido de CeldaTemporal; por lo tanto, se</p><p>asigna, en esa posición, el 15.1.</p><p>b) Ejecución 2 de 3</p><p>Estado al inicio del ciclo Estado al final del ciclo</p><p>Celda: 1 Celda: 1</p><p>TamanioVector-1-Celda: 4 TamanioVector-1-Celda: 4</p><p>VectorNumeros:</p><p>15.1 76.7 54.6 25.9 19.8 45.6</p><p>VectorNumeros:</p><p>15.1 19.8 54.6 25.9 76.7 45.6</p><p>CeldaTemporal: 15.1 CeldaTemporal: 19.8</p><p>Pseudocódigo del Para (línea 105)</p><p>FIGURA 4.82. Pseudocódigo para invertir los valores del arreglo (ejecución 2 de 3)</p><p>421</p><p>En la segunda ejecución, en la línea 106, se le asigna a la variable Celda-</p><p>Temporal el contenido de la celda representada por la instrucción:</p><p>VectorNumeros(TamanioVector-1-Celda)</p><p>Esto sería VectorNumeros(6-1-1), es decir, VectorNumeros(4). El</p><p>contenido de esa celda es 19.8, por lo que CeldaTemporal tendría ese</p><p>valor.</p><p>En la línea 107, se le asigna al vector, en la posición 4, (TamanioVector-</p><p>1-Celda), que tiene el mismo vector en la posición Celda, es decir, el</p><p>contenido de VectorNumeros(1), que es 76.7.</p><p>En la línea 108, se le asigna a VectorNumeros(Celda), es decir Vec-</p><p>torNumeros(1), el contenido de CeldaTemporal; por consiguiente, se</p><p>asigna en esa posición el 19.8.</p><p>c) Ejecución 3 de 3</p><p>Estado al inicio del ciclo Estado al final del ciclo</p><p>Celda: 2 Celda: 2</p><p>TamanioVector-1-Celda: 3 TamanioVector-1-Celda: 3</p><p>VectorNumeros:</p><p>15.1 19.8 54.6 25.9 76.7 46.6</p><p>VectorNumeros:</p><p>15.1 19.8 25.9 54.6 76.7 46.6</p><p>CeldaTemporal: 25.9 CeldaTemporal: 25.9</p><p>Pseudocódigo del Para (línea 105)</p><p>FIGURA 4.83. Pseudocódigo para invertir los valores del arreglo (ejecución 3 de 3)</p><p>422</p><p>En la última ejecución del ciclo, se le asigna a la variable CeldaTemporal</p><p>el contenido de la celda representada por la instrucción:</p><p>VectorNumeros(TamanioVector-1-Celda)</p><p>Esto sería VectorNumeros(6-1-2), es decir, VectorNumeros(3). El</p><p>contenido de esa celda es 25.9, por lo que CeldaTemporal tendría ese</p><p>valor.</p><p>En la línea 107, se le asigna al vector, en la posición 3, (TamanioVector-</p><p>1-Celda), que tiene el mismo vector en la posición Celda, es decir, la 2,</p><p>el contenido de VectorNumeros(2), que es 54.6.</p><p>En la línea 108, se asigna a VectorNumeros(Celda), es decir Vector-</p><p>Numeros(2), el contenido de CeldaTemporal, por ende, se asigna en</p><p>esa posición el 25.9.</p><p>Al final de esta ejecución, la variable Celda aumenta su valor a 3, por ello,</p><p>no se repite más el ciclo y sale de él.</p><p>Nuestro vector pasó de esto:</p><p>45.6 76.7 54.6 25.9 19.8 15.1</p><p>FIGURA 4.84. Vector original</p><p>A esto:</p><p>15.1 19.8 25.9 54.6 76.7 45.6</p><p>FIGURA 4.85. Vector invertido</p><p>423</p><p>Con el arreglo invertido, se muestra el nuevo orden, por medio de un ciclo</p><p>Para, igual al empleado para mostrar el vector original.</p><p>FIGURA 4.86. Pseudocódigo que muestra en pantalla el resultado de invertir un vector</p><p>Luego de la muestra, sigue el Sino (línea 120) del Si de validación de la</p><p>línea 97, para saber si el vector estaba lleno.</p><p>En la línea 127, se ejecuta la instrucción De Otro Modo, la cual se utiliza</p><p>para salir del algoritmo. En la línea 131, se cierra la estructura Segun, mien-</p><p>tras que, en la 133, se cierra el ciclo Repetir iniciado en la línea 27.</p><p>Ejemplo 4: Determinar un palíndromo</p><p>Un palíndromo es una palabra o frase que, eliminando los espacios en</p><p>blanco, se lee igual de izquierda a derecha que de derecha a izquierda.</p><p>Algunos ejemplos de palíndromos son: oro, ojo, allá, oso, radar, solos, amor</p><p>a Roma, Ana lava lana, la ruta natural, luz azul.</p><p>424</p><p>A continuación, se muestra cómo se carga en cada celda de un vector de</p><p>máximo 50 posiciones, cada letra digitada, omitiendo los espacios en</p><p>blanco, para luego comparar el arreglo y determinar si es o no palíndromo.</p><p>Si se presiona la tecla enter, ya no se carga más información al vector.</p><p>Analice los siguientes ejemplos:</p><p>R A D A R</p><p>FIGURA 4.87. Ejemplo de un vector palíndromo, con la palabra RADAR</p><p>Si la palabra tiene una longitud impar, se comparan las letras hasta el cen-</p><p>tro del arreglo.</p><p>A L L A</p><p>FIGURA 4.88. Ejemplo de un vector palíndromo, con la palabra ALLÁ</p><p>Si la palabra tiene una longitud par, se comparan las letras hasta el centro</p><p>y la siguiente letra a la par del centro, en el arreglo.</p><p>Para ello, se propone el siguiente pseudocódigo a fin de resolver el pro-</p><p>blema.</p><p>FIGURA 4.89. Pseudocódigo del palíndromo con inicialización de variables</p><p>425</p><p>Explicación:</p><p>En las líneas de las 2 a la 5, se declaran las variables y el arreglo que se</p><p>denomina palabra. La variable tecla se usará con el objeto de recibir una</p><p>letra por teclado para asignarla al vector; pero si la tecla es , el</p><p>programa ya no carga más datos, y si es un espacio, no lo asigna al arreglo.</p><p>La variable pali permite tener el control de la comparación entre las cel-</p><p>das. Será verdadera mientras las letras sean iguales o falsa cuando las</p><p>letras no lo sean.</p><p>Las variables i, j, max y cont son contadores en diversas secciones del</p><p>programa que se explicarán en las siguientes secciones.</p><p>Líneas de la 11 a la 20</p><p>Cuando el usuario digita una letra, esta se carga en la variable tecla (línea</p><p>12), para después comparar si lo digitado se debe o no agregar al arreglo.</p><p>Por ejemplo, si se digita la tecla o un espacio, no se realizará</p><p>una asignación al vector. Esta restricción se utiliza en la línea 13.</p><p>FIGURA 4.90. Pseudocódigo del palíndromo para cargar el vector con las letras</p><p>Por el contrario, si la letra sí se puede agregar en el vector, se ejecutan las</p><p>líneas 14 (asignación) y 15 (incremento del índice del vector).</p><p>426</p><p>Si la tecla digitada es , entonces a la variable j se le asigna el max</p><p>como condición para finalizar el ciclo y el llenado del vector.</p><p>Líneas de la 21 a la 23</p><p>FIGURA 4.91. Pseudocódigo para determinar la mitad del vector</p><p>En la línea 21, se le asigna a la variable cont la longitud del vector pala-</p><p>bra, porque i se usó para llevar este control en el arreglo.</p><p>En la línea 22, se le asigna a j el valor máximo del arreglo. Esto se realiza</p><p>para que este contador se mueva en el arreglo de derecha a izquierda. Se</p><p>requiere un doble contador para que uno se mueva de izquierda a derecha;</p><p>y el otro, de derecha a izquierda hasta que ambos se encuentren en el cen-</p><p>tro. Adicionalmente, a cont se le debe restar una unidad porque cuando</p><p>salió del ciclo (línea 20) tenía una unidad adicional.</p><p>La línea 23 nos permite determinar el centro del arreglo. La función Trunc</p><p>permite obtener un número Entero de la división. Por ejemplo, si la di-</p><p>mensión del arreglo es de 5 posiciones, la división daría un número con</p><p>decimales: 5÷2=2,5. Pero como la posición 2,5 no existe en un arreglo,</p><p>entonces se requiere eliminar la parte decimal; con Trunc, el resultado</p><p>sería 2. Veamos nuevamente esta representación gráfica:</p><p>427</p><p>R A D A R</p><p>0 1 2 3 4</p><p>FIGURA 4.92. Ejemplo de un vector palíndromo, con la palabra RADAR, indicación de sus índices y de</p><p>tamaño impar</p><p>Con la función Trunc, se está brindando la posición exacta hasta donde</p><p>se debe efectuar la comparación del texto.</p><p>Ahora, si el texto digitado tiene una extensión par, la función Trunc no</p><p>tendrá mayor efecto, puesto que la división siempre dará como resultado</p><p>un número Entero. Por ejemplo, si la dimensión del arreglo es de 4 posi-</p><p>ciones, la división daría un número sin decimales (o con decimal cero):</p><p>4÷2=2.0.</p><p>A L L A</p><p>0</p><p>1 2 3</p><p>FIGURA 4.93. Ejemplo de un vector palíndromo, con la palabra ALLA, indicación de sus índices y</p><p>comparación hasta el índice 2</p><p>En el caso de un arreglo de extensión par, la comparación debería hacerse</p><p>no hasta donde indica la división. Se le debe restar una unidad al resultado</p><p>de la ecuación, para que la comparación se realice en nuestro ejemplo,</p><p>hasta el índice 1.</p><p>428</p><p>A L L A</p><p>0 1 2 3</p><p>FIGURA 4.94. Ejemplo de un vector palíndromo, con la palabra ALLA, indicación de sus índices y</p><p>comparación hasta el índice 1</p><p>Líneas de la 24 a la 48</p><p>FIGURA 4.95. Pseudocódigo para determinar si el arreglo es palíndromo</p><p>Para determinar si un arreglo es par o impar, porque esto afecta el análisis</p><p>como se observó anteriormente, se emplea la línea 24 para determinar, por</p><p>medio del MOD 2 = 0, si este es par.</p><p>429</p><p>Si el arreglo es par, se ejecutan las líneas de la 25 a la 32, donde se observa,</p><p>en el ciclo Para, que se realizó el ajuste de la mitad del vector, restando</p><p>una unidad: cont–1.</p><p>Entonces haría la siguiente comparación:</p><p>A L L A</p><p>0 1 2 3</p><p>FIGURA 4.96. Ejemplo de un vector palíndromo, con la palabra ALLA, indicación de sus índices y</p><p>comparación entre el contenido de las celdas 1 y 2</p><p>Valor de i Valor de j</p><p>i=0</p><p>palabra[i]=a</p><p>j=3</p><p>palabra[j]=a</p><p>i=1</p><p>palabra[i]=l</p><p>j=2</p><p>palabra[j]=l</p><p>Para que el índice i se mueva de izquierda a derecha, solo se requiere la</p><p>declaración del ciclo Para; pero para que el índice j se mueva de derecha</p><p>a izquierda, se requirió inicializarlo en la línea 22 y decrementarlo en la línea</p><p>28. Note que, si no hay coincidencia en el contenido del vector, la variable</p><p>pali adquiere el valor de Falso en la línea 30, mientras que, si las letras</p><p>son iguales, la variable pali tendrá el valor de verdadero, el cual se con-</p><p>signa en la línea 27.</p><p>De otra forma, si el arreglo es impar, se ejecutan las líneas de la 34 a la 41,</p><p>donde se observa, en el ciclo Para, que no es necesario restarle una uni-</p><p>dad a la mitad del arreglo, según el análisis anterior.</p><p>430</p><p>Entonces se haría la siguiente comparación:</p><p>R A D A R</p><p>0 1 2 3 4</p><p>FIGURA 4.97. Ejemplo de un vector palíndromo, con la palabra RADAR, indicación de sus índices y</p><p>comparación entre el contenido de la celda 2 con ella misma</p><p>Valor de i Valor de j</p><p>i=0</p><p>palabra[i]=r</p><p>j=4</p><p>palabra[j]=r</p><p>i=1</p><p>palabra[i]=a</p><p>j=3</p><p>palabra[j]=a</p><p>Observe que, si no hay coincidencia en el contenido del vector, la variable</p><p>pali adquiere el valor de falso en la línea 39, mientras que, si las letras</p><p>son iguales, la variable pali tendrá el valor de verdadero, el cual se con-</p><p>signa en la línea 37.</p><p>Finalmente, para mostrar el resultado, se tiene la valoración en el Si de la</p><p>línea 43, donde si la variable pali tiene un valor de verdadero, se im-</p><p>prime el mensaje afirmativo de la línea 43. De lo contrario, se imprime el</p><p>mensaje de la línea 46.</p><p>Lotería</p><p>Se desea implementar un algoritmo que trabaje un sistema de lotería es-</p><p>colar. La mecánica es la siguiente:</p><p>431</p><p>Hay dos vectores cuyo tamaño es definido por el usuario, pero dicha lon-</p><p>gitud solo puede ser un número impar del 3 al 10 o de tamaño 10, es decir,</p><p>los vectores solo pueden ser de tamaño 3, 5, 7, 9, o 10. Esto debe validarlo</p><p>para que, si un usuario digita una longitud incorrecta, se le solicite de nuevo</p><p>hasta que introduzca un dato correcto. Emplee solo un ciclo y un Si para</p><p>validar este dato.</p><p>El jugador debe ingresar una cantidad de dinero para jugar. Asuma que</p><p>esta será mayor a 1 colón. No necesita validar este dato.</p><p>Debe llenar cada uno de los vectores con números aleatorios del 1 al 3.</p><p>Luego, debe comparar los números de los vectores y, de acuerdo con la</p><p>cantidad de coincidencias, se determina un premio regido por las siguien-</p><p>tes reglas:</p><p>1. Si hay un acierto en todos los números de los vectores y, en el</p><p>mismo orden, el jugador gana X cantidad de veces la suma de di-</p><p>nero ingresada. La X es el tamaño del vector. Por ejemplo, si los</p><p>vectores son de longitud 3 y el jugador reportó 1000 colones para</p><p>el juego, entonces se ganaría 3000 colones. Si el vector hubiese</p><p>sido de 7 posiciones, se hubiera ganado 7000 colones.</p><p>2. Recuerde que para ganar se deben acertar los números de los vec-</p><p>tores en el mismo orden, por ejemplo:</p><p>Vector del juego</p><p>3 2 1 2 3</p><p>Vector del jugador</p><p>3 2 1 2 3</p><p>FIGURA 4.98. Ejemplos de los vectores del juego y del jugador con valores iguales</p><p>entre sí y en el mismo orden</p><p>432</p><p>3. En el caso anterior, el jugador ganó 5 veces la cantidad de dinero</p><p>ingresada; sin embargo, en el siguiente ejemplo, no se ganaría</p><p>nada porque los números no están en el mismo orden:</p><p>Vector del juego</p><p>1 3 2 1 2</p><p>Vector del jugador</p><p>3 2 1 2 3</p><p>FIGURA 4.99. Ejemplos de los vectores del juego y del jugador con valores iguales, pero</p><p>diferente orden entre sí</p><p>4. Si hay un acierto en más de la mitad de los números (pero no en</p><p>todos), entonces se gana lo que reportó de dinero más el 50 %.</p><p>Por ejemplo, si digitó que jugaría con 1 000 colones y acertó 4</p><p>números con vectores de 7 espacios, entonces ganaría 1 500 co-</p><p>lones.</p><p>Recuerde que, para ganar, se debe acertar más de la mitad de los</p><p>números de los vectores en el mismo orden, verbigracia:</p><p>Vector del juego</p><p>3 2 2 2 1</p><p>Vector del jugador</p><p>3 2 1 2 3</p><p>FIGURA 4.100. Ejemplos de los vectores del juego y del jugador con valores iguales, pero</p><p>con solo tres números en el mismo orden</p><p>En el caso anterior, el jugador acertó más de la mitad (3 números</p><p>en un vector de 5 espacios), por lo que si jugó con 2000 colones</p><p>ganó 3000 (2000 + 1000); sin embargo, en el siguiente caso, no se</p><p>ganaría nada porque solo acertó 2 números:</p><p>Vector del juego</p><p>3 3 2 1 3</p><p>433</p><p>Vector del jugador</p><p>3 2 1 2 3</p><p>FIGURA 4.101. Ejemplos de los vectores del juego y del jugador con valores iguales, pero</p><p>con solo dos números en el mismo orden</p><p>5. Una vez determinada la cantidad de coincidencias entre los vec-</p><p>tores, se le debe indicar al usuario el dinero ganado. Use el si-</p><p>guiente mensaje como ejemplo y guía:</p><p>FELICIDADES. Ganó: 3000 colones.</p><p>Si el jugador no ganó, entonces se le muestra el siguiente mensaje:</p><p>LO SIENTO. No ganó nada.</p><p>6. Luego de los mensajes anteriores, se deben mostrar los números</p><p>de los vectores, de la siguiente forma:</p><p>FIGURA 4.102. Salida a pantalla del programa</p><p>7. Considere lo siguiente:</p><p>• El índice del vector inicia en cero.</p><p>• Elija una de las dos formas de ganar y programe solo una</p><p>de ellas; no es necesario hacer ambas.</p><p>• Si elige la segunda forma de ganar, asuma que, aunque el</p><p>jugador acierte todos los números, solo se ganará lo apos-</p><p>tado más el 50 %.</p><p>• Para los números aleatorios, utilice la función Random.</p><p>• Utilice estructuras de repetición para todos los procesos</p><p>que involucren a los arreglos.</p><p>434</p><p>Una posible solucipon se muestra en la figura 4.103, que se explica</p><p>a continuación:</p><p>El diagrama empieza con el Inicio. En los siguientes dos blo-</p><p>ques, se inician las variables, dado que en DFD no se declaran los</p><p>tipos de datos, sino que, al asignarse el valor, una letra o una ca-</p><p>dena, el programa asumirá el tipo al que corresponde.</p><p>Posteriormente, se inicia el ciclo Mientras, donde se consulta si</p><p>el tamaño del vector es par (TamanioVec MOD 2 = 0) y diferente</p><p>de 10 (TamanioVec !=10) para consultar la dimensión de los</p><p>arreglos y se lee el tamaño de estos. Si el tamaño del vector es</p><p>par y es diferente de 10, se envía un mensaje de error.</p><p>Cuando se realiza la corroboración anterior, se inicializan los vec-</p><p>tores de la máquina y del jugador en cero; y, seguidamente, se</p><p>solicita y lee la cantidad de dinero por jugar.</p><p>Para cargar los vectores con números, se emplea el ciclo Para y</p><p>se asignan números aleatorios por medio de la función Random.</p><p>435</p><p>FIGURA 4.103. Diagrama de flujo para el programa de lotería</p><p>436</p><p>En otro ciclo, se comparan los contenidos de los vectores y, si hay</p><p>aciertos entre</p><p>estos, se suma una unidad al acierto; si no, no su-</p><p>mará un acierto.</p><p>Después, inician una serie de condicionales para consultar si la</p><p>cantidad de aciertos es igual a la longitud del vector, es decir, se</p><p>acertaron todos los números, se realiza el cálculo y se envía el</p><p>mensaje con la cantidad de dinero ganado.</p><p>La siguiente condición es si la cantidad de aciertos son superiores</p><p>a la mitad de la longitud del vector, para calcular la bonificación</p><p>obtenida, y se envía el mensaje con la cantidad de dinero ganado.</p><p>De otra manera, se emite el mensaje de que no se obtuvo dinero.</p><p>Finalmente, en un último ciclo, se muestran el vector de la má-</p><p>quina y del jugador para observar cuáles fueron los números ge-</p><p>nerados.</p><p>Una vez estudiandos los vectores, el siguiente paso lógico es seguir con el</p><p>estudio de las matrices.</p><p>4.4 Matrices</p><p>Las matrices son arreglos multidimensionales, en específico, de dos dimen-</p><p>siones, y se representan como se muestra a continuación:</p><p>1 13 38 5 10</p><p>25 9 80 74 12</p><p>FIGURA 4.104. Matriz de 10 celdas o posiciones, con 2 filas y 5 columnas</p><p>437</p><p>El orden de composición de las matrices se basa en filas y columnas. Las</p><p>primeras son horizontales; y las segundas, verticales.</p><p>FIGURA 4.105. Identificación de filas y de columnas en una matriz</p><p>Las matrices, al igual que los vectores, almacenan datos del mismo tipo en</p><p>todas sus celdas, y sus valores se trabajan por separado. En otras palabras,</p><p>podemos modificar un dato en una celda específica sin alterar otros.</p><p>Para utilizar un elemento de la matriz, se debe hacer referencia a su nombre</p><p>y a su posición específica donde se ubica el elemento.</p><p>En el caso de las matrices, estas permiten almacenar información en varias</p><p>filas y columnas, a diferencia del vector que posee solo una fila. Para com-</p><p>prender la diferencia y aplicación de una matriz, se analizará el ejemplo de</p><p>los recibos de agua y de luz que paga una familia durante el año. Observe</p><p>la figura 4.106.</p><p>438</p><p>Matriz de recibos</p><p>Ene Feb Mar Abr May Jun Jul Ago Set Oct Nov Dic</p><p>Agua 700 680 789 912 456 749 987 657 654 878 321 998</p><p>[1,1] [1,2] [1,3] [1,4] [1,5] [1,6] [1,7] [1,8] [1,9] [1,10] [1,11] [1,12]</p><p>Luz 560 432 956 874 598 932 209 765 657 834 987 899</p><p>[2,1] [2,2] [2,3] [2,4] [2,5] [2,6] [2,7] [2,8] [2,9] 2,10] 2,11] [2,12]</p><p>FIGURA 4.106. Matriz de 2 filas y 12 columnas con los montos de los recibos</p><p>En el caso de la matriz Recibos para almacenar los montos del agua y de</p><p>la luz, los meses del año se representan con 12 columnas. En la fila 1, se</p><p>almacenan ordenadamente los recibos de agua de enero a diciembre; y, en</p><p>la fila 2, los recibos de electricidad de enero a diciembre. Se acota que el</p><p>nombre de los meses y del recibo de agua y luz no se almacenan en la</p><p>matriz. Esto es una organización visual para comprender cómo se está</p><p>guardando la información en el arreglo. La representación visual de la ma-</p><p>triz sería la siguiente.</p><p>700 680 789 912 456 749 987 657 654 878 321 998</p><p>560 432 956 874 598 932 209 765 657 834 987 899</p><p>FIGURA 4.107. Matriz de Recibos con los montos organizados por meses</p><p>¿Es imposible guardar la información en la matriz con los nombres de los</p><p>recibos y meses del año? En este caso sí, primero, porque los meses y los</p><p>nombres de los recibos son de tipo Cadena y los datos que se deben al-</p><p>macenar son de tipo Real o, como en la información mostrada, de tipo</p><p>Entero. Segundo, porque hay datos en el contexto de los problemas que</p><p>no se almacenan y se toman como referencia para determinar qué infor-</p><p>mación se guarda o no.</p><p>439</p><p>Entonces, ¿cómo se sabe cuál información incluir en la matriz o cómo or-</p><p>ganizarla? Generalmente, el contexto del problema dará pistas o indicará,</p><p>de modo explícito, cómo se debe guardar la información. Por el contrario,</p><p>si la redacción es escueta y no se muestra visualmente (como en el caso de</p><p>los recibos de agua y luz), se deberá decidir la forma más eficiente, lógica</p><p>y ordenada de guardar los datos y programar la solución del problema.</p><p>Analizando la matriz de recibos de agua y luz, se observa como primera</p><p>diferencia que la matriz tiene dos subíndices: uno corresponde a las filas</p><p>(recibo de agua y de luz); y el segundo, a las columnas (meses de enero a</p><p>diciembre). Suponiendo que la matriz se declaró con el nombre de Reci-</p><p>bos, si se accediera a índices específicos, la información almacenada sería</p><p>la siguiente:</p><p>Recibos[1,1]= 700 (recibo de agua del mes de enero)</p><p>Recibos[2,11]= 987 (recibo de luz del mes de</p><p>noviembre)</p><p>A la matriz anterior se le podrían agregar más filas para almacenar los mon-</p><p>tos de los recibos de cada mes de teléfono o alimentos. Si no se empleara</p><p>la matriz, se requerirían, al menos, 24 variables para almacenar los montos</p><p>de los recibos de agua y luz; y, si agregara el teléfono o alimentos, se em-</p><p>plearían 48 variables, lo cual se vuelve ineficiente en el programa.</p><p>Observe que rápidamente se podrían hacer operaciones de interés; por</p><p>ejemplo: al sumar la primera fila, se obtendría el monto pagado en todos</p><p>los recibos de agua en el año; y, si se sumara la primera columna, se ob-</p><p>tendría el monto pagado en todos los recibos del mes de enero. Además,</p><p>se pueden obtener el promedio de los pagos, el mes donde más se pagó</p><p>440</p><p>por un servicio, el mes donde menos se consumió en alguno de los recibos,</p><p>entre otros datos que permiten analizar la información.</p><p>4.4.1 Declaración y dimensionamiento de una matriz</p><p>La declaración de las matrices se hace de la misma forma que con los vec-</p><p>tores o variables, empleando la siguiente estructura:</p><p>Definir Nombre de la matriz Como tipo de dato;</p><p>Donde Nombre de la matriz será el identificador que se le otorgará al</p><p>arreglo para su manejo en el algoritmo; y tipo de dato será la definición</p><p>de los valores que podrá almacenar el arreglo, ya sea datos de tipo Real,</p><p>Entero, Caracter o Logico.</p><p>Si quisiéramos declarar una matriz que almacene datos numéricos de tipo</p><p>Entero, a saber, cantidad de estudiantes, lo haríamos así:</p><p>Definir MatCantidadEstudiantes Como Entero;</p><p>Luego de declarar un arreglo, se debe dimensionar. Esto se hace para</p><p>definir el tamaño máximo (cantidad de celdas) que tendrá la matriz. La di-</p><p>mensión de una matriz debe especificar cuántas filas y columnas. Siempre</p><p>el primer número será las filas; y, el segundo, las columnas. Veamos el si-</p><p>guiente ejemplo:</p><p>Dimension MatCantidadEstudiantes (2,5);</p><p>Al igual que con los vectores, el dimensionamiento de una matriz siempre</p><p>será números de tipo Entero, ya que no puede existir una matriz con, por</p><p>ejemplo, 5.7 filas o 2.2 columnas. En el ejemplo anterior de dimensio-</p><p>namiento, la matriz es de 2 filas y 5 columnas.</p><p>441</p><p>Una matriz tendrá las filas y columnas que se necesiten para resolver la</p><p>situación dada, y puede ser cuadrada (con la misma cantidad de filas y co-</p><p>lumnas) o rectangular (ya sea con más filas que columnas o viceversa). En</p><p>el siguiente ejemplo, se evidencia una declaración y un dimensionamiento</p><p>de una matriz de 5 filas y 5 columnas; y, luego otra, de 7 filas y 3 columnas:</p><p>FIGURA 4.108. Declaración de dos matrices de diferentes dimensiones</p><p>4.4.2 Dimensionamiento de una matriz por usuario</p><p>Las matrices también pueden ser dimensionadas por el usuario. El proce-</p><p>dimiento es similar al utilizado para un vector, pero se deben definir dos</p><p>dimensiones en vez de una.</p><p>Recordemos que, primero, se declara el arreglo; y, antes de dimensionarlo,</p><p>se consulta la cantidad de filas y de columnas que tendrá la matriz. Las</p><p>respuestas del usuario se almacenan en variables de tipo Entero y, con</p><p>esas variables, se hace el dimensionamiento. Si la matriz es cuadrada, no</p><p>sería necesario solicitar ambas dimensiones, sino solo una, ya que se asume</p><p>que tiene la misma cantidad de filas y de columnas.</p><p>442</p><p>Veamos un ejemplo:</p><p>FIGURA 4.109. Pseudocódigo que define una matriz cuadrada de tamaño dado por el usuario</p><p>El pseudocódigo anterior muestra la</p><p>declaración y el dimensionamiento de</p><p>una matriz cuadrada. Solo se solicita un dato para el tamaño y se repite</p><p>para definir las filas y las columnas.</p><p>Ahora, veamos otro ejemplo, pero con una matriz rectangular:</p><p>FIGURA 4.110. Pseudocódigo que define una matriz rectangular de tamaño dado por el usuario</p><p>443</p><p>Para una matriz rectangular se deben solicitar las filas y las columnas por</p><p>aparte; y, de la misma forma, se deben usar en el dimensionamiento.</p><p>4.4.3 Manejo de una matriz</p><p>Para el manejo de una matriz, siempre se debe considerar la fila y la co-</p><p>lumna donde se desea gestionar un dato, ya sea almacenarlo, modificarlo</p><p>o mostrarlo. Si deseamos agregar un valor a una celda de la matriz, se debe</p><p>hacer con la siguiente estructura:</p><p>Matriz (Fila,Columna)= Valor;</p><p>Las celdas inician su numeración en 0, por tanto, una matriz de 3 filas y 4</p><p>columnas tendría un rango de 0 a 2 (en filas) y de 0 a 3 (en columnas).</p><p>Tanto la variable que representa las filas como la que representa las co-</p><p>lumnas funcionan como los índices de la matriz.</p><p>Siempre debemos emplear los índices para almacenar un dato en una</p><p>matriz, por ende, la siguiente instrucción es errónea:</p><p>Matriz = 25;</p><p>Ya que no se indica una celda donde guardar el valor 25. Si quisiéramos</p><p>colocar ese dato en la matriz, debemos especificar la fila y la columna (se-</p><p>paradas por coma) de la siguiente forma:</p><p>Matriz(2,1)= 25;</p><p>Gráficamente, se vería como se muestra en la figura 4.111:</p><p>Columnas</p><p>Filas</p><p>0 1 2 3</p><p>0</p><p>1</p><p>2 25</p><p>FIGURA 4.111. Matriz de 12 celdas (3 filas y 4 columnas)</p><p>444</p><p>Al igual que con los vectores, las matrices se operan mediante ciclos, pero</p><p>con la diferencia de que son dos ciclos (anidados) y no solo uno. La razón</p><p>de este cambio es muy sencilla, para los vectores se requiere manejar un</p><p>índice a fin de referenciar una celda, mientras que las matrices necesitan</p><p>dos índices: uno para las filas y otro para las columnas.</p><p>Al tener ciclos anidados, su ejecución se hace de forma paulatina, es decir,</p><p>se ejecuta una primera vez el ciclo externo; y, al ingresar al interno, en su</p><p>totalidad. En la segunda ejecución del ciclo externo, se vuelve a efectuar el</p><p>ciclo interno en su totalidad. Esto se repite hasta que el ciclo externo haya</p><p>completado todas sus repeticiones.</p><p>Por ejemplo, si tenemos dos ciclos, uno externo que se ejecutará tres veces</p><p>y otro interno que lo hará cuatro veces, en la primera ejecución del ciclo</p><p>externo, se procesará cuatro veces el ciclo interno; en la segunda ejecución</p><p>del ciclo externo, se vuelve a procesar el ciclo interno otras cuatro veces.</p><p>Este comportamiento se hace hasta que el ciclo externo cumpla con sus</p><p>tres ejecuciones. Para este ejemplo, el ciclo externo se ejecuta tres veces,</p><p>pero el interno lo hace en doce ocasiones, ya que, por cada procesamiento</p><p>del ciclo externo, el ciclo interno se ejecuta cuatro veces (3 × 4 = 12).</p><p>El siguiente pseudocódigo presenta la ejecución de dos ciclos Para anida-</p><p>dos. El Para externo se ejecuta 3 veces (de 0 a 2) y el interno lo hace 5</p><p>veces (de 0 a 4). Se debe considerar que el Para interno se realiza, en su</p><p>totalidad, cada vez que se ingresa al Para externo. Es decir, la primera vez</p><p>que se ingresa al Para externo el ciclo interno se ejecuta 5 veces. La se-</p><p>gunda vez que se ingresa al Para externo, el Para interno se ejecuta, de</p><p>445</p><p>nuevo, 5 veces; y de igual forma sucede en la tercera oportunidad que se</p><p>ingresa al Para externo. El Para interno se ejecutará en total 15 veces.</p><p>En el pseudocódigo, se emplean dos variables (ControlParaExt y</p><p>ControlParaInt) para ver en la salida el número de ejecución en que se</p><p>encuentran los ciclos.</p><p>FIGURA 4.112. Pseudocódigo que representa la ejecución de ciclos Para anidados</p><p>El pseudocódigo anterior brinda la salida en</p><p>pantalla que se muestra en la figura 4.113.</p><p>Normalmente, para trabajar con matrices,</p><p>utilizaremos dos ciclos Para anidados, ya sea</p><p>para llenarla, mostrarla o modificarla. Un ci-</p><p>clo llevará el control de las filas, mientras que</p><p>el otro lo hará con las columnas, o viceversa.</p><p>4.4.4 Llenado de una matriz</p><p>El llenado de una matriz puede hacerse por</p><p>filas o por columnas. Para esta explicación,</p><p>haremos el primero (por filas). La mecánica</p><p>FIGURA 4.113. Salida en pantalla que genera el pseudocódigo de</p><p>ejecución de los Para anidados</p><p>446</p><p>de ejecución es muy sencilla. Primero, nos posicionamos en la primera fila</p><p>e iremos avanzando en las columnas desde la primera hasta llegar a la úl-</p><p>tima. Luego, nos pasamos a la segunda fila e iniciamos el proceso nueva-</p><p>mente con las columnas desde la primera hasta la última; esto se repite</p><p>hasta llegar a la última fila y a la última columna. En la figura 4.114, se</p><p>aprecia, de forma gráfica, el llenado de una matriz por filas.</p><p>FIGURA 4.114. Secuencia de llenado de una matriz por filas</p><p>447</p><p>Para trabajar con un ejemplo específico, usaremos una matriz de tres filas</p><p>y cuatro columnas, y la llenaremos de 0. El orden de llenado será por filas,</p><p>es decir, como se mostró anteriormente. El algoritmo se muestra en la fi-</p><p>gura 4.115:</p><p>FIGURA 4.115. Pseudocódigo de llenado de una matriz 3 × 4, por filas</p><p>Como observamos, en la línea 15, se inicia con el llenado del arreglo. El</p><p>primer Para (externo) se encarga del control de las filas, cuya numeración</p><p>va de 0 a 2 (son tres filas). En la línea 17, se inicia con el Para (interno) de</p><p>las columnas, con numeración de 0 a 3 (son cuatro columnas). Dentro de</p><p>este, se ubica la instrucción que asigna a cada celda de la matriz el número</p><p>0.</p><p>448</p><p>La primera vez que se ingresa al Para externo, el valor de Fila se inicia-</p><p>liza en 0. Una vez dentro de este ciclo, se ingresa al Para interno, donde</p><p>el valor de Fila sigue siendo 0 y la variable Columna se inicializa en 0.</p><p>En el Para interno, tenemos la instrucción de asignación de valor Ma-</p><p>triz(Fila,Columna)=0;. Esto lo podemos interpretar como Ma-</p><p>triz(0,0)=0; que es igual a la matriz, llamada Matriz, que asigne un</p><p>0 en la posición 0,0.</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0</p><p>1</p><p>2</p><p>FIGURA 4.116. Asignación de valor 0 al campo Matriz(0,0) con</p><p>base en el código de la figura 4.115</p><p>Luego de la asignación de 0 en la celda 0,0, regresamos a la línea 17,</p><p>donde se incrementa el valor de Columna a 1 y se ingresa de nuevo al</p><p>ciclo. Ahí se ejecuta de nuevo la instrucción Matriz(Fila,Co-</p><p>lumna)=0;, pero que ahora es Matriz(0,1)=0;, por ello, el 0 se asig-</p><p>nará en la siguiente celda:</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0</p><p>1</p><p>2</p><p>FIGURA 4.117. Asignación de valor 0 al campo Matriz(0,1) con</p><p>base en el código de la figura 4.115</p><p>Nuevamente, nos devolvemos a la línea 17, donde se incrementa el valor</p><p>de Columna, que ahora vale 2; por lo tanto, al ejecutar la instrucción</p><p>449</p><p>Matriz(Fila,Columna)=0;, tendremos Matriz(0,2)=0; y, por</p><p>ende:</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0</p><p>1</p><p>2</p><p>Figura 4.118. Asignación de valor 0 al campo Matriz(0,2) con</p><p>base en el código de la figura 4.115</p><p>Regresamos a la línea 17 y ahora Columna aumenta a 3. Ingresamos al</p><p>ciclo y ejecutamos Matriz(Fila,Columna)=0; o lo que es lo mismo</p><p>Matriz(0,3)=0;, por lo que nuestra matriz varía así:</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0 0</p><p>1</p><p>2</p><p>FIGURA 4.119. Asignación de valor 0 al campo Matriz(0,3) con</p><p>base en el código de la figura 4.115</p><p>Luego de esa asignación, se regresa a la línea 17 y Columna aumenta su</p><p>valor a 4, por lo que no ingresa al Para. Pasamos al fin de ese ciclo (línea</p><p>19) y regresamos al Para externo. Fila aumenta su valor a 1 (recordemos</p><p>que estaba en 0) e ingresamos de nuevo al Para interno. En ese momento,</p><p>Columna se vuelve a inicializar en 0, por ende, entramos a ejecutar la ins-</p><p>trucción Matriz(Fila,Columna)=0; pero con los nuevos valores, es</p><p>decir, Matriz(1,0)=0;. La matriz se vería así:</p><p>450</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0 0</p><p>1 0</p><p>2</p><p>FIGURA 4.120. Asignación de</p><p>valor 0 al campo Matriz(1,0) con</p><p>base en el código de la figura 4.115</p><p>Las ejecuciones del ciclo Para interno se repiten hasta que Columna sea</p><p>4 nuevamente, Fila mantiene su valor en 1. La matriz evolucionaría de las</p><p>siguientes formas:</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0 0</p><p>1 0 0</p><p>2</p><p>FIGURA 4.121. Asignación de valor 0 al campo Matriz(1,1) con</p><p>base en el código de la figura 4.115</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0 0</p><p>1 0 0 0</p><p>2</p><p>FIGURA 4.122. Asignación de valor 0 al campo Matriz(1,2) con</p><p>base en el código de la figura 4.115</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0 0</p><p>1 0 0 0 0</p><p>2</p><p>FIGURA 4.123. Asignación de valor 0 al campo Matriz(1,3) con</p><p>base en el código de la figura 4.115</p><p>451</p><p>Al terminar la última ejecución del Para interno, la variable Columna au-</p><p>menta a 4 y se regresa al Para externo. Se aumenta el valor de Fila en 1.</p><p>Ahora vale 2, por cuanto entrará una última vez al ciclo. Luego, se ejecuta</p><p>otra vez el ciclo Para interno. Se empieza con la asignación de 0 a Co-</p><p>lumna y se repetirá el ciclo hasta que Columna tenga un valor de 4. La</p><p>secuencia de la matriz sería la siguiente:</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0 0</p><p>1 0 0 0 0</p><p>2 0</p><p>FIGURA 4.124. Asignación de valor 0 al campo Matriz(2,0) con</p><p>base en el código de la figura 4.115</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0 0</p><p>1 0 0 0 0</p><p>2 0 0</p><p>FIGURA 4.125. Asignación de valor 0 al campo Matriz(2,1) con</p><p>base en el código de la figura 4.115</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0 0</p><p>1 0 0 0 0</p><p>2 0 0 0</p><p>FIGURA 4.126. Asignación de valor 0 al campo Matriz(2,2) con</p><p>base en el código de la figura 4.115</p><p>452</p><p>Columna</p><p>Fila</p><p>0 1 2 3</p><p>0 0 0 0 0</p><p>1 0 0 0 0</p><p>2 0 0 0 0</p><p>FIGURA 4.127. Asignación de valor 0 al campo Matriz(2,3) con</p><p>base en el código de la figura 4.115</p><p>Una vez que se ha completado el ciclo interno, se pasa al externo, donde</p><p>Fila aumenta su valor a 3, por ende, no ingresa al ciclo. Así se termina esa</p><p>parte del algoritmo y se deja la matriz llena de 0.</p><p>La ejecución de este pseudocódigo tiene el siguiente orden:</p><p>Ciclo</p><p>externo</p><p>Ejecución 1</p><p>Ciclo interno</p><p>Ejecución 1 Ejecución 2 Ejecución 3 Ejecución 4</p><p>Fila</p><p>0</p><p>Columna</p><p>0</p><p>Fila</p><p>0</p><p>Columna</p><p>1</p><p>Fila</p><p>0</p><p>Columna</p><p>2</p><p>Fila</p><p>0</p><p>Columna</p><p>3</p><p>Ciclo</p><p>externo</p><p>Ejecución 2</p><p>Ciclo interno</p><p>Ejecución 1 Ejecución 2 Ejecución 3 Ejecución 4</p><p>Fila</p><p>1</p><p>Columna</p><p>0</p><p>Fila</p><p>0</p><p>Columna</p><p>1</p><p>Fila</p><p>0</p><p>Columna</p><p>2</p><p>Fila</p><p>0</p><p>Columna</p><p>3</p><p>Ciclo</p><p>externo</p><p>Ejecución 3</p><p>Ciclo interno</p><p>Ejecución 1 Ejecución 2 Ejecución 3 Ejecución 4</p><p>Fila</p><p>2</p><p>Columna</p><p>0</p><p>Fila</p><p>0</p><p>Columna</p><p>1</p><p>Fila</p><p>0</p><p>Columna</p><p>2</p><p>Fila</p><p>0</p><p>Columna</p><p>3</p><p>FIGURA 4.128. Orden de ejecución del ciclo de la figura 4.115</p><p>453</p><p>4.4.5 Muestra de una matriz</p><p>Ya se analizó cómo llenar una matriz, ahora se estudiará cómo mostrarla.</p><p>Si para llenar una matriz se requieren dos ciclos Para anidados, para vi-</p><p>sualizarla, se usarán los mismos ciclos, pero con una pequeña diferencia en</p><p>la instrucción del ciclo interno. Analicemos el siguiente fragmento del pseu-</p><p>docódigo:</p><p>Para Fila=0 Hasta 2 Con Paso 1 Hacer</p><p>Para Columna=0 Hasta 3 Con Paso 1 Hacer</p><p>Escribir Matriz(Fila,Columna);</p><p>FinPara</p><p>FinPara</p><p>FIGURA 4.129. Pseudocódigo que muestra el contenido de una matriz en pantalla</p><p>Como se observa, tanto para el pseudocódigo de llenado, como para el de</p><p>muestra, se utilizan ciclos Para anidados. La diferencia es el cambio de la</p><p>instrucción de asignación Matriz(Fila,Columna)=0 por la instrucción</p><p>Escribir Matriz(Fila,Columna). Recordemos que, para trabajar</p><p>con una matriz, se debe hacer celda por celda; por lo tanto, si deseamos</p><p>mostrar todos los elementos que contiene un arreglo multidimensional,</p><p>debemos hacerlo de esa forma.</p><p>454</p><p>Veamos el pseudocódigo completo de llenado y muestra de una matriz:</p><p>FIGURA 4.130. Pseudocódigo que llena y muestra el contenido de una matriz</p><p>Esto mostraría la siguiente salida en pantalla:</p><p>FIGURA 4.131. Resultado de la ejecución del código de la figura 4.130</p><p>455</p><p>Como vemos, la muestra de la matriz se hace de forma horizontal, pero</p><p>podríamos darle un aspecto más cercano a la representación gráfica de una</p><p>matriz, una cuadrícula. Para lograrlo, insertaremos la instrucción Escribir</p><p>“”; en la línea 30 del pseudocódigo. Ese fragmento del algoritmo quedaría</p><p>de la siguiente forma:</p><p>FIGURA 4.132 . Pseudocódigo que permite mostrar el contenido de una matriz en forma de cuadrícula</p><p>La salida cambiaría a la siguiente forma:</p><p>FIGURA 4.133. Resultado de la ejecución del código de la figura 4.132</p><p>El diagrama de flujo del pseudocódigo anterior quedaría como se muestra</p><p>en la figura 4.134.</p><p>En el DFD, las salidas en pantalla se muestran en ventanas separadas, por lo que la matriz</p><p>se muestra celda por celda y no de forma cuadrada.</p><p>Para tomar en cuenta</p><p>456</p><p>FIGURA 4.134. Diagrama de flujo que permite mostrar el contenido de una matriz</p><p>457</p><p>4.4.6 Modificación de una matriz</p><p>Si se desea modificar los valores de una matriz, se debe hacer celda por</p><p>celda. Analicemos el ejemplo de llenado de la matriz; para lo cual, inicial-</p><p>mente, la llenaremos de números 1 y la mostraremos en pantalla. Luego,</p><p>a cada número 1 le sumaremos un número al Azar de 1 a 9, es decir, la</p><p>matriz quedará llena de números que irán en ese rango (1-9). Esto lo ha-</p><p>remos en dos ciclos Para anidados, luego de que se despliegue el arreglo</p><p>en la pantalla; y, al final, mostraremos de nuevo la matriz, pero esta vez la</p><p>salida será diferente, con el contenido de las celdas incrementado en el</p><p>número al azar. El pseudocódigo que agregaremos es el siguiente:</p><p>Para Fila=0 Hasta 2 Con Paso 1 Hacer</p><p>Para Columna=0 Hasta 3 Con Paso 1 Hacer</p><p>Matriz(Fila,Columna)= Matriz(Fila,Columna) +</p><p>Azar(9)+1;</p><p>FinPara</p><p>FinPara</p><p>FIGURA 4.135. Pseudocódigo que llena una matriz con números aleatorios ente 1 y 9</p><p>El fragmento anterior almacena, en la posición Fila,Columna de la ma-</p><p>triz, la suma de lo que contiene esa misma posición, que en el ejemplo es</p><p>un 1, más un número aleatorio de 1 a 9; por lo tanto, la posición tendrá</p><p>guardado un número diferente al 1 actual.</p><p>La versión en pseudocódigo se presenta en la figura 4.136.</p><p>458</p><p>FIGURA 4.136. Pseudocódigo que llena una matriz con el número 1. La muestra en pantalla y, luego, modi-</p><p>fica el contenido con número al azar entre 1 y 10</p><p>459</p><p>La salida del pseudocódigo de la figura 4.136 se muestra en la 137.</p><p>FIGURA 4.137. Resultado de la ejecución del código de la figura 4.135</p><p>Y el diagrama de flujo se muestra en la figura 4.138.</p><p>460</p><p>FIGURA 4.138. Diagrama de flujo del código de la figura 4.136</p><p>461</p><p>4.4.7 Llenado de una matriz con datos introducidos por el usuario</p><p>Hasta aquí, hemos analizado el llenado de una matriz de forma automática.</p><p>Ahora veamos cómo se hace cuándo es el usuario quien debe llenar el arre-</p><p>glo. La mecánica es similar a la empleada para los vectores. La diferencia es</p><p>que se usan dos ciclos en vez de uno y la modificación se debe hacer en el</p><p>ciclo Para interno. Tomaremos el pseudocódigo de modificación con nú-</p><p>meros aleatorios visto, pero el llenado lo hará el usuario. El pseudocódigo</p><p>es el siguiente:</p><p>462</p><p>FIGURA 4.139. Pseudocódigo que permite que una matriz sea llenada por el usuario</p><p>La primera modificación fue un mensaje, antes del ciclo Para externo (línea</p><p>15), solicitándole al usuario la digitación de los datos para la matriz. La otra</p><p>modificación (línea 19) es la instrucción Leer, dentro del Para interno. Con</p><p>la instrucción Leer, se le brinda la oportunidad al usuario de digitar cual-</p><p>quier número Entero para llenar el arreglo.</p><p>El pseudocódigo generaría la siguiente salida en pantalla (figura 4.140):</p><p>463</p><p>FIGURA 4.140. Ejemplo de una ejecución del código de la figura 4.139</p><p>Los doce números que aparecen luego del mensaje Digite los datos</p><p>para la matriz son los que digitó el usuario. Luego, podemos mirar la</p><p>muestra de la</p><p>matriz original y, posterior a esta, se visualiza la matriz mo-</p><p>dificada, es decir, los números que digitó el usuario, pero con la suma de</p><p>un número aleatorio de 1 a 9.</p><p>El diagrama de flujo del pseudocódigo anterior es el siguiente (figura</p><p>4.141):</p><p>464</p><p>FIGURA 4.141. Diagrama del código de la figura 4.139</p><p>465</p><p>4.4.8 Llenado de una matriz con números aleatorios (Random)</p><p>El llenado aleatorio de una matriz utiliza la función Azar y mantiene la</p><p>misma mecánica de ciclos, es decir, dos ciclos Para anidados.</p><p>El funcionamiento del Azar es el mismo que empleamos para el llenado</p><p>de los vectores, nada más que, en esta oportunidad, la asignación se hace</p><p>a una matriz y no a un vector.</p><p>Veamos un ejemplo de llenado y muestra de una matriz cuadrada de 25</p><p>celdas, cuyos valores son aleatorios en un rango de 15 a 99. El pseudocó-</p><p>digo sería el siguiente:</p><p>466</p><p>FIGURA 4.142. Pseudocódigo que llena una matriz cuadrada de 5 × 5 con números al azar entre 15 y 99,</p><p>y luego, la muestra en pantalla</p><p>En el pseudocódigo, vemos que el cambio se dio en la línea 17, donde se</p><p>emplea la función Azar para generar un valor del 0 al 84; y, luego, se le</p><p>suma un 15 al número generado. Esto hace que el rango sea de 15 al 99;</p><p>posterior a esa operación, se asigna ese número a una celda específica de</p><p>la matriz. Al estar dentro de ciclos, ese proceso se repite hasta cumplir con</p><p>las condiciones de los Para y la matriz quedará llena.</p><p>La salida de ese pseudocódigo se muestra en la figura 4.143. Por ser nú-</p><p>meros aleatorios, los resultados pueden variar, pero la cantidad de elemen-</p><p>tos y el rango son los mismos:</p><p>FIGURA 4.143. Resultado de la ejecución del código de la figura 4.141</p><p>El diagrama de flujo del pseudocódigo anterior se presenta a continuación</p><p>(figura 4.144):</p><p>467</p><p>FIGURA 4.144. Diagrama de flujo del código de la figura 4.142</p><p>468</p><p>4.4.9 Diagonal principal de una matriz</p><p>La diagonal principal de una matriz son aquellos elementos donde los ín-</p><p>dices i y j son iguales y corresponden a los elementos que se sitúan desde</p><p>la esquina superior izquierda del primer elemento y hasta el último ele-</p><p>mento de la esquina inferior derecha, formando una línea diagonal. En el</p><p>siguiente ejemplo, son los campos que corresponden a los índices (0, 0),</p><p>(1,1), (2,2) y (3,3)que contienen los valores 1, 2, 3 y 4.</p><p>En la figura 4.144, puede observar una representación gráfica de la diago-</p><p>nal. Los números de la diagonal se muestran en negrita y el resto de la</p><p>matriz tiene contenido 0 en sus posiciones.</p><p>1</p><p>[0,0]</p><p>0</p><p>[0,1]</p><p>0</p><p>[0,2]</p><p>0</p><p>[0,3]</p><p>0</p><p>[1,0]</p><p>2</p><p>[1, 1]</p><p>0</p><p>[1,2]</p><p>0</p><p>[1, 3]</p><p>0</p><p>[2,0]</p><p>0</p><p>[2,1]</p><p>3</p><p>[2, 2]</p><p>0</p><p>[2, 3]</p><p>0</p><p>[3,0]</p><p>0</p><p>[3,1]</p><p>0</p><p>[3, 2]</p><p>4</p><p>[3, 3]</p><p>FIGURA 4.145. Ejemplo de la diagonal principal de una matriz</p><p>El pseudocódigo que permite programar la matriz está en la figura 4.146,</p><p>donde:</p><p>1. La primera línea declara el inicio del procedimiento.</p><p>2. En el segundo y tercer punto, se declaran las variables, donde i y j</p><p>son los índices de la matriz. La variable cont será el contador que</p><p>se incrementa de 1 en 1, para asignarlo a la diagonal y</p><p>Mat[4 × 4],es la matriz que se empleará para el llenado de los nú-</p><p>meros.</p><p>469</p><p>3. En la línea 4, se inicia el contador en 1 para asignarlo en la primera</p><p>posición de la matriz.</p><p>4. En las líneas 5 y 6, se inician los ciclos anidados, desde 0 hasta 3,</p><p>dado que la matriz es de 4 × 4. Una alternativa para los contadores,</p><p>cuando el contexto del problema lo indique, es iniciar el ciclo en 1 y</p><p>finalizarlo en 4; sin embargo, como la figura 4.145 muestra, los índi-</p><p>ces que inician en 0, se debe hacer de 0 a 3.</p><p>5. En la línea 6, se establece la condición para determinar la diagonal,</p><p>y esto sucede cuando los índices poseen el mismo valor, es decir,</p><p>cuando i = j.</p><p>6. Si los índices son iguales, la línea 8 muestra que a la matriz se le</p><p>asignará el valor del contador, el cual se inicializó en la línea 4 con</p><p>el valor de 1 y, como este se debe incrementar, en la línea 9, se</p><p>realiza el incremento en una unidad.</p><p>7. En la línea 10, se continúa con la estructura del Si, indicando lo que</p><p>sucede si no se cumple la condición anterior.</p><p>8. En la línea 11, se asigna el valor de 0 a la matriz, dado que no co-</p><p>rresponde a la diagonal.</p><p>9. En las líneas de la 12 a la 15, se cierran el Si, los ciclos y el procedi-</p><p>miento.</p><p>FIGURA 4.146. Pseudocódigo que coloca 0 en la diagonal principal de una matriz</p><p>470</p><p>El pseudocódigo anterior permite realizar el procedimiento para cargar los</p><p>valores en la matriz, pero no le muestra al usuario, en pantalla, lo realizado;</p><p>por lo tanto, se debe emplear la instrucción Escribir " ", Mat[i,j]</p><p>Sin Saltar para enviar a pantalla la información. Esto se debe realizar</p><p>tanto en la diagonal como en la asignación de los 0.</p><p>Además, se debe efectuar un salto de línea cuando se ha procesado cada</p><p>línea de la matriz, porque si no, la salida en pantalla se observará como un</p><p>vector.</p><p>Observe, en el siguiente pseudocódigo (figura 4.147), las líneas que se</p><p>agregaron para visualizar los datos (líneas 10 y 13) y para hacer un cambio</p><p>de línea para la siguiente fila de la matriz (línea 16).</p><p>FIGURA 4.147. Pseudocódigo que asigna 0 en la diagonal principal de una matriz y la muestra en</p><p>pantalla</p><p>471</p><p>Si en el pseudocódigo no se coloca la línea 16, la salida en pantalla sería la</p><p>siguiente:</p><p>FIGURA 4.148. Muestra de la ejecución del código de la figura 4.147 sin la línea 16</p><p>Si se agrega la línea 16 al pseudocódigo, la salida en pantalla es la siguiente:</p><p>FIGURA 4.149. Muestra de la ejecución del código de la figura 4.147 con la línea 16</p><p>4.4.10 Diagonal secundaria de una matriz</p><p>La diagonal secundaria de una matriz son aquellos elementos que se sitúan</p><p>desde la esquina superior derecha del último elemento y hasta el primer</p><p>elemento de la esquina inferior izquierda, formando una línea. En el si-</p><p>guiente ejemplo, son los campos que corresponden a los índices [0,3],</p><p>[1,2], [2,1] y [3,0] que contienen los valores 4, 8, 16 y 32.</p><p>En la figura 4.150, puede observar una representación gráfica de la diago-</p><p>nal secundaria. Los números de la diagonal se muestran en negrita y el</p><p>resto de la matriz tiene contenido 0 en sus posiciones.</p><p>472</p><p>0</p><p>[0,0]</p><p>0</p><p>[0,1]</p><p>0</p><p>[0,2]</p><p>4</p><p>[0,3]</p><p>0</p><p>[1,0]</p><p>0</p><p>[1,1]</p><p>8</p><p>[1,2]</p><p>0</p><p>[1,3]</p><p>0</p><p>[2,0]</p><p>16</p><p>[2,1]</p><p>0</p><p>[2,2]</p><p>0</p><p>[2,3]</p><p>32</p><p>[3,0]</p><p>0</p><p>[3,1]</p><p>0</p><p>[3,2]</p><p>0</p><p>[3,3]</p><p>FIGURA 4.150. Ejemplo de la diagonal secundaria de una matriz</p><p>El pseudocódigo que permite programar la matriz anterior es el siguiente:</p><p>FIGURA 4.151. Pseudocódigo que coloca números diferentes a 0 en la diagonal secundaria de una</p><p>matriz</p><p>Donde:</p><p>1. La primera línea declara el inicio del procedimiento.</p><p>2. En la segunda y tercera, se declaran las variables, donde i y j son</p><p>los índices de la matriz. La variable cont será el contador que se</p><p>473</p><p>incrementa duplicando su valor para asignarlo a la diagonal secun-</p><p>daria. El contador del índice j es declarado como ind_j y</p><p>Mat[4,4]; es la matriz que se empleará para el llenado de los nú-</p><p>meros.</p><p>3. En la línea 4, se inicia el contador cont en 4 para asignarlo en la</p><p>última posición de la matriz durante la primera iteración.</p><p>4. En la línea 5, se presenta un contador auxiliar, ind_j que ayudará a</p><p>resolver el problema. Observe, en la figura 4.151, que los índices i</p><p>se mantienen en la ejecución del programa, pero los índices j se</p><p>decrementan desde 3 hasta 0, por lo que este segundo índice es</p><p>quien resuelve la posición de adónde se debe calcular la diagonal</p><p>secundaria. Además, el decremento se da de 1 en 1. Por lo anterior,</p><p>se necesita un índice j adicional que se comparará con el índice j</p><p>actual y al auxiliar se le irá restando una unidad para que se coloque</p><p>el siguiente valor. Esto se repetirá hasta que el índice auxiliar tenga</p><p>un valor de 0, es decir, hasta que llegue a la última</p><p>fila de la matriz.</p><p>0</p><p>(0,0)</p><p>0</p><p>(0,1)</p><p>0</p><p>(0,2)</p><p>4</p><p>(0,3)</p><p>0</p><p>(1,0)</p><p>0</p><p>(1,1)</p><p>8</p><p>(1,2)</p><p>0</p><p>(1,3)</p><p>0</p><p>(2,0)</p><p>16</p><p>(2,1)</p><p>0</p><p>(2,2)</p><p>0</p><p>(2,3)</p><p>32</p><p>(3,0)</p><p>0</p><p>(3,1)</p><p>0</p><p>(3,2)</p><p>0</p><p>(3,3)</p><p>FIGURA 4.152. Matriz diagonal secundaria con los índices j resaltados con negrita</p><p>5. En las líneas 6 y 7, se inician los ciclos anidados, desde 0 hasta 3,</p><p>dado que la matriz es de 4 × 4. Una alternativa para los contadores,</p><p>cuando el contexto del problema lo indique, es iniciar el ciclo en 1 y</p><p>finalizarlo en 4; sin embargo, como la figura 4.151 muestra los índi-</p><p>ces iniciando en 0, se debe hacer de 0 a 3.</p><p>6. En la línea 8, se establece la condición para determinar la diagonal</p><p>secundaria, y esto sucede la primera vez cuando el índice j está en</p><p>474</p><p>la última columna; en las siguientes filas, se le va restando una uni-</p><p>dad.</p><p>7. Para el primer recorrido, si el índice j coincide con el valor de la</p><p>última columna que se establece en la variable ind_j, entonces la</p><p>línea 9 muestra que a la matriz se le asignará el valor del contador,</p><p>el cual se inicializó en la línea 4 con el valor de 4 y, como este se</p><p>debe incrementar, en la línea 10, se realiza el aumento duplicando</p><p>el valor. Adicionalmente, al ind_j, ahora, se le debe restar una uni-</p><p>dad que se realiza en la línea 11; y, finalmente, en la línea 12, se</p><p>muestra la información en pantalla.</p><p>8. En la línea 13, se continúa con la estructura del Si, indicando lo que</p><p>sucede si no se cumple la condición anterior.</p><p>9. En la línea 14, se asigna el valor de 0 a la matriz, dado que no co-</p><p>rresponde a la diagonal secundaria.</p><p>10. En las líneas de la 16, 17, 19 y 20, se cierran el Si, los ciclos y el</p><p>procedimiento.</p><p>A continuación, se muestra la salida a pantalla, del pseudocódigo anterior.</p><p>FIGURA 4.153. Muestra de la ejecución del código de la figura 4.51</p><p>4.4.11 Llenado de una matriz por columnas</p><p>Por lo general, las matrices se llenan ordenadamente por filas; sin embargo,</p><p>este orden se puede variar y llenar por columnas. Verbigracia, se requiere</p><p>que toda la información se organice por meses y, entonces, la primera co-</p><p>lumna pertenece al mes de Enero; y la última columna, a Diciembre,</p><p>mientras que las filas corresponden a recibos variados como agua, luz o</p><p>teléfono.</p><p>475</p><p>El pseudocódigo que permite llenar una matriz por columnas es el si-</p><p>guiente:</p><p>FIGURA 4.154. Pseudocódigo para llenar una matriz por columnas</p><p>Donde:</p><p>1. La primera línea declara el inicio del procedimiento.</p><p>2. En el segundo y el tercer punto, se declaran las variables, donde i y</p><p>j son los índices de la matriz. La variable cont será el contador que</p><p>se incrementa de uno en uno su valor, para asignarlo a cada ele-</p><p>mento de la columna.</p><p>3. En la línea 4, se inicia el contador en 1 para asignarlo en la primera</p><p>posición de la matriz.</p><p>4. En la línea 5, se presenta un cambio en el orden de los índices que</p><p>ayudará a resolver el problema. Observe que inicia con el índice de</p><p>las columnas j, dado que se requiere llenar por completo en la co-</p><p>lumna, en lugar de la fila. El segundo índice i corresponde a las filas.</p><p>En la línea 7, se observa que la asignación en la matriz se realiza igual</p><p>que en los casos anteriores, donde almacena, en el campo, el valor</p><p>del contador cont; y, en la línea 8, se hace el incremento del con-</p><p>tador para que la siguiente iteración asigne el nuevo número.</p><p>5. En las líneas de la 9 a la 11, se cierran los ciclos y el procedimiento.</p><p>476</p><p>Incorporando las instrucciones usuales para imprimir una matriz, en el</p><p>mismo orden de fila columna, se muestra, a continuación, la salida en pan-</p><p>talla.</p><p>FIGURA 4.155. Muestra de la ejecución del código de la figura 4.154 agregando las líneas para la</p><p>muestra en pantalla y sin la opción Sin Saltar</p><p>La vista anterior se ajusta, al emplear la opción Sin Saltar en la línea de</p><p>impresión de la matriz.</p><p>4.4.12 Búsqueda de un valor en una matriz</p><p>El hecho de buscar un número en un arreglo es igual a la comparación de</p><p>variables para saber si uno o varios números son iguales entre sí.</p><p>477</p><p>A continuación, se muestra un proceso en el cual se llena una matriz con</p><p>números aleatorios y se determina si un número se encuentra o no en el</p><p>arreglo.</p><p>FIGURA 4.156. Pseudocódigo para buscar un número en una matriz</p><p>Como se observa,</p><p>1. La primera línea declara el inicio del procedimiento.</p><p>2. En la línea 2, se declaran las variables, donde i y j son los índices</p><p>de la matriz. La variable cont será el contador que determine la</p><p>cantidad de ocasiones que un número se encuentra en el arreglo. La</p><p>matriz es declarada de un tamaño de 5 × 5.</p><p>3. En las líneas 4 y 5, se inicializan el contador en 0 porque se desco-</p><p>noce si el número será encontrado y el número que digitará el usua-</p><p>rio será asignado a la variable num.</p><p>478</p><p>4. En las líneas de la 6 a la 10, se emplean ciclos y se asignan los valores</p><p>aleatorios a la matriz, por medio de la función Azar.</p><p>5. En la línea 12, se recibe por teclado el valor que el usuario desea</p><p>buscar.</p><p>6. En la línea 15, se presenta la condición para consultar si el contenido</p><p>de la matriz es igual al número digitado por el usuario. Si hay una</p><p>coincidencia, se ejecuta la instrucción de la línea 16, que es incre-</p><p>mentarle una unidad al contador.</p><p>7. Una vez terminado el recorrido de la matriz, en la línea 20, se plantea</p><p>la condición de si el contador permaneció en 0, es decir, no hubo un</p><p>número igual al digitado por el usuario y se envía el mensaje de la</p><p>línea 21. Pero en la línea 22, considera si el contador es diferente de</p><p>0, o sea, sí hubo al menos una coincidencia entre el número digitado</p><p>por el usuario y los que había en la matriz. En cuyo caso, se muestra</p><p>el mensaje de la línea 23 donde se aprecia el número y la cantidad</p><p>de veces que este apareció en el arreglo.</p><p>En la figura 4.157, se observa la ejecución del pseudocódigo presen-</p><p>tado.</p><p>FIGURA 4.157. Muestra de la ejecución del código de la figura 4.150</p><p>Aquí, se han analizado diversos procesos de las matrices. Enseguida, se</p><p>brindan ejemplos más complejos, pero que conservan esas estructuras bá-</p><p>sicas; por ejemplo: declaraciones, dimensionamiento y uso de estructuras</p><p>de decisión (Si) y de control (ciclos Para).</p><p>479</p><p>4.4.13 Ejemplos con matrices</p><p>Como se mencionó, se revisarán ejemplos en los que se aplica lo estudiado</p><p>hasta aquí. Se utiliza el programa PSeInt y DFD, por ello, cada vez que se</p><p>menciona una instrucción, una función o un procedimiento, se trata de los</p><p>definidos en estas herramientas.</p><p>Ejemplo 1. Búsqueda de un número en una matriz y contar la</p><p>cantidad de veces que aparece el número buscado en el arreglo</p><p>Para este ejemplo, tenemos los siguientes aspectos como base del pro-</p><p>blema:</p><p>• La matriz es de 3 filas y 4 columnas.</p><p>• La matriz la llena el usuario con números de tipo Entero.</p><p>• Debe solicitar el número a buscar al usuario.</p><p>• Debe mostrar la matriz en forma cuadrada.</p><p>• Si el número está en la matriz, debe señala cuántas veces está en el</p><p>arreglo; y, si no lo está, debe indicarlo también.</p><p>A continuación, en la figura 4.158, analizaremos el código que resuelve la</p><p>situación planteada:</p><p>480</p><p>FIGURA 4.158. Pseudocódigo que solicita los números para llenar una matriz de 3 × 4 al usuario; y, luego, busca si un</p><p>número en particular está en la matriz e indica cuántas veces se encontró</p><p>Para el ejemplo, declaramos las variables en las líneas 4 a la 7, luego di-</p><p>mensionamos la matriz; finalmente, hacemos las inicializaciones.</p><p>481</p><p>De la línea 19 a la 25, llenamos la matriz con los números que el usuario</p><p>digite; y, en las líneas 27 y 28, solicitamos y leemos el número por buscar</p><p>en el arreglo.</p><p>La búsqueda del número digitado por el usuario en la matriz la hacemos</p><p>en las líneas 32 a la 38. Notemos que se usan dos ciclos Para anidados y,</p><p>en el Para interno, implementamos un Si para comparar el contenido de</p><p>la variable NumeroBuscado con una</p><p>celda específica de la matriz (Si Nu-</p><p>meroBuscado=Matriz(Fila,Columna)). Si la condición tiene un valor</p><p>de verdadero, entonces se incrementa en 1 la variable CantidadCoin-</p><p>cidencias. Esto se repite hasta que se abarquen todas las celdas de la</p><p>matriz.</p><p>Una vez finalizados esos dos ciclos anidados, se emplean otros dos para</p><p>mostrar la matriz, líneas 42 a la 48. Veamos que se utilizan las instrucciones</p><p>Sin Saltar, en el Escribir dentro del Para interno; y, un Escribir,</p><p>fuera de ese mismo ciclo interno.</p><p>Por último, en las líneas 51 a 58, se muestran los resultados de la búsqueda.</p><p>En un Si, evaluamos el valor de la variable CantidadCoincidencias.</p><p>Si esta tiene un valor superior a 0 significa que el número buscado se en-</p><p>contraba, al menos una vez, en la matriz; de lo contrario (Sino), se deter-</p><p>mina que el número no estaba en el arreglo.</p><p>Ejemplo 2. Determinación de la sumatoria, el promedio, el</p><p>número mayor y el número menor de una matriz cuadrada</p><p>Para este caso, consideramos los siguientes aspectos:</p><p>482</p><p>1. La matriz tendrá una dimensión máxima de 10 filas y 10 columnas,</p><p>pero el usuario podrá definir la dimensión de la matriz para cada</p><p>ejecución del algoritmo.</p><p>2. La dimensión que digite el usuario para la matriz debe estar validada</p><p>y no puede ser menor de 1 ni superior a 10.</p><p>3. La matriz se llena con números aleatorios del 100 al 500.</p><p>4. Al final, debe mostrar un informe con los siguientes datos de la ma-</p><p>triz:</p><p>• Sumatoria</p><p>• Promedio</p><p>• Número mayor</p><p>• Número menor</p><p>El pseudocódigo completo del algoritmo es el siguiente:</p><p>483</p><p>FIGURA 4.159. Pseudocódigo que solicita al usuario la dimensión de una matriz de dimensión máxima de 10 × 10; luego la</p><p>llena con números al azar entre 100 y 500; y muestra en pantalla un informe con la Sumatoria, el Promedio, el</p><p>NumMayor y NumMenor de los datos de la matriz</p><p>484</p><p>Debido a la extensión del pseudocódigo, se hará la explicación por seccio-</p><p>nes.</p><p>I Parte: Declaraciones, dimensionamiento e inicializaciones</p><p>En esta primera parte del pseudocódigo, líneas de la 1 a la 15, se hacen las</p><p>declaraciones de las líneas 3 a la 6. Luego, en la línea 9, el dimensiona-</p><p>miento general del arreglo. En la situación por resolver, nos dicen que el</p><p>usuario define el tamaño de la matriz, pero que esta será de máximo 10</p><p>filas y 10 columnas, es decir, el usuario no puede digitar una dimensión que</p><p>esté fuera del rango 1–10.</p><p>Por último, de las líneas 12 a la 15, se efectúan las inicializaciones de las</p><p>variables.</p><p>FIGURA 4.160. Sección del pseudocódigo para la declaración de variables, dimensión del</p><p>arreglo e inicializaciones</p><p>II Parte: Dimensionamiento hecho por el usuario y validación del tamaño</p><p>de la matriz</p><p>En la segunda parte (líneas de la 17 a la 26), se solicita, se lee y se valida el</p><p>tamaño que el usuario definirá para la matriz en la variable</p><p>485</p><p>TamanioMatriz. Para esto, dentro de un ciclo Repetir, se solicita y se</p><p>lee el tamaño. Luego, y mediante un Si, evaluamos si el valor digitado por</p><p>el usuario es menor a 1 o mayor a 10. Si lo es, mostramos un mensaje de</p><p>error y el ciclo se repite; pero si el valor digitado está dentro del rango de</p><p>1 a 10, entonces el ciclo termina y se continúa con el resto del algoritmo.</p><p>FIGURA 4.161. Sección del pseudocódigo a fin de leer y validar el tamaño para la matriz que desea el usuario</p><p>Una vez fuera del ciclo Repetir, la variable TamanioMatriz tendrá un</p><p>valor entre 1 y 10. Esta servirá de límite en los ciclos Para que empleare-</p><p>mos en el manejo de la matriz.</p><p>III Parte: Llenado de matriz, sumatoria y cálculo del promedio</p><p>En la tercera parte, nos enfocaremos en el llenado de la matriz y los cálculos</p><p>solicitados. En los ciclos de llenado, notemos que el límite llega hasta Ta-</p><p>manioMatriz-1, debido a que el conteo de las celdas inicia en 0 y debe</p><p>llegar hasta el tamaño que digitó el usuario. Si no hacemos la resta (Tama-</p><p>nioMatriz-1), entonces contaremos una celda más de la que, en reali-</p><p>dad, debería tener el arreglo.</p><p>486</p><p>FIGURA 4.162. Sección del pseudocódigo para realizar la sumatoria y calcular el promedio de la matriz</p><p>Por ejemplo, si el usuario determinó que el tamaño de la matriz fuese de</p><p>5, entonces el conteo iría de 0 a 5; con ello, estaría procesando seis celdas</p><p>(0, 1, 2, 3, 4, 5). Para evitar que esto pase, restamos una unidad al límite</p><p>establecido por el usuario, por ende, tendría un conteo de 0 a 4 y procesa-</p><p>ríamos las cinco celdas deseadas (0, 1, 2, 3, 4).</p><p>Una vez aclarado el detalle del límite, veamos el ciclo Para interno. En la</p><p>línea 32, se le asigna a la matriz un número aleatorio del 100 al 500. En la</p><p>línea 33, se acumula el contenido de la celda en la variable Sumatoria.</p><p>Esto, más adelante, nos servirá para el promedio. Finalmente, en la línea 34,</p><p>se incrementa el contador de casillas. Esto también lo utilizaremos para el</p><p>cálculo del promedio.</p><p>Al salir de los ciclos Para anidados, se calcula el promedio, línea 39.</p><p>IV Parte: Determinación de número mayor y menor, y muestra de</p><p>resultados</p><p>En la última parte, se determina el número mayor y menor del arreglo y se</p><p>muestran los resultados. Primero, se les asigna a las variables NumMayor y</p><p>NumMenor el valor de la posición 0,0 de la matriz. Posteriormente, en los</p><p>487</p><p>ciclos Para anidados, que inician en la línea 50, se inicia la muestra de la</p><p>matriz, una celda a la vez cada oportunidad que se ingresa al ciclo (línea</p><p>53).</p><p>FIGURA 4.163. Sección del pseudocódigo para determinar el número menor y mayor en una matriz e imprimir el informe solicitado</p><p>Luego, se emplean dos Si por separado (líneas 55 y 59). En el primero, se</p><p>evalúa si el contenido de la celda actual de la matriz es mayor al valor de la</p><p>variable NumMayor. De ser así, se sustituye el valor actual de NumMayor</p><p>488</p><p>por el valor de la celda de la matriz, ya que ese contenido de la celda sería</p><p>el nuevo número mayor.</p><p>En el segundo Si, se evalúa si el contenido de la celda actual es menor que</p><p>el valor de NumMenor. Si esto es verdadero, entonces se hace la sustitución</p><p>respectiva.</p><p>Al finalizar esos ciclos, tendremos la matriz impresa en pantalla y habremos</p><p>determinado el número mayor y menor del arreglo. Finalmente, de las lí-</p><p>neas 69 a la 77, se muestran los resultados.</p><p>Ejemplo 3. Llenado de una matriz por columnas con números</p><p>impares</p><p>Para el desarrollo del ejemplo, se parte de los siguientes supuestos:</p><p>1. El usuario brinda la dimensión de la matriz.</p><p>2. La matriz se llena con número impares, empezando en 1 y por co-</p><p>lumnas.</p><p>3. Se le solicita un número al usuario y se revisa si está en la matriz. Si</p><p>aparece, se le indica la posición en la que apareció.</p><p>4. Se calcula la sumatoria de los valores de la matriz y el promedio de</p><p>estos.</p><p>Si el usuario indicara que desea una matriz de 3 × 4, su llenado se vería de</p><p>la siguiente manera:</p><p>Llenado por columnas (observe que la serie inicia en 1)</p><p>1 7 13 19</p><p>3 9 15 21</p><p>5 11 17 23</p><p>FIGURA 4.164. Ejemplo de matriz llenada por columnas y cuyo tamaño el usuario definió de 3 × 4</p><p>489</p><p>Veamos el pseudocódigo con los comentarios, para analizar la solución del</p><p>problema.</p><p>Líneas de la 1 a la 23</p><p>Se observa que, en la línea 12, se crea la matriz con el tamaño digitado por</p><p>el usuario en las líneas 6 y 8.</p><p>FIGURA 4.165. Sección del pseudocódigo donde se declaran variables, dimensiona la matriz y se</p><p>inicializan variables</p><p>Líneas de la 24 a la 41</p><p>En la línea 29, se aprecia que, para llenar una matriz por columnas, se re-</p><p>quiere invertir los índices de la matriz. En la línea 32, se realiza el incremento</p><p>hacia el siguiente número impar; y, en la línea 39, se suman los valores.</p><p>490</p><p>FIGURA 4.166. Sección del pseudocódigo para llenar la matriz por columna</p><p>Líneas de la 42 a la 58</p><p>Por una parte, en las líneas 43 y 46, se realizan ajustes en el contador y la</p><p>sumatoria de la matriz. A la variable cont se le resta 1, ya que al salir del</p><p>ciclo, tiene una unidad</p><p>adicional. Mientras tanto, a la variable sumatoria</p><p>se le resta num, dado que sumó el último número que ya no se le asignaba</p><p>a la matriz. Adicionalmente, en la línea 49, se calcula el promedio del arre-</p><p>glo.</p><p>Por otra parte, en las líneas de la 52 a la 57, se realizan los ciclos e instruc-</p><p>ciones para imprimir la matriz. Note que, para mostrar en pantalla el arre-</p><p>glo, no es necesario invertir los índices como sí se debe hacer para cargar</p><p>los datos por columna.</p><p>491</p><p>FIGURA 4.167. Sección del pseudocódigo para imprimir la matriz</p><p>Líneas de la 59 a la 75</p><p>En la línea 65, se realiza la comparación del valor introducido por el usuario</p><p>(en la línea 61) y los valores de la matriz.</p><p>Con las líneas 66 y 67, se obtiene la posición exacta de la matriz donde se</p><p>encuentra el número. En las líneas 68 y 69, se fuerza el ciclo por terminar,</p><p>pues los lleva al máximo valor de ambos. Esto se realiza porque ya no se</p><p>debe seguir buscando el número; además, ahorra que el ciclo se siga eje-</p><p>cutando.</p><p>En la línea 70, se asigna un valor de 1 a la variable seguir, para indicar</p><p>que se encontró el número. En la línea 72, se asigna a la variable seguir</p><p>un valor de 0, para indicar que el número aún no se ha encontrado.</p><p>492</p><p>FIGURA 4.168. Sección del pseudocódigo para buscar un número en la matriz</p><p>Líneas de la 76 a la 83</p><p>Para finalizar, se realiza una condición para consultar por medio de la va-</p><p>riable seguir si se encontró el número digitado por el usuario. Si se en-</p><p>cuentra, se muestra el mensaje de las líneas 79 y 80, sino, se muestra el</p><p>mensaje de la línea 77. Además, se enseña la sumatoria y el promedio en</p><p>la línea 83.</p><p>FIGURA 4.169. Sección del pseudocódigo para mostrar el número buscado en la matriz</p><p>493</p><p>La salida a pantalla del programa anterior sería la siguiente:</p><p>FIGURA 4.170. Salida en pantalla del pseudocódigo del ejemplo 3</p><p>Ejemplo 4. Matriz cuadrada con el cálculo del promedio de la</p><p>diagonal principal, valor menor y valor mayor digitado por el</p><p>usuario</p><p>Se declara una matriz de 4 × 4, donde el usuario ingrese números entre 10</p><p>y 60 para llenarla; por lo tanto, necesita validar esta condición en los valo-</p><p>res. Posteriormente, debe</p><p>1. Imprimir la matriz resultante.</p><p>2. Imprimir la diagonal de la matriz.</p><p>3. Acumular los valores de la diagonal y mostrar su promedio.</p><p>4. Determinar y mostrar el valor menor digitado por el usuario.</p><p>5. Determinar y mostrar el valor mayor digitado por el usuario.</p><p>Veamos el pseudocódigo:</p><p>494</p><p>495</p><p>FIGURA 4.171. Código que solicita al usuario los datos para llenar una matriz de 4 × 4, luego muestra su diagonal, así como su</p><p>promedio, el número menor y el número mayor del arreglo</p><p>Ejemplo 5. Matriz traspuesta</p><p>Se declara una matriz de 3 × 3 donde se reciban valores digitados por el</p><p>usuario y los imprima. Posteriormente, debe hacer un procedimiento para</p><p>determinar, en otro arreglo, la matriz traspuesta y que la imprima. Observe</p><p>el siguiente ejemplo:</p><p>1 2 3 1 4 7</p><p>4 5 6 2 5 8</p><p>7 8 9 3 6 9</p><p>FIGURA 4.172. Ejemplo de una matriz con su equivalente traspuesta</p><p>496</p><p>El pseudocódigo es el siguiente</p><p>FIGURA 4.173. Código que recibe los datos de una matriz de 3 × 3, luego, la pasa a otra de forma traspuesta</p><p>y la muestra en pantalla</p><p>497</p><p>La salida a pantalla del programa anterior sería la siguiente:</p><p>FIGURA 4.174. Resultado de la ejecución del código de la figura 4.172</p><p>Ejemplo 6. Matriz con factorial, diagonal y promedio</p><p>El usuario debe declarar el tamaño de una matriz cuadrada y, en cada po-</p><p>sición, se calcula y se asigna el factorial. Además, se sumarán los elementos</p><p>de la diagonal principal y se calculará el promedio de la matriz.</p><p>El factorial de un número es el producto de los enteros positivos desde 1</p><p>hasta n. Veamos el siguiente ejemplo con una matriz de 2 × 2:</p><p>Factorial</p><p>Cálculo para determinar el facto-</p><p>rial de un número</p><p>Matriz</p><p>resultante</p><p>1! 2! 1 1 × 2 1 2</p><p>3! 4! 1 × 2 × 3 1 × 2 × 3 × 4 6 24</p><p>FIGURA 4.175. Ejemplo de cálculo de factorial en una matriz de 2 × 2</p><p>498</p><p>A continuación, se muestra el pseudocódigo:</p><p>Figura 4.176. Pseudocódigo que calcula el factorial de los números de una matriz, el promedio de todos sus números y la</p><p>sumatoria de los números de la diagonal principal</p><p>499</p><p>La salida en pantalla del programa anterior sería la siguiente:</p><p>FIGURA 4.177. Resultado de la ejecución del código de la figura 4.176</p><p>Ejemplo 7. Suma de dos matrices, número mayor y menor</p><p>Se declaran las matrices A, B y C de tamaño 4 × 4; se le solicita al usuario</p><p>que digite los valores de A, los valores de B; y se calcula, en C, la suma de</p><p>A+B. Además, se calcula para C el número mayor y menor.</p><p>Matriz A Matriz B</p><p>1 2 3 4 2 4 6 8</p><p>5 6 7 8 3 0 1 4</p><p>9 10 11 12 9 12 7 -6</p><p>13 14 15 16 5 8 11 6</p><p>FIGURA 4.178. Ejemplo de las matrices A y B con datos</p><p>500</p><p>Matriz C Matriz C Resultante</p><p>1+2 2+4 3+6 4+8 3 6 9 12</p><p>5+3 6+0 7+1 8+4 8 6 8 12</p><p>9+9 10+12 11+7 12+-6 18 22 18 6</p><p>13+5 14+8 15+11 16+6 18 22 26 22</p><p>FIGURA 4.179. Ejemplo del cálculo de la matriz C, basada en los datos de las matrices</p><p>A y B</p><p>Seguidamente, se muestra el pseudocódigo:</p><p>FIGURA 4.180. Pseudocódigo que calcula la matriz C por medio de la suma de los valores de las matrices A y B.</p><p>Además, determina el valor mayor y menor</p><p>de la matriz C</p><p>501</p><p>Ejemplo 8. Matriz dimensionada por usuario, llenada</p><p>aleatoriamente, cálculo del promedio de una fila e intercambio</p><p>de valores entre columnas</p><p>Se debe crear una matriz de un tamaño indicado por el usuario. El arreglo</p><p>se llena con números aleatorios utilizando la función Random(x). Se debe</p><p>mostrar por pantalla la matriz y, además, el usuario puede elegir una de las</p><p>filas para calcular su promedio. Luego, se le debe solicitar al usuario el nú-</p><p>mero de dos columnas e intercambiar los valores entre ellas. Finalmente,</p><p>se mostrará la matriz con esta modificación (intercambio de columnas).</p><p>Observe el siguiente ejemplo:</p><p>FIGURA 4.181. Ejecución del ejemplo 8</p><p>502</p><p>Observemos el pseudocódigo:</p><p>503</p><p>FIGURA 4.182. Pseudocódigo para llenar una matriz de forma aleatoria, calcular el promedio de una fila dada por el</p><p>usuario e intercambiar los valores entre dos columnas</p><p>504</p><p>4.5 Resumen</p><p>Los arreglos son estructuras que permiten un manejo organizado de una</p><p>gran cantidad de datos. Como se pudo analizar a lo largo del capítulo, los</p><p>vectores y las matrices poseen estructura y tamaño que deben considerarse</p><p>al momento de idear un algoritmo.</p><p>Al comparar los arreglos con las variables y constantes, estudiadas desde</p><p>el capítulo 3, se encuentran similitudes, como las normas para establecer</p><p>su nombre y los tipos de datos que pueden manejar. Asimismo, los datos</p><p>almacenados en arreglos pueden someterse a evaluación por medio de</p><p>operadores relacionales y lógicos, y modificarse empleando operadores</p><p>aritméticos o de asignación.</p><p>Por el contrario, poseen diferencias en su manejo respecto a las variables</p><p>como el uso de índices. Los arreglos siempre deben emplearse con índices,</p><p>ya que permiten localizar, con exactitud, en cuál celda o posición del arre-</p><p>glo se desea trabajar.</p><p>En cuanto a las características de los dos tipos de arreglos que se abarcaron</p><p>en el texto, vectores y matrices, se determina que poseen tanto semejanzas</p><p>como diferencias.</p><p>A continuación, se hará un repaso de los conceptos de los arreglos, de su</p><p>diferencia básica sobre estructura y similitudes.</p><p>505</p><p>Conceptos, semejanzas y diferencias entre vectores y ma-</p><p>trices. ¿Cuál es la diferencia entre un vector y una ma-</p><p>triz?</p><p>Básicamente el vector es una hilera (una sola fila con varios campos) donde</p><p>se almacena un único tipo de información, a saber: números o nombres.</p><p>Los números que se muestran debajo de cada campo de información se</p><p>denominan índice. Este último es el identificador o la variable que con-</p><p>tiene la información de</p><p>cada elemento. Por ejemplo, en la figura 4.182, se</p><p>muestra el vector Invitado; y, en el índice 1, se encuentra el texto María.</p><p>Observe que, en este caso, únicamente se están almacenando datos de tipo</p><p>Cadena que representan los nombres de personas.</p><p>Invitado María Juan Ana Karol Enrique Roy Viviana Esther</p><p>[1] [2] [3] [4] [5] [6] [7] [8]</p><p>FIGURA 4.183. Vector de 8 posiciones con información de los invitados</p><p>La matriz, a diferencia del vector, es como un tablero de ajedrez (con filas</p><p>y columnas), y maneja un doble índice para representar las filas y co-</p><p>lumnas. En la siguiente ilustración, los índices se muestran entre paréntesis</p><p>y cursiva.</p><p>700 680 789 912 456 749 987 657 654 878 321 998</p><p>[1,1] [1,2] [1,3] [1,4] [1,5] [1,6] [1,7] [1,8] [1,9] [1,10] [1,11] [1,12]</p><p>560 432 956 874 598 932 209 765 657 834 987 899</p><p>[2,1] [2,2] [2,3] [2,4] [2,5] [2,6] [2,7] [2,8] [2,9] [2,10] [2,11] [2,12]</p><p>FIGURA 4.184. Matriz de 2 filas y 12 columnas con los montos de los recibos de agua y luz de cada mes</p><p>506</p><p>El cuadro 4.4 compara las características de ambos tipos de arreglos.</p><p>CUADRO 4.4. Comparación de las características de los vectores y matrices</p><p>Característica Vector Matriz</p><p>Posee una sola fila</p><p>Posee un solo contador para recorrerla en un ciclo</p><p>Posee varias filas</p><p>Posee dos contadores para recorrerla en un ciclo</p><p>Posee varias columnas</p><p>Almacena un solo tipo de dato</p><p>Pueden realizarse operaciones con su contenido</p><p>Se accede al contenido por medio del uso de índices</p><p>Requiere un nombre para declarar el arreglo</p><p>Requiere de una longitud (tamaño) al declararse</p><p>Es de longitud (tamaño) variable</p><p>Si la longitud (tamaño) lo digita el usuario, se requiere</p><p>declararlo después de digitar el tamaño en una variable</p><p>Puede cambiarse su longitud (tamaño) durante la ejecu-</p><p>ción del programa</p><p>507</p><p>4.6 Ejercicios de autoevaluación</p><p>A continuación, se presentan una serie de ejercicios que le servirán para</p><p>evaluar su aprendizaje de los temas vistos en este capítulo. Le recomenda-</p><p>mos responderlos de acuerdo al conocimiento adquirido y, solo después,</p><p>revisar el apartado “Respuesta a los ejercicios de autoevaluación”, a fin de</p><p>contrastar sus respuestas con las propuestas.</p><p>Ejercicios con las funciones Azar o Random</p><p>Realice las siguientes funciones Azar ( ), de acuerdo con el rango dado,</p><p>por ejemplo:</p><p>➢ Rango: 0-20.</p><p>➢ Función: Azar(21);</p><p>1. Rango: 2-15.</p><p>Función: _____________________________________.</p><p>2. Rango: 0-101.</p><p>Función: _____________________________________.</p><p>3. Rango: 10-99.</p><p>Función: _____________________________________.</p><p>4. Rango: 200-500.</p><p>Función: _____________________________________.</p><p>5. Rango: 4-22.</p><p>508</p><p>Función: _____________________________________.</p><p>4.6.1 Ejercicios de dimensionamiento con vectores y matrices</p><p>Ejercicio 1. Declare y dimensione los vectores y matrices especificados.</p><p>Considere el tipo de dato y tamaño.</p><p>1. Un vector de 9 posiciones que almacena salarios de los funcio-</p><p>narios de un banco.</p><p>Declaración:</p><p>Dimensión:</p><p>2. Un arreglo unidimensional de 6 celdas que almacena la cantidad</p><p>de estudiantes de cada nivel de una escuela primaria.</p><p>Declaración:</p><p>Dimensión:</p><p>3. Un vector de 25 posiciones que almacena los nombres de los</p><p>empleados de una fábrica.</p><p>Declaración:</p><p>509</p><p>Dimensión:</p><p>4. Un vector de 5 posiciones que almacena datos de falso o ver-</p><p>dadero para un juego.</p><p>Declaración:</p><p>Dimensión:</p><p>5. Un arreglo unidimensional de 2500 celdas que almacena los pro-</p><p>medios ponderados y los estudiantes de un colegio.</p><p>Declaración:</p><p>Dimensión:</p><p>6. Una matriz de 50 posiciones (10 filas 5 columnas) que almacena</p><p>mediante una marca (S o N) los días que tienen teletrabajo 10</p><p>funcionarios de un banco.</p><p>Declaración:</p><p>Dimensión:</p><p>510</p><p>7. Un arreglo multidimensional cuadrado de 10 filas que almacena</p><p>el peso de los pacientes de un hospital.</p><p>Declaración:</p><p>Dimensión:</p><p>8. Una matriz de 20 posiciones que almacena los nombres de los</p><p>empleados de una fábrica, organizados por 5 columnas que re-</p><p>presentan las áreas para las que laboran.</p><p>Declaración:</p><p>Dimensión:</p><p>9. Una matriz de 6 posiciones (2 columnas) que almacena datos de</p><p>Falso o Verdadero.</p><p>Declaración:</p><p>Dimensión:</p><p>10. Un arreglo multidimensional cuadrado de 1000 celdas que alma-</p><p>cena temperaturas en grados centígrados para un proyecto de</p><p>investigación.</p><p>511</p><p>Declaración:</p><p>Dimensión:</p><p>4.6.2 Ejercicios de desarrollo</p><p>Ejercicio 1. Matriz, vector y números pares e impares</p><p>Elabore un programa en DFD que, dado un arreglo de longitud 5 × 5, pueda</p><p>ejecutar lo siguiente:</p><p>1. Solicítele al usuario que llene la matriz A con números de tipo</p><p>Entero del 1 al 100. Debe validar que la matriz únicamente se llene</p><p>con dichos números.</p><p>2. Calcule y muestre el promedio de la matriz A.</p><p>3. Adicionalmente, almacene, en un vector B de longitud 5, los prime-</p><p>ros cinco números impares que hay en la matriz. Asuma que en la</p><p>matriz habrá, por lo menos, cinco números impares.</p><p>4. Imprima en pantalla el vector B con los números impares.</p><p>5. Cambie cada número del vector B a su par superior inmediato. Es</p><p>decir, si el primer número del vector es 3, entonces se debe cambiar</p><p>por un 4. Si el segundo es 13, el cambio sería por el 14.</p><p>6. Imprima en pantalla el vector B con los números pares.</p><p>Ejercicio 2. Resta de matrices</p><p>Elabore un pseudocódigo con la sintaxis de PSeInt que, dadas tres matri-</p><p>ces (A, B y C) de 4 × 4 cada una, pueda ejecutar lo siguiente:</p><p>1. Solicite al usuario números para llenar las matrices A y B.</p><p>2. Una vez llenas las matrices A y B, se debe:</p><p>512</p><p>• Calcular la resta de las matrices A-B y almacenarlas en la ma-</p><p>triz C. Debe imprimir C.</p><p>• Obtener el valor mínimo de la matriz C.</p><p>• Obtener el valor máximo de la matriz C.</p><p>Tome en cuenta lo siguiente:</p><p>3. Asuma que los índices para filas y columnas inician en 0.</p><p>4. Debe utilizar ciclos Para para todos los procesos que involucren a</p><p>las matrices.</p><p>Ejercicio 3. Diagonal de una matriz</p><p>Confeccione un diagrama de flujo que cargue, de manera automática en</p><p>una matriz de 3 × 3, los valores del 1 al 6; y, a la diagonal, le asigne 0. Debe</p><p>imprimir los índices y valores al finalizar la asignación. La matriz resultante</p><p>es:</p><p>0 1 2</p><p>3 0 4</p><p>5 6 0</p><p>FIGURA 4.185. Ejemplo de matriz resultante</p><p>Considere que debe emplear ciclos, así como las condiciones para deter-</p><p>minar la diagonal y el resto de las posiciones, los índices, contadores y acu-</p><p>muladores. No debe hacer asignaciones manuales de valores a celdas de la</p><p>matriz.</p><p>513</p><p>Ejercicio 4. Llenado de matriz, suma, promedio y búsqueda de</p><p>número</p><p>A continuación, en la figura 4.186, se presenta un ejemplo de una matriz</p><p>de 3 × 4 completada en cada una de sus posiciones, con los números na-</p><p>turales ordenados por filas:</p><p>1</p><p>[1,1]</p><p>2</p><p>[1,2]</p><p>3</p><p>[1,3]</p><p>4</p><p>[1,4]</p><p>5</p><p>[2,1]</p><p>6</p><p>[2,2]</p><p>7</p><p>[2,3]</p><p>8</p><p>[2,4]</p><p>9</p><p>[3,1]</p><p>10</p><p>[3,2]</p><p>11</p><p>[3,3]</p><p>12</p><p>[3,4]</p><p>FIGURA 4.186. Ejemplo de matriz con números naturales ordenados por filas</p><p>Realice el pseudocódigo del algoritmo que permita resolver lo siguiente:</p><p>1. Solicitarle al usuario el número de filas y de columnas de la matriz</p><p>deseada, que puede ser de cualquier tamaño, y complétela automá-</p><p>ticamente con los números naturales desde 1 hasta n, donde n re-</p><p>presenta el tamaño de la matriz introducida por el usuario.</p><p>Nota</p><p>Los números entre corchetes representan la posición de la matriz. El</p><p>número en negrita es el valor almacenado en el arreglo.</p><p>514</p><p>2.Completar, de forma automática, con un ci-</p><p>clo, la matriz con los números naturales desde</p><p>el número 1 en adelante, dependiendo del ta-</p><p>maño de matriz que defina el usuario. Además,</p><p>debe mostrar los índices de la matriz, como en</p><p>el ejemplo de la figura 187.</p><p>3.Calcular la suma y el promedio de los valores</p><p>de la matriz y emita el mensaje. Por ejemplo:</p><p>441</p><p>4.4.3 Manejo de una matriz ....................................................................... 443</p><p>4.4.4 Llenado de una matriz ...................................................................... 445</p><p>4.4.5 Muestra de una matriz ...................................................................... 453</p><p>4.4.6 Modificación de una matriz ............................................................ 457</p><p>xvii</p><p>4.4.7 Llenado de una matriz con datos introducidos por el usuario ..</p><p>................................................................................................................... 461</p><p>4.4.8 Llenado de una matriz con números aleatorios (Random) .. 465</p><p>4.4.9 Diagonal principal de una matriz .................................................. 468</p><p>4.4.10 Diagonal secundaria de una matriz.............................................. 471</p><p>4.4.11 Llenado de una matriz por columnas .......................................... 474</p><p>4.4.12 Búsqueda de un valor en una matriz ........................................... 476</p><p>4.4.13 Ejemplos con matrices ...................................................................... 479</p><p>Ejemplo 1. Búsqueda de un número en una matriz y contar la</p><p>cantidad de veces que aparece el número buscado en el arreglo ......... 479</p><p>Ejemplo 2. Determinación de la sumatoria, el promedio, el</p><p>número mayor y el número menor de una matriz cuadrada ................. 481</p><p>Ejemplo 3. Llenado de una matriz por columnas con números</p><p>impares .............................................................................................. 488</p><p>Ejemplo 4. Matriz cuadrada con el cálculo del promedio de la</p><p>diagonal principal, valor menor y valor mayor digitado por el usuario . 493</p><p>Ejemplo 5. Matriz traspuesta ............................................... 495</p><p>Ejemplo 6. Matriz con factorial, diagonal y promedio ......... 497</p><p>Ejemplo 7. Suma de dos matrices, número mayor y menor 499</p><p>xviii</p><p>Ejemplo 8. Matriz dimensionada por usuario, llenada</p><p>aleatoriamente, cálculo del promedio de una fila e intercambio de valores</p><p>entre columnas ....................................................................................... 501</p><p>4.5 Resumen ......................................................................................................... 504</p><p>Conceptos, semejanzas y diferencias entre vectores y matrices.</p><p>¿Cuál es la diferencia entre un vector y una matriz? .............................. 505</p><p>........................................................................................................................................ 507</p><p>4.6 Ejercicios de autoevaluación ................................................................... 507</p><p>Ejercicios con las funciones Azar o Random .......................... 507</p><p>4.6.1 Ejercicios de dimensionamiento con vectores y matrices ... 508</p><p>4.6.2 Ejercicios de desarrollo ..................................................................... 511</p><p>Ejercicio 1. Matriz, vector y números pares e impares ........ 511</p><p>Ejercicio 2. Resta de matrices ............................................... 511</p><p>Ejercicio 3. Diagonal de una matriz ...................................... 512</p><p>Ejercicio 4. Llenado de matriz, suma, promedio y búsqueda de</p><p>número .............................................................................................. 513</p><p>Ejercicio 5. Matriz llenada por columnas con números impares</p><p>.............................................................................................. 515</p><p>Ejercicio 6. Matriz factorial por columnas ............................ 517</p><p>Ejercicio 7. Matriz números aleatorios, promedio fila e</p><p>intercambio de columnas ....................................................................... 519</p><p>xix</p><p>Ejercicio 8. Matriz diagonal, número mayor y número menor ..</p><p>………………………………………………………………………………………….522</p><p>Ejercicio 9. Matriz, vector y números pares e impares en</p><p>PSeInt .............................................................................................. 524</p><p>Ejercicio 10. Vector y promedio ........................................... 524</p><p>Ejercicio 11. Matriz con intercambio de valores entre columnas</p><p>y promedio de fila ................................................................................... 524</p><p>Ejercicio 12. Vector con números aleatorios múltiplos de 3 ...</p><p>……………………………………………………………………………………….527</p><p>Ejercicio 13. Prácticas de multiplicación .............................. 527</p><p>Ejercicio 14. Sumar posiciones en un vector ........................ 530</p><p>Ejercicio 15. Ordenamiento de números positivos y negativos .</p><p>.............................................................................................. 532</p><p>Ejercicio 16. Suma de vectores y promedio ......................... 534</p><p>4.7 Respuesta a los ejercicios de autoevaluación ................................... 536</p><p>Respuesta a los ejercicios con la función Azar o Random ... 536</p><p>4.7.1 Respuesta a los ejercicios de dimensionamiento con vectores</p><p>y matrices ............................................................................................................... 537</p><p>4.7.2 Respuesta a los ejercicios de desarrollo ..................................... 540</p><p>Ejercicio 1. Matriz, vector y números pares e impares ......... 540</p><p>Ejercicio 2. Resta de matrices ............................................... 542</p><p>xx</p><p>Ejercicio 3. Diagonal de una matriz ...................................... 543</p><p>Ejercicio 4. Llenado de matriz, suma, promedio y búsqueda de</p><p>número .............................................................................................. 544</p><p>Ejercicio 5. Matriz llenada por columnas con números impares</p><p>.............................................................................................. 545</p><p>Ejercicio 6. Matriz factorial por columnas ............................ 546</p><p>Ejercicio 7. Matriz números aleatorios, promedio fila e</p><p>intercambio de columnas ....................................................................... 547</p><p>Ejercicio 8. Matriz diagonal, número mayor y número menor ..</p><p>.............................................................................................. 549</p><p>Ejercicio 9. Matriz, vector y números pares e impares en</p><p>PSeInt .............................................................................................. 550</p><p>Ejercicio 10. Vector y promedio ............................................ 552</p><p>Ejercicio 11. Matriz con intercambio de valores entre columnas</p><p>y promedio de fila ................................................................................... 553</p><p>Ejercicio 12. Vector con números aleatorios múltiplos de 3. 555</p><p>Ejercicio 13. Prácticas de multiplicación .............................. 556</p><p>Ejercicio 14. Sumar posiciones en un vector ......................... 559</p><p>Ejercicio 15. Ordenamiento de números positivos y negativos ..</p><p>.............................................................................................. 560</p><p>Ejercicio 16. Suma de vectores y promedio .......................... 561</p><p>4.8 Glosario de términos ................................................................................ 562</p><p>xxi</p><p>Índice de figuras</p><p>FIGURA 4.1. Ejemplo de 3 vectores .......................................................................... 347</p><p>FIGURA 4.2. Ejemplo de una matriz con los datos y aportes de cuatro</p><p>personas .......................................................................................................................... 348</p><p>FIGURA 4.3. Vector de 5 posiciones (celdas) con nombres de personas y el</p><p>índice inicia en 0 .......................................................................................................... 351</p><p>FIGURA 4.4. Vector de 4 posiciones (celdas) con número de teléfono y el</p><p>índice inicia en 0 ..........................................................................................................</p><p>“La suma de los valores de la ma-</p><p>triz es: 78 y el promedio es: 6,5”.</p><p>4.Desplegar, por pantalla, la posición correcta</p><p>del número almacenado en la matriz, indicado</p><p>por el usuario. Así, por ejemplo, si el usuario</p><p>indicó crear una matriz de 3 × 4 y mostrar la</p><p>posición del número 9, entonces el algoritmo</p><p>debe desplegar la información con el siguiente</p><p>formato: “El número 9 está en la po-</p><p>sición: (3,1) de la matriz”. Si el número no se encuentra,</p><p>el mensaje debe indicar que no lo halló. El mensaje solo debe apa-</p><p>recer una vez. Utilice las variables o condiciones para que se cumpla</p><p>este punto.</p><p>5. Declarar las variables y sus respetivos tipos de datos necesarios para</p><p>resolver el algoritmo.</p><p>6. Utilizar las estructuras de control correctas que permitan resolver el</p><p>algoritmo.</p><p>7. Emplear la sintaxis de igual forma como se hace en la herramienta</p><p>PSeInt en la construcción de pseudocódigos.</p><p>8. No realizar asignaciones manuales de la información a la matriz.</p><p>FIGURA 4.187. Ejemplo de salida deseada en las</p><p>instrucciones</p><p>515</p><p>Observe, en la siguiente ilustración, cómo debe ejecutarse el algoritmo y</p><p>mostrarse la información:</p><p>FIGURA 4.188. Ejemplo de salida de información</p><p>Ejercicio 5. Matriz llenada por columnas con números impares</p><p>A continuación, se presenta un ejemplo de una matriz de 3 × 4 completada</p><p>en cada una de sus posiciones con los números impares ordenados por</p><p>columnas:</p><p>1</p><p>[1,1]</p><p>7</p><p>[1,2]</p><p>13</p><p>[1,3]</p><p>19</p><p>[1,4]</p><p>3</p><p>[2,1]</p><p>9</p><p>[2,2]</p><p>15</p><p>[2,3]</p><p>21</p><p>[2,4]</p><p>5</p><p>[3,1]</p><p>11</p><p>[3,2]</p><p>17</p><p>[3,3]</p><p>23</p><p>[3,4]</p><p>FIGURA 4.189. Ejemplo de matriz con números impares por ordenados por columnas</p><p>516</p><p>Realice el pseudocódigo del algoritmo que permita resolver lo siguiente:</p><p>1. Solicitarle al usuario el número de filas y de columnas de la matriz</p><p>deseada, que puede ser de cualquier tamaño, y complétela automá-</p><p>ticamente con los números impares desde 1 hasta n.</p><p>2. Completar de forma automática, con un ciclo, la matriz con los nú-</p><p>meros impares, desde el número 1 en adelante, dependiendo del</p><p>tamaño de matriz que defina el usuario. Además, deben ordenarse,</p><p>de columna en columna, como se muestra en la matriz del ejemplo</p><p>anterior.</p><p>3. Desplegar, por pantalla, la posición correcta del número almace-</p><p>nado en la matriz, indicado por el usuario. Así, por ejemplo, si el</p><p>usuario indicó crear una matriz de 3 × 4 y mostrar la posición del</p><p>número 17, entonces el algoritmo debe desplegar la información</p><p>con el siguiente formato: “El número 17 está en la posi-</p><p>ción: (3,3) de la matriz”.</p><p>4. Desplegar, por pantalla, la sumatoria de los números y el promedio</p><p>de estos. Así, por ejemplo, si el usuario indicó crear una matriz de</p><p>3 × 4, entonces el algoritmo debe desplegar la información con el</p><p>siguiente formato: “La sumatoria de los números es: 144</p><p>y el promedio es: 12”.</p><p>5. Declarar las variables y sus respetivos tipos de datos necesarios para</p><p>resolver el algoritmo.</p><p>6. Hacer uso de las estructuras Si-Sino-Entonces, en donde sea</p><p>necesario.</p><p>7. Emplear acumuladores para la asignación de valores.</p><p>8. Usar condiciones, operadores, entre otros, que utilice las estructuras</p><p>de control correctas, y permitan resolver el algoritmo.</p><p>9. Utilizar la sintaxis de igual forma como se hace en la herramienta</p><p>PSeInt en la construcción de pseudocódigos.</p><p>10. No realizar asignaciones manuales de la información a la matriz.</p><p>Nota</p><p>Los números entre corchetes representan la posición de la matriz. El</p><p>número en negrita es el valor almacenado en el arreglo.</p><p>517</p><p>Ejercicio 6. Matriz factorial por columnas</p><p>A continuación, se presenta un ejemplo de una matriz de 3 × 3 completada</p><p>en cada una de sus posiciones con el factorial del número por columna,</p><p>iniciando desde 1!:</p><p>1!</p><p>[0,0]</p><p>4!</p><p>[0,1]</p><p>7!</p><p>[0,2]</p><p>2!</p><p>[1,0]</p><p>5!</p><p>[1,1]</p><p>8!</p><p>[1,2]</p><p>3!</p><p>[2,0]</p><p>6!</p><p>[2,1]</p><p>9!</p><p>[2,2]</p><p>FIGURA 4.190. Ejemplo de matriz con factoriales</p><p>El factorial de un número entero positivo se define como el producto que</p><p>se obtiene de multiplicar los números enteros desde 1 hasta el número n</p><p>indicado en el factorial.</p><p>n! = 1 × 2 × 3 × 4 × . . . × (n − 1) × n</p><p>Realice el pseudocódigo del algoritmo que permita resolver lo siguiente:</p><p>1. Solicitarle al usuario el número de filas y de columnas de la matriz</p><p>deseada, que puede ser de cualquier tamaño, y complétela automá-</p><p>ticamente con los factoriales por columna, los cuales inician desde</p><p>1! hasta n!. Donde n! representa el tamaño de la matriz introdu-</p><p>cida por el usuario.</p><p>2. Iniciar los índices de la matriz en 0.</p><p>3. Completar, por medio del uso de ciclos, el cálculo de cada factorial,</p><p>ordenados de columna en columna. Por ejemplo, si la matriz es de</p><p>3 × 3, como en el ejemplo anterior, los valores por almacenar serían:</p><p>Nota</p><p>Los números entre corchetes representan la posición de la matriz. El</p><p>número en negrita es el valor almacenado en el arreglo.</p><p>518</p><p>1</p><p>[0,0]</p><p>24</p><p>[0,1]</p><p>5040</p><p>[0,2]</p><p>2</p><p>[1,0]</p><p>120</p><p>[1,1]</p><p>40320</p><p>[1,2]</p><p>6</p><p>[2,0]</p><p>720</p><p>[2,1]</p><p>362880</p><p>[2,2]</p><p>FIGURA 4.191. Ejemplo de matriz con resultados de los factoriales</p><p>4. Mostrar, en pantalla, la matriz resultante, ordenada como se muestra</p><p>en el ejemplo.</p><p>5. Desplegar, por pantalla, la posición correcta del número almace-</p><p>nado en la matriz, indicado por el usuario. Así, por ejemplo, si el</p><p>usuario indicó que desea saber la posición del número 24, entonces</p><p>el algoritmo debe desplegar la información con el siguiente formato:</p><p>“El número 24 está en la posición: 0,1 de la matriz”.</p><p>6. Desplegar, por pantalla, la sumatoria de todos los valores de la ma-</p><p>triz.</p><p>7. Declarar las variables y sus respetivos tipos de datos necesarios para</p><p>resolver el algoritmo.</p><p>8. Utilizar las estructuras de control correctas que permitan resolver el</p><p>algoritmo.</p><p>9. Emplear la sintaxis de igual forma como se hace en la herramienta</p><p>PSeInt en la construcción de pseudocódigos.</p><p>10. No realizar asignaciones manuales de la información a la matriz.</p><p>519</p><p>La ejecución del programa debería verse así:</p><p>FIGURA 4.192. Ejemplo de salida del procesamiento de matriz con factoriales</p><p>Ejercicio 7. Matriz números aleatorios, promedio fila e</p><p>intercambio de columnas</p><p>A continuación, se presenta un ejemplo de una matriz de 4 × 4 completada</p><p>en cada una de sus posiciones con números aleatorios.</p><p>3</p><p>[0,0]</p><p>2</p><p>[0,1]</p><p>6</p><p>[0,2]</p><p>3</p><p>[0,3]</p><p>9</p><p>[1,0]</p><p>4</p><p>[1,1]</p><p>12</p><p>[1,2]</p><p>5</p><p>[1,3]</p><p>15</p><p>[2,0]</p><p>6</p><p>[2,1]</p><p>18</p><p>[2,2]</p><p>7</p><p>[2,3]</p><p>21</p><p>[3,0]</p><p>8</p><p>[3,1]</p><p>24</p><p>[3,2]</p><p>9</p><p>[3,3]</p><p>FIGURA 4.193. Ejemplo de matriz con números aleatorios</p><p>520</p><p>Realice el pseudocódigo del algoritmo, empleando la sintaxis en PSeInt,</p><p>que permita resolver lo siguiente:</p><p>1. Solicitarle al usuario el tamaño de la matriz cuadrada o rectangular,</p><p>la cual puede ser de cualquier tamaño. Complétela automática-</p><p>mente con números aleatorios del 10 al 99.</p><p>2. Para los números aleatorios, utilice la función Random(x). Esta</p><p>función genera un número entre un rango de 0 a x, es decir, Ran-</p><p>dom(5) genera un número aleatorio de 0 a 4.</p><p>A la función Random se le pueden realizar cálculos aritméticos. Por</p><p>ejemplo, Random(3)-1 genera un número del 0 al 2 y a ese número</p><p>producido se le resta 1. Finalmente, el número que genera la función</p><p>Random debe asignarse a una variable de la siguiente forma: Va-</p><p>riable=Random(3).</p><p>3. Desplegar por pantalla la matriz resultante.</p><p>4. Mostrar el promedio de una fila que elija el usuario. Por ejemplo, si</p><p>el usuario elige la fila 2, el promedio daría 11.5. Debe validar que</p><p>el número de fila ingresada por el usuario esté en el rango correcto</p><p>(1-N). Si la matriz tiene 4 filas y el usuario desea el promedio de la</p><p>fila 5, se le debe indicar que el número digitado está fuera del rango</p><p>de filas; de igual forma, si digita 0. Una vez mostrado este mensaje,</p><p>se le debe solicitar el número de fila nuevamente; el proceso de error</p><p>se repite hasta que el usuario digite un número de</p><p>fila correcto.</p><p>5. Intercambiar los valores de dos columnas. Se le debe solicitar al</p><p>usuario el número de dos columnas (asuma que siempre se digita-</p><p>rán números válidos) para que intercambien valores entre sí. Por</p><p>ejemplo, si el usuario digita 2 y 4, la matriz luego del cambio que-</p><p>daría así:</p><p>Nota</p><p>Los números entre corchetes representan la posición de la matriz. El</p><p>número en negrita es el valor almacenado en el arreglo.</p><p>521</p><p>3 3 6 2</p><p>9 5 12 4</p><p>15 7 18 6</p><p>21 9 24 8</p><p>FIGURA 4.194. Ejemplo de matriz con cambio de números entre dos de sus columnas</p><p>6. Mostrar la matriz modificada.</p><p>7. Declarar las variables y los respetivos tipos de datos necesarios para</p><p>resolver el algoritmo.</p><p>8. Utilizar las estructuras de control correctas y las condiciones que</p><p>permitan resolver el algoritmo.</p><p>9. Iniciar los índices de la matriz en 0. Debe considerar que, al solicitarle</p><p>los números de filas y de columnas al usuario, las dará iniciando su</p><p>conteo en 1 (para el usuario inicia en 1 para el sistema en 0); por</p><p>ende, debe hacer las modificaciones necesarias para evitar errores.</p><p>10. Resolver todos los procesos por medio del uso de ciclos, y no por</p><p>medio de asignaciones manuales de las posiciones.</p><p>11. Desplegar la matriz en pantalla; no es necesario que se haga de</p><p>forma rectangular o cuadrada.</p><p>12. No incluir la instrucción Presione cualquier tecla para iniciar</p><p>el llenado de la matriz, pues no es necesaria.</p><p>13. Observar el ejemplo de la figura 4.195 acerca de cómo debe funcio-</p><p>nar el programa y los mensajes que se le deben emitir al usuario.</p><p>Ejemplo:</p><p>522</p><p>FIGURA 4.195. Ejemplo de salida del cálculo del promedio de una matriz e intercambio de los valo-</p><p>res entre dos de sus columnas</p><p>Ejercicio 8. Matriz diagonal, número mayor y número menor</p><p>Elabore un pseudocódigo empleando la sintaxis de PSeInt que resuelva</p><p>la siguiente situación:</p><p>1. Elaborar una matriz de 4 × 4 donde el usuario digite números de 0</p><p>a 60. Revise el siguiente ejemplo (figura 4.196):</p><p>40 3 27 9</p><p>29 51 60 13</p><p>2 28 6 14</p><p>8 0 27 37</p><p>FIGURA 4.196. Ejemplo de matriz llena con números en un rango de 0 a 60</p><p>523</p><p>2. Imprimir la diagonal de la matriz. Con base en el ejemplo anterior,</p><p>se imprimirían: 40, 51, 6 y 37 (figura 4.197).</p><p>40 3 27 9</p><p>29 51 60 13</p><p>2 28 6 14</p><p>8 0 27 37</p><p>FIGURA 4.197. Ejemplo de matriz con su diagonal principal resaltada</p><p>3. Sumar los valores de la diagonal y obtener el promedio, por ejem-</p><p>plo: “El valor de la diagonal es: 134 y el promedio</p><p>es: 33,5”</p><p>4. Mostrar el número mayor y el menor. En el ejemplo, estos corres-</p><p>ponderían a “El número mínimo es 0 y el mayor es 60”.</p><p>5. No emplear las matrices y los resultados así en el pseudocódigo,</p><p>pues son un ejemplo para su comprensión.</p><p>Tome en cuenta los siguientes puntos para la resolución del problema:</p><p>• Los valores deben ser ingresados por el usuario. Para ello, debe rea-</p><p>lizar un ciclo donde se lee el valor introducido por el usuario, y hasta</p><p>que digite un número entre 0 y 60, se puede pasar a la siguiente</p><p>posición de la matriz. Los valores colocados en el ejemplo no deben</p><p>asignarse manualmente.</p><p>• La matriz debe ser recorrida únicamente por medio de ciclos, tanto</p><p>para la asignación de valores como para los cálculos e impresión.</p><p>• Para calcular la diagonal, debe hacerlo por medio del uso de los ín-</p><p>dices del ciclo. No puede asignar las posiciones directamente para</p><p>mostrar la diagonal y calcular el promedio.</p><p>• El algoritmo debe funcionar para cualquier número; no debe efec-</p><p>tuar asignaciones de los índices o números con base en el ejemplo</p><p>anterior.</p><p>524</p><p>Ejercicio 9. Matriz, vector y números pares e impares en PSeInt</p><p>Elabore el programa en PSeInt del ejercicio 1 elaborado en DFD. Tome en</p><p>cuenta las mismas consideraciones que se especificaron para el diagrama.</p><p>Ejercicio 10. Vector y promedio</p><p>Elabore un diagrama de flujo empleando la simbología en DFD donde el</p><p>usuario:</p><p>1. Determine el tamaño del vector,</p><p>2. El contador del vector inicia en 1.</p><p>3. En el vector A, se almacenan los valores introducidos por el usuario.</p><p>4. Se calcula el promedio de todos los valores introducidos en el vec-</p><p>tor.</p><p>5. Se muestra el vector A. El promedio del vector solo se muestra una</p><p>vez, después de mostrar el vector resultante.</p><p>6. Debe emplear ciclos para resolver la asignación de valores al vector</p><p>y para mostrarlo.</p><p>Ejercicio 11. Matriz con intercambio de valores entre columnas y</p><p>promedio de fila</p><p>A continuación, se presenta un ejemplo de una matriz de 4 × 4 completada</p><p>en cada una de sus posiciones con números aleatorios.</p><p>3</p><p>[0,0]</p><p>2</p><p>[0,1]</p><p>6</p><p>[0,2]</p><p>3</p><p>[0,3]</p><p>9</p><p>[1,0]</p><p>4</p><p>[1,1]</p><p>12</p><p>[1,2]</p><p>5</p><p>[1,3]</p><p>15</p><p>[2,0]</p><p>6</p><p>[2,1]</p><p>18</p><p>[2,2]</p><p>7</p><p>[2,3]</p><p>21</p><p>[3,0]</p><p>8</p><p>[3,1]</p><p>24</p><p>[3,2]</p><p>9</p><p>[3,3]</p><p>FIGURA 4.198. Ejemplo de matriz llena con números aleatorios</p><p>525</p><p>Realice el pseudocódigo del algoritmo, empleando la sintaxis en PSeInt,</p><p>que permita resolver lo siguiente:</p><p>1. Solicitarle al usuario el tamaño de la matriz cuadrada, la cual puede</p><p>ser de cualquier tamaño, y complétela automáticamente con núme-</p><p>ros aleatorios del 0 al 30. Para ello, emplee la función Random(x).</p><p>2. Desplegar, por pantalla, la matriz resultante.</p><p>3. Mostrar el promedio de una fila que elija el usuario. Verbigracia, si</p><p>el usuario elige la fila 2 (marcada en gris en el ejemplo de la figura</p><p>4.198), el promedio daría 7.5. Debe validar que el número de fila</p><p>ingresada por el usuario esté en el rango correcto del tamaño de la</p><p>matriz. Entonces, si la matriz tiene 4 filas y el usuario desea el pro-</p><p>medio de la fila 5, se le debe indicar que el número digitado está</p><p>fuera del rango de filas. De igual forma si digita 0. Una vez que se</p><p>muestra este mensaje, se le debe solicitar el número de fila nueva-</p><p>mente; el proceso de error se repite hasta que el usuario digite un</p><p>número de fila correcto.</p><p>4. Intercambiar los valores de dos columnas. Se le debe solicitar al</p><p>usuario el número de dos columnas (asuma que siempre se digita-</p><p>rán números válidos) para que intercambien valores entre sí. Por</p><p>ejemplo, si el usuario digita 2 y 4, la matriz, luego del cambio, que-</p><p>daría así:</p><p>3 3 6 2</p><p>9 5 12 4</p><p>15 7 18 6</p><p>21 9 24 8</p><p>FIGURA 4.199. Ejemplo de matriz con cambio de valores entre dos de sus columnas</p><p>5. Mostrar la matriz modificada.</p><p>Nota</p><p>Los números entre corchetes representan la posición de la matriz. El</p><p>número en negrita es el valor almacenado en el arreglo.</p><p>526</p><p>6. Declarar las variables y sus respetivos tipos de datos necesarios para</p><p>resolver el problema. Utilice las estructuras de control correctas y</p><p>sus condiciones.</p><p>7. Iniciar en 0 los índices de la matriz.</p><p>8. Resolver todos los procesos por medio del uso de ciclos, y no por</p><p>medio de asignaciones manuales de las posiciones.</p><p>9. Tomar en cuenta el instrumento de evaluación para la programación</p><p>del pseudocódigo.</p><p>10. Observar el ejemplo de la figura 4.199 acerca de cómo debe funcio-</p><p>nar el programa y los mensajes que se le deben emitir al usuario.</p><p>FIGURA 4.200. Ejemplo de salida de matriz aleatoria, cálculo de su promedio y cambio de valores entre co-</p><p>lumnas</p><p>527</p><p>Ejercicio 12. Vector con números aleatorios múltiplos de 3</p><p>Se requiere una aplicación que controle que los números que se ingresan</p><p>a un vector sean números múltiplos de tres. Debe llenar un arreglo de 20</p><p>celdas con números aleatorios entre 15 y 75. Al final, debe mostrar el vec-</p><p>tor y el promedio de los números que contiene. Considere lo siguiente:</p><p>1. El índice del vector inicia en 0.</p><p>2. Para los números aleatorios, utilice la función Random.</p><p>3. Se deben generar números aleatorios hasta que el vector esté lleno</p><p>únicamente con números múltiplos de 3.</p><p>4. Utilice estructuras de repetición para todos los procesos que invo-</p><p>lucren al arreglo.</p><p>Ejercicio 13. Prácticas de multiplicación</p><p>Una escuela desea implementar un sistema automatizado de generación</p><p>de prácticas para multiplicaciones. Usted debe implementar un algoritmo</p><p>utilizando la nomenclatura de PSeInt para generar el sistema.</p><p>El sistema funcionará de la siguiente manera:</p><p>1. En un arreglo multidimensional de 3 × 5, se almacenarán los multi-</p><p>plicadores, pero de forma aleatoria y por niveles. Es decir, la primera</p><p>fila de la matriz tendrá números de tipo Entero del 10 al 99; la</p><p>segunda, números aleatorios en un rango de 100 al 999; y la ter-</p><p>cera, números aleatorios del 1000 al 9999, por ejemplo:</p><p>92 72 55 38 20</p><p>101 568 245 752 987</p><p>4573 3487 3901 1086 5739</p><p>FIGURA 4.201. Ejemplo de matriz llena con números para tablas de multiplicar</p><p>528</p><p>2. Una vez que se llena la matriz, se le debe preguntar al estudiante</p><p>qué nivel desea practicar. Utilice los siguientes mensajes:</p><p>Digite el nivel que desea practicar:</p><p>a) Nivel 1.</p><p>b) Nivel 2.</p><p>c) Nivel 3.</p><p>De acuerdo con el nivel seleccionado, se deben mostrar cinco mul-</p><p>tiplicaciones. Se muestra la primera y, hasta que se responda, se</p><p>muestra la segunda, y así sucesivamente hasta completar las cinco.</p><p>Se debe leer la respuesta del estudiante y se le debe indicar si acertó</p><p>o no. La multiplicación debe mostrarse de la siguiente forma:</p><p>Multiplique</p><p>12*92</p><p>Respuesta=</p><p>A la par del texto Respuesta se debe mostrar la respuesta que di-</p><p>gitó el estudiante. Además, el primer dígito de la multiplicación (en</p><p>el ejemplo, el 12) se debe generar, de forma aleatoria, en un rango</p><p>de 0 a 100.</p><p>3. Una vez que se hagan las cinco multiplicaciones, se debe mostrar un</p><p>informe con el siguiente formato y datos:</p><p>***** INFORME RENDIMIENTO*****</p><p>Cantidad de aciertos:</p><p>Cantidad de fallos:</p><p>Nota:</p><p>529</p><p>La nota debe calcularla por medio de regla de tres. Considere que si</p><p>el estudiante tiene cinco aciertos, tendrá un 10 de nota.</p><p>Este es un ejemplo de una ejecución del sistema:</p><p>FIGURA 4.202. Ejemplo de salida del algoritmo de tablas de multiplicar</p><p>En el ejemplo anterior, se está trabajando el nivel 1 y se muestra la primera</p><p>multiplicación respondida y en espera de responder la segunda. Note que</p><p>el multiplicador es el segundo número de la operación (ya sea 92 o 72). Si</p><p>la ejecución fuese en el nivel 2, ese número sería de 3 dígitos; y si fuese en</p><p>el nivel 3, sería de 4 dígitos.</p><p>Si tomamos la matriz de la figura 4.200 como ejemplo, el sistema mostrará</p><p>cinco multiplicaciones: la primera de un número (del 0 al 100) por 92; la</p><p>segunda de un número (0 al 100) por 72; la tercera de un número (0 al</p><p>100) por 55, luego otro número (0 al 100) por 38; y la quinta sería por un</p><p>número (del 0 al 100) por 20. En cada una, se debe indicar si se acertó o</p><p>se erró la respuesta. Utilice los siguientes mensajes según corresponda:</p><p>Muy bien, respuesta CORRECTA.</p><p>Lo siento, respuesta INCORRECTA.</p><p>530</p><p>Considere lo siguiente:</p><p>• Los índices de la matriz iniciarán en 0.</p><p>• Asuma que el usuario digitará correctamente alguna de las opciones</p><p>del nivel, por eso, no es necesario validar este dato.</p><p>• Una vez que se muestra el informe, finaliza el algoritmo. No es ne-</p><p>cesario consultar si desea practicar de nuevo.</p><p>• Debe utilizar ciclos para todos los procesos que involucren al arre-</p><p>glo.</p><p>• Los datos de los ejemplos son una guía, pero el sistema debe fun-</p><p>cionar con cualquier dato que esté entre los rangos solicitados.</p><p>• No se deben hacer asignaciones manuales para llenar la matriz.</p><p>• Para los números aleatorios, puede utilizar las funciones Azar(x)</p><p>o Aleatorio(A,B).</p><p>Ejercicio 14. Sumar posiciones en un vector</p><p>Se requiere una aplicación que sume los números en posiciones específicas</p><p>en un vector. Debe llenar un arreglo con números aleatorios del 0 al 500;</p><p>el tamaño del vector será dado por el usuario. Al final, debe mostrar todos</p><p>los elementos del arreglo y la suma de los números ubicados en las posi-</p><p>ciones pares del vector.</p><p>1. Llenar el vector de forma que se asigne un número en la primera</p><p>posición; y, luego, otro número en la última posición. Posterior-</p><p>mente, se asigna un número en la segunda posición; y, luego, otro</p><p>en la penúltima posición. Esto se repite hasta que el arreglo esté</p><p>completamente lleno. Analice el ejemplo que se muestra en la figura</p><p>4.203:</p><p>531</p><p>FIGURA 4.203. Ejemplo de llenado de vector de los extremos hacia su centro</p><p>2. En cuanto a la sumatoria de los números en las posiciones pares, si</p><p>tomamos el ejemplo anterior, sumar: 25+278+20=323.</p><p>3. Analizar si la dimensión del arreglo es par o impar para el proceso</p><p>de llenado:</p><p>Arreglo de dimensión par: por ejemplo, en un vector de cuatro cel-</p><p>das, se debe llegar hasta las posiciones 1 y 2. Esto varía de acuerdo</p><p>con la dimensión, pero el proceso lógico debe ser funcional para</p><p>cualquier dimensión par:</p><p>## ## ## ##</p><p>FIGURA 4.204. Ejemplo del orden en llenado de vector con dimensión par</p><p>Primero, se asigna un número en la posición 0:</p><p>25</p><p>Luego, otro en la posición 4:</p><p>25 20</p><p>Después, un número en la posición 1:</p><p>25 456 20</p><p>Seguidamente, otro en la posición 3:</p><p>25 456 387 20</p><p>La última posición en llenarse será la 2:</p><p>25 456 278 387 20</p><p>532</p><p>Arreglo de dimensión impar: por ejemplo, en un vector de cinco cel-</p><p>das, se debe llegar hasta la posición 2. Esto varía de acuerdo con la</p><p>dimensión, pero el proceso lógico debe ser funcional para cualquier</p><p>dimensión impar:</p><p>## ## ## ## ##</p><p>FIGURA 4.205. Ejemplo del orden en llenado de vector con dimensión impar</p><p>Considere lo siguiente:</p><p>• El índice del vector inicia en 0.</p><p>• Para los números aleatorios, utilice la función Random.</p><p>• El proceso de llenado lo debe hacer en un solo ciclo.</p><p>• Debe considerar si la dimensión del arreglo es par o impar para que</p><p>se llene de forma correcta.</p><p>• Utilice estructuras de repetición para todos los procesos que invo-</p><p>lucren al arreglo.</p><p>• Los números que aparecen en las explicaciones son de ejemplo. El</p><p>algoritmo debe funcionar con cualquier número que esté en el</p><p>rango especificado y con la dimensión que determine el usuario.</p><p>Ejercicio 15. Ordenamiento de números positivos y negativos</p><p>Si desea implementar un sistema automatizado de ordenamiento de nú-</p><p>meros positivos y negativos, debe implementar un algoritmo utilizando la</p><p>nomenclatura de PSeInt para integrarlo al sistema.</p><p>El sistema funcionará de la siguiente manera:</p><p>1. En un arreglo multidimensional cuadrado (N × N), cuyo tamaño será</p><p>definido por el usuario, almacenar números positivos y negativos de</p><p>forma aleatoria y en rango de 1 a 9.</p><p>533</p><p>2. La diagonal principal de la matriz debe contener 0. En la parte su-</p><p>perior de la diagonal, debe haber únicamente números positivos y,</p><p>en la parte inferior de la diagonal, solo se deben almacenar números</p><p>negativos.</p><p>3. Una vez lleno el arreglo, mostrar en pantalla.</p><p>4. Un ejemplo de cómo debe funcionar el sistema y cómo debe quedar</p><p>la matriz final es el siguiente (figura 4.206):</p><p>FIGURA 4.206. Ejemplo de salida de matriz con ordenamiento</p><p>de números positivos y negativos</p><p>Considere lo siguiente:</p><p>• Los índices de la matriz iniciarán en 0.</p><p>• La diagonal que se trabajará será la que va de izquierda a derecha y</p><p>de arriba hacia abajo.</p><p>• Asuma que el usuario digitará un tamaño de arreglo válido. Este</p><p>dato no es necesario validarlo.</p><p>• El arreglo tiene la misma cantidad de filas que de columnas. Consi-</p><p>dere este detalle al momento de solicitar el tamaño.</p><p>• Debe utilizar ciclos para todos los procesos que involucren al arre-</p><p>glo.</p><p>534</p><p>• Los datos de los ejemplos son una guía, pero el sistema debe fun-</p><p>cionar con cualquier dato que esté entre los rangos solicitados.</p><p>• No se deben hacer asignaciones manuales para llenar la matriz.</p><p>• Para los números aleatorios, tanto positivos como negativos, puede</p><p>utilizar las funciones Azar(x) o Aleatorio(A,B).</p><p>Ejercicio 16. Suma de vectores y promedio</p><p>Desarrolle un diagrama de flujo empleando la simbología de DFD, donde</p><p>se lea los valores de dos vectores A y B, y almacene la sumatoria</p><p>de ambos</p><p>en el vector C, e imprima:</p><p>1. El resultado de cada celda (índice) de los tres vectores.</p><p>2. Un mensaje final que brinde la sumatoria y promedio final del vec-</p><p>tor C.</p><p>Considere los siguientes detalles:</p><p>• Asuma que los vectores tienen una dimensión de 35.</p><p>• Debe emplear ciclos para la gestión de los vectores.</p><p>• No se permite la asignación manual de ninguno de los elementos.</p><p>• Inicie los índices en 0.</p><p>Observe el ejemplo de la figura 4.207, de tres vectores:</p><p>Vector A:</p><p>5</p><p>[0]</p><p>3</p><p>[1]</p><p>7</p><p>[2]</p><p>9</p><p>[3]</p><p>10</p><p>[4]</p><p>… N</p><p>[34]</p><p>Vector B:</p><p>3</p><p>[0]</p><p>1</p><p>[1]</p><p>2</p><p>[2]</p><p>0</p><p>[3]</p><p>4</p><p>[4]</p><p>… N</p><p>[34]</p><p>535</p><p>FIGURA 4.207. Ejemplo de vectores A y B llenos con números de tipo</p><p>Entero y sumatoria en un vector C</p><p>La figura 4.208 muestra un ejemplo del mensaje que se debe mostrar, to-</p><p>mando los valores del vector C de la figura 4.207 y utilizando los primeros</p><p>cinco índices (observe que el algoritmo solicita 35 valores):</p><p>FIGURA 4.208. Ejemplo de salida de la sumatoria y promedio de un vector</p><p>Vector C:</p><p>8</p><p>[0]</p><p>4</p><p>[1]</p><p>9</p><p>[2]</p><p>9</p><p>[3]</p><p>14</p><p>[4]</p><p>… N</p><p>[34]</p><p>536</p><p>4.7 Respuesta a los ejercicios de autoevaluación</p><p>En este apartado, encontrará las respuestas de los ejercicios de autoeva-</p><p>luación. Recuerde que el propósito de estos ejercicios es que usted evalúe</p><p>su aprendizaje; por lo tanto, se le recomienda no revisarlo hasta no haber</p><p>respondido los ejercicios propuestos con el conocimiento adquirido en su</p><p>estudio previo.</p><p>Respuesta a los ejercicios con la función Azar o Random</p><p>Realice las siguientes funciones Azar(); de acuerdo con el rango dado,</p><p>por ejemplo:</p><p>➢ Rango: 0-20.</p><p>➢ Función: Azar(21);</p><p>Respuestas</p><p>1. Rango: 2-15.</p><p>Función: Azar(14)+2;</p><p>2. Rango: 0-101.</p><p>Función: Azar(102);</p><p>3. Rango: 10-99.</p><p>Función: Azar(90)+10;</p><p>4. Rango: 200-506.</p><p>Función: Azar(307)+200;</p><p>5. Rango: 4-22.</p><p>Función: Azar(19)+4;</p><p>537</p><p>4.7.1 Respuesta a los ejercicios de dimensionamiento con vectores y</p><p>matrices</p><p>Ejercicio 1. Declare y dimensione los vectores y matrices especificados.</p><p>Considere el tipo de dato y tamaño.</p><p>1. Un vector de nueve posiciones que almacena salarios de los funcio-</p><p>narios de un banco.</p><p>Declaración: Definir SalariosFuncionarios Como</p><p>Real;</p><p>Dimensión: Dimension SalariosFunciona-</p><p>rios(9);</p><p>2. Un arreglo unidimensional de seis celdas que almacena la cantidad</p><p>de estudiantes de cada nivel de una escuela primaria.</p><p>Declaración: Definir CantidadEstudiantes Como</p><p>Entero;</p><p>Dimensión: Dimension CantidadEstudiantes (6);</p><p>3. Un vector de 25 posiciones que almacena los nombres de los em-</p><p>pleados de una fábrica.</p><p>Declaración: Definir NombreEmpleados Como</p><p>Caracter;</p><p>Dimensión: Dimension NombreEmpleados (25);</p><p>538</p><p>4. Un vector de cinco posiciones que almacena si un personaje está</p><p>dañado o no (datos de falso o verdadero) para un juego.</p><p>Declaración: Definir PersonajeDaniado Como</p><p>Logico;</p><p>Dimensión: Dimension PersonajeDaniado(5);</p><p>5. Un arreglo unidimensional de 2500 celdas que almacena los prome-</p><p>dios ponderados y los estudiantes de un colegio.</p><p>Declaración: Definir PromediosPonderados Como</p><p>Real;</p><p>Dimensión: Dimension PromediosPonderados</p><p>(2500);</p><p>6. Una matriz de 50 posiciones (10 filas 5 columnas) que almacena me-</p><p>diante una marca (S o N) los días que tienen teletrabajo 10 funcio-</p><p>narios de un banco.</p><p>Declaración: Definir DiasTeletrabajo Como</p><p>Caracter;</p><p>Dimensión: Dimension DiasTeletrabajo(10,5);</p><p>7. Un arreglo multidimensional cuadrado de 10 filas que almacena el</p><p>peso de los pacientes de un hospital.</p><p>Declaración: Definir PesosPacientes Como Real;</p><p>539</p><p>Dimensión: Dimension PesosPacientes(10,10);</p><p>8. Una matriz de 20 posiciones que almacena los nombres de los em-</p><p>pleados de una fábrica, organizados por 5 columnas que represen-</p><p>tan las áreas para las que laboran.</p><p>Declaración: Definir NombresEmpleados Como</p><p>Carácter;</p><p>Dimensión: Dimension NombresEmpleados (4,5);</p><p>9. Una matriz de 6 posiciones (2 columnas) que almacena datos de</p><p>Falso o Verdadero.</p><p>Declaración: Definir DatosBooleanos Como Logico;</p><p>Dimensión: Dimension DatosBooleanos(3,2);</p><p>10. Arreglo multidimensional cuadrado de 10 000 celdas que almacena</p><p>temperaturas en centígrados para un proyecto de investigación.</p><p>Declaración: Definir Temperaturas Como Real;</p><p>Dimensión: Dimension Temperaturas (100,100);</p><p>540</p><p>4.7.2 Respuesta a los ejercicios de desarrollo</p><p>Ejercicio 1. Matriz, vector y números pares e impares</p><p>FIGURA 4.209. (a) Solución propuesta del ejercicio 1: Matriz, vector y números pares e impares</p><p>541</p><p>FIGURA 4.210. (b) Solución propuesta del ejercicio 1: Matriz, vector y números pares e impares</p><p>542</p><p>Ejercicio 2. Resta de matrices</p><p>FIGURA 4.211. Solución propuesta del ejercicio 2: Resta de matrices</p><p>543</p><p>Ejercicio 3. Diagonal de una matriz</p><p>FIGURA 4.212. Solución propuesta del ejercicio 3: Diagonal de una matriz</p><p>544</p><p>Ejercicio 4. Llenado de matriz, suma, promedio y búsqueda de</p><p>número</p><p>FIGURA 4.213. Solución propuesta del ejercicio 4: Llenado de matriz, suma, promedio y buscar número</p><p>545</p><p>Ejercicio 5. Matriz llenada por columnas con números impares</p><p>FIGURA 4.214. Solución propuesta del ejercicio 5: Matriz llenada por columnas con números impares</p><p>546</p><p>Ejercicio 6. Matriz factorial por columnas</p><p>FIGURA 4.215. Solución propuesta del ejercicio 6: Matriz factorial por columnas</p><p>547</p><p>Ejercicio 7. Matriz números aleatorios, promedio fila e</p><p>intercambio de columnas</p><p>548</p><p>FIGURA 4.216. Solución propuesta del ejercicio 7: Matriz números aleatorios, promedio fila e intercambiar</p><p>columnas</p><p>549</p><p>Ejercicio 8. Matriz diagonal, número mayor y número menor</p><p>FIGURA 4.217. Solución propuesta del ejercicio 8: Matriz diagonal, número mayor y número menor</p><p>550</p><p>Ejercicio 9. Matriz, vector y números pares e impares en PSeInt</p><p>551</p><p>FIGURA 4.218. Solución propuesta del ejercicio 9: Matriz, vector y números pares e impares en PSeInt</p><p>552</p><p>Ejercicio 10. Vector y promedio</p><p>FIGURA 4.219. Solución propuesta del ejercicio 10: Vector y promedio</p><p>553</p><p>Ejercicio 11. Matriz con intercambio de valores entre columnas y</p><p>promedio de fila</p><p>554</p><p>FIGURA 4.220. Solución propuesta del ejercicio 11: Matriz con intercambio de valores entre columnas y promedio de fila</p><p>555</p><p>Ejercicio 12. Vector con números aleatorios múltiplos de 3</p><p>FIGURA 4.221. Solución propuesta del ejercicio 12: Vector con números aleatorios múltiplos de 3</p><p>556</p><p>Ejercicio 13. Prácticas de multiplicación</p><p>557</p><p>558</p><p>FIGURA 4.222. Solución propuesta del ejercicio 13: Prácticas de multiplicación</p><p>559</p><p>Ejercicio 14. Sumar posiciones en un vector</p><p>FIGURA 4.223. Solución propuesta del ejercicio 14: Sumar posiciones en un vector</p><p>560</p><p>Ejercicio 15. Ordenamiento de números positivos y negativos</p><p>FIGURA 4.224. Solución propuesta del ejercicio 15: Ordenamiento de números positivos y negativos</p><p>561</p><p>Ejercicio 16. Suma de vectores y promedio</p><p>FIGURA 4.225. Solución propuesta del ejercicio 16: Suma de vectores y promedio</p><p>562</p><p>4.8 Glosario de términos</p><p>arreglo: estructura de datos que permite almacenar varios elemen-</p><p>tos de un mismo tipo.</p><p>columna: en vectores y matrices, posiciones verticales que conten-</p><p>drán la información del arreglo. La figura 4.226 muestra la</p><p>representación visual de una columna:</p><p>FIGURA 4.226. Indicación visual de las columnas de una matriz</p><p>dato: contenido de un solo tipo que se almacena en un arreglo y</p><p>que se accede a él mediante el nombre del vector (V) y el</p><p>índice ([x]) de la celda. La representación visual de un dato</p><p>sería los números que se encuentran en el arreglo (figura</p><p>4.227).</p><p>70 95 80 72</p><p>V[1] V[2] V[3] V[4]</p><p>FIGURA 4.227. Representación visual de los datos en las celdas de un vector</p><p>fila: en vectores y matrices, posiciones</p><p>horizontales que conten-</p><p>drán la información del arreglo. La figura 4.228 muestra la</p><p>representación visual de una fila:</p><p>563</p><p>FIGURA 4.228. Indicación visual de las filas de una matriz</p><p>índice: permite acceder al contenido de un arreglo mediante un</p><p>número que especifica la posición del elemento. La figura</p><p>4.229 muestra la representación visual de un índice:</p><p>70 95 80 72</p><p>V[1] V[2] V[3] V[4]</p><p>FIGURA 4.229. Indicación visual del índice en un vector</p><p>eficaz: resolución de un algoritmo, pero sin la optimización de va-</p><p>riables, contantes, procesos e instrucciones.</p><p>matriz: arreglo multidimensional con una finita cantidad de posi-</p><p>ciones con filas y columnas, donde se almacena la informa-</p><p>ción de un solo tipo de datos (numéricos, alfanuméricos,</p><p>booleanos, pero no una combinación de estos). La figura</p><p>4.230 muestra la representación visual de una matriz:</p><p>FIGURA 4.230. Indicación visual de una matriz</p><p>Nombre</p><p>del arreglo</p><p>los arreglos unidimensionales o multidimensionales po-</p><p>seen un nombre donde se almacena la información de un</p><p>solo tipo de datos (numéricos, alfanuméricos, booleanos,</p><p>pero no una combinación de estos). Al escribir el nombre e</p><p>564</p><p>índice, se puede agregar, modificar o eliminar los datos del</p><p>arreglo, ya sea un vector o matriz. Representación visual del</p><p>nombre del arreglo:</p><p>70 95 80 72</p><p>V[1] V[2] V[3] V[4]</p><p>La V representa el nombre del arreglo</p><p>FIGURA 4.231. Indicación visual del nombre de un vector</p><p>vector: arreglo unidimensional con una finita cantidad de posicio-</p><p>nes en una fila, donde se almacena la información de un</p><p>solo tipo de datos (numéricos, alfanuméricos, booleanos,</p><p>pero no una combinación de estos). La figura 4.232 muestra</p><p>la representación visual de un vector:</p><p>FIGURA 4.232. Indicación visual de un vector</p><p>352</p><p>FIGURA 4.5. Vector de 6 posiciones (celdas) con el tipo de cambio del dólar</p><p>durante 6 días y el índice inicia en 0 .................................................................... 352</p><p>FIGURA 4.6. Vector de 6 posiciones (celdas) con el tipo de cambio del dólar</p><p>durante 6 días y el índice inicia en 0 .................................................................... 352</p><p>FIGURA 4.7. Vector de 4 posiciones (celdas) con el estado civil de personas y</p><p>el índice inicia en 0 ...................................................................................................... 352</p><p>xxii</p><p>FIGURA 4.8. Vector Invitados con datos de 7 personas ............................. 353</p><p>FIGURA 4.9. Declaración de un vector de tipo Entero en PSeInt ........... 354</p><p>FIGURA 4.10. Declaración de un vector de tipo Entero en PSeInt ......... 355</p><p>FIGURA 4.11. Declaración de un vector de tipo Entero en DFD ................. 355</p><p>FIGURA 4.12. Tamaño del vector dado por el usuario en PSeInt .............. 356</p><p>FIGURA 4.13. Tamaño del vector dado por el usuario en DFD ...................... 357</p><p>FIGURA 4.14. Vector de 5 posiciones (celdas)...................................................... 359</p><p>FIGURA 4.15. Vector de 10 posiciones con el índice que inicia en 0 .......... 359</p><p>FIGURA 4.16. Vector de 10 posiciones con el índice que inicia en 1 ........... 359</p><p>FIGURA 4.17. Fragmento del pseudocódigo que asigna el valor 0 a todas las</p><p>celdas ............................................................................................................................... 360</p><p>FIGURA 4.18. Vector de 5 posiciones con contenido 0 .................................... 360</p><p>FIGURA 4.19. Fragmento del pseudocódigo que asigna el valor 9 a todas las</p><p>celdas de un vector de 5 posiciones ..................................................................... 361</p><p>FIGURA 4.20. Pseudocódigo con el llenado del número 9 a todas las celdas</p><p>de un vector de dimensión 5 ................................................................................... 362</p><p>FIGURA 4.21. Diagrama de flujo para llenar un vector de 5 posiciones ..... 363</p><p>FIGURA 4.22. Pseudocódigo que solicita al usuario los datos del contenido</p><p>del arreglo ...................................................................................................................... 364</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193930</p><p>xxiii</p><p>FIGURA 4.23. Llenado de un vector con la información del usuario ........... 364</p><p>FIGURA 4.24. Pantalla con la ejecución del programa anterior ..................... 365</p><p>FIGURA 4.25. Diagrama de flujo para cargar un vector con los datos del</p><p>usuario y modificarlo .................................................................................................. 365</p><p>FIGURA 4.26. Pseudocódigo con el llenado de un vector de 5 posiciones con</p><p>elementos de texto digitado por el usuario....................................................... 366</p><p>FIGURA 4.27. Ejecución del pseudocódigo con el llenado de un vector con</p><p>elementos de texto ..................................................................................................... 367</p><p>FIGURA 4.28. Pseudocódigo para el llenado de un vector de forma aleatoria</p><p>............................................................................................................................................ 368</p><p>FIGURA 4.29. Diagrama de flujo para el llenado de un vector de forma</p><p>aleatoria ........................................................................................................................... 368</p><p>FIGURA 4.30. Pseudocódigo con llenado de valores aleatorios del 50 al 100</p><p>............................................................................................................................................ 369</p><p>FIGURA 4.31. Pseudocódigo que muestra en pantalla el contenido de un</p><p>vector................................................................................................................................ 370</p><p>FIGURA 4.33. Ejecución del programa para mostrar en una sola línea, los</p><p>datos digitados por el usuario ................................................................................ 371</p><p>FIGURA 4.32. Programa para cargar y mostrar un vector con datos de tipo</p><p>Cadena ............................................................................................................................ 371</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193948</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193948</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193951</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193951</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193952</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193952</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193952</p><p>xxiv</p><p>FIGURA 4.34. Programa para mostrar en una sola línea, los datos digitados</p><p>por el usuario ................................................................................................................ 372</p><p>FIGURA 4.35. Ejecución del programa para mostrar en una sola línea, los</p><p>datos digitados por el usuario ................................................................................ 373</p><p>FIGURA 4.36. Pseudocódigo incrementa en el contenido de una celda de un</p><p>vector ............................................................................................................................... 374</p><p>FIGURA 4.37. Pseudocódigo para modificar los valores de vector .............. 374</p><p>FIGURA 4.38. Pantalla con la ejecución del programa anterior ..................... 375</p><p>FIGURA 4.39. Detalle de las instrucciones del diagrama de flujo ................. 376</p><p>FIGURA 4.40. Parte 1 de 2 pseudocódigo que llena un vector de 50</p><p>posiciones con números aleatorios entre 1 y 75 ............................................. 377</p><p>FIGURA 4.41. Parte 2 de 2 pseudocódigo que determina la cantidad de</p><p>números pares, impares, múltiplos de 3 y múltiplos de 5 que hay en un</p><p>vector de 50 posiciones con números entre 1 y 75 llenado al azar .......... 378</p><p>FIGURA 4.42. Parte 1 de 3 diagrama que llena un vector de 50 posiciones</p><p>con números entre 1 y 75, y determina la cantidad de números pares,</p><p>impares, múltiplos de 3 y múltiplos de 5 que hay en este ........................... 379</p><p>FIGURA 4.43. Parte 2 de 3 diagrama que llena un vector de 50 posiciones</p><p>con números entre 1 y 75, y determina la cantidad de números pares,</p><p>impares, múltiplos de 3 y múltiplos de 5 que hay en este ........................... 380</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193953</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193953</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193954</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193954</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193957</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193959</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193959</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193960</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193960</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193960</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193961</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193961</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193961</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193962</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193962</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193962</p><p>xxv</p><p>FIGURA 4.44. Parte 3 de 3 diagrama que llena un vector de 50 posiciones</p><p>con números entre 1 y 75, y determina la cantidad de números pares,</p><p>impares, múltiplos de 3 y múltiplos de 5 que hay en este ........................... 381</p><p>FIGURA 4.45. Pseudocódigo de declaración de variables, dimensionamiento</p><p>de vectores e inicialización, para el programa de registro de información de</p><p>atletas en lanzamiento del martillo ....................................................................... 384</p><p>FIGURA 4.46. Pseudocódigo de declaración de variables, dimensionamiento</p><p>de vectores e inicialización, para el programa de registro de información de</p><p>atletas en lanzamiento del martillo ....................................................................... 385</p><p>FIGURA 4.47. Pseudocódigo que muestra la forma como se construye el</p><p>menú y se lee la opción seleccionada por el usuario en la variable</p><p>OpcionMenu ................................................................................................................. 386</p><p>FIGURA 4.48. Pseudocódigo que muestra las acciones por realizar cuando se</p><p>elige la opción 1 del menú: Atleta con la distancia más baja</p><p>............................................................................................................................................ 388</p><p>FIGURA 4.49. Pseudocódigo que muestra la acciones a realizar cuando se</p><p>elige la opción 2 del menú: Atleta con la distancia más alta</p><p>............................................................................................................................................ 390</p><p>FIGURA 4.50. Pseudocódigo que muestra las acciones por realizar cuando se</p><p>elige la opción 3 del menú: Promedio de distancias ...................... 391</p><p>FIGURA 4.51. Pseudocódigo que muestra las acciones por realizar cuando</p><p>se elige la opción 4 del menú: Modificar datos ...................................... 393</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193963</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193963</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193963</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193964</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193964</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193964</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193965</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193965</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193965</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193966</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193966</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193966</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193966</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193967</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193967</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193967</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193968</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193968</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193968</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193969</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193969</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193970</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193970</p><p>xxvi</p><p>FIGURA 4.52. Pseudocódigo que muestra la acciones por realizar cuando se</p><p>elige la opción 5 del menú: Salir ....................................................................... 394</p><p>FIGURA 4.53. Pseudocódigo que muestra las acciones iniciales del programa,</p><p>inicialización y validación de variables y el vector ........................................... 396</p><p>FIGURA 4.54. Pseudocódigo que despliega el menú de opciones y valida la</p><p>selección del usuario .................................................................................................. 397</p><p>FIGURA 4.55. Pseudocódigo para llenar el arreglo VectorNumeros,</p><p>correspondiente a la opción 1 del menú ............................................................ 398</p><p>FIGURA 4.56. Pseudocódigo para ordenar el arreglo VectorNumeros,</p><p>correspondiente a la opción 2 del menú ............................................................ 400</p><p>FIGURA 4.57. Pseudocódigo para comparar el vector ...................................... 401</p><p>FIGURA 4.58. Vector lleno de números reales de ejemplo ............................. 401</p><p>FIGURA 4.59. Vector lleno de números reales de ejemplo e indicación de los</p><p>índices de las celdas ................................................................................................... 402</p><p>FIGURA 4.60. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 1 del Para externo y 1 del Para interno ........................................... 403</p><p>FIGURA 4.61. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 1 del Para externo y 2 del Para interno ....................................... 405</p><p>FIGURA 4.62. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 1 del Para externo y 3 del Para interno ....................................... 406</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193971</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193971</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193972</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193972</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193973</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193973</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193974</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193974</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193975</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193975</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193976</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193981</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75193981</p><p>xxvii</p><p>FIGURA 4.63. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 1 del Para externo y 4 del Para interno ....................................... 407</p><p>FIGURA 4.64. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 1 del Para externo y 5 del Para interno ....................................... 408</p><p>FIGURA 4.65. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 2 del Para externo y 1 del Para interno ....................................... 409</p><p>FIGURA 4.66. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 3 del Para externo y 1 del Para interno ....................................... 410</p><p>FIGURA 4.67. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 4 del Para externo y 1 del Para interno ....................................... 411</p><p>FIGURA 4.68. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 4 del Para externo y 2 del Para interno ....................................... 412</p><p>FIGURA 4.69. Pseudocódigo para comparar contenidos del mismo vector,</p><p>ejecución 5 del Para externo y 1 del Para interno ....................................... 413</p><p>FIGURA 4.70. Pseudocódigo que despliega el vector ordenado en la pantalla</p><p>............................................................................................................................................ 414</p><p>FIGURA 4.71. Pseudocódigo que invierte el orden de un vector y termina la</p><p>ejecución , opción 3 y 4 del menú ........................................................................ 415</p><p>FIGURA 4.72. Pseudocódigo para comparar invertir los valores del arreglo</p><p>............................................................................................................................................ 416</p><p>FIGURA 4.73. Ejemplo de vector de 6 posiciones, lleno con número de tipo</p><p>Real ................................................................................................................................. 416</p><p>xxviii</p><p>FIGURA 4.74. Muestra del intercambio de los datos de las celdas 0 y 5 de un</p><p>vector de tamaño par ................................................................................................. 417</p><p>FIGURA 4.75. Muestra del intercambio de los datos de las celdas 1 y 4 de un</p><p>vector de tamaño par ................................................................................................. 417</p><p>FIGURA 4.76. Muestra del intercambio de los datos de las celdas 2 y 3 de un</p><p>vector de tamaño par ................................................................................................. 417</p><p>FIGURA 4.77. Muestra del intercambio de los datos de las celdas 0 y 4 de un</p><p>vector de tamaño impar ............................................................................................ 418</p><p>FIGURA 4.78. Muestra del intercambio de los datos de las celdas 1 y 3 de un</p><p>vector de tamaño impar ............................................................................................ 418</p><p>FIGURA 4.79. Muestra del intercambio de los datos de las celdas 2 y 2 de un</p><p>vector de tamaño impar ............................................................................................ 418</p><p>FIGURA 4.80. Ejemplo de un vector de tamaño seis y lleno con números de</p><p>tipo Real ........................................................................................................................ 419</p><p>FIGURA 4.81. Pseudocódigo para invertir los valores del arreglo (ejecución 1</p><p>de 3) .................................................................................................................................. 419</p><p>FIGURA 4.82. Pseudocódigo para invertir los valores del arreglo (ejecución 2</p><p>de 3) .................................................................................................................................. 420</p><p>FIGURA 4.83. Pseudocódigo para invertir los valores del arreglo (ejecución 3</p><p>de 3) .................................................................................................................................. 421</p><p>FIGURA 4.84. Vector original ...................................................................................... 422</p><p>xxix</p><p>FIGURA 4.85. Vector invertido ................................................................................... 422</p><p>FIGURA 4.86. Pseudocódigo que muestra en pantalla el resultado de invertir</p><p>un vector ......................................................................................................................... 423</p><p>FIGURA 4.87. Ejemplo de un vector palíndromo, con la palabra RADAR .. 424</p><p>FIGURA 4.88. Ejemplo de un vector palíndromo, con la palabra ALLÁ ...... 424</p><p>FIGURA 4.89. Pseudocódigo del palíndromo con inicialización de variables</p><p>............................................................................................................................................ 424</p><p>FIGURA 4.90. Pseudocódigo del palíndromo para cargar el vector con las</p><p>letras ................................................................................................................................. 425</p><p>FIGURA 4.91. Pseudocódigo para determinar la mitad del vector ............... 426</p><p>FIGURA 4.92. Ejemplo de un vector palíndromo, con la palabra RADAR,</p><p>indicación de sus índices y de tamaño impar ................................................... 427</p><p>FIGURA 4.93. Ejemplo de un vector palíndromo, con la palabra ALLA,</p><p>indicación de sus índices y comparación hasta el índice 2 .......................... 427</p><p>FIGURA 4.94. Ejemplo de un vector palíndromo, con la palabra ALLA,</p><p>indicación de sus índices y comparación hasta el índice 1 .......................... 428</p><p>FIGURA 4.95. Pseudocódigo para determinar si el arreglo es palíndromo428</p><p>FIGURA 4.96. Ejemplo de un vector palíndromo, con la palabra ALLA,</p><p>indicación de sus índices y comparación entre el contenido de las celdas 1</p><p>y 2 ...................................................................................................................................... 429</p><p>xxx</p><p>FIGURA 4.97. Ejemplo de un vector palíndromo, con la palabra RADAR,</p><p>indicación de sus índices y comparación entre el contenido de la celda 2</p><p>con ella misma .............................................................................................................. 430</p><p>FIGURA 4.98. Ejemplos de los vectores del juego y del jugador con valores</p><p>iguales entre sí y en el mismo orden .................................................................... 431</p><p>FIGURA 4.99. Ejemplos de los vectores del juego y del jugador con valores</p><p>iguales, pero diferente orden entre sí .................................................................. 432</p><p>FIGURA 4.100. Ejemplos de los vectores del juego y del jugador con valores</p><p>iguales, pero con solo tres números en el mismo orden .............................. 432</p><p>FIGURA 4.101. Ejemplos de los vectores del juego y del jugador con valores</p><p>iguales, pero con solo dos números en el mismo orden .............................. 433</p><p>FIGURA 4.102. Salida a pantalla del programa .................................................... 433</p><p>FIGURA 4.103. Diagrama de flujo para el programa de lotería ..................... 435</p><p>FIGURA 4.104. Matriz de 10 celdas o posiciones, con 2 filas y 5 columnas</p><p>............................................................................................................................................</p><p>436</p><p>FIGURA 4.105. Identificación de filas y de columnas en una matriz ............ 437</p><p>FIGURA 4.106. Matriz de 2 filas y 12 columnas con los montos de los recibos</p><p>............................................................................................................................................ 438</p><p>FIGURA 4.107. Matriz de Recibos con los montos organizados por meses</p><p>............................................................................................................................................ 438</p><p>FIGURA 4.108. Declaración de dos matrices de diferentes dimensiones ... 441</p><p>xxxi</p><p>FIGURA 4.109. Pseudocódigo que define una matriz cuadrada de tamaño</p><p>dado por el usuario ..................................................................................................... 442</p><p>FIGURA 4.110. Pseudocódigo que define una matriz rectangular de tamaño</p><p>dado por el usuario ..................................................................................................... 442</p><p>FIGURA 4.111. Matriz de 12 celdas (3 filas y 4 columnas) ............................... 443</p><p>FIGURA 4.112. Pseudocódigo que representa la ejecución de ciclos Para</p><p>anidados .......................................................................................................................... 445</p><p>FIGURA 4.113. Salida en pantalla que genera el pseudocódigo de ejecución</p><p>de los Para anidados ................................................................................................ 445</p><p>FIGURA 4.114. Secuencia de llenado de una matriz por filas ......................... 446</p><p>FIGURA 4.115. Pseudocódigo de llenado de una matriz 3 × 4, por filas .... 447</p><p>FIGURA 4.116. Asignación de valor 0 al campo Matriz(0,0) con base en</p><p>el código de la figura 4.115 ..................................................................................... 448</p><p>FIGURA 4.117. Asignación de valor 0 al campo Matriz(0,1) con base en</p><p>el código de la figura 4.115 ..................................................................................... 448</p><p>Figura 4.118. Asignación de valor 0 al campo Matriz(0,2) con base en</p><p>el código de la figura 4.115 ..................................................................................... 449</p><p>FIGURA 4.119. Asignación de valor 0 al campo Matriz(0,3) con base en el</p><p>código de la figura 4.115 .......................................................................................... 449</p><p>FIGURA 4.120. Asignación de valor 0 al campo Matriz(1,0) con base en</p><p>el código de la figura 4.115 ..................................................................................... 450</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75194032</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75194032</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75194033</p><p>xxxii</p><p>FIGURA 4.121. Asignación de valor 0 al campo Matriz(1,1) con base en</p><p>el código de la figura 4.115 ..................................................................................... 450</p><p>FIGURA 4.122. Asignación de valor 0 al campo Matriz(1,2) con base en el</p><p>código de la figura 4.115 .......................................................................................... 450</p><p>FIGURA 4.123. Asignación de valor 0 al campo Matriz(1,3) con base en</p><p>el código de la figura 4.115 ..................................................................................... 450</p><p>FIGURA 4.124. Asignación de valor 0 al campo Matriz(2,0) con base en</p><p>el código de la figura 4.115 ..................................................................................... 451</p><p>FIGURA 4.125. Asignación de valor 0 al campo Matriz(2,1) con base en</p><p>el código de la figura 4.115 ..................................................................................... 451</p><p>FIGURA 4.126. Asignación de valor 0 al campo Matriz(2,2) con base en</p><p>el código de la figura 4.115 ..................................................................................... 451</p><p>FIGURA 4.127. Asignación de valor 0 al campo Matriz(2,3) con base en</p><p>el código de la figura 4.115 ..................................................................................... 452</p><p>FIGURA 4.128. Orden de ejecución del ciclo de la figura 4.115 .................... 452</p><p>FIGURA 4.129. Pseudocódigo que muestra el contenido de una matriz en</p><p>pantalla ............................................................................................................................ 453</p><p>FIGURA 4.130. Pseudocódigo que llena y muestra el contenido de una matriz</p><p>............................................................................................................................................ 454</p><p>FIGURA 4.131. Resultado de la ejecución del código de la figura 4.130 ... 454</p><p>xxxiii</p><p>FIGURA 4.132 . Pseudocódigo que permite mostrar el contenido de una</p><p>matriz en forma de cuadrícula ................................................................................ 455</p><p>FIGURA 4.133. Resultado de la ejecución del código de la figura 4.132 .... 455</p><p>FIGURA 4.134. Diagrama de flujo que permite mostrar el contenido de una</p><p>matriz ............................................................................................................................... 456</p><p>FIGURA 4.135. Pseudocódigo que llena una matriz con números aleatorios</p><p>ente 1 y 9 ........................................................................................................................ 457</p><p>FIGURA 4.136. Pseudocódigo que llena una matriz con el número 1. La</p><p>muestra en pantalla y, luego, modifica el contenido con número al azar</p><p>entre 1 y 10 ................................................................................................................... 458</p><p>FIGURA 4.137. Resultado de la ejecución del código de la figura 4.135 .... 459</p><p>FIGURA 4.138. Diagrama de flujo del código de la figura 4.136 ................... 460</p><p>FIGURA 4.139. Pseudocódigo que permite que una matriz sea llenada por el</p><p>usuario ............................................................................................................................. 462</p><p>FIGURA 4.140. Ejemplo de una ejecución del código de la figura 4.139 ... 463</p><p>FIGURA 4.141. Diagrama del código de la figura 4.139 ................................... 464</p><p>FIGURA 4.142. Pseudocódigo que llena una matriz cuadrada de 5 × 5 con</p><p>números al azar entre 15 y 99, y luego, la muestra en pantalla ................ 466</p><p>FIGURA 4.143. Resultado de la ejecución del código de la figura 4.141 .... 466</p><p>FIGURA 4.144. Diagrama de flujo del código de la figura 4.142 ................... 467</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75194053</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75194053</p><p>xxxiv</p><p>FIGURA 4.145. Ejemplo de la diagonal principal de una matriz .................... 468</p><p>FIGURA 4.146. Pseudocódigo que coloca 0 en la diagonal principal de una</p><p>matriz ............................................................................................................................... 469</p><p>FIGURA 4.147. Pseudocódigo que asigna 0 en la diagonal principal de una</p><p>matriz y la muestra en pantalla .............................................................................. 470</p><p>FIGURA 4.148. Muestra de la ejecución del código de la figura 4.147 sin la</p><p>línea 16 ............................................................................................................................ 471</p><p>FIGURA 4.149. Muestra de la ejecución del código de la figura 4.147 con la</p><p>línea 16 ............................................................................................................................ 471</p><p>FIGURA 4.150. Ejemplo de la diagonal secundaria de una</p><p>matriz ................ 472</p><p>FIGURA 4.151. Pseudocódigo que coloca números diferentes a 0 en la</p><p>diagonal secundaria de una matriz ....................................................................... 472</p><p>FIGURA 4.152. Matriz diagonal secundaria con los índices j resaltados con</p><p>negrita .............................................................................................................................. 473</p><p>FIGURA 4.153. Muestra de la ejecución del código de la figura 4.51 ......... 474</p><p>FIGURA 4.154. Pseudocódigo para llenar una matriz por columnas ........... 475</p><p>FIGURA 4.155. Muestra de la ejecución del código de la figura 4.154</p><p>agregando las líneas para la muestra en pantalla y sin la opción Sin</p><p>Saltar ........................................................................................................................... 476</p><p>FIGURA 4.156. Pseudocódigo para buscar un número en una matriz ........ 477</p><p>FIGURA 4.157. Muestra de la ejecución del código de la figura 4.150 ....... 478</p><p>xxxv</p><p>FIGURA 4.158. Pseudocódigo que solicita los números para llenar una matriz</p><p>de 3 × 4 al usuario; y, luego, busca si un número en particular está en la</p><p>matriz e indica cuántas veces se encontró ......................................................... 480</p><p>FIGURA 4.159. Pseudocódigo que solicita al usuario la dimensión de una</p><p>matriz de dimensión máxima de 10 × 10; luego la llena con números al azar</p><p>entre 100 y 500; y muestra en pantalla un informe con la Sumatoria, el</p><p>Promedio, el NumMayor y NumMenor de los datos de la matriz ............. 483</p><p>FIGURA 4.160. Sección del pseudocódigo para la declaración de variables,</p><p>dimensión del arreglo e inicializaciones .............................................................. 484</p><p>FIGURA 4.161. Sección del pseudocódigo a fin de leer y validar el tamaño</p><p>para la matriz que desea el usuario ...................................................................... 485</p><p>FIGURA 4.162. Sección del pseudocódigo para realizar la sumatoria y calcular</p><p>el promedio de la matriz ........................................................................................... 486</p><p>FIGURA 4.163. Sección del pseudocódigo para determinar el número menor</p><p>y mayor en una matriz e imprimir el informe solicitado ............................... 487</p><p>FIGURA 4.164. Ejemplo de matriz llenada por columnas y cuyo tamaño el</p><p>usuario definió de 3 × 4 ............................................................................................. 488</p><p>FIGURA 4.165. Sección del pseudocódigo donde se declaran variables,</p><p>dimensiona la matriz y se inicializan variables .................................................. 489</p><p>FIGURA 4.166. Sección del pseudocódigo para llenar la matriz por columna</p><p>............................................................................................................................................ 490</p><p>FIGURA 4.167. Sección del pseudocódigo para imprimir la matriz .............. 491</p><p>xxxvi</p><p>FIGURA 4.168. Sección del pseudocódigo para buscar un número en la</p><p>matriz ............................................................................................................................... 492</p><p>FIGURA 4.169. Sección del pseudocódigo para mostrar el número buscado</p><p>en la matriz .................................................................................................................... 492</p><p>FIGURA 4.170. Salida en pantalla del pseudocódigo del ejemplo 3 ............ 493</p><p>FIGURA 4.171. Código que solicita al usuario los datos para llenar una matriz</p><p>de 4 × 4, luego muestra su diagonal, así como su promedio, el número</p><p>menor y el número mayor del arreglo ................................................................. 495</p><p>FIGURA 4.172. Ejemplo de una matriz con su equivalente traspuesta ...... 495</p><p>FIGURA 4.173. Código que recibe los datos de una matriz de 3 × 3, luego, la</p><p>pasa a otra de forma traspuesta y la muestra en pantalla ........................... 496</p><p>FIGURA 4.174. Resultado de la ejecución del código de la figura 4.172 ... 497</p><p>FIGURA 4.175. Ejemplo de cálculo de factorial en una matriz de 2 × 2 ...... 497</p><p>Figura 4.176. Pseudocódigo que calcula el factorial de los números de una</p><p>matriz, el promedio de todos sus números y la sumatoria de los números</p><p>de la diagonal principal ............................................................................................. 498</p><p>FIGURA 4.177. Resultado de la ejecución del código de la figura 4.176 ... 499</p><p>FIGURA 4.178. Ejemplo de las matrices A y B con datos ................................. 499</p><p>FIGURA 4.179. Ejemplo del cálculo de la matriz C, basada en los datos de las</p><p>matrices ........................................................................................................................... 500</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75194091</p><p>xxxvii</p><p>FIGURA 4.180. Pseudocódigo que calcula la matriz C por medio de la suma</p><p>de los valores de las matrices A y B. Además, determina el valor mayor y</p><p>menor ............................................................................................................................... 500</p><p>FIGURA 4.181. Ejecución del ejemplo 8 .................................................................. 501</p><p>FIGURA 4.182. Pseudocódigo para llenar una matriz de forma aleatoria,</p><p>calcular el promedio de una fila dada por el usuario e intercambiar los</p><p>valores entre dos columnas ..................................................................................... 503</p><p>FIGURA 4.183. Vector de 8 posiciones con información de los invitados . 505</p><p>FIGURA 4.184. Matriz de 2 filas y 12 columnas con los montos de los recibos</p><p>de agua y luz de cada mes ....................................................................................... 505</p><p>FIGURA 4.185. Ejemplo de matriz resultante ........................................................ 512</p><p>FIGURA 4.186. Ejemplo de matriz con números naturales ordenados por filas</p><p>............................................................................................................................................ 513</p><p>FIGURA 4.187. Ejemplo de salida deseada en las instrucciones ................... 514</p><p>FIGURA 4.188. Ejemplo de salida de información .............................................. 515</p><p>FIGURA 4.189. Ejemplo de matriz con números impares por ordenados por</p><p>columnas ......................................................................................................................... 515</p><p>FIGURA 4.190. Ejemplo de matriz con factoriales ............................................... 517</p><p>FIGURA 4.191. Ejemplo de matriz con resultados de los factoriales ........... 518</p><p>FIGURA 4.192. Ejemplo de salida del procesamiento de matriz con factoriales</p><p>............................................................................................................................................ 519</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75194106</p><p>xxxviii</p><p>FIGURA 4.193. Ejemplo de matriz con números aleatorios............................. 519</p><p>FIGURA 4.194. Ejemplo de matriz con cambio de números entre dos de sus</p><p>columnas ......................................................................................................................... 521</p><p>FIGURA 4.195. Ejemplo de salida del cálculo del promedio de una matriz e</p><p>intercambio de los valores entre dos de sus columnas ................................. 522</p><p>FIGURA 4.196. Ejemplo de matriz llena con números en un rango de 0 a 60</p><p>............................................................................................................................................ 522</p><p>FIGURA 4.197. Ejemplo de matriz con su diagonal principal resaltada ...... 523</p><p>FIGURA 4.198. Ejemplo de matriz llena con números aleatorios .................. 524</p><p>FIGURA 4.199. Ejemplo de matriz con cambio de valores entre dos de sus</p><p>columnas ......................................................................................................................... 525</p><p>FIGURA 4.200. Ejemplo de salida de matriz aleatoria, cálculo de su promedio</p><p>y cambio de valores entre columnas .................................................................... 526</p><p>FIGURA 4.201. Ejemplo de matriz llena con números para tablas de</p><p>multiplicar ....................................................................................................................... 527</p><p>FIGURA 4.202. Ejemplo de salida del algoritmo de tablas de multiplicar .. 529</p><p>FIGURA 4.203. Ejemplo de llenado de vector de los extremos hacia su centro</p><p>............................................................................................................................................ 531</p><p>FIGURA 4.204. Ejemplo del orden en llenado de vector con dimensión par</p><p>............................................................................................................................................ 531</p><p>xxxix</p><p>FIGURA 4.205. Ejemplo del orden en llenado de vector con dimensión impar</p><p>............................................................................................................................................ 532</p><p>FIGURA 4.206. Ejemplo de salida de matriz con ordenamiento de números</p><p>positivos y negativos .................................................................................................. 533</p><p>FIGURA 4.207. Ejemplo de vectores A y B llenos con números de tipo Entero</p><p>y sumatoria en un vector C ...................................................................................... 535</p><p>FIGURA 4.208. Ejemplo de salida de la sumatoria y promedio de un vector</p><p>............................................................................................................................................ 535</p><p>FIGURA 4.209. (a) Solución propuesta del ejercicio 1: Matriz, vector y</p><p>números pares e impares ......................................................................................... 540</p><p>FIGURA 4.210. (b) Solución propuesta del ejercicio 1: Matriz, vector y</p><p>números pares e impares ......................................................................................... 541</p><p>FIGURA 4.211. Solución propuesta del ejercicio 2: Resta de matrices ........ 542</p><p>FIGURA 4.212. Solución propuesta del ejercicio 3: Diagonal de una matriz</p><p>............................................................................................................................................ 543</p><p>FIGURA 4.213. Solución propuesta del ejercicio 4: Llenado de matriz, suma,</p><p>promedio y buscar número...................................................................................... 544</p><p>FIGURA 4.214. Solución propuesta del ejercicio 5: Matriz llenada por</p><p>columnas con números impares ............................................................................ 545</p><p>FIGURA 4.215. Solución propuesta del ejercicio 6: Matriz factorial por</p><p>columnas ......................................................................................................................... 546</p><p>xl</p><p>FIGURA 4.216. Solución propuesta del ejercicio 7: Matriz números aleatorios,</p><p>promedio fila e intercambiar columnas ............................................................... 548</p><p>FIGURA 4.217. Solución propuesta del ejercicio 8: Matriz diagonal, número</p><p>mayor y número menor ............................................................................................ 549</p><p>FIGURA 4.218. Solución propuesta del ejercicio 9: Matriz, vector y números</p><p>pares e impares en PSeInt .................................................................................... 551</p><p>FIGURA 4.219. Solución propuesta del ejercicio 10: Vector y promedio ... 552</p><p>FIGURA 4.220. Solución propuesta del ejercicio 11: Matriz con intercambio</p><p>de valores entre columnas y promedio de fila ................................................. 554</p><p>FIGURA 4.221. Solución propuesta del ejercicio 12: Vector con números</p><p>aleatorios múltiplos de 3 .......................................................................................... 555</p><p>FIGURA 4.222. Solución propuesta del ejercicio 13: Prácticas de</p><p>multiplicación ................................................................................................................ 558</p><p>FIGURA 4.223. Solución propuesta del ejercicio 14: Sumar posiciones en un</p><p>vector ............................................................................................................................... 559</p><p>FIGURA 4.224. Solución propuesta del ejercicio 15: Ordenamiento de</p><p>números positivos y negativos ............................................................................... 560</p><p>FIGURA 4.225. Solución propuesta del ejercicio 16: Suma de vectores y</p><p>promedio ........................................................................................................................ 561</p><p>FIGURA 4.226. Indicación visual de las columnas de una matriz .................. 562</p><p>xli</p><p>FIGURA 4.227. Representación visual de los datos en las celdas de un vector</p><p>............................................................................................................................................ 562</p><p>FIGURA 4.228. Indicación visual de las filas de una matriz ............................. 563</p><p>FIGURA 4.229. Indicación visual del índice en un vector ................................. 563</p><p>FIGURA 4.230. Indicación visual de una matriz ................................................... 563</p><p>FIGURA 4.231. Indicación visual del nombre de un vector ............................. 564</p><p>FIGURA 4.232. Indicación visual de un vector ...................................................... 564</p><p>xlii</p><p>Índice de cuadros</p><p>CUADRO 4.1. Comparación entre variable, vector y matriz ............................ 350</p><p>CUADRO 4.2. Usos correctos e incorrectos de índices en la asignación de</p><p>valores de un vector ................................................................................................... 358</p><p>CUADRO 4.3. Sintaxis de los vectores y matrices en DFD y PSeInt ........... 360</p><p>CUADRO 4.4. Comparación de las características de los vectores y matrices</p><p>............................................................................................................................................ 506</p><p>file:///D:/Documentos/UNED/Unidades/Activas/2109/VP/Cap%204/Cap%204%20(15%20jun%202021)%20VP.docx%23_Toc75194198</p><p>343</p><p>Capítulo 4</p><p>4 Arreglos unidimensionales y</p><p>multidimensionales</p><p>• Introducción</p><p>• Arreglos</p><p>• Vectores</p><p>• Matrices</p><p>344</p><p>Objetivo general</p><p>Adquirir conocimientos sobre las características y</p><p>el manejo de programación de los arreglos unidi-</p><p>mensionales y multidimensionales.</p><p>Objetivos específicos</p><p>Al concluir el estudio de este capítulo, se</p><p>espera que usted esté en capacidad de:</p><p>1. Conocer la definición y las caracterís-</p><p>ticas de los arreglos unidimensionales</p><p>y multidimensionales.</p><p>2. Comprender el funcionamiento de</p><p>los ciclos aplicados a los arreglos de</p><p>una y dos dimensiones.</p><p>3. Implementar soluciones programadas</p><p>para la resolución de ejercicios con</p><p>arreglos de una y dos dimensiones.</p><p>Conceptos clave</p><p>Arreglos, arreglos unidimensionales, arreglos</p><p>multidimensionales, vectores, matrices.</p><p>345</p><p>4.1 Introducción</p><p>En este capítulo se analizan las estructuras o arreglos unidimensionales</p><p>(vectores) y multidimensionales (matrices) para el almacenamiento de da-</p><p>tos.</p><p>Similar a las variables, los arreglos permiten almacenar valores de un solo</p><p>tipo de dato, los cuales se analizaron en el capítulo 3. La ventaja de utilizar</p><p>los arreglos es que dejan emplear menos variables en la resolución de un</p><p>problema. Por ejemplo, si se deseara almacenar el nombre de</p>