Foros del Web » Programación para mayores de 30 ;) » Programación General »

¿Me ayudan con un problema de matemáticas?

Estas en el tema de ¿Me ayudan con un problema de matemáticas? en el foro de Programación General en Foros del Web. Hola a todos Traigo un pequeño problema de matemáticas que debo aplicar en programación, el problema es el siguiente: Tengo los siguientes números 1, 2, ...
  #1 (permalink)  
Antiguo 18/03/2010, 12:41
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 20 años, 2 meses
Puntos: 2
Pregunta ¿Me ayudan con un problema de matemáticas?

Hola a todos

Traigo un pequeño problema de matemáticas que debo aplicar en programación, el problema es el siguiente:

Tengo los siguientes números 1, 2, 4, 8, 16 y 32; cualquier combinación da un número del 1 al 63, ejemplo 1+2+4+8+16+32 = 63 otro ejemplo 2+8+32 = 42 otro ejemplo 1+4 = 5

La cosa es que a mi me dicen lo siguiente demuestre matemáticamente el número 16 se encuentra en la combinación de números que se deben sumar para llegar a 49.

Dicho de otra forma sería:

Sabemos que para llegar a 49 con el siguiente conjunto de número (1, 2, 4, 8, 16 y 32) existe solo una combinación que sumada llega a dicho resultado, demuestre matemáticamente que el número 16 está o no está en dicha combinación para poder llegar al resultado.

Espero que me puedan dar una manito con este pequeño dilema. De ante mano muchas gracias por la ayuda que me puedan prestar.

Salu2

PD: la cosa es que después de hacerlo en forma matemática, debo traducirlo a una función PHP que me diga FALSO o VERDADERO si el número dado está en la combinación de la sumatoria que tengo
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
  #2 (permalink)  
Antiguo 18/03/2010, 12:57
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: ¿Me ayudan con un problema de matemáticas?

Bueno y la forma matemática ¿la tienes?
  #3 (permalink)  
Antiguo 18/03/2010, 13:12
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: ¿Me ayudan con un problema de matemáticas?

¿forma matemática? la verdad es que el problema está planteado así como lo escribí
pls pls pls una ayudita pls
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
  #4 (permalink)  
Antiguo 18/03/2010, 13:17
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: ¿Me ayudan con un problema de matemáticas?

Bueno pues creo q el problema de PHP es poco importante entonces, lo esencial sería pensar un poco en Matemáticas. Respecto a esto te confieso que en las tardes pienso muyyyyyy pocoooo jajajajaa
  #5 (permalink)  
Antiguo 18/03/2010, 13:35
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: ¿Me ayudan con un problema de matemáticas?

Perdón me lié,
__________________
Tu álbum de cromos online!!

Última edición por santris; 18/03/2010 a las 13:44
  #6 (permalink)  
Antiguo 18/03/2010, 13:41
Avatar de hieloverde  
Fecha de Ingreso: julio-2005
Ubicación: México, D.F
Mensajes: 467
Antigüedad: 19 años, 4 meses
Puntos: 5
Respuesta: ¿Me ayudan con un problema de matemáticas?

Hola,

A ver, a mi entendimiento del problema lo que necesitas es una función PHP que pueda identificar la combinación necesaria para llegar a digamos el resultado 49 (contando con los números que indicas) y luego le puedas preguntarle si acaso en la combinación contiene el número 16?

Pero el resultado (Ej: 49) y el numero que se busca en el arreglo (Ej: 16) son fijos o dinámicos ¿?

Interesante eh...

Saludos,
__________________
<? echo("1 <script> dice + que 1000 palabras"); ?> EspacioMéxico
  #7 (permalink)  
Antiguo 18/03/2010, 13:52
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: ¿Me ayudan con un problema de matemáticas?

Matemáticamente lo podrías resolver por el método directo de inducción matemática
F(n) = 2^n
0≤n≤5 n e N -> F(n)=[1,63]

Y para el algoritmo Podrías armar un array con los valores 1, 2, 4, 8, 16, 32 con índice n.
Luego ingresas un valor comprendido entre 1 y 63 y lo generas como una combinación de F(n)
__________________
no quiero ser un árbol y caminar
Jacinto Piedra
  #8 (permalink)  
Antiguo 18/03/2010, 14:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Tema movido desde PHP a Ingeniería del software y Gestión de proyectos
  #9 (permalink)  
Antiguo 18/03/2010, 15:13
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: ¿Me ayudan con un problema de matemáticas?

Cita:
Iniciado por CdG Ver Mensaje
Matemáticamente lo podrías resolver por el método directo de inducción matemática
F(n) = 2^n
0≤n≤5 n e N -> F(n)=[1,63]

Y para el algoritmo Podrías armar un array con los valores 1, 2, 4, 8, 16, 32 con índice n.
Luego ingresas un valor comprendido entre 1 y 63 y lo generas como una combinación de F(n)
Interesante pero..... me podrías dar un ejemplo porfis¿? o me lo podrías explicar un poco más....... despacio? si es posible¿? :P
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
  #10 (permalink)  
Antiguo 18/03/2010, 22:40
Avatar de JALF  
Fecha de Ingreso: septiembre-2004
Ubicación: Cali - Colombia
Mensajes: 634
Antigüedad: 20 años, 2 meses
Puntos: 2
Respuesta: ¿Me ayudan con un problema de matemáticas?

Hola de nuevo a todos y gracias a quienes pensaron en ayudarme, pero listo con la explicación de un amigo que trabaja programando chips.... listo fui capaz de resolverlo y aquí pongo la respuesta para quien esté interesado

El problema real es el siguiente: yo tengo 6 clases de permisos identificados de la siguiente manera
1 = Consultar
2 = Insertar
4 = Modificar
8 = Imprimir
16 = Borrar Lógico
32 = Borrar Físico
Quienes se estén preguntando "y aja, y por que no dices que el 3 es Modificar y el 5 Imprimir y así", pues resulta y acontece que en esta tabla que pongo a continuación, algo larga explico el porque no hago eso:
Cita:
1 Consultar
2 Insertar
3 Consultar.Insertar
4 Modificar
5 Modificar.Consultar
6 Modificar.Insertar
7 Modificar.Consultar.Insertar
8 Imprimir
9 Imprimir.Consultar
10 Imprimir.Insertar
11 Imprimir.Consultar.Insertar
12 Imprimir.Modificar
13 Imprimir.Modificar.Consultar
14 Imprimir.Modificar.Insertar
15 Imprimir.Modificar.Consultar.Insertar
16 Borrar Lógico
17 Borrar Lógico.Consultar
18 Borrar Lógico.Insertar
19 Borrar Lógico.Consultar.Insertar
20 Borrar Lógico.Modificar
21 Borrar Lógico.Modificar.Consultar
22 Borrar Lógico.Modificar.Insertar
23 Borrar Lógico.Modificar.Consultar.Insertar
24 Borrar Lógico.Imprimir
25 Borrar Lógico.Imprimir.Consultar
26 Borrar Lógico.Imprimir.Insertar
27 Borrar Lógico.Imprimir.Consultar.Insertar
28 Borrar Lógico.Imprimir.Modificar
29 Borrar Lógico.Imprimir.Modificar.Consultar
30 Borrar Lógico.Imprimir.Modificar.Insertar
31 Borrar Lógico.Imprimir.Modificar.Consultar.Insertar
32 Borrar Físico
33 Borrar Físico.Consultar
34 Borrar Físico.Insertar
35 Borrar Físico.Consultar.Insertar
36 Borrar Físico.Modificar
37 Borrar Físico.Modificar.Consultar
38 Borrar Físico.Modificar.Insertar
39 Borrar Físico.Modificar.Consultar.Insertar
40 Borrar Físico.Imprimir
41 Borrar Físico.Imprimir.Consultar
42 Borrar Físico.Imprimir.Insertar
43 Borrar Físico.Imprimir.Consultar.Insertar
44 Borrar Físico.Imprimir.Modificar
45 Borrar Físico.Imprimir.Modificar.Consultar
46 Borrar Físico.Imprimir.Modificar.Insertar
47 Borrar Físico.Imprimir.Modificar.Consultar.Insertar
48 Borrar Físico.Borrar Lógico
49 Borrar Físico.Borrar Lógico.Consultar
50 Borrar Físico.Borrar Lógico.Insertar
51 Borrar Físico.Borrar Lógico.Consultar.Insertar
52 Borrar Físico.Borrar Lógico.Modificar
53 Borrar Físico.Borrar Lógico.Modificar.Consultar
54 Borrar Físico.Borrar Lógico.Modificar.Insertar
55 Borrar Físico.Borrar Lógico.Modificar.Consultar.Insertar
56 Borrar Físico.Borrar Lógico.Imprimir
57 Borrar Físico.Borrar Lógico.Imprimir.Consultar
58 Borrar Físico.Borrar Lógico.Imprimir.Insertar
59 Borrar Físico.Borrar Lógico.Imprimir.Consultar.Insertar
60 Borrar Físico.Borrar Lógico.Imprimir.Modificar
61 Borrar Físico.Borrar Lógico.Imprimir.Modificar.Consultar
62 Borrar Físico.Borrar Lógico.Imprimir.Modificar.Insertar
63 Borrar Físico.Borrar Lógico.Imprimir.Modificar.Consultar.Insertar
Pues bien, resulta que estoy implementando en mi plataforma de desarrollo, el sistema de permisos y la idea es que a un usuario solo le pueden dar los permisos (1, 2, 4, 8, 16 y 32) y cuando consultamos esos permisos a la base de datos, la idea es sacar la sumatoria de los permisos asignados y que luego cuando el usuario va a entrar a un modulo, el modulo me diga "vea para usted entrar aquí debe de tener los siguientes permisos 2+16 = 18" y yo llego y le digo al modulo "viejo pues yo tengo estos permisos 2 + 16 + 32 = 50" entonces llamo la función que me evalúa los permisos y me dice "vea modulo, el usuario tiene los permisos que usted exige para ingresar"

¿capisci? jejejejejejeje
y aquí dejo lo que escribí en PHP para poder hacer esto y ya me funciona bien :)

Código PHP:
function permiso($tengo,$necesito) {
  
$cmp $tengo $necesito;
  
$rsp = ($cmp == $necesito) ? "VERDADERO" "FALSO" ;
  return 
$rsp;
}

// Por tanto nuestra respuesta es verdadera y nos dejaría entrar al modulo
$permiso 50// Sumatoria de permisos asignados por el Administrador (2 + 16 + 32 = 50)
$necesario 18// Sumatoria de permisos necesarios para entrar al modulo (2 + 16 = 18)
echo permiso($permiso$necesario);

// En este ejemplo nuestra respuesta es falsa y no podríamos entrar al modulo
$permiso 52// Sumatoria de permisos asignados por el Administrador (4 + 16 + 32 = 50)
$necesario 18// Sumatoria de permisos necesarios para entrar al modulo (2 + 16 = 18)
echo permiso($permiso$necesario); 
Para quienes se estén preguntando "y que es eso de $cmp = $tengo & $necesito;" pues bien, es una operación binaria donde se activan los bits que están tanto en $tengo como en $necesito. Mejor dicho esto se ve mejor con un ejemplito:

18 -> 00010010 ($tengo)
50 -> 00110010 ($necesito)
18 -> 00010010 ($tengo & $necesito)

Otro ejemplito
31 -> 00011111 ($tengo)
16 -> 00010000 ($necesito)
16 -> 00010000 ($tengo & $necesito)

Bueno espero que esta solución a mi duda, le sirva a alguien para futuras implementaciones de sistemas de permisos ;)

Salu2

Fuente de información adicional aquí
__________________
Ubuntu User # 15554
http://dubaiphp.wordpress.com/ -Mi vida de desarrollo, juegos y algo más en un Blog-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.