Ejercicios de Matemáticas analizados con LogoFE
Igualación de Ecuaciones Químicas (Redox)
Soluciones a problemas de Olimpiada de "Computación y Matemática"
Historias de Calculadora (383873 = EL BEBE)
Puntos de Intersección de dos Círculos con LogoFE
Superficie de Segmento de Círculo
Angulos, Geometría Dinámica y LogoFE
Imaginemos que somos parte del departamento que realiza el rol de pagos de una pequeña compañía de consultoría. Contestaremos ciertas preguntas respecto a varias tablas de información definidas a continuación:
empleados.- nombres de cada miembro de personal
sueldoprop.- cantidad de dólares por hora que cada empleado recibe
facturaprop.- cantidad de dólares por hora que se le factura al cliente por el servicio de cada empleado
clientes.- lista de clientes a los cuales los empleados prestan servicios
empleclien.- cliente asignado a cada empleado
horastrab.- por cada empleado y por cada día de la semana, el número de horas trabajadas
Ejemplos:
escribeMat :empleados
Ale Za
Sol Ho
Mary Li
Ani Lu
Ana Mo
muestra :sueldoprop
[7.2 7.0 7.2 7.5 7.0]
muestra :facturaprop
[12 11 12 14 12]
muestra :clientes
[C1 C2 C3 C4 C5 C6]
muestra :empleclien
[C4 C5 C1 C1 C5]
escribeMat :horastrab
8 8 8 4 4
0 0 8 8 8
8 8 4 4 4
0 0 4 4 4
8 8 0 0 0
Apellidos de los empleados:
muestra ultimos :empleados
[Za Ho Li Lu Mo]
Tabla de empleados con su respectivos sueldos por hora:
escribe html trans lista impon [demarca lista unespacio] :empleados :sueldoprop
Ale Za | 7.2 |
Sol Ho | 7.0 |
Mary Li | 7.2 |
Ani Lu | 7.5 |
Ana Mo | 7.0 |
Cuántas horas trabajó cada empleado?
Estas son las horas que trabajó el primer empleado desglosadas por día:
muestra primero :horastrab
[8 8 8 4 4]
Este es el total de esas horas:
muestra suma primero :horastrab
32
Estos son los totales de todos los empleados:
muestra impon "suma :horastrab
[32 24 28 12 16]
Ale Za | 32 |
Sol Ho | 24 |
Mary Li | 28 |
Ani Lu | 12 |
Ana Mo | 16 |
Cuántos dólares ganó cada empleado en la semana?
Para contestar esta pregunta vamos a necesitar la respuesta del primer problema y el valor de sueldoprop:
muestra lista :sueldoprop impon "suma :horastrab
[[7.2 7.0 7.2 7.5 7.0] [32 24 28 12 16]]
Transponemos:
muestra trans lista :sueldoprop impon "suma :horastrab
[[7.2 32] [7.0 24] [7.2 28] [7.5 12] [7.0 16]]
Y luego multiplicamos cada par:
muestra impon "multi trans lista :sueldoprop impon "suma :horastrab
[230.4 168 201.6 90 112]
El mismo resultado de otra manera:
muestra transpon "producto lista :sueldoprop impon "suma :horastrab
[230.4 168 201.6 90 112]
Ale Za | 230.4 |
Sol Ho | 168 |
Mary Li | 201.6 |
Ani Lu | 90 |
Ana Mo | 112 |
Cuánta ganancia trajo cada empleado a la compañía?
Nuevamente vamos a necesitar el total de horas trabajadas por empleado:
muestra impon "suma :horastrab
[32 24 28 12 16]
muestra lista :sueldoprop :facturaprop
[[7.2 7.0 7.2 7.5 7.0] [12 11 12 14 12]]
Esta es la ganacia por hora que tiene la compañía por cada empleado:
muestra transpon "diferencia lista :facturaprop :sueldoprop
[4.8 4 4.8 6.5 5]
Multiplicamos eso por el total de horas trabajadas de cada empleado para obtener la respuesta:
muestra transpon "producto lista (impon "suma :horastrab) transpon "diferencia lista :facturaprop :sueldoprop
[153.6 96 134.4 78 80]
Ale Za | 153.6 |
Sol Ho | 96 |
Mary Li | 134.4 |
Ani Lu | 78 |
Ana Mo | 80 |
Calcular cuánto facturar a un cliente dado.
Esto es lo que hay que facturar a los clientes asignados a cada empleado:
muestra transpon "producto lista :facturaprop impon "suma :horastrab
[384 264 336 168 192]
Supongamos que el cliente al que vamos a facturar es "C5":
muestra des "lista lista :empleclien "C5
[[C4 C5] [C5 C5] [C1 C5] [C1 C5] [C5 C5]]
Esto nos indica qué empleados tenían por cliente asignado a "C5":
muestra des [esigual lista] lista :empleclien "C5
[0 1 0 0 1]
Trabajaremos entonces con estas dos tablas:
muestra lista (transpon "producto lista :facturaprop impon "suma :horastrab) des [esigual lista] lista :empleclien "C5
[[384 264 336 168 192] [0 1 0 0 1]]
Si calculamos los productos de los pares correspondientes, tenemos:
muestra transpon "producto lista (transpon "producto lista :facturaprop impon "suma :horastrab) des [esigual lista] lista :empleclien "C5
[0 264 0 0 192]
La respuesta es la suma de esos valores:
muestra suma transpon "producto lista (transpon "producto lista :facturaprop impon "suma :horastrab) des [esigual lista] lista :empleclien "C5
456
O lo que es lo mismo:
muestra puntovec lista (transpon "producto lista :facturaprop impon "suma :horastrab) des [esigual lista] lista :empleclien "C5
456
Otro método:
muestra des [esigual lista] lista :empleclien "C5
[0 1 0 0 1]
muestra diz "lista dista (lista :facturaprop impon "suma :horastrab) des [esigual lista] lista :empleclien "C5
[[[0 1 0 0 1] [12 11 12 14 12]] [[0 1 0 0 1] [32 24 28 12 16]]]
muestra diz [segrega lista] dista (lista :facturaprop impon "suma :horastrab) des [esigual lista] lista :empleclien "C5
[[[12 12 14] [11 12]] [[32 28 12] [24 16]]]
muestra diz [ultimo segrega lista] dista (lista :facturaprop impon "suma :horastrab) des [esigual lista] lista :empleclien "C5
[[11 12] [24 16]]
muestra puntovec diz [ultimo segrega lista] dista (lista :facturaprop impon "suma :horastrab) des [esigual lista] lista :empleclien "C5
456
Por cada día encontrar el empleado que trabajó más horas.
Estas son las horas trabajadas:
muestra :horastrab
[[8 8 8 4 4] [0 0 8 8 8] [8 8 4 4 4] [0 0 4 4 4] [8 8 0 0 0]]
Pero ahora nos interesa trabajar con las horas por día, no por empleado:
muestra trans :horastrab
[[8 0 8 0 8] [8 0 8 0 8] [8 8 4 4 0] [4 8 4 4 0] [4 8 4 4 0]]
Encontramos, por cada día, cuál fue la mayor cantidad de horas trabajadas:
muestra impon [ordena] trans :horastrab
[[0 0 8 8 8] [0 0 8 8 8] [0 4 4 8 8] [0 4 4 4 8] [0 4 4 4 8]]
muestra impon [ultimo ordena] trans :horastrab
[8 8 8 8 8]
Todos los días, alguien trabajó, ocho horas.
Por cada día, calculamos el índice del primer empleado que ha trabajado ocho horas en aquel día:
muestra expon [[impon [ultimo ordena]] mismo] trans :horastrab
[[8 8 8 8 8]
[[8 0 8 0 8] [8 0 8 0 8] [8 8 4 4 0] [4 8 4 4 0] [4 8 4 4 0]]]
muestra transpon [ubica lista] expon [[impon [ultimo ordena]] mismo] trans :horastrab
[0 0 0 1 1]
Usando los índices determinamos los nombres:
muestra toma lista (transpon [ubica lista] expon [[impon [ultimo ordena]] mismo] trans :horastrab) :empleados
[[Ale Za]
[Ale Za]
[Ale Za]
[Sol Ho]
[Sol Ho]]
Lun | Ale Za |
Mar | Ale Za |
Mie | Ale Za |
Jue | Sol Ho |
Vie | Sol Ho |
Esta respuesta no es muy satisfactoria porque varios empleados tuvieron el máximo de 8 horas en algunos días, otra solución mejor podría ser:
muestra transpon "lista lista :horastrab :empleados
[[[8 8 8 4 4] [Ale Za]]
[[0 0 8 8 8] [Sol Ho]]
[[8 8 4 4 4] [Mary Li]]
[[0 0 4 4 4] [Ani Lu]]
[[8 8 0 0 0] [Ana Mo]]]
muestra transpon [des "lista lista] lista :horastrab :empleados
[[[8 [Ale Za]] [8 [Ale Za]] [8 [Ale Za]] [4 [Ale Za]] [4 [Ale Za]]]
[[0 [Sol Ho]] [0 [Sol Ho]] [8 [Sol Ho]] [8 [Sol Ho]] [8 [Sol Ho]]]
[[8 [Mary Li]] [8 [Mary Li]] [4 [Mary Li]] [4 [Mary Li]] [4 [Mary Li]]]
[[0 [Ani Lu]] [0 [Ani Lu]] [4 [Ani Lu]] [4 [Ani Lu]] [4 [Ani Lu]]]
[[8 [Ana Mo]] [8 [Ana Mo]] [0 [Ana Mo]] [0 [Ana Mo]] [0 [Ana Mo]]]]
muestra trans transpon [des "lista lista] lista :horastrab :empleados
[[[8 [Ale Za]] [0 [Sol Ho]] [8 [Mary Li]] [0 [Ani Lu]] [8 [Ana Mo]]]
[[8 [Ale Za]] [0 [Sol Ho]] [8 [Mary Li]] [0 [Ani Lu]] [8 [Ana Mo]]]
[[8 [Ale Za]] [8 [Sol Ho]] [4 [Mary Li]] [4 [Ani Lu]] [0 [Ana Mo]]]
[[4 [Ale Za]] [8 [Sol Ho]] [4 [Mary Li]] [4 [Ani Lu]] [0 [Ana Mo]]]
[[4 [Ale Za]] [8 [Sol Ho]] [4 [Mary Li]] [4 [Ani Lu]] [0 [Ana Mo]]]]
muestra impon [organiza [t0]] trans transpon [des "lista lista] lista :horastrab :empleados
[[[0 [Sol Ho]] [0 [Ani Lu]] [8 [Ale Za]] [8 [Mary Li]] [8 [Ana Mo]]]
[[0 [Sol Ho]] [0 [Ani Lu]] [8 [Ale Za]] [8 [Mary Li]] [8 [Ana Mo]]]
[[0 [Ana Mo]] [4 [Mary Li]] [4 [Ani Lu]] [8 [Ale Za]] [8 [Sol Ho]]]
[[0 [Ana Mo]] [4 [Ale Za]] [4 [Mary Li]] [4 [Ani Lu]] [8 [Sol Ho]]]
[[0 [Ana Mo]] [4 [Ale Za]] [4 [Mary Li]] [4 [Ani Lu]] [8 [Sol Ho]]]]
muestra impon [agrega trans organiza [t0]] trans transpon [des "lista lista] lista :horastrab :empleados
[[[[Sol Ho] [Ani Lu]] [[Ale Za] [Mary Li] [Ana Mo]]]
[[[Sol Ho] [Ani Lu]] [[Ale Za] [Mary Li] [Ana Mo]]]
[[[Ana Mo]] [[Mary Li] [Ani Lu]] [[Ale Za] [Sol Ho]]]
[[[Ana Mo]] [[Ale Za] [Mary Li] [Ani Lu]] [[Sol Ho]]]
[[[Ana Mo]] [[Ale Za] [Mary Li] [Ani Lu]] [[Sol Ho]]]]
muestra impon [ultimo agrega trans organiza [t0]] trans transpon [des "lista lista] lista :horastrab :empleados
[[[Ale Za] [Mary Li] [Ana Mo]]
[[Ale Za] [Mary Li] [Ana Mo]]
[[Ale Za] [Sol Ho]]
[[Sol Ho]]
[[Sol Ho]]]
Lun |
| |||
Mar |
| |||
Mie |
| |||
Jue |
| |||
Vie |
|
Ordenar a los empleados por la ganancia que producen.
Nuevamente necesitamos las ganancias producidas por cada empleado:
haz "ganaempl transpon "producto lista (impon "suma :horastrab) transpon "diferencia lista :facturaprop :sueldoprop
muestra :ganaempl
[153.6 96 134.4 78 80]
Utilizamos esos valores para priorizar a los empleados:
muestra prioriza lista :ganaempl :empleados
[[Ani Lu] [Ana Mo] [Sol Ho] [Mary Li] [Ale Za]]
O, de mayor a menor:
muestra refleja prioriza lista :ganaempl :empleados
[[Ale Za] [Mary Li] [Sol Ho] [Ana Mo] [Ani Lu]]
Ordenar a los clientes por la ganancia que producen.
Necesitamos relacionar los clientes con los empleados mediate la tabla "empleclien".
escribe html tabla [lista] lista :empleclien :clientes
|
|
|
|
|
| ||||||||||||
|
|
|
|
|
| ||||||||||||
|
|
|
|
|
| ||||||||||||
|
|
|
|
|
| ||||||||||||
|
|
|
|
|
|
muestra tabla [esigual lista] lista :empleclien :clientes
[[0 0 0 1 0 0]
[0 0 0 0 1 0]
[1 0 0 0 0 0]
[1 0 0 0 0 0]
[0 0 0 0 1 0]]
Los unos de esta tabla nos indican qué empleados estaban asignados a qué clientes.
C1 | C2 | C3 | C4 | C5 | C6 | |
Ale Za | 0 | 0 | 0 | 1 | 0 | 0 |
Sol Ho | 0 | 0 | 0 | 0 | 1 | 0 |
Mary Li | 1 | 0 | 0 | 0 | 0 | 0 |
Ani Lu | 1 | 0 | 0 | 0 | 0 | 0 |
Ana Mo | 0 | 0 | 0 | 0 | 1 | 0 |
Luego utilizamos los datos en "ganaempl" para pre-multiplicarlos por esta tabla booleana, como si fuesen matrices:
muestra :ganaempl
[153.6 96 134.4 78 80]
muestra multimat lista (enlista :ganaempl) (tabla [esigual lista] lista :empleclien :clientes)
[[212.4 0 0 153.6 176 0]]
muestra primero multimat lista (enlista :ganaempl) (tabla [esigual lista] lista :empleclien :clientes)
[212.4 0 0 153.6 176 0]
C1 | 212.4 |
C2 | 0 |
C3 | 0 |
C4 | 153.6 |
C5 | 176 |
C6 | 0 |
Finalmente utilizamos estos valores para priorizar los nombres de los clientes:
muestra refleja prioriza lista (primero multimat lista (enlista :ganaempl) (tabla [esigual lista] lista :empleclien :clientes)) :clientes
[C1 C5 C4 C6 C3 C2]