Aplicaciones Prácticas

» En el Paraíso de Logo


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)

El Problema de los Cumpleaños

Puntos de Intersección de dos Círculos con LogoFE

Superficie de Segmento de Círculo

Angulos, Geometría Dinámica y LogoFE

Superficie de un Triángulo


» Planteo del Escenario


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

» Problema 1


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

» Problema 2


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

» Problema 3


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

» Problema 4


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


» Problema 5


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
Ale Za Mary Li Ana Mo
Mar
Ale Za Mary Li Ana Mo
Mie
Ale Za Sol Ho
Jue
Sol Ho
Vie
Sol Ho

» Problema 6


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]]


» Problema 7


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

C4 C1
C4 C2
C4 C3
C4 C4
C4 C5
C4 C6
C5 C1
C5 C2
C5 C3
C5 C4
C5 C5
C5 C6
C1 C1
C1 C2
C1 C3
C1 C4
C1 C5
C1 C6
C1 C1
C1 C2
C1 C3
C1 C4
C1 C5
C1 C6
C5 C1
C5 C2
C5 C3
C5 C4
C5 C5
C5 C6

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]