Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Arreglos vectores y Matrices, Apuntes de Sistemas Judiciales

Arreglos vectores y Matrices Arreglos vectores y Matrices

Tipo: Apuntes

2023/2024

Subido el 08/06/2024

leyes-actuales
leyes-actuales 🇨🇴

Vista previa parcial del texto

¡Descarga Arreglos vectores y Matrices y más Apuntes en PDF de Sistemas Judiciales solo en Docsity! Capı́tulo 6 Vectores y matrices La mejor forma de predecir el futuro es implementarlo David Heinemeier Hansson Objetivos del caṕıtulo: Aprender a declarar e inicializar vectores y matrices. Conocer la forma de leer e imprimir los elementos almacenados en vectores y matrices. Construir algoritmos para buscar elementos en vectores y matrices. Realizar operaciones básicas con varios vectores y matrices. Introducción a la Lógica de Programación 353 Ejemplos de creación de arreglos con la función dimensionar() : 1. Se declara una variable suscrita llamada edadEstudiante y se le da un tamaño de 6 posiciones para datos de tipo Entero. (Ver Figura 6.2). Entero edadEstudiante[ ] edadEstudiante = dimensionar( 6 ) edadEstudiante -> 1 2 3 4 5 6 Figura 6.2: Vector edadEstudiante 2. Se declara una variable suscrita llamada estaturaPersona y se le da un tamaño de 4 posiciones para datos de tipo Real. (Ver Figura 6.3). Real estaturaPersona[ ] estaturaPersona = dimensionar( 4 ) estaturaPersona -> 1 2 3 4 Figura 6.3: Vector estaturaPersona 3. Se declara una variable suscrita llamada nombreEmpleado y se le da un tamaño de 3 posiciones para datos de tipo Cadena.(Ver Figura 6.4). Cadena nombreEmpleado[ ] nombreEmpleado = dimensionar( 3 ) nombreEmpleado -> 1 2 3 Figura 6.4: Vector nombreEmpleado 354 Vectores y matrices 4. Se declara una variable suscrita llamada letrasDocumento y se le da un tamaño de 50 posiciones para datos de tipo Caracter. (Ver Figura 6.5). Caracter letrasDocumento [ ] letrasDocumento = dimensionar( 50 ) letrasDocumento -> . . . 1 2 3 . . . 49 50 Figura 6.5: Vector letrasDocumento La función dimensionar() no requiere que se env́ıe una constante numérica como argumento, también se puede usar el contenido de una variable o constante de tipo Entero. Por ejemplo: Entero edadEstudiante[ ] Entero cantidadPersonas cantidadPersonas = 20 edadEstudiante = dimensionar( cantidadPersonas ) Aclaración: Aunque se puede declarar una variable en cualquier parte del algoritmo, sin ser un error de lógica, lo ideal seŕıa realizar siempre las declaraciones al inicio del algoritmo o de los procedimientos o funciones. La función dimensionar(), internamente está construida creando un vector en el momento de declarar la variable suscrita del tamaño indicado en el argumento cuando se invoca la función, para posteriormente retornar la referencia a este nuevo vector: Funcion tipoDato[ ] dimensionar( Entero n ) tipoDato elemento[ n ] Retornar elemento FinFuncion Note que esta función no indica un tipo de dato espećıfico, ya que funciona igual para cualquier tipo de dato; se describe de esta forma para lograr explicar el funcionamiento en términos generales. Se asume que esta Introducción a la Lógica de Programación 355 función es interna al pseudocódigo del libro y no requiere ser escrita en los algoritmos que la utilicen. La estructura interna de la función es: crear un vector de n posiciones en el momento de la declaración de la variable suscrita, y luego simplemente se retorna el valor de la variable, es decir, la referencia al nuevo vector. Ejemplos de creación de vectores en el momento de la declaración : 1. Se declara una variable suscrita llamada semestreEstudiante con un tamaño de 35 posiciones para datos de tipo Entero. (Ver Figura 6.6). Entero semestreEstudiante [ 35 ] semestreEstudiante -> . . . 1 2 3 . . . 34 35 Figura 6.6: Vector semestreEstudiante 2. Se declara una variable suscrita llamada correoElectronicoEmpleado con un tamaño de 30 posiciones para datos de tipo Cadena. (Ver Figura 6.7). Cadena correoElectronicoEmpleado [ 30 ] correoElectronicoEmpleado -> . . . 1 2 3 . . . 29 30 Figura 6.7: Vector correoElectronicoEmpleado 3. Se declara una variable suscrita llamada sueldoPersona con un tamaño de 100 posiciones para datos de tipo Real. (Ver Figura 6.8). Real sueldoPersona [ 100 ] sueldoPersona -> . . . 1 2 3 . . . 99 100 Figura 6.8: Vector sueldoPersona 358 Vectores y matrices numero -> 7 21 93 48 5 1 2 3 4 5 Figura 6.10: Ejemplo de asignación directa Entero numero[ 20 ], i Para i = 1 Hasta 20 Incremento 1 imprimir( "Ingrese el número " , i, ": " ) leer( numero[ i ] ) FinPara En esta porción de código, la variable i representa el ı́ndice con el cual se irá accediendo a cada posición del arreglo. El ciclo se ejecutará 20 veces desde 1 hasta 20, lo que coincide con todas las posiciones del arreglo. La función imprimir() solicitará al usuario el ingreso de un número cualquiera. La variable i que va al final de la función imprimir() dentro del paréntesis servirá para que el usuario reconozca la secuencia de los números que va ingresando. La función leer() llevará el número ingresado por el usuario a la respectiva posición del vector numero representada por el ı́ndice. 6.1.3 Recuperación de datos almacenados en un vector Al recuperar un dato que se encuentre en una posición espećıfica de un vector, es necesario saber cuál es esa posición y luego acceder a ella a través de alguna instrucción. Por ejemplo, supóngase que se quiere conocer cuál es el dato almacenado en la posición 3 del vector numero. (Ver Figura 6.11). numero -> 4 2 15 8 3 1 2 3 4 5 Figura 6.11: Ejemplo recuperación de datos Para ello, será necesario escribir la siguiente instrucción: imprimir( "El tercer elemento es " , numero[ 3 ] ) Luego de utilizar esta instrucción y, suponiendo que los datos almacenados son los de la imagen anterior, el dato mostrado con la función Introducción a la Lógica de Programación 359 imprimir() es 15. Ahora bien, si este número se requiere para llevar a cabo algún cálculo, este puede llevarse a otra variable, siempre y cuando la variable que lo va a almacenar temporalmente sea del mismo tipo de dato que el arreglo de donde proviene el dato. Como ejemplo, suponga que el dato de la posición 5 del arreglo se requiere para un cálculo particular, con la siguiente instrucción, el dato se copia en la variable n que se usará para ese fin: Entero n, numero[ ] = {7, 21, 93, 48, 5} n = numero[ 4 ] Luego de ejecutar esta instrucción, una copia del valor 48 quedará almacenado en la variable n. Tenga en cuenta que el 48 no se borrará de la posición 4 de numero, solo se habrá copiado. También es posible que en algunos problemas de lógica de programación se presente la necesidad de recuperar todos los datos almacenados en las diferentes posiciones del vector. En estos casos, deberá recorrerse con un ciclo el vector, desde la primera hasta la última posición. Como ejemplo de esta situación, imagine que se desean sumar los valores almacenados en numero e informarle al usuario el total de la suma. Para ello, se tiene la siguiente porción de código: Entero numero[ ] = {7, 21, 93, 48, 5} Entero i, suma suma = 0 Para i = 1 Hasta 5 Incremento 1 suma = suma + numero[ i ] FinPara imprimir( "La suma de los elementos es: ", suma ) En la anterior porción de código, se llevan a cabo varias tareas que se explican a continuación: Se declara una variable suma de tipo Entero que almacenará la suma de los datos almacenados en numero. La variable suma se inicializa en 0, pues antes de empezar a sumar no se tiene nada acumulado. Se utiliza el ciclo Para con la variable i como contador e ı́ndice, con el fin de recorrer el vector desde la posición 1 hasta el tamaño del mismo (5). 360 Vectores y matrices Se utiliza la instrucción dentro del ciclo para ir sumando el valor de la posición actual de numero con lo que se están acumulando los datos del vector en la variable suma. suma = suma + numero[ i ] Al finalizar el ciclo se muestra el total de la suma mediante la función imprimir(). En las siguientes secciones se utilizan varios ejercicios para ejemplificar el uso de los arreglos unidimensionales o vectores. Se describirán inicialmente, los primeros algoritmos escritos de manera secuencial; posteriormente, los algoritmos que aparecerán, se escribirán haciendo uso de funciones y procedimientos. .:Ejemplo 6.1. Diseñe un algoritmo que permita almacenar en un vector de 4 posiciones o celdas, números Enteros comprendidos entre 10 y 20 y que, a continuación, determine cuántas veces se encuentra almacenado el número 14 en el arreglo. Análisis del problema: Resultados esperados: mostrar la cantidad de veces que aparece el número 14 en las celdas de un arreglo de 4 posiciones. Datos disponibles: los cuatro números que se almacenan en el arreglo en el intervalo 10 al 20. Proceso: se solicita al usuario el tamaño del arreglo, posteriormente se hace la lectura de todos lo datos, luego se lleva a cabo una búsqueda del número 14 celda a celda, desde la primera posición hasta la última; cada vez que se encuentre, se va incrementando un contador. Al final del algoritmo, se mostrará la cantidad de veces que se ha encontrado el número 14. Variables requeridas: • numero: arreglo que almacena los números ingresados • i: variable que controla el ciclo • contador14: variable que almacena la cantidad de veces3 que aparece el número 14 en el arreglo. 3contador Introducción a la Lógica de Programación 363 20 contador14 = 0 21 Para i = 1 Hasta MAX Incremento 1 22 Si( numero[ i ] == 14 ) Entonces 23 contador14 = contador14 + 1 24 FinSi 25 FinPara Al final, se muestra con la instrucción imprimir la cantidad de 14 encontrados en el arreglo. 27 imprimir( "El número 14 está ", contador14, " veces" ) .:Ejemplo 6.2. Diseñe un algoritmo que permita almacenar los nombres de un grupo de n personas en un arreglo unidimensional y que posteriormente, busque la posición del arreglo en la que quedó almacenado el nombre de una persona que el usuario ingresa. Si ese nombre no aparece en el arreglo, se debe mostrar el respectivo mensaje. Aclaración: Este ejercicio, aunque parecido al anterior, contiene varias diferencias fundamentales: se debe utilizar un vector que guarde los nombres de personas, una vez almacenadas, se debe buscar un nombre en particular y verificar si está almacenado o no en el arreglo; si está almacenado, deberá decirse la posición en la que se encuentra. En este ejercicio es necesario suponer que no se almacena un nombre más de una vez, es decir, no existen dos o más personas con el mismo nombre. Análisis del problema: Resultados esperados: la posición del arreglo en la que se encuentra el nombre a buscar ingresado por el usuario. Datos disponibles: el tamaño del arreglo y el nombre de la persona que se desea buscar. Proceso: solicitar la cantidad de nombres a ingresar (n), luego se solicitan los nombres de las n personas y se almacenan en el arreglo, posteriormente se hace una búsqueda secuencial desde la primera hasta la última posición del arreglo de nombres comparando si el nombre que se está buscando es igual al nombre que hay en la posición actual, Si esto ocurre, ya se encontró lo que se buscaba y se puede 364 Vectores y matrices terminar la búsqueda alĺı mostrando la posición en la que el nombre se encuentra; si no se ha encontrado, se pasa a la siguiente posición y se vuelve a comparar hasta llegar al final del arreglo. Si se ha llegado al final del arreglo y no se encontró nada, deberá informarse al usuario. Variables requeridas: • tamanio5: contiene el tamaño del arreglo. • arregloNombres: es el arreglo que almacena los nombres. • i: variable de control del ciclo • nombreBuscar: almacena el nombre que se desea buscar • encontrado: variable que indica si se encontró o no el nombre en el arreglo. De acuerdo al análisis planteado, se propone el Algoritmo 6.2.Algoritmo 6.2: NombrePersonas 1 Algoritmo NombrePersonas 2 Entero tamanio, i 3 Cadena arregloNombres[ ], nombreBuscar 4 Logico encontrado 5 6 imprimir( "Ingrese el tamaño del arreglo: ") 7 leer( tamanio ) 8 9 arregloNombres = dimensionar( tamanio ) 10 11 Para i = 1 Hasta tamanio Incremento 1 12 imprimir( "Ingrese el nombre persona " , i, ": " ) 13 leer( arregloNombres[ i ] ) 14 FinPara 15 16 imprimir( "Ingrese el nombre de la persona a buscar: " ) 17 leer( nombreBuscar ) 18 19 encontrado = Falso 20 Para i = 1 Hasta tamanio Incremento 1 21 Si( nombreBuscar == arregloNombres[ i ] ) Entonces 22 imprimir( "El nombre está en la posición ", i ) 23 encontrado = Verdadero 24 FinSi 25 FinPara 26 27 Si( encontrado == Falso ) Entonces 28 imprimir( "El nombre no está en el arreglo" ) 5por norma, en los identificadores se evita el uso de caracteres como tildes y eñes. Introducción a la Lógica de Programación 365 29 FinSi 30 FinAlgoritmo Al ejecutar el algoritmo: Primera ejecución: Ingrese el tamaño del arreglo: 3 Ingrese el nombre persona 1: Jacobo Ingrese el nombre persona 2: Gabriela Ingrese el nombre persona 3: Adriana Ingrese el nombre de la persona a buscar: Adriana El nombre está en la posición 3 Segunda ejecución: Ingrese el tamaño del arreglo: 3 Ingrese el nombre persona 1: Jacobo Ingrese el nombre persona 2: Gabriela Ingrese el nombre persona 3: Adriana Ingrese el nombre de la persona a buscar: Nidia El nombre no está en el arreglo Explicación del algoritmo: En este algoritmo, como en todos los anteriores, lo primero es declarar las variables necesarias (ĺıneas 2 a 4). Observe que el arreglo de nombres es de tipo Cadena. Después de la declaración de las variables, se solicita el tamaño para, con este dato, dimensionar al arreglo. 6 imprimir( "Ingrese el tamaño del arreglo: ") 7 leer( tamanio ) 8 9 arregloNombres = dimensionar( tamanio ) A continuación, se solicitan los nombres de las personas y se almacenan en cada posición del arreglo; esto se hace mediante el uso del primer ciclo Para. 11 Para i = 1 Hasta tamanio Incremento 1 12 imprimir( "Ingrese el nombre persona " , i, ": " ) 13 leer( arregloNombres[ i ] ) 14 FinPara Luego, se solicita el nombre que se va a buscar y se inicializa una variable “centinela” (de tipo lógico) denominada encontrado en Falso. 368 Vectores y matrices 26 27 Para i = 1 Hasta n Incremento 1 28 imprimir( arregloFinal[ i ], " " ) 29 FinPara 30 FinAlgoritmo Al ejecutar el algoritmo: Ingrese el tamaño del Arreglo: 4 Ingrese el número 1: 3 Ingrese el número 2: 9 Ingrese el número 3: -8 Este número no es válido Ingrese el número 3: 45 Ingrese el número 4: 92 92 45 9 3 Explicación del algoritmo: Al principio de este algoritmo se hace la declaración de todas las variables necesarias (ĺınea 2). Acto seguido, se solicita mediante las instrucciones imprimir y leer, el tamaño del arreglo, que es almacenado en la variable n y, con la cual se le da tamaño al arreglo inicial y final. 4 imprimir( "Ingrese el tamaño del Arreglo: " ) 5 leer( n ) 6 7 arregloInicial = dimensionar( n ) 8 arregloFinal = dimensionar( n ) Luego, en las instrucciones que siguen a continuación en el algoritmo, se utiliza un ciclo Para con el propósito de almacenar en cada posición del arreglo inicial los números enteros positivos que el usuario ingresa. Nótese que dentro de este primer ciclo Para, se usa un ciclo Haga-MientrasQue que valida y asegura el ingreso de números positivos, lo cual es un requisito propuesto en el enunciado. Dentro de este ciclo Haga-MientrasQue, se usa una instrucción Si que muestra un mensaje solo si el número ingresado es menor que cero, haciéndole entender al usuario que este número no es válido para almacenarse en el arregloInicial, pues no corresponde a un número positivo. Introducción a la Lógica de Programación 369 10 Para i = 1 Hasta n Incremento 1 11 Haga 12 imprimir( "Ingrese el número " , i, ": " ) 13 leer( arregloInicial[ i ] ) 14 15 Si( numero[ i ] < 0 ) Entonces 16 imprimir( "Este número no es válido" ) 17 FinSi 18 MientrasQue( numero[ i ] < 0 ) 19 FinPara En la segunda parte del algoritmo, se inicializa la variable j con el tamaño de este arreglo, es decir, se busca ubicar la última posición de este arreglo utilizando la variable j. Se utiliza un segundo ciclo Para que recorre el arregloInicial desde la primera hasta la última posición de este, pero que paralelamente va recorriendo el arregloFinal desde la última posición marcada con la variable j hasta la posición 1, pues esta se va reduciendo dentro del ciclo, de esta forma se va pasando el elemento que hay en cada posición del arregloInicial a cada posición del arregloFinal. 21 j = n 22 Para i = 1 Hasta n Incremento 1 23 arregloFinal[ j ] = arregloInicial[ i ] 24 j = j - 1 25 FinPara Luego, con otro ciclo Para se imprimen todos los elementos del arregloFinal. 27 Para i = 1 Hasta n Incremento 1 28 imprimir( arregloFinal[ i ], " " ) 29 FinPara Se asume que cada impresión se realiza en la misma ĺınea. Si cada vez que se ejecuta la instrucción imprimir el mensaje se ubicase en una ĺınea nueva, seŕıa necesario usar una nueva variable tipo Cadena para almacenar todos los datos y luego invocar una sola vez la instrucción imprimir (Ver el siguiente ejemplo). .:Ejemplo 6.4. Diseñe un algoritmo que permita almacenar en un vector una cantidad n de números pares y en otro vector una cantidad m de números impares ingresados por el usuario. Construya el algoritmo de tal manera que almacene en un tercer vector todos los números contenidos en los dos vectores iniciales y muestre al final el tercer vector. 370 Vectores y matrices Análisis del problema: Resultados esperados: un vector con los datos almacenados en los dos arreglos iniciales. Datos disponibles: el tamaño de los dos vectores iniciales y los números que se van a almacenar en ellos. Proceso: solicitar al usuario el tamaño de cada uno de los vectores, luego, leer todos los números a almacenar en los dos vectores iniciales, posteriormente se toman todos los datos del primer vector (uno a uno) y se almacenan en el tercer vector, luego se toman los datos del segundo vector y se ubican también en el tercer vector y, finalmente se imprime el tercer vector. Variables requeridas: • arregloPares: vector que contiene todos los números pares que el usuario ingresó. • arregloImpares: vector que contiene todos los números impares que el usuario ingresó. • arregloTotal: vector que contiene todos los números que el usuario ingresó (pares e impares). • tamanioPares: cantidad de elementos que contiene el vector de pares. • tamanioImpares: cantidad de elementos que contiene el vector de impares. • tamanioTotal: • i: variable de control para los vectores. • j: variable de control para los vectores • salida: variable que almacena los datos del tercer vector para su posterior impresión. De acuerdo al análisis planteado, se propone el Algoritmo 6.4. Algoritmo 6.4: ConcatenaArreglos 1 Algoritmo ConcatenaArreglos 2 Entero arregloPares[ ], arregloImpares[ ], arregloTotal[ ] 3 Entero tamanioPares, tamanioImpares, tamanioTotal, i, j 4 Cadena salida 5 6 imprimir( "Ingrese la cantidad de pares: " ) 7 leer( tamanioPares ) Introducción a la Lógica de Programación 373 Observe que dentro de este ciclo Para se realiza la respectiva validación con el propósito de evitar que el usuario ingrese un número impar. Para realizar la validación se hace uso de un Haga-MientrasQue y un Si que informa al usuario, de ser necesario, el intento de ingresar un dato no válido. Algo similar se realiza en las ĺıneas 29 a la 38 pero, esta vez con el ingreso de los números impares. Después, se inicializa la variable de control j con el valor 1, y se usará para “navegar” dentro del vector arregloTotal. Posteriormente se recorre con un ciclo Para el vector arregloPares para copiar todos sus datos al vector arregloTotal. De forma similar se recorre con otro ciclo el vector arregloImpares y se copian los elementos en el vector arregloTotal. Note que la variable j no fue inicializada nuevamente en el momento de copiar los elementos del segundo arreglo, aśı que continúa en la siguiente posición en donde se ubicó el último número par. 40 j = 1 41 Para i = 1 Hasta tamanioPares Incremento 1 42 arregloTotal[ j ] = arregloPares [ i ] 43 j = j + 1 44 FinPara 45 46 Para i = 1 Hasta tamanioImpares Incremento 1 47 arregloTotal[ j ] = arregloImpares [ i ] 48 j = j + 1 49 FinPara Para finalizar, se inicializa una variable tipo Cadena, denominada salida con una cadena vaćıa (""), luego se recorre todo el arregloTotal y en cada iteración se concatena a la variable salida el elemento del arregloTotal en la posición actual, más un espacio en blanco. Una vez se ha recorrido todo este arreglo, se procede a imprimir la variable salida. 51 salida = "" 52 Para i = 1 Hasta arregloTotal Incremento 1 53 salida = salida + arregloTotal [ i ] + " " 54 FinPara 55 imprimir( "Arreglo concatenado: ", salida ) .:Ejemplo 6.5. Diseñe un algoritmo que reciba como entrada un número entero entre cero y noveinta y nueve (0 y 99) y que, como salida muestre ese mismo número, pero expresado esta vez en palabras. 374 Vectores y matrices Análisis del problema: Resultados esperados: el número ingresado (0 a 99) pero expresado en palabras. Datos disponibles: el número que se desea convertir a palabras. Proceso: se le solicita al usuario el número a convertir a palabras, luego se realiza un proceso para su conversión de este número a su equivalente en palabras realizando la búsqueda de las palabras adecuadas en varios vectores, y finalmente se imprime el mensaje. El proceso de conversión, consiste en determinar si el número es menor a 11 para buscar la palabra que lo identifica en un primer vector; sino, se verifica si el número está entre 11 y 19, de ser aśı, se busca su respectiva palabra en otro vector; y si es mayor a 19, se determinan las unidades y las decenas de este número y se buscan sus palabras equivalentes en los vectores respectivos. Para la resolución de este ejercicio se utilizan tres vectores que poseen las palabras, correspondientes a ciertos números claves, ya almacenadas desde su declaración. en este sentido, el algoritmo no le solicita al usuario datos que vayan a ser almacenados en algún vector, ni mucho menos se requiere pedir el tamaño del mismo, pues como se acaba de mencionar, los vectores se llenan con los datos (las palabras) desde el momento en que se declaran. Variables requeridas: • numero: que se desea convertir a palabras. • numeroPalabras: que almacena el número en palabras. • arregloUnidades: vector que contiene los nombres de los primeros once números (iniciando desde el cero). • arregloEspecial: vector que contiene los de los siguientes ocho números comenzando en once. • arregloDecenas: vector que contiene los nombres de los números del veinte al noventa, pero de diez en diez. • decenas: cantidad de decenas que tiene el número ingresado por usuario. • unidades: cantidad de unidades que tiene el número ingresado. De acuerdo al análisis planteado, se propone el Algoritmo 6.5. Introducción a la Lógica de Programación 375 Algoritmo 6.5: ConversionNumero 1 Algoritmo ConversionNumero 2 3 Entero numero, decenas, unidades 4 Cadena numeroPalabras 5 Cadena arregloUnidades[ ] = { "cero", "uno", "dos", 6 "tres", "cuatro", "cinco", 7 "seis", "siete", "ocho", 8 "nueve", "diez" } 9 10 Cadena arregloEspecial[ ] = {"once", "doce", 11 "trece", "catorce", 12 "quince", "dieciseis", 13 "diecisiete", "dieciocho", 14 "diecinueve" } 15 16 Cadena arregloDecenas [ ] = { "veinte", "treinta", 17 "cuarenta", "cincuenta", 18 "sesenta", "setenta", 19 "ochenta", "noventa" } 20 21 Haga 22 imprimir( "Ingrese el número a convertir: " ) 23 leer( numero ) 24 25 Si ( numero < 0 O numero > 99 ) Entonces 26 imprimir( "Este número no es válido" ) 27 FinSi 28 MientrasQue( numero < 0 O numero > 99) 29 30 Si( numero <= 10 ) Entonces 31 numeroPalabras = arregloUnidades[ numero + 1 ] 32 SiNo 33 Si( numero <= 19 ) Entonces 34 numeroPalabras = arregloEspecial[ numero - 10 ] 35 SiNo 36 unidades = numero % 10 37 decenas = numero / 10 38 39 Si( unidades == 0 ) Entonces 40 numeroPalabras = arregloDecenas[ decenas - 1] 41 SiNo 42 numeroPalabras = arregloDecenas[ decenas - 1 ] + 43 " y " + 44 arregloUnidades[ unidades + 1 ] 45 FinSi 46 FinSi 47 FinSi 48 378 Vectores y matrices .:Ejemplo 6.6. Diseñe un algoritmo que almacene un grupo de n números enteros en un arreglo y luego determine mediante funciones y procedimientos cuántos de esos números ingresados son pares y cuántos son impares. Análisis del problema: Resultados esperados: la cantidad de números pares y de impares que están almacenados en el arreglo de números. Datos disponibles: el tamaño que se le va a dar al arreglo y los números enteros que van a ser almacenados en el mismo. Proceso: solicitar la cantidad de elementos (n), después leer todos los elementos para el arreglo, posteriormente recorrer el arreglo y determinar si el elemento que se encuentra en cada posición es par; y si es aśı, contarlo como par; lo mismo que si es impar. Al final, el algoritmo mostrará el valor con la cuenta final de los números pares y con los impares. Variables requeridas: • En el algoritmo principal ◦ n: cantidad de elementos del arrreglo a procesar. ◦ numeros: vector que contiene los elementos que el usuario ingresa. ◦ cantidadPares: cantidad de números pares que contiene el vector original. ◦ cantidadImpares: cantidad de números impares que contiene el vector original. • En la función leerDatos ◦ Parámetros:  n: cantidad de elementos a leer ◦ Variables locales:  i: variable de control del ciclo  arreglo: vector que almacena los datos que el usuario ingresa. • En la función obtenerCantidadPares ◦ Parámetros:  arreglo: vector que almacena contiene los datos que el usuario ingresa. Introducción a la Lógica de Programación 379  n: tamaño del vector. • En la función obtenerCantidadImpares ◦ Parámetros:  arreglo: vector que almacena contiene los datos que el usuario ingresa.  n: tamaño del vector. En la función contar • Parámetros: ◦ arreglo: vector que contiene los datos a ser analizados. ◦ resto: parámetro que permite especificar si lo que se desea contar son pares (resto=0) o impares (resto=1). resto representa el resultado del resto de la división entera con 2 (arreglo[ i ]% 2 == resto). ◦ n: tamaño del vector. • Variables locales: ◦ i: variable de control del ciclo ◦ cantidad: variable que permite contar la cantidad de pares o impares (dependiendo del valor resto) que hay en el arreglo En el procedimiento mostrarResultados • Parámetros: ◦ pares: cantidad de números pares que se encontraron en el vector. ◦ impares: cantidad de números impares que se encontraron en el vector. De acuerdo al análisis planteado, se propone el Algoritmo 6.6. Algoritmo 6.6: numero 1 Algoritmo numero 2 Entero n, numeros [ ], cantidadPares, 3 cantidadImpares 4 5 imprimir( "Ingrese el tamaño del Arreglo: ") 6 leer( n ) 7 numeros = leerDatos( n ) 8 380 Vectores y matrices 9 cantidadPares = obtenerCantidadPares( numeros, n ) 10 cantidadImpares = obtenerCantidadImpares( numeros, n ) 11 12 mostrarResultados( cantidadPares, cantidadImpares ) 13 FinAlgoritmo 14 15 Funcion Entero[ ] leerDatos( Entero n ) 16 Entero i, arreglo[ n ] 17 18 Para i = 1 Hasta n Incremento 1 19 imprimir( "Ingrese el número " , i, ": " ) 20 leer( arreglo[ i ] ) 21 FinPara 22 Retornar arreglo 23 FinFuncion 24 25 26 Funcion Entero obtenerCantidadPares( Entero arreglo[ ], 27 Entero n ) 28 Retornar contar ( arreglo, 0, n ) 29 FinFuncion 30 31 Funcion Entero obtenerCantidadImpares( Entero arreglo[ ], 32 Entero n ) 33 Retornar contar ( arreglo, 1, n ) 34 FinFuncion 35 36 Funcion Entero contar( Entero arreglo[ ], 37 Entero resto, 38 Entero n ) 39 Entero i, cantidad 40 41 cantidad = 0 42 Para i = 1 Hasta n Incremento 1 43 Si( arreglo[ i ] % 2 == resto ) Entonces 44 cantidad = cantidad + 1 45 FinSi 46 FinPara 47 48 Retornar cantidad 49 FinFuncion 50 51 Procedimiento mostrarResultados( Entero pares, 52 Entero impares ) 53 imprimir( "Cantidad de pares : ", pares ) 54 imprimir( "Cantidad de impares: ", impares ) 55 FinProcedimiento Introducción a la Lógica de Programación 383 36 Funcion Entero contar( Entero arreglo[ ], 37 Entero resto, 38 Entero n ) 39 Entero i, cantidad 40 41 cantidad = 0 42 Para i = 1 Hasta n Incremento 1 43 Si( arreglo[ i ] % 2 == resto ) Entonces 44 cantidad = cantidad + 1 45 FinSi 46 FinPara 47 48 Retornar cantidad 49 FinFuncion Por último, el procedimiento mostrarResultados(), recibe como parámetros la cantidad de pares y de impares encontrados en el arreglo y los muestra mediante las instrucciones imprimir que están dentro de la función. .:Ejemplo 6.7. Escribir un algoritmo que almacene en un arreglo unidimensional las notas finales obtenidas por un grupo de 20 estudiantes en una materia cualquiera y, a través de funciones, determine el promedio del grupo, la nota más alta y más baja obtenida en la materia. Aclaración: Este problema consiste en hacer varios recorridos por el vector cuando este ya se encuentre lleno con las notas de los estudiantes para determinar el promedio y las notas más alta y baja del grupo. Por esta razón, es recomendable resolver el ejercicio por medio de funciones, ya que cada una de ellas resolverá una tarea en particular. El ejercicio se encuentra planteado para un grupo de 20 estudiantes, pero perfectamente se puede adaptar a un grupo de n estudiantes tal como se ha hecho en los ejercicios anteriores. Análisis del problema: Resultados esperados: mostrar la nota promedio del grupo de estudiantes, la mayor y menor nota obtenidas entre las 20 que conforman el grupo. Datos disponibles: las 20 notas de los estudiantes. 384 Vectores y matrices Proceso: lo primero que se hace en este algoritmo es solicitar las 20 notas al usuario y almacenarlas en el vector. Posteriormente, para encontrar la nota promedio del grupo, se recorre el vector, se suman todas las notas y se divide esta suma entre los 20 estudiantes; esto implica utilizar un ciclo que facilite el recorrido por las distintas posiciones del vector y el uso de una variable de tipo acumulador en la que se van sumando las notas. También se debe recorrer el vector con el fin de identificar la nota más alta y la más baja que estén almacenadas en él; para determinar la nota más alta, se compara la nota almacenada en la primera posición del arreglo con la segunda para saber cuál es mayor, luego la segunda con la tercera y aśı sucesivamente hasta llegar a la última nota, lo que implica el uso de una estructura de decisión. De la misma forma se hace si se desea conocer la nota más baja, en este caso la comparación con el Si entre las dos notas se lleva a cabo para conocer la menor nota. Tenga en cuenta que, como el ejercicio se está desarrollando para un grupo de 20 estudiantes, se usa una constante que contenga este valor durante todo el algoritmo. Variables requeridas: • En el algoritmo principal ◦ MAX: constante que almacena la cantidad de estudiantes, para el ejemplo son 20. ◦ arrregloNotas: vector que contiene las notas de los estudiantes. ◦ notaMayor: almacena la menor nota entre todas las ingresadas. ◦ notaMenor: almacena la mayor nota de los estudiantes. ◦ notaPromedio: almacena la nota promedio del grupo de estudiantes. • En la función leerDatos ◦ Parámetros:  tamanio: cantidad de elementos a leer ◦ Variables locales:  i: variable de control del ciclo  arreglo: vector que almacena las notas que el usuario ingresa. • En la función calcularPromedio ◦ Parámetros: Introducción a la Lógica de Programación 385  arregloNotas: vector que almacena las notas de los estudiantes.  n: tamaño del vector. ◦ Variables locales:  i: variable de control del ciclo.  suma: variable para almacenar la suma de todas las notas.  promedio: variable para almacenar el promedio de las notas. • En la función obtenerMayor ◦ Parámetros:  arregloNotas: vector que almacena las notas de los estudiantes.  n: tamaño del vector. ◦ Variables locales:  i: variable de control del ciclo.  mayor: variable para almacenar el mayor valor del arreglo de notas. • En la función obtenerMenor ◦ Parámetros:  arregloNotas: vector que almacena las notas de los estudiantes.  n: tamaño del vector. ◦ Variables locales:  i: variable de control del ciclo.  menor: variable para almacenar el menor valor del vector de notas. En el procedimiento mostrarResultados • Parámetros: ◦ promedio: promedio de las notas de los estudiantes. ◦ mayor: mayor nota de los estudiantes. ◦ menor: menor nota de los estudiantes. De acuerdo al análisis planteado, se propone el Algoritmo 6.7. 388 Vectores y matrices A continuación se llama a la función obtenerMayor() que recibe como parámetros el arreglo de notas y su tamaño. Esta función almacena la primera posición del arreglo en la variable mayor y luego recorre el arreglo desde la posición 2 hasta la última posición (20). Este recorrido se hace mediante el ciclo Para. Dentro del ciclo, se va comparando la posición actual del arreglo con la variable mayor. Si lo que posee la posición actual del arreglo es mayor que la variable mayor, esta posición se almacena en la variable mayor y el algoritmo pasa a la próxima iteración. Si la posición actual del arreglo no contiene una nota mayor que la que está almacenada en la variable mayor, el ciclo pasa a la siguiente iteración, donde se ubica en la siguiente posición del vector y vuelve a comparar. Al terminar el recorrido del vector, esta función obtendrá la mayor nota del arreglo y la retornará al algoritmo principal. Del mismo modo trabaja la función obtenerMenor(), que es la siguiente instrucción en el algoritmo principal, pero dentro de esta función se cambia la comparación que se hace al interior del ciclo Para, con el fin de saber si lo que posee la posición actual del vector es menor que lo que tiene almacenado la variable menor. Esta función retornará la menor nota almacenada en el vector. Por último, el procedimiento mostrarResultados(), permite mostrar la nota promedio del grupo, la mayor nota y la menor nota almacenadas en el vector, siendo estos los parámetros que recibió la función y que muestra mediante las instrucciones imprimir que están en su interior. .:Ejemplo 6.8. Diseñe un algoritmo que almacene en vectores el nombre y el género de un grupo de n personas y, que a través de funciones permita buscar la posición del vector en que se encuentra una persona cualquiera, buscada por su nombre y el género que esta persona tiene. Con objeto de almacenar los géneros de manera óptima, utilice una ’M’ para Masculino y una ’F’ para femenino. Análisis del problema: Resultados esperados: mostrar la posición en la que está en el vector de nombres y su género, una persona consultada por su nombre. Introducción a la Lógica de Programación 389 Datos disponibles: el tamaño de los vectores, los nombres y géneros de las n personas, aśı como el nombre de la persona que se va a buscar, una vez ya estén cargados los vectores con los datos. Proceso: luego de almacenar nombres y géneros, el algoritmo debe buscar la posición que ocupa el nombre de una persona en el vector de nombres, esto se lleva a cabo por medio de una búsqueda por todo el vector de nombres desde la primera hasta la última posición utilizando un ciclo y una estructura de decisión. Si el nombre de esta persona se encuentra almacenado, el algoritmo debe mostrar la posición que ocupa ese nombre en el vector y su género correspondiente, que está almacenado en el vector de géneros. Para este ejercicio, es necesario suponer que cada nombre se almacena una sola vez. Si el nombre buscado está almacenado en varias posiciones del arreglo, el algoritmo reporta la posición del último de ellos. Variables requeridas: • En el algoritmo principal ◦ tamanio: cantidad de personas de las que se conoce la información. ◦ posicion: posición que ocupa la persona buscada en el vector de nombres. ◦ nombreBuscar: nombre de la persona que se desea buscar. ◦ arregloNombres: vector con los nombres de las personas. ◦ arregloGeneros: vector con los géneros de las personas. • En la función leerNombres ◦ Parámetros:  tamanio: cantidad de elementos a leer. ◦ Variables locales:  i: variable de control del ciclo.  arregloNom: vector que almacena los nombres ingresados. • En la función leerGeneros ◦ Parámetros:  tamanio: cantidad de elementos a leer. ◦ Variables locales:  i: variable de control del ciclo.  arregloG: vector que almacena los géneros de las personas ingresadas. 390 Vectores y matrices • En la función obtenerPosicion ◦ Parámetros:  arregloNom: arreglo con los nombre de las personas.  nombre: nombre de la persona que se desea buscar.  tamanio: cantidad de elementos del vector. ◦ Variables locales:  i: variable de control del ciclo.  pos: variable que almacena la posición del vector en donde se encuentra el nombre buscado o, -1 de no estar presente. • En el procedimiento mostrarResultados ◦ Parámetros:  pos: posición en donde se encuentra el nombre, o en su defecto, -1 de no estar presente.  arregloN: vector con los nombres de las personas.  arregloG: vector con los genéros de las personas. De acuerdo al análisis planteado, se propone el Algoritmo 6.8. Algoritmo 6.8: ArregloPersonas 1 Algoritmo ArregloPersonas 2 Entero tamanio, posicion 3 Cadena nombreBuscar , arregloNombres [ ] 4 Caracter arregloGeneros [ ] 5 6 imprimir( "Ingrese la cantidad de personas " ) 7 leer( tamanio ) 8 9 arregloNombres = leerNombres( tamanio ) 10 arregloGeneros = leerGeneros( tamanio ) 11 12 imprimir( "Ingrese el nombre de la persona a buscar: " ) 13 leer( nombreBuscar ) 14 15 posicion = obtenerPosicion(arregloNombres, nombreBuscar, tamanio ) 16 17 mostrarResultados( posicion, arregloNombres, arregloGeneros ) 18 FinAlgoritmo 19 Introducción a la Lógica de Programación 393 el nombre buscado, la variable pos retornará el -1 con que se inicializó. Por último, en el algoritmo principal se hace el llamado al procedimiento mostrarResultados(), el cual recibe como parámetros la posición encontrada por la función anterior, el vector de nombres y el vector de géneros. Con estos datos, el procedimiento muestra el nombre, la posición y el género de la persona que coincida con el nombre buscado; si el contenido de la variable pos es igual a -1, esto quiere decir que no se encontró el nombre, en cuyo caso se imprime un mensaje informando este hecho. .:Ejemplo 6.9. Construya un algoritmo utilizando funciones, procedimientos y vectores para ingresar y almacenar las estaturas y los géneros de un conjunto de n personas y después determine el promedio de estaturas de las mujeres y el porcentaje de hombres ingresados. Análisis del problema: Resultados esperados: el promedio de las estaturas de las mujeres y el porcentaje de hombres que se han ingresado y que están almacenados en el arreglo. Datos disponibles: se conocen previamente, la cantidad de personas que se van a procesar, la estatura y el género de las mismas. Proceso: este algoritmo debe tener en primer lugar, una función que permita ingresar los datos de las n personas y almacenarlos en los arreglos respectivos. En segundo lugar, debe implementar una función para obtener el promedio de las estaturas de las mujeres sumando solo las estaturas de las personas con género femenino y dividiendo entre el total de estas. Otra función que debe tener el algoritmo, es la que determina el porcentaje de hombres que se ingresaron; para ello, se debe contar el número de personas con género masculino y dividirlo entre el total de personas ingresadas. Por último, el algoritmo deberá mostrar los resultados que se han obtenido. Variables requeridas: • En el algoritmo principal 394 Vectores y matrices ◦ numeroPersonas: cantidad de personas de las que se conoce la información ◦ arregloEstatura: arreglo que contiene todas las estaturas ◦ arregloGenero: arreglo con los géneros de las personas. ◦ promEstMujeres: variable para almacenar el promedio de las estaturas de todas las mujeres. ◦ porcHombres: variable para almacenar el porcentaje de hombres en el vector. • En la función leerEstaturas ◦ Parámetros:  tamanio: cantidad de elementos a leer. ◦ Variables locales:  i: variable de control del ciclo.  arregloE: vector que almacena las estaturas. • En la función leerGeneros ◦ Parámetros:  tamanio: cantidad de elementos a leer. ◦ Variables locales:  i: variable de control del ciclo.  arregloG: vector que almacena los géneros de las personas ingresadas. • En la función obtenerPromedio ◦ Parámetros:  arregloE: vector con las estaturas de las personas.  arregloG: vector con los géneros de las personas.  tamanio: cantidad de elementos de los vectores. ◦ Variables locales:  i: variable de control del ciclo.  suma: variable que almacena la suma de las estaturas de las mujeres.  promedio: variable que almacena el promedio de las estaturas de las mujeres.  contadorMujeres: variable para almacenar la cantidad de mujeres en el arreglo. • En la función obtenerPorcentajeHombres ◦ Parámetros: Introducción a la Lógica de Programación 395  arregloG: vector con los géneros de las personas.  tamanio: cantidad de elementos de los vectores. ◦ Variables locales:  i: variable de control del ciclo.  hombres: cantidad de hombres en el arreglo.  porcentaje: variable que almacena el porcentaje de hombres que hay en el vector. • En el procedimiento mostrarResultados ◦ Parámetros:  promEstatura: promedio de las estaturas de las mujeres.  porcHombres: porcentaje de hombres en el arreglo. De acuerdo al análisis planteado, se propone el Algoritmo 6.9. Algoritmo 6.9: ArregloPersonas 1 Algoritmo ArregloPersonas 2 Entero numeroPersonas 3 Real arregloEstatura [ ] 4 Caracter arregloGenero [ ] 5 Real promEstMujeres, porcHombres 6 7 imprimir( "Ingrese la cantidad de personas " ) 8 leer( numeroPersonas ) 9 10 arregloEstatura = leerEstaturas( numeroPersonas ) 11 arregloGenero = leerGeneros( numeroPersonas ) 12 13 promEstMujeres = obtenerPromedio ( arregloEstatura, 14 arregloGenero, numeroPersonas ) 15 16 porcHombres = obtenerPorcentajeHombres( arregloGenero, 17 numeroPersonas ) 18 19 mostrarResultados( promEstMujeres, porcHombres ) 20 FinAlgoritmo 21 22 Funcion Real[ ] leerEstaturas( Entero tamanio ) 23 Entero i 24 Real arregloE [ tamanio ] 25 26 Para i = 1 Hasta tamanio Incremento 1 27 imprimir( "Ingrese estatura de la persona " , i ) 28 leer( arregloE[ i ] ) 398 Vectores y matrices mostrar el arreglo con los datos ingresados inicialmente (en desorden) y el arreglo con los datos ya ordenados. Análisis del problema: Resultados esperados: se pretende que el algoritmo muestre un arreglo de números enteros ordenados de menor a mayor, es decir, en orden ascendente. Datos disponibles: Los 4 números enteros que se van a almacenar en el arreglo. Proceso: primero se solicitan los 4 números al usuario y se almacenan en el vector, luego se imprime el vector original con los números en desorden, a continuación, se aplica el método de la “burbuja” al vector y finalmente se vuelve a imprimir este vector. Este orden es importante porque el ordenamiento altera la posición de los elementos dentro del vector, impidiendo imprimir el vector original una vez se ordena. Por supuesto, es posible sacar una copia del vector, ordenar la copia e imprimir los dos vectores; también es posible modificar el algoritmo de ordenamiento para retornar un nuevo vector con los ı́ndices sin alterar los datos originales6 que indique en que orden se deben mostrar los elementos del vector. Antes de resolver el ejemplo, es necesario comprender tres conceptos: Primero, un algoritmo de ordenamiento tiene como finalidad recibir un conjunto de datos y entregarlos ordenados en forma ascendente o descendente según se especifique. Segundo, existen diversas formas de realizar esta tarea de ordenamiento, una de ellas es la denominada “Burbuja”. Tercero, el algoritmo de ordenamiento “Método de la burbuja” tiene a su vez diversas formas de ser escrito. A continuación se presenta una de estas formas. Por medio de un ejemplo se ilustrará su funcionamiento, el cual consiste en ordenar un arreglo con los datos enteros: 7 2 8 1. En esta versión del “Método de la burbuja” se requieren dos ciclos7, el primer ciclo se encarga de indicar la posición del primer elemento 6Un vector de indices es interesante porque permite construir diversos vectores que sirvan para recorrer un mismo vector, aśı es posible recorrer un vector de forma ascendente, descendente, . . . 7normalmente se emplea el ciclo Para Introducción a la Lógica de Programación 399 a ser comparado (ćırculo de donde sale la flecha), el segundo ciclo indica la posición del segundo elemento con el que hay que comparar el primero (ćırculo donde llega la flecha); en cada comparación se verifica si el primer número es mayor al segundo, de serlo, se intercambian de posición, en otro caso, se continúa con el siguiente número. Una vez se ha comparado el elemento que indica el primer ciclo con todas las posiciones, se continúa con la siguiente en el primer ciclo y aśı hasta llegar a la penúltima posición8. Ejemplo de ordenamiento arreglo − > 7 2 8 1 Ciclo1 Ciclo2 Comparación 1 2 7 2 8 1 3 2 7 8 1 4 2 7 8 1 2 3 1 7 8 2 4 1 7 8 2 3 4 1 2 8 7 arreglo − > 1 2 7 8 Variables requeridas: • En el algoritmo principal ◦ Constante requerida:  MAX: constante igual a 4 ◦ Variable:  numero: vector con los MAX números a ordenar. 8Es la última comparación posible, la penúltima posición con la última. 400 Vectores y matrices • En la función leerArreglo ◦ Parámetros:  tamanio: cantidad de elementos del vector. ◦ Variables locales:  i: variable de control del ciclo.  arregloE: vector que almacena los números enteros que el usuario ingresó. • En la función imprimirArreglo ◦ Parámetros:  titulo: texto que se muestra con los datos del vector.  arreglo: vector que almacena los números enteros que el usuario ingresó.  n: tamaño del arreglo. ◦ Variables locales:  i: variable de control del primer ciclo.  cadena: variable que almacena todos los elementos de un arreglo en una Cadena mediante concatenación de los elementos. • En la función ordenarBurbuja ◦ Parámetros:  arreglo: arreglo que almacena los números enteros que el usuario ingresó.  n: tamaño del vector. ◦ Variables locales:  i: variable de control del primer ciclo.  j: variable de control del segundo ciclo.  auxiliar: variable necesaria para intercambiar dos posiciones del vector. De acuerdo al análisis planteado, se propone el Algoritmo 6.10. Algoritmo 6.10: OrdenamientoBurbuja 1 Algoritmo OrdenamientoBurbuja 2 Constante Entero MAX = 4 3 Entero numero [ ] 4 5 numero = leerArreglo( MAX ) 6 7 imprimirArreglo( "Arreglo original: ", numero, MAX ) Introducción a la Lógica de Programación 403 Hasta este punto no se hab́ıa explicado la forma de intercambiar el contenido de dos posiciones en un arreglo (ĺıneas de la 45 a 47). Para intercambiar el contenido de dos posiciones es necesario el uso de una variable (auxiliar) que reciba el contenido de una posición (cualquiera de la dos a intercambiar), en esa posición se almacena el contenido de la segunda posición y en esta posición se almacena en contenido de la variable auxiliar. .:Ejemplo 6.11. Escriba un algoritmo que almacene un conjunto de n números enteros en un vector, los ordene ascendentemente mediante el método de la burbuja, que realice la búsqueda de un número cualquiera mediante el método de “Búsqueda binaria” indicando la posición que ocupa en el vector. Utilice funciones para resolver el ejercicio. Ejemplo de búsqueda binaria para los siguientes números: Ejemplo de búsqueda binaria numero -> 1 3 5 9 14 21 45 63 73 87 89 90 97 elemento = 73 Ciclo Comparación 1 1 3 5 9 14 21 45 63 73 87 89 90 97 dado que 45 es menor que 73 2 1 3 5 9 14 21 45 63 73 87 89 90 97 dado que 87 es mayor que 73 3 1 3 5 9 14 21 45 63 73 87 89 90 97 Dato encontrado!!! La “Búsqueda binaria” permite determinar de una manera muy eficiente la posición de un elemento en un vector ordenado o concluir que el elemento no está presente. Para conocer la posición del elemento, el algoritmo se ubica en la posición del medio y, a través de una comparación, define si debe realizar la busqueda en la mitad superior (mayores a él) o en los elementos de la mitad inferior (menores a él); esto permite excluir de la búsqueda en cada iteración la mitad de los elementos del vector; siguiendo este procedimiento, al final se llega al elemento o se concluye su ausencia. 404 Vectores y matrices Análisis del problema: Resultados esperados: la posición que ocupa en el vector el número buscado. Datos disponibles: los números que se van a ingresar en dicho arreglo y el número que se va a buscar posteriormente. Proceso: luego de solicitar los datos que se van a almacenar en el vector, el algoritmo debe ordenar este arreglo, por medio del método de la burbuja como se explicó en el ejercicio anterior. Posteriormente, el algoritmo debe solicitar un número que se va a buscar en el vector y, mediante una función que implemente el método de búsqueda binaria, realice la búsqueda del número e informe en qué posición se encuentra. Este ejercicio se va a resolver con un vector de 13 posiciones. • En el algoritmo principal ◦ Constante requerida:  MAX: constante igual a 13. ◦ Variables requeridas:  numero: vector con los MAX números a ordenar.  numeroBuscar: valor que se desea buscar.  posicion: posición del vector en donde se encuentra el valor buscado o, -1 de no encontrarlo. • En la función leerArreglo ◦ Parámetros:  tamanio: tamaño del vector. ◦ Variables locales:  i: variable de control del ciclo.  arregloE: arreglo que almacena los números enteros que el usuario ingresó. • En la función ordenarBurbuja ◦ Parámetros:  arreglo: vector que almacena los números enteros que el usuario ingresó.  n: tamaño del vector. Introducción a la Lógica de Programación 405 ◦ Variables locales:  i: variable de control del primer ciclo.  j: variable de control del segundo ciclo.  auxiliar: variable necesaria para intercambiar dos posiciones de un vector. • En la función buscarElemento ◦ Parámetros:  arreglo: vector que almacena los números enteros que el usuario ingresó.  n: tamaño del vector.  numeroBuscar: valor que se desea buscar. ◦ Variables locales:  primero: punto inicial del rango de búsqueda.  ultimo: punto final del rango de búsqueda.  centro: punto medio del rango de búsqueda.  posicion: posición en donde se encuentra el valor buscado o, -1 de no encontrarlo. De acuerdo al análisis planteado, se propone el Algoritmo 6.11. Algoritmo 6.11: busquedaBinaria 1 Algoritmo busquedaBinaria 2 Constante Entero MAX = 13 3 Entero numero[ ] 4 Entero numeroBuscar, posicion 5 6 numero = leerArreglo( MAX ) 7 8 imprimir( "Número a buscar: " ) 9 leer( numeroBuscar ) 10 11 ordenarBurbuja ( numero, MAX ) 12 13 posicion = buscarElemento( numero, MAX, numeroBuscar ) 14 15 Si( posicion > 0 ) Entonces 16 imprimir( "El número buscado se encontró en :", posicion ) 17 SiNo 18 imprimir( "El número no se encuentra en el arreglo" ) 19 FinSi 20 FinAlgoritmo 408 Vectores y matrices (1 + 6) / 2 7 / 2 3 6.2. Matrices Los arreglos de dos dimensiones se conocen también como matrices. Al igual que los vectores, las matrices son conjuntos de celdas de memoria que almacenan datos del mismo tipo, pero esta vez en forma de tablas, con filas y columnas; de aqúı su nombre de arreglos bidimensionales. Las matrices son variables a las que se les debe dar un nombre con un identificador válido y debe especificarse también su tipo de datos al momento de declararlas. Las matrices son bastante útiles en la solución de aquellos ejercicios en los que se requiera almacenar varios datos de varios objetos, por ejemplo, supóngase que se deben almacenar las 10 notas parciales de cada uno de los 4 estudiantes de un grupo; esto significa que en total se requieren 40 espacios de memoria. Este problema puede resolverse fácilmente utilizando una matriz o arreglo bidimensional. 1 <- ı́ndice de la fila 2 3 4 ı́ndice de la columna -> 1 2 3 4 5 6 7 8 9 10 La forma de interpretarlo es que cada celda o posición requiere de dos coordenadas (fila, columna) para ubicar una posición. En términos generales, suponga por ejemplo una matriz de m filas y n columnas, donde el primer indice especifica la fila y el segundo la columna. matriz =  a11 a12 a13 · · · a1n a21 a22 a23 · · · a2n ... ... ... · · · ... am1 am2 am3 · · · amn  Introducción a la Lógica de Programación 409 6.2.1 Declaración de una matriz Las matrices también requieren declarar una variable suscrita que permita acceder a los datos. Una variable suscrita de una matriz se diferencia de la de un vector por la cantidad de corchetes en su declaración. La cantidad de juegos de corchetes indica la dimensión del arreglo. Entero matrizEdades [ ][ ] Real matrizSalarios [ ][ ] Cadena matrizNombres [ ][ ] El doble juego de corchetes al final, se usa para indicar que se debe separar espacio tanto para las filas y las columnas que va a tener la matriz. Por supuesto, luego de declararse la variable suscrita, se deberá especificar el tamaño, es decir, indicar el número de filas y columnas que esta va a tener. Esto se hace de la misma forma que se hizo con los arreglos unidimensionales, es decir, utilizando la función dimensionar, de la siguiente forma: Entero matrizEdades [ ][ ] Real matrizSalarios [ ][ ] Cadena matrizNombres [ ][ ] matrizEdades = dimensionar( 4, 3 ) matrizSalarios = dimensionar( 10, 12 ) matrizNombres = dimensionar( 10, 10 ) O también, se puede dar tamaño cuando se está declarando la matriz de la siguiente forma: Cadena matrizNombres [ 3 ][ 10 ] Real matrizSalarios[ 15 ][ 5 ] La forma de dimensionar las matrices, como los vectores, como ya se ha dicho, dependerá del lenguaje de programación y sus instrucciones propias para este propósito. En todos los casos, el número dentro del primer juego de corchetes especifica la cantidad de filas que tendrá la matriz, mientras que el número en el segundo juego de corchetes indica la cantidad de columnas. Entero matrizEdades [ 4 ][ 3 ] Al declarar la matriz de edades anterior denominada matrizEdades, gráficamente se verá de la siguiente manera: 410 Vectores y matrices 1 <- 4 filas 2 3 4 1 2 3 <- 3 columnas 6.2.2 Almacenamiento de datos en una matriz Cuando se va a almacenar los datos en una matriz, es necesario especificar la celda en la que cada dato va a ir quedando; para ello, se debe indicar, a través de números ı́ndice, la fila y la columna en la que se encuentra la celda, de la siguiente manera: matrizEdades [1][1] = 20 matrizEdades [1][2] = 18 matrizEdades [3][2] = 21 matrizEdades [4][3] = 73 Con estas instrucciones, se almacenaŕıa un 20 en la celda que se encuentra en la fila 1 y columna 1, un 18 en la celda ubicada en la fila 1 y columna 2, un 21 en la celda que está en la fila 3 y columna 2 y un 73 en la celda que está en la fila 3 y columna 4. De tal forma que la matriz de edades quedaŕıa de la siguiente forma: 20 18 1 <- ı́ndice de la fila 2 21 3 73 4 1 2 3 <- ı́ndice de la columna Si se desea almacenar una serie de datos en una matriz de 3 filas por 3 columnas, también se podŕıan almacenar directamente de la siguiente forma: Entero matrizNumeros[ ][ ] = { { 20, 12, 18}, { 34, 37, 31}, { 44, 49, 46} } Donde cada conjunto de llaves interiores especifican cada fila de la matriz. Introducción a la Lógica de Programación 413 La transpuesta de la matriz A, es simbolizada como AT . AT =  a11 a21 a31 · · · an1 a12 a22 a32 · · · an2 ... ... ... · · · ... a1m a2m a4m · · · anm  Análisis del problema: Resultados esperados: la transpuesta de una matriz ingresada, al igual que la original. Datos disponibles: Se debe conocer la matriz original, incluyendo su tamaño y los elementos ubicados en sus diferentes posiciones. Proceso: Luego de tener la matriz original ya cargada con datos, el algoritmo debe recorrer esta matriz fila a fila e ir pasando los elementos a cada columna de la matriz transpuesta. Una vez se haya terminado el proceso, se muestran ambas matrices. Variables requeridas: • matrizInicial: matriz con los datos iniciales • matrizTranspuesta: matriz con los datos iniciales pero con las filas y columnas intercambiadas (transpuesta) • filas: número de filas de la matriz inicial. • columnas: número de columnas de la matriz inicial. • i: variable de control del primer ciclo. • j: variable de control del segundo ciclo. • cadena1: cadena que almacenará todos los elementos de la matriz inicial para su posterior impresión. • cadena2: cadena que almacenará todos los elementos de la matriz transpuesta para su posterior impresión. De acuerdo al análisis planteado, se propone el Algoritmo 6.12. Algoritmo 6.12: TranspuestaMatriz 1 Algoritmo TranspuestaMatriz 2 Entero matrizInicial [ ][ ], matrizTranspuesta [ ][ ] 3 Entero filas, columnas, i, j 4 Cadena cadena1, cadena2 5 414 Vectores y matrices 6 imprimir( "Número de filas para la matriz: " ) 7 leer( filas ) 8 9 imprimir( "Número de columnas para la matriz: " ) 10 leer( columnas ) 11 12 matrizInicial = dimensionar( filas, columnas ) 13 matrizTranspuesta = dimensionar( columnas, filas ) 14 15 Para i = 1 Hasta filas Incremento 1 16 Para j = 1 Hasta columnas Incremento 1 17 imprimir( "Número para posición " , i, " ", j, ": " ) 18 leer( matrizInicial[ i ][ j ] ) 19 FinPara 20 FinPara 21 22 Para i = 1 Hasta filas Incremento 1 23 Para j = 1 Hasta columnas Incremento 1 24 matrizTranspuesta[ j ][ i ] = matrizInicial[ i ][ j ] 25 FinPara 26 FinPara 27 28 cadena1 = "" 29 Para i = 1 Hasta filas Incremento 1 30 Para j = 1 Hasta columnas Incremento 1 31 cadena1 = cadena1 + matrizInicial [ i ][ j ] + " " 32 FinPara 33 cadena1 = cadena1 + SALTO_LINEA 34 FinPara 35 36 cadena2 = "" 37 Para i = 1 Hasta columnas Incremento 1 38 Para j = 1 Hasta filas Incremento 1 39 cadena2 = cadena2 + matrizTranspuesta[ i ][ j ] + " " 40 FinPara 41 cadena2 = cadena2 + SALTO_LINEA 42 FinPara 43 44 imprimir( "Matriz inicial: ", cadena1 ) 45 imprimir( "Matriz transpuesta: ", cadena2 ) 46 FinAlgoritmo Explicación del algoritmo: Inicialmente, se realiza la declaración de todas las variables necesarias (ĺıneas 2 a la 4). A continuación, se solicita la cantidad de filas y de columnas que tendrá la matriz inicial, que corresponde al mismo número de columnas y de filas de la matriz transpuesta. Introducción a la Lógica de Programación 415 6 imprimir( "Número de filas para la matriz: " ) 7 leer( filas ) 8 9 imprimir( "Número de columnas para la matriz: " ) 10 leer( columnas ) 11 12 matrizInicial = dimensionar( filas, columnas ) 13 matrizTranspuesta = dimensionar( columnas, filas ) Luego, utilizando dos ciclos Para anidados, se solicitan los datos para la matriz inicial. 15 Para i = 1 Hasta filas Incremento 1 16 Para j = 1 Hasta columnas Incremento 1 17 imprimir( "Número para posición " , i, " ", j, ": " ) 18 leer( matrizInicial[ i ][ j ] ) 19 FinPara 20 FinPara Después, usando nuevamente dos ciclos Para anidados, se pasan los elementos de la matriz inicial a la transpuesta. 22 Para i = 1 Hasta filas Incremento 1 23 Para j = 1 Hasta columnas Incremento 1 24 matrizTranspuesta[ j ][ i ] = matrizInicial[ i ][ j ] 25 FinPara 26 FinPara Note que, en esta parte, se usan los ı́ndices i y j para recorrer filas y columnas de la matriz inicial y columnas y filas en la matriz transpuesta. Es por eso que estos ı́ndices están cambiados en la instrucción: 24 matrizTranspuesta[ j ][ i ] = matrizInicial[ i ][ j ] De tal forma que, a medida que se recorren las filas de la matriz inicial, se recorren las columnas de la transpuesta y se van pasando los elementos respectivos. 22 Para i = 1 Hasta filas Incremento 1 23 Para j = 1 Hasta columnas Incremento 1 24 matrizTranspuesta[ j ][ i ] = matrizInicial[ i ][ j ] 25 FinPara 26 FinPara Luego de haber pasado los elementos a la matriz transpuesta, se recorre la matriz inicial y se pasan los elementos a la variable cadena1 (ĺıneas de la 28 a la 34): 418 Vectores y matrices 20 Si( matriz[ i ][ j ] < 50 O 21 matriz[ i ][ j ] > 100 ) Entonces 22 imprimir( "Ha ingresado un número equivocado" ) 23 FinSi 24 MientrasQue( matriz[ i ][ j ] < 50 O 25 matriz[ i ][ j ] > 100 ) 26 FinPara 27 FinPara 28 29 imprimir( "Ingrese el número a buscar en la matriz ") 30 leer( numero ) 31 32 encontrado = Falso 33 Para i = 1 Hasta filas Incremento 1 34 Para j = 1 Hasta columnas Incremento 1 35 Si( matriz[ i ][ j ] == numero Y encontrado == Falso ) Entonces 36 imprimir( "Encontrado en la posición" , i, " ", j ) 37 encontrado = Verdadero 38 FinSi 39 FinPara 40 FinPara 41 42 Si( encontrado == Falso ) Entonces 43 imprimir( "El número no está almacenado en la matriz " ) 44 FinSi 45 FinAlgoritmo Explicación del algoritmo: Después de declarar las variables necesarias, el algoritmo solicita el número de filas y columnas que va a tener la matriz y captura estos datos. Con la función dimensionar(), se le da el tamaño a la matriz. 6 imprimir( "Número de filas para la matriz: " ) 7 leer( filas ) 8 9 imprimir( "Número de columnas para la matriz: " ) 10 leer( columnas ) 11 12 matriz = dimensionar( filas, columnas ) Vienen luego dos ciclos Para, uno dentro del otro, con el f́ın de solicitar los números que se van a almacenar en las celdas de la matŕız. Note que dentro del segundo ciclo, está una instrucción Haga-MientrasQue, que tiene el propósito de validar los números que está ingresando el usuario y que deben pertenecer al rango entre 50 y 100, según lo requiere el algoritmo. Introducción a la Lógica de Programación 419 14 Para i = 1 Hasta filas Incremento 1 15 Para j = 1 Hasta columnas Incremento 1 16 Haga 17 imprimir( "Ingrese numero para posición " , i, j ) 18 leer( matriz[ i ][ j ] ) 19 20 Si( matriz[ i ][ j ] < 50 O 21 matriz[ i ][ j ] > 100 ) Entonces 22 imprimir( "Ha ingresado un número equivocado" ) 23 FinSi 24 MientrasQue( matriz[ i ][ j ] < 50 O 25 matriz[ i ][ j ] > 100 ) 26 FinPara 27 FinPara Al terminar los dos ciclos Para anidados, se solicita al usuario que ingrese el número que se va a buscar en la matriz. 29 imprimir( "Ingrese el número a buscar en la matriz ") 30 leer( numero ) Ahora se procede a realizar la búsqueda, para ello se inicializa la variable encontrado en Falso, pues todav́ıa no se ha encontrado dicho número. Nuevamente se recorre la matriz con dos ciclos Para anidados como se explicó al principio del tema de matrices o arreglos bidimensionales. Dentro de estos ciclos se ubica una instrucción Si que compara si lo que hay almacenado en la posición i, j de la matriz, es igual a lo que contiene la variable numero; si es aśı, se encontró el elemento y se muestra al usuario, además se cambia el valor de la variable encontrado a Verdadero, para evitar imprimir nuevamente el mensaje si el número está en varias posiciones de la matriz. 32 encontrado = Falso 33 Para i = 1 Hasta filas Incremento 1 34 Para j = 1 Hasta columnas Incremento 1 35 Si( matriz[ i ][ j ] == numero Y encontrado == Falso ) Entonces 36 imprimir( "Encontrado en la posición" , i, " ", j ) 37 encontrado = Verdadero 38 FinSi 39 FinPara 40 FinPara Después de estos dos ciclos Para anidados, se muestra un mensaje dentro de una instrucción Si que solo se muestra si la variable encontrado es Falso, es decir, si no se encontró el número buscado en toda la matriz. 420 Vectores y matrices 42 Si( encontrado == Falso ) Entonces 43 imprimir( "El número no está almacenado en la matriz " ) 44 FinSi Los ejercicios de matrices que siguen a continuación, se resolverán haciendo uso de funciones y procedimientos, ya que, como se mencionó antes, los algoritmos se harán más modulares y fáciles de entender. .:Ejemplo 6.14. Escriba un algoritmo que almacene en dos matrices de tamaño 3 x 3, es decir, 3 filas y 3 columnas, números enteros y que a través de una función permita calcular y almacenar en una tercera matriz la suma de los números almacenados en las celdas equivalentes de las dos anteriores. Al final, el algoritmo debe mostrar las tres matrices. En términos generales: A =  a11 a12 a13 · · · a1n a21 a22 a23 · · · a2n ... ... ... · · · ... am1 am2 am3 · · · amn  B =  b11 b12 b13 · · · b1n b21 b22 b23 · · · b2n ... ... ... · · · ... bm1 bm2 bm3 · · · bmn  C = A + B =  a11 + b11 a12 + b12 a13 + b13 · · · b1n + b1n a21 + b21 a22 + b22 a23 + b23 · · · a2n + b2n ... ... ... · · · ... am1 + bm1 am2 + bm2 am3 + bm3 · · · amn + bmn  Análisis del problema: Resultados esperados: una matriz donde los números almacenados en cada celda son el resultado de la suma de los números ubicados en las respectivas celdas de las matrices ingresadas. Datos disponibles: se tienen los números enteros que van a ser almacenados en las dos primeras matrices y que van a ser sumados. Introducción a la Lógica de Programación 423 36 Para j = 1 Hasta tamanio Incremento 1 37 matriz[ i ][ j ] = m1[ i ][ j ] + m2[ i ][ j ] 38 FinPara 39 FinPara 40 41 Retornar matriz 42 FinFuncion 43 44 Procedimiento mostrarResultados( Entero [ ][ ] m1, 45 Entero [ ][ ] m2, 46 Entero [ ][ ] m3, 47 Entero tamanio ) 48 Entero i, j 49 Cadena cadenaA, cadenaB, cadenaC 50 51 Para i = 1 Hasta tamanio Incremento 1 52 Para j = 1 Hasta tamanio Incremento 1 53 cadenaA = cadenaA, m1[ i ][ j ] + " " 54 cadenaB = cadenaB, m2[ i ][ j ] + " " 55 cadenaC = cadenaC, m3[ i ][ j ] + " " 56 FinPara 57 cadenaA = cadenaA + SALTO_LINEA 58 cadenaB = cadenaB + SALTO_LINEA 59 cadenaC = cadenaC + SALTO_LINEA 60 FinPara 61 62 imprimir( "Matriz A ", cadenaA ) 63 imprimir( "Matriz B ", cadenaB ) 64 imprimir( "Matriz Resultado ", cadenaC ) 65 FinProcedimiento Explicación del algoritmo: En este algoritmo, lo primero que se hace es declarar las variables suscritas que necesarias para las tres matrices de tamaño 3 x 3. El tamaño de estas matrices se da a partir de una constante MAX de tipo Entero que almacena el número 3 y que es el mismo para las filas y las columnas. 2 Constante Entero MAX = 3 3 Entero matrizA [ ][ ] 4 Entero matrizB [ ][ ] 5 Entero matrizC [ ][ ] Se utiliza la función leerDatos() para solicitar los números enteros que se van a almacenar en las dos primeras matrices, y se env́ıa como argumento el tamaño de las mismas (número de filas igual al número de columnas), para dimensionarlas internamente; 7 matrizA = leerDatos( MAX ) 424 Vectores y matrices 8 matrizB = leerDatos( MAX ) Esta función consta de dos ciclos Para anidados que permiten recorrer las filas y las columnas e ir ubicándose en cada celda de la matriz y poder almacenar alĺı cada número que el usuario va ingresando. Una vez ingresados los datos, se usa la función calcularSuma() que recibe como parámetros las dos matrices ya con datos y el tamaño de las mismas, con el que se da tamaño a una matriz que está dentro de esta función y que sirve para almacenar los resultados de la suma; esta matriz será retornada al algoritmo principal con los resultados de la suma de los valores de las celdas ubicadas en la misma posición de las matrices que se van a sumar. Inicialmente se hace el llamado con: 10 matrizC = calcularSuma( matrizA, matrizB, MAX ) Y posteriormente la función ejecuta su código interno: 29 Funcion Entero[ ][ ] calcularSuma( Entero m1[ ][ ], 30 Entero m2[ ][ ], 31 Entero tamanio ) 32 Entero i, j 33 Entero matriz[ tamanio ] [ tamanio ] 34 35 Para i = 1 Hasta tamanio Incremento 1 36 Para j = 1 Hasta tamanio Incremento 1 37 matriz[ i ][ j ] = m1[ i ][ j ] + m2[ i ][ j ] 38 FinPara 39 FinPara 40 41 Retornar matriz 42 FinFuncion Esta función utiliza dos ciclos Para con los que se recorren las celdas de las dos matrices con datos y se hace la suma de los valores que están alĺı, almacenándolos en las celdas de la matriz de resultados. 35 Para i = 1 Hasta tamanio Incremento 1 36 Para j = 1 Hasta tamanio Incremento 1 37 matriz[ i ][ j ] = m1[ i ][ j ] + m2[ i ][ j ] 38 FinPara 39 FinPara Por último, las tres matrices y su tamaño se pasan como argumento al procedimiento mostrarResultados() 12 mostrarResultados( matrizA, matrizB, matrizC, MAX ) Introducción a la Lógica de Programación 425 Esta función recorre mediante dos ciclos Para anidados las matrices y va pasando los datos de estas matrices a tres variables de tipo Cadena que serán las que se mostrarán al usuario mediante la función imprimir(). 51 Para i = 1 Hasta tamanio Incremento 1 52 Para j = 1 Hasta tamanio Incremento 1 53 cadenaA = cadenaA, m1[ i ][ j ] + " " 54 cadenaB = cadenaB, m2[ i ][ j ] + " " 55 cadenaC = cadenaC, m3[ i ][ j ] + " " 56 FinPara 57 cadenaA = cadenaA + SALTO_LINEA 58 cadenaB = cadenaB + SALTO_LINEA 59 cadenaC = cadenaC + SALTO_LINEA 60 FinPara 61 62 imprimir( "Matriz A ", cadenaA ) 63 imprimir( "Matriz B ", cadenaB ) 64 imprimir( "Matriz Resultado ", cadenaC ) Para pasar los datos que están en las matrices a las variables de tipo Cadena, se recorre con dos ciclos Para anidados cada matriz y se usa la variable de tipo Cadena para ir almacenando de forma concatenada lo que hay en las posiciones de cada matriz. Al terminar de pasar lo que hay en cada fila, es decir, de recorrer el ciclo Para interno, se ingresa un salto de ĺınea, lo que permite que, cuando se muestre esta variable cadena, se vea cada fila de la matriz separada de la anterior fila, dando la sensación al usuario de estar viendo una tabla o matriz. .:Ejemplo 6.15. Se desea construir un algoritmo que permita almacenar en una matriz cada uno de los doce sueldos pagados durante un año a un conjunto de 10 empleados. El algoritmo debe determinar el valor total de la nómina pagado durante un mes cualquiera del año y el total pagado durante el año a un empleado cualquiera. Diseñe el algoritmo utilizando funciones y procedimientos. matrizSueldos =  s11 s12 s13 · · · s1 12 s21 s22 s23 · · · s2 12 ... ... ... · · · ... s10 1 s10 2 s10 3 · · · s10 12  Se tienen 12 columnas, una por cada mes del año y se tienen 10 filas, una por cada empleado. Aśı, por ejemplo s23 representa el sueldo del segundo empleado en el tercer mes (Marzo). 428 Vectores y matrices 6 7 matrizSueldos = leerDatos( MAX_EMPLEADOS, MAX_MESES ) 8 9 imprimir( "Numero del mes que desea totalizar: " ) 10 leer( numeroMes ) 11 12 imprimir( "Número del empleado que desea totalizar" ) 13 leer( numeroEmpleado ) 14 15 nominaMesN = calcularNominaMesM( matrizSueldos, 16 numeroMes, 17 MAX_EMPLEADOS ) 18 19 nominaEmpleadoE = calcularNominaEmpleadoE( matrizSueldos, 20 numeroEmpleado, 21 MAX_MESES ) 22 23 mostrarResultados( nominaMesM, nominaEmpleadoE ) 24 FinAlgoritmo 25 26 Funcion Entero[ ][ ] leerDatos( Entero filas, Entero columnas) 27 Entero i, j, 28 Real matriz[ filas ] [ columnas ] 29 30 Para i = 1 Hasta filas Incremento 1 31 Para j = 1 Hasta columnas Incremento 1 32 imprimir( "Sueldo del empleado " , i, " mes ",j,":" ) 33 leer( matriz[ i ][ j ] ) 34 FinPara 35 FinPara 36 37 Retornar matriz 38 FinFuncion 39 40 Funcion Real calcularNominaMesM( Real matriz[ ][ ], 41 Entero numeroMes, 42 Entero maximoEmpleados ) 43 Entero i 44 Real nominaMesM 45 46 nominaMesM = 0 47 Para i = 1 Hasta maximoEmpleados Incremento 1 48 nominaMesM = nominaMesM + matriz[ i ][ numeroMes ] 49 FinPara 50 51 Retornar nominaMesM 52 FinFuncion 53 Introducción a la Lógica de Programación 429 54 Funcion Real calcularNominaEmpleadoE( Real matriz[ ][ ], 55 Entero numeroEmp, 56 Entero maximoMeses ) 57 Entero i 58 Real nominaEmpleadoE 59 60 nominaEmpleadoE = 0 61 Para i = 1 Hasta maximoMeses Incremento 1 62 nominaEmpleadoE = nominaEmpleadoE + matriz[numeroEmp][i] 63 FinPara 64 65 Retornar nominaEmpleadoE 66 FinFuncion 67 68 Procedimiento mostrarResultados( Real nominaMesM, 69 Real nominaEmpleadoE ) 70 imprimir( "El total nómina del mes: ", nominaMesM ) 71 imprimir( "El total año empleado: ", nominaEmpleadoE ) 72 FinProcedimiento Explicación del algoritmo: En el algoritmo principal se declaran las variables como la matriz de sueldos, la nomina del mes que se requiere y la nómina del empleado que se requiere. Posteriormente se hace el llamado a la función leerDatos(), a la que se le env́ıan como parámetros el número máximo de empleados y el máximo de meses que tiene la matriz de sueldos. 7 matrizSueldos = leerDatos( MAX_EMPLEADOS, MAX_MESES ) Esta función permite almacenar los 12 sueldos de los 10 empleados mediante dos ciclos Para anidados y retorna una matriz con los sueldos ingresados para que sea almacenada en la variable matrizSueldos. Recuerde que las filas de la matriz representan los empleados, mientras que las columnas representan los meses del año. La referencia a la matriz de sueldos se env́ıa como argumento, junto con el número del mes del que se desea conocer el valor total de la nómina y el máximo de empleados, a la función calcularNominaMesM() , la cual utiliza un ciclo Para con el objetivo de recorrer las filas de la matŕız en la columna que representa al mes analizado e ir sumando los sueldos solo de ese mes; una vez hace el recorrido de las celdas que están en la columna del mes analizado, retornando el resultado de esta suma, es decir, lo pagado durante ese mes a los 10 empleados. 430 Vectores y matrices 40 Funcion Real calcularNominaMesM( Real matriz[ ][ ], 41 Entero numeroMes, 42 Entero maximoEmpleados ) 43 Entero i 44 Real nominaMesM 45 46 nominaMesM = 0 47 Para i = 1 Hasta maximoEmpleados Incremento 1 48 nominaMesM = nominaMesM + matriz[ i ][ numeroMes ] 49 FinPara 50 51 Retornar nominaMesM 52 FinFuncion Igual sucede con la función calcularNominaEmpleadoE(), que recibe la referencia a la matriz de sueldos como argumento, el número de fila que representa al empleado, aśı como el máximo de meses, y a través de un ciclo Para se recorre las columnas de la matriz en la fila que representa al empleado del que se desea conocer su nómina anual, retornando la suma de los 12 sueldos del respectivo empleado. 54 Funcion Real calcularNominaEmpleadoE( Real matriz[ ][ ], 55 Entero numeroEmp, 56 Entero maximoMeses ) 57 Entero i 58 Real nominaEmpleadoE 59 60 nominaEmpleadoE = 0 61 Para i = 1 Hasta maximoMeses Incremento 1 62 nominaEmpleadoE = nominaEmpleadoE + matriz[numeroEmp][i] 63 FinPara 64 65 Retornar nominaEmpleadoE 66 FinFuncion Al finalizar, el algoritmo muestra, a través del procedimiento mostrarResultados() el total de la nómina pagado durante el mes especificado del año y lo pagado durante el año al empleado indicado. .:Ejemplo 6.16. Construya un algoritmo que permita almacenar caracteres en una matriz cuadrada de n filas y columnas, y que, posteriormente permita intercambiar los caracteres que se encuentran en las celdas de dos filas cualquiera. El algoritmo debe mostrar la matriz inicial y la matriz resultante luego de intercambiar los elementos de las filas. Utilice funciones y procedimientos para realizar los procesos.
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved