UNIVERSIDAD TECNOLOGICA DE PEREIRA FACULTAD DE INGENIERIA INDUSTRIAL MATRICES - INFORMATICA III – Febrero 17 de 2012 MATRIZ: Es un arreglo que puede contener varias direcciones (filas y columnas), pueden ser: Bidimensionales, Tridimensionales, Entre otros. Los elementos que la componen pueden ser de diferente tipo (a nivel columna): numérico, cadena, fecha, booleano, entre otros (en general se utilizan de tipo numérico). A continuación se esquematiza una matriz bidimensional en donde cada elemento tiene una posición definida (fila, columna) con su respectivo contenido: Columnas Filas 6 1 8 189 100 7 23 15 50 12 16 9 Diagonal secundaria, compuesta por los números 2, 12, 23 y 189 2 80 97 41 Matriz de 4x4 (en este caso la matriz es cuadrada) Diagonal principal, compuesta por los números 6,7,16 y 41 * Para la utilización de diagonales la matriz debe ser cuadrada, esto es, el número de filas igual al número de columnas. Para referirnos a cada elemento se debe invocar su posición fila y columna (en su orden), por ejemplo: - El número 6 esta en la posición 1,1 - El número 7 esta en la posición 2,2 - El número 80 esta en la posición 2,4 - El número 9 esta en la posición 4,3 Tipos de matrices: Rectangular, cuadrada, traspuesta, opuesta, nula, simétrica, antisimétrica, diagonal, escalar, identidad, triangular, inversa, entre otras. Operaciones con matrices: - Suma y Resta de matrices: Las dos matrices (n x m y p x q) deben ser de la misma dimensión, donde n=p y m=q. - Producto de un real por una matriz: Se multiplica el escalar por cada elemento y se obtiene una matriz del mismo orden. - Producto de matrices: Se debe tener en cuenta que el número de columnas de la primera matriz debe ser igual al número de filas de la segunda matriz, la matriz producto corresponde al orden n x q. El elemento que ocupa el lugar (i, j) en la matriz producto se obtiene sumando los productos de cada elemento de la fila i de la matriz A por el correspondiente de la columna j de la matriz B. Ejercicios: 1) Ingresar tres notas parciales para N estudiantes con un porcentaje de 25%, 35% y 40% respectivamente; calcular y mostrar el promedio de las notas definitivas mayores o iguales a 3 y la cantidad de estudiantes que perdieron la materia (nota definitiva menor a 3.0). clc clear all matriznotas = 0; nota1 = 0; nota2 = 0; Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información e-mail: [email protected] - [email protected] nota3 = 0; ndf = 0; promedio = 0; sumadf = 0; candf = 0; perdieron = 0; canalumnos = 0; canalumnos = input('Cantidad de alumnos: '); % Llenar la matriz con las 3 notas parciales por alumno for a = 1 : canalumnos disp(sprintf('Notas del alumno No.%d', a)) nota1 = input('Primera nota 25%: '); nota2 = input('Segunda nota 35%: '); nota3 = input('Tercera nota 40%: '); % Almacenar en la matriz matriznotas(a, 1) = nota1; matriznotas(a, 2) = nota2; matriznotas(a, 3) = nota3; end % Recorrer la matriz, calcular la nota definitiva y verificar si cumple % para el promedio solicitado. for a = 1 : canalumnos ndf = matriznotas(a, 1) * 0.25 + matriznotas(a, 2) * 0.35 + matriznotas(a, 3) * 0.4; if ndf >= 3 sumadf = sumadf + ndf; candf = candf + 1; else perdieron = perdieron + 1; end end promedio = sumadf / candf; disp(sprintf('Promedio de las notas definitivas mayores o iguales a tres --> %.2f', promedio)) disp(sprintf('Cantidad de estudiantes que perdieron la materia --> %d', perdieron)) disp('Fin del ejercicio') 2) Diseñar una matriz cuadrada (n x n) y una vez llena de números, calcular el valor total de la diagonal principal mostrando su resultado. 3) Diseñar una matriz cuadrada (n x n) y una vez llena de números, calcular el valor total de la diagonal principal pero solo para aquellos números cuyo valor sea par y al final mostrar su resultado. 4) Diseñar una matriz cuadrada (n x n) y una vez llena de números, calcular el valor total de la diagonal secundaria pero solo para aquellos números impares, y al final mostrar su resultado. 5) Se cuenta con una matriz poblacional de municipios, la cual presenta una dimensión de 10 x 5, donde 10 son los municipios y 5 son las columnas con la siguiente información en su orden: - Cantidad de niños - Cantidad de mujeres - Cantidad de hombres - Altitud - Temperatura Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información e-mail: [email protected] - [email protected] Se requiere determinar: Número total de habitantes, temperatura mayor o igual a 20 grados centígrados. promedio poblacional y cantidad de municipos con clc clear all censomun = 0; % Variable para la matriz de censo del municpio promhabi = 0; % Variable para calcular el promedio de los habitantes por municipio numtothabi = 0; % Variable para sumar la población total tempmayor = 0; % Variable para contar las temperaturas mayores a 15 grados centígrados disp('Matriz con información de municipios') [censomun] = xlsread('InfoMunicipios.xlsx', 'Poblacion'); % Leer la información de los municipios desde Excel for m = 1 : 10 % Recorrer los 10 municipios % Acumular la población numtothabi = numtothabi + (censomun (m,1) + censomun(m,2)+ censomun(m,3)); if censomun(m,5) >= 20 % Determinar si el municipio tiene una temperatura >= a 20 grados centígrados tempmayor = tempmayor + 1; % De ser afirmativo irlos contando end end promhabi = numtothabi / 10; % Determinar el promedio poblacional de los municipios disp(sprintf('El total de habitantes es de %d', numtothabi)) disp(sprintf('El promedio de habitantes por municipio es de %12.2f', promhabi)) disp(sprintf('La cantidad de municipios con >= 20 grados centígrados es %d', tempmayor)) 6) Crear un libro en Excel y en una hoja ingresar los gastos de la semana para n personas (las filas que quiera digitar en lo posible no menor a 10). Esta matriz tendrá una dimensión de n x 7 (donde el n son las personas y el 7 son los días de la semana de lunes a domingo). Los valores ingresados son numéricos en su totalidad, nada de encabezados con nombres de columnas, nombres de personas o nombres de los días. Se requiere determinar: - El gasto total - El mayor valor de gasto en persona (en otras palabras la persona que más gasto) - Nombre del día que tuvo mayor gasto (incluido su valor). a) Solución algorítmica clc clear all gastos = 0; % Variable para almacenar los datos como una matriz gastotal = 0; % Variable para acumular el gasto total de la semana mayorgastop = 0; % Variable para almacenar el gasto mayor de persona en la semana mayorgastod = 0; % Variable para almacenar el gasto mayor del día de la semana posdia = 0; % Varible para determinar la posición del dia de mayor gasto nomdia = ''; % Variable para determinar el nombre del día a partir de la posición disp('Matriz con información de gastos semanales de personas') gastos = xlsread('Personas.xlsx', 'Gastos'); % Leer la información de los gastos desde Excel [personas] = size(gastos, 1); % Determinar la cantidad de personas for p = 1 : personas % Recorrer desde la primera hasta la última persona sumaper = 0; % Dejar la variable en cero para acumular el gasto de la persona actual for d = 1 : 7 % Recorrer desde el primer hasta el último día de la semana gastotal = gastotal + gastos(p,d); % Acumular el gasto total (dia a dia) % Acumular el gasto de la persona actual (7 dias de la semana) sumaper = sumaper + gastos(p,d); end if sumaper > mayorgastop mayorgastop = sumaper; end end Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información e-mail: [email protected] - [email protected] % Sumar la matriz gasto por columnas, para hallar el acumulado por día vectordia = sum(gastos); % Recorrer el vector de gastos acumulados por dia para hallar el mayor for d = 1 : 7 if vectordia(d) > mayorgastod mayorgastod = vectordia(d); posdia = d; % Posición del dia en el vector end end if posdia == 1 nomdia = 'Lunes'; elseif posdia == 2 nomdia = 'Martes'; elseif posdia == 3 nomdia = 'Miércoles'; elseif posdia == 4 nomdia = 'Jueves'; elseif posdia == 5 nomdia = 'Viernes'; elseif posdia == 6 nomdia = 'Sábado'; else nomdia = 'Domingo'; end disp(sprintf('El gasto total de la semana fue de : %14.2f', gastotal)) disp(sprintf('El gasto mas alto de persona fue de : %14.2f', mayorgastop)) disp(sprintf('El día que mas se gasto fue el %s por valor de : %14.2f', nomdia, mayorgastod)) disp('Fin del ejercicio') b) Solución directa mediante funciones predeterminadas clc clear all gastos = 0; % Variable para almacenar los datos como una matriz gastotal = 0; % Variable para acumular el gasto total de la semana mayorgastop = 0; % Variable para almacenar el gasto mayor de persona en la semana mayorgastod = 0; % Variable para almacenar el gasto mayor del día de la semana posdia = 0; % Varible para determinar la posición del dia de mayor gasto nomdia = ''; % Variable para determinar el nombre del día a partir de la posición disp('Matriz con información de gastos semanales de personas') gastos = xlsread('Personas.xlsx', 'Gastos'); % Leer la información de los gastos desde Excel gastotal = sum(sum(gastos)); % Totalizar el gasto de la semana mayorgastop = max(sum(gastos, 2)); % Suma la matriz por filas (personas) y extrae el máximo valor [mayorgastod, posdia] = max(sum(gastos, 1)); % Suma la matriz por columnas (días) y extrae el máximo valor if posdia == 1 nomdia = 'Lunes'; elseif posdia == 2 nomdia = 'Martes'; elseif posdia == 3 nomdia = 'Miércoles'; elseif posdia == 4 nomdia = 'Jueves'; elseif posdia == 5 nomdia = 'Viernes'; elseif posdia == 6 nomdia = 'Sábado'; Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información e-mail: [email protected] - [email protected] else nomdia = 'Domingo'; end disp(sprintf('El gasto total de la semana fue de : %14.2f', gastotal)) disp(sprintf('El gasto mas alto de persona fue de : %14.2f', mayorgastop)) disp(sprintf('El día que mas se gasto fue el %s por valor de : %14.2f', nomdia, mayorgastod)) disp('Fin del ejercicio') 7) Una empresa cuenta con una matriz de ventas (leer desde libro de Excel primera hoja) para el segundo semestre del año, la cual presenta las siguientes columnas en su orden: Documento del vendedor Ventas mes de julio Ventas mes de agosto Ventas mes de septiembre Ventas mes de octubre Ventas mes de noviembre Ventas mes de diciembre Se requiere determinar: a) Valor total de las comisiones pagadas al 5% b) Valor total de las comisiones pagadas al 2% c) Documento y valor de las ventas del semestre del vendedor que menos ventas realizo. Para las dos primeras respuestas, tenga en cuenta: - Se paga comisión del 5% siempre y cuando las ventas del mes en curso hayan sido superiores a 5.000.000 millones. - Se paga comisión del 2% siempre y cuando las ventas del mes en curso hayan sido entre el rango de 2.000.000 y 5.000.000 millones. clc clear all ventas = 0; % Variable para almacenar la matriz de ventas tcomis5 = 0; % Variable para acumular las comisiones al 5% tcomis2 = 0; % Variable para acumular las comisiones al 2% documento = 0; % Variable para almacenar el documento del vendedor con menos venta ventamenor = 0; % Variable de referencia para almacenar el valor menor de venta en vendedor vendedores = 0; % Variable para determinar la cantidad de vendedores (filas de la matriz) disp('Matriz con información de ventas del segundo semestre de los vendedores') ventas = xlsread('Empresa.xlsx', 'Vendedores'); % Leer el archivo desde Excel vendedores = size(ventas, 1); % Determinar las filas de la matriz (cantidad de vendedores) for v=1:vendedores % Se recorre desde el primer vendedor hasta el último ventasvendedor = 0; % Se inicia las ventas del vendedor en cero for m=2:7 % Se recorre desde el mes de Julio hasta Diciembre if ventas(v, m) > 5000000 % Se evalúa si el mes tiene ventas superiores a 500.000 pesos tcomis5 = tcomis5 + (ventas(v, m) * 0.05); % Se cálcula la comisión al 5% end % Se evalúa si el mes tiene ventas entre 2.000.000 y 500.000 pesos if ventas(v, m) >= 2000000 & ventas(v, m) <= 5000000 tcomis2 = tcomis2 + (ventas(v, m) * 0.02); % Se cálcula la comisión al 2% end ventasvendedor = ventasvendedor + ventas(v, m); % Se acumulan las ventas por mes del vendedor end if v == 1 % Si es el primer vendedor entonces es el de menor venta ventamenor = ventasvendedor; Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información e-mail: [email protected] - [email protected] documento = ventas(v, 1); elseif ventasvendedor < ventamenor % Se compara la venta del siguiente vendedor con la referencia menor ventamenor = ventasvendedor; documento = ventas(v, 1); end end disp(sprintf('El valor total de las comisiones pagadas al 0.05 es: %f', tcomis5)); disp(sprintf('El valor total de las comisiones pagadas al 0.02 es: %f', tcomis2)); disp(sprintf('El documento del vendedor que menos vendio es %f con una venta de : %f', documento, ventamenor)); disp('Fin del ejercicio') 8) En una matriz (leerla desde Excel) se tiene la información para la liquidación de una nómina mensual para n empleados, en donde el orden de sus columnas es la siguiente: Código Sueldo Días Bonificación Descuentos El total a pagar se debe deducir de la siguiente manera: (Sueldo/30)*Dias + Bonificacion – Descuentos – Salud Nota: El valor de salud se calcula del 4% del (Sueldo/30)*Dias. Calcular y mostrar al final: - Total a pagar por todos los empleados - Total de la bonificación - Total Descuentos - Total Salud clc clear all nomina = 0; % Variable para almacenar la matriz de nómina mensual empleados = 0; % Variable para determinar la cantidad de empleados (filas de la matriz) salud = 0; % Variable para calcular el valor de salud a pagar por parte de cada empleado totalpagar = 0; % Variable para acumular el valor pagado a los empleados totalboni = 0; % Variable para acumular el valor de las bonificaciones de los empleados totaldesc = 0; % Variable para acumular el valor de los descuentos de los empleados totalsalud = 0; % Variable para acumular el valor de la salud descontada a los empleados disp('Matriz con información de nómina mensual de empleados') nomina = xlsread('Nomina.xlsx', 'Liquidacion'); % Leer el archivo desde Excel empleados = size(nomina, 1); % Determinar la cantidad de empleados a procesar for e = 1 : empleados % Recorrer desde el primer empleado hasta el último salud = ((nomina(e,2)/30)*nomina(e,3)) * 0.04; % Liquidar la salud totalpagar = totalpagar + (((nomina(e,2)/30)*nomina(e,3))+ nomina(e,4) - nomina(e,5) - salud); totalboni = totalboni + nomina(e,4); % Acumular la bonificación totaldesc = totaldesc + nomina(e,5); % Acumular los descuentos totalsalud = totalsalud + salud; % Acumular la salud calculada en la variable salud end disp(sprintf('Valor total a pagar de la nómina mensual: %14.2f', totalpagar)); disp(sprintf('Valor total de la bonificaciones pagadas: %14.2f', totalboni)); disp(sprintf('Valor total de los descuentos otorgados: %14.2f', totaldesc)); disp(sprintf('Valor total de la salud descontada: %14.2f', totalsalud)); disp('Fin del ejercicio') Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información e-mail: [email protected] - [email protected] 9) Un campeonato de fútbol presenta información para 8 equipos en una matriz con datos de las finales, dicha matriz esta conformada por 4 columnas con la siguiente información (en su orden): - Código del equipo - Cantidad de partidos ganados - Cantidad de partidos empatados - Cantidad de partidos perdidos. Se requiere determinar: - Código del equipo con mayor puntaje - Promedio de los puntos - Cantidad de equipos cuya diferencia entre partidos ganados y empatados sea mayor a 3. Nota: Los puntos por equipo se calculan de la siguiente manera: Partido ganado: 3 puntos Partido empatado: 1 punto Partido perdido: 0 puntos. 10) Un campeonato de microfútbol presenta información para n equipos en una matriz con datos de las finales, dicha matriz esta conformada por 3 columnas con la siguiente información (en su orden): - Cantidad de partidos ganados - Cantidad de partidos empatados. - Cantidad de Partidos perdidos Se requiere determinar: - Promedio de los puntos de los partidos empatados - Puntaje mas bajo - Cantidad de equipos cuyo número de partidos perdidos sea menor o igual a 2 Nota: Los puntos por equipo se calculan de la siguiente manera: Partido ganado: 2 puntos Partido empatado: 1 punto Partido perdido: 0 puntos. 11) Un campeonato de fútbol cinco presenta información para 9 equipos en una matriz con datos de las finales, dicha matriz esta conformada por 4 columnas con la siguiente información (en su orden): - Cantidad de partidos empatados - Cantidad de partidos perdidos - Cantidad de partidos ganados - Goles a favor Se requiere determinar: - Mayor número de goles a favor - Cantidad de equipos cuyos partidos empatados se encuentre entre 5 y 10 - Promedio de los puntos de los partidos ganados. Nota: Los puntos por equipo se calculan de la siguiente manera: Partido ganado: 4 puntos Partido empatado: 2 puntos Partido perdido: 1 puntos. 12) La materia de informática III cuenta con un grupo de n alumnos, al final del curso para cada estudiante se tienen 3 notas con un valor porcentual así: Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información e-mail: [email protected] - [email protected] - Primer parcial 35% - Segundo parcial 30% - Tercer parcial 35% Muestre al final los siguientes resultados: - Cantidad de estudiantes que pasaron la materia (nota definitiva mayor o igual a 3.0), cantidad de estudiantes que la perdieron (nota definitiva menor a 2.0) y cantidad de estudiantes que la habilitan (nota definitiva mayor o igual a 2.0 y menor a 3.0). - Promedio de la nota definitiva - La mayor nota definitiva de la materia. 13) Un curso de Inglés avanzado cuenta con un grupo de 25 estudiantes, al final del curso para cada estudiante se tienen 3 notas con un valor porcentual así: Primer parcial 50% Segundo parcial 25% Talleres 25% Muestre al final los siguientes resultados: - La menor nota definitiva de la materia - Cantidad de estudiantes que pasaron la materia (nota definitiva mayor a 3.0), cantidad de estudiantes que la perdieron (nota definitiva menor o igual a 2.0) y cantidad de estudiantes que la habilitan (nota definitiva mayor a 2.0 y menor o igual a 3.0). - Promedio de la nota definitiva superior a 4. 14) En una matriz de 15 x 3, un almacén de Grandes Superficies tiene registrada las ventas, en su orden las siguientes columnas: Valor de la venta Valor impuesto Descuento El programa debe determinar y mostrar los siguientes resultados: - El mayor descuento aplicado - Valor total de la venta - Valor total de los impuestos (columna Valor impuesto) cuyo valor sea mayor al 20% del valor de la venta (columna Valor de la venta). Por ejemplo, se tiene un valor venta por $100 y su valor impuesto es de $21, aplicaría para la sumatoria (sobrepasa el porcentaje estipulado). 15) En una matriz de n x 4, un hipermercado tiene registrada las ventas, en su orden las siguientes columnas: Cantidad de artículos vendidos Valor de la venta Valor impuesto Descuento El programa debe determinar y mostrar los siguientes resultados: - Valor total de los impuestos (columna valor impuesto) - La menor cantidad de artículos vendidos - Valor total de los descuentos (columna descuento) cuyo valor sea menor al 10% del valor de la venta (columna Valor de la venta). Por ejemplo, se tiene un valor venta por $100 y su valor descuento es de $9, aplicaría para la sumatoria (no sobrepasa el porcentaje estipulado). 16) Un hotel tiene una distribución estructural de n pisos por n habitaciones. Se requiere determinar para la contratación en temporada alta de personal de seguridad lo siguiente: - Vigilantes por pisos pares (10% de los huéspedes) - Vigilantes por pisos impares (20% de los huéspedes) - Vigilantes adicionales para puertas de evacuación (40% de las contratados para pisos pares e impares). Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información e-mail: [email protected] - [email protected] Tenga en cuenta: a) No hay vigilantes de huéspedes para el primer y último piso b) La cantidad de vigilantes en pisos pares e impares no puede ser inferior a 1 17) Se cuenta con una matriz de recaudos de impuestos municipales n x 5, en donde el orden de su información por columnas es el siguiente: - Código contribuyente - Factura - Fecha - Tipo de impuesto (1, 2, 3 ó 4) - Valor Se requiere determinar al final: a) Suma total de los recaudos por cada tipo impuesto b) Menor valor de los tipos de impuesto c) Número de factura con mayor valor del recaudo d) Promedio del valor del recaudo 18) En una matriz de n x 4 se tiene la información para la liquidación de una nómina mensual para n empleados, en donde el orden de sus columnas es la siguiente: Código Sueldo Días trabajados en el mes Alimentación El total a pagar se debe deducir de la siguiente manera: (Sueldo/30)* Dias + Prima – Alimentacion – Salud - Pension Nota: El valor de salud y pensión se calcula del 4% del (Sueldo/30)*Dias La Prima extralegal corresponde al 70% del Sueldo siempre y cuando haya laborado los 30 días de la semana. Determinar al final como resultados: - Total a pagar por todos los empleados - Cantidad de empleados que obtuvieron la prima extralegal - Total Prima extralegal - Total de Salud más Pensión 19) Teniendo como referencia 2 matrices, efectúe algorítmicamente su mulplicación generando con este proceso una tercera matriz. Tenga en cuenta que para multiplicar 2 matrices se debe cumplir con el requerimiento que las columnas de la primera sean iguales a las filas de la segunda. 20) Genere algorítmicamente la matriz identidad de una matriz cualquiera n x n Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información e-mail: [email protected] - [email protected]