elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Duda ejercicio con posibilidades infinitas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda ejercicio con posibilidades infinitas  (Leído 4,281 veces)
EstudXx

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Duda ejercicio con posibilidades infinitas
« en: 7 Octubre 2012, 17:47 pm »

Hola, espero que me puedan ayudar con un problema de programación.

En el libro "Fundamentos de programación - Piensa en C", existe este problema:

Construye un programa en C que escriba todos los valores positivos de T, P y R que satisfagan la siguiente expresión:

(7*T^4) - (6*P^3) + 12*(R^5) < 5850

Nota: T, P y R solo pueden tomar valores positivos.


Ya he realizado el código, sin embargo, he notado que este no termina de arrojar valores que cumplen la expresión. Pienso que esto es debido a que teóricamente la cantidad de posibilidades es infinita debido a que un termino se encuentra restando.

Por lo tanto mi duda es: ¿Este problema de verdad tiene una cantidad infinita de posibles soluciones, o existe algo que no este tomando en cuenta y deba limitar la cantidad de estas?

Saludos y gracias por la ayuda.


En línea

BEATMASTER

Desconectado Desconectado

Mensajes: 153



Ver Perfil WWW
Re: Duda ejercicio con posibilidades infinitas
« Respuesta #1 en: 7 Octubre 2012, 19:45 pm »

Me parece que debes primero "resolverlo" algebraicamente, osea buscar una solucion manual y reproducirla en C, lo que veo es una ecuacion con 3 variables entonces deberias buscar un metodo para resolver ecuaciones con 3 variables, probablemente te convenga hacerlo por "matrices" haciendo un metodo general para encontrar una solucion podrias encontrar N soluciones por medio de un ciclo.

Por ultimo, dudo que tenga infinitas soluciones ya que esta bien definido el "limite" de tu inecuacion osea que sea < (menor) que 5850 habra alguna combinacion de valores con los cuales ya no sea posible cumplir esta condicion.

Me parece el principal problema aqui es algebraico, sabiendo resolver adecuadamente tu ecuacion no debe ser muy dificil reproducir el "metodo" en tu programa

Podria ser algo asi... aunque este metodo solo sirve probando valor por valor de las combinaciones posibles, deberia haber algun metodo mas eficaz ademas de que solo prueba con los primeros 100 numero enteros de cada variable deberias variar el valor 99 por alguno diferente o variar un poco el codigo para que el programa lo haga automaticamente
Código:
for(int t=0;t<99;t++)
{
for(int p=0;p<99;p++)
{
for(int r=0;r<99;r++)
{
resultado=(7*pow(t,4))-(6*pow(p,3))+(12*pow(r,5));
if(resultado<5850)
{
printf("los valores cumplen la condicion %d , %d , %d \n",t,p,r);
}
}
}
}


« Última modificación: 7 Octubre 2012, 20:00 pm por BEATMASTER » En línea

EstudXx

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Duda ejercicio con posibilidades infinitas
« Respuesta #2 en: 7 Octubre 2012, 20:05 pm »

El problema que veo es que yo puedo hacer esto:

Asignarle a  T: 1
Asignarle a  P: 1
Asignarle a  R: 1

Si sustituimos, veremos como estos 3 valores cumplen adecuadamente la condición, puesto que:

(7*1^4) - (6*1^3) + 12*(1^5) = 7 - 6 + 12 = 13  13 < 5850

Ok, después de esto, yo puedo incrementar a P por uno y dejar los otros 2 en 1.

Y como el termino donde esta P siempre resta, el resultado seria aun menor al anterior y seguiría cumpliendo.

Yo puedo repetir este proceso teóricamente en infinitas ocasiones, y esto ocasiona que las posibles respuestas sean infinitas.

¿Si me explico?


En línea

EstudXx

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Duda ejercicio con posibilidades infinitas
« Respuesta #3 en: 7 Octubre 2012, 20:12 pm »

Por cierto, ya tengo un código que no se ve limitado en la cantidad de valores que prueba, usando while´s anidados.


Código:
int main()
{
unsigned int T=1,P=1,R=1;
while (7* pow (float(T),4) - 6* pow (float (P),3) + 12 * pow (float(R),5) < 5850)
{
while (7* pow (float(T),4) - 6* pow (float (P),3) + 12 * pow (float(R),5) < 5850)
{
while (7* pow (float(T),4) - 6* pow (float (P),3) + 12 * pow (float(R),5) < 5850)
{
printf ("%d, %d y %d cumplen \n",T,P,R);
R++;
}
R = 1;
P++;
}
P = 1;
T++;
}
return 0;
}

Y nunca termina de arrojar salidas validas.
En línea

BEATMASTER

Desconectado Desconectado

Mensajes: 153



Ver Perfil WWW
Re: Duda ejercicio con posibilidades infinitas
« Respuesta #4 en: 7 Octubre 2012, 21:17 pm »

algo anda mal con tus numeros :p

mira si sustituimos T=6 con P=1 y R=1 ya es una combinacion que excede el valor y por tanto es invalida

(7*6^4) - (6*1^3) + 12*(1^5) = 9072 - 6 + 12 = 9078  9078 > 5850

intenta primero con algo muy sencillo porque el meter la expresion al while podria ocacionar problemas, sobre todo me llama la atencion la parte donde haces R=1 y P=1 esa podria ser la causa de que se quede atrapado en el ciclo infinito ya que estas "reseteando las variables una y otra vez intenta poner un getch en cada resultado para que veas claramente los valores que arroja y no se esten repitiendo una y otra vez por eso recomendaba usar el for con valores fijos de momento, para tener mas control sobre la salida del programa ya despeus podemos pensar en optimizarlo :p saludos
En línea

EstudXx

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Duda ejercicio con posibilidades infinitas
« Respuesta #5 en: 7 Octubre 2012, 21:31 pm »

Entiendo que existan combinaciones que excedan la expresión y sean invalidas.

Sin embargo, el código que te mostré no imprime valores inválidos ni repite combinaciones.

La reinicializacion en 1 existe para que todas las combinaciones posibles sean evaluadas.

Puesto que no es lo mismo probar

T=1 con P=1 y R=6

Con:
 
T=1 con P=2 y R=6 

O dicho de otra manera:

Lo que este código hace es probar 1,1,X, cuando X sea tan grande que la condicion no se cumpla, prueba con 1,2,X de nuevo hasta que no se cumpla. Sin esa reinicializacion estaria discriminando combinaciones.

Como sea, creo que no has analizado este argumento:

El problema que veo es que yo puedo hacer esto:

Asignarle a  T: 1
Asignarle a  P: 1
Asignarle a  R: 1

Si sustituimos, veremos como estos 3 valores cumplen adecuadamente la condición, puesto que:

(7*1^4) - (6*1^3) + 12*(1^5) = 7 - 6 + 12 = 13  13 < 5850

Ok, después de esto, yo puedo incrementar a P por uno y dejar los otros 2 en 1.

Y como el termino donde esta P siempre resta, el resultado seria aun menor al anterior y seguiría cumpliendo.

Yo puedo repetir este proceso teóricamente en infinitas ocasiones, y esto ocasiona que las posibles respuestas sean infinitas.

¿Si me explico?




Este es independiente de cualquier implementacion del problema en lenguaje computacional y permite analizar mejor la duda que tengo. Te pido que por favor le pongas especial atención a este argumento, ya que si no existe ningún error en el, entonces mi teoría de que las combinaciones son infinitas queda probada.
En línea

Lauta


Desconectado Desconectado

Mensajes: 371



Ver Perfil
Re: Duda ejercicio con posibilidades infinitas
« Respuesta #6 en: 7 Octubre 2012, 22:43 pm »

Hola, si a T y a P le asignás, por ejemplo, el valor 1, cualquier valor que pongas en R te va a dar que la condición se cumple, por lo tanto, hay infinitos valores efectivamente.
En línea

TODOS LOS MANUALES DE PROGRAMACION!!!

Quieres ganar dinero? Clickea en alguno de los enlaces y empieza ya!!!
Daddybux
Bux.to
Adverbux
Dailyclick
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda en ejercicio++
Ejercicios
Lamarkus 1 3,471 Último mensaje 1 Diciembre 2010, 17:31 pm
por [L]ord [R]NA
duda con un ejercicio..
Programación C/C++
fer_fer_73 8 4,333 Último mensaje 4 Febrero 2011, 01:24 am
por negux
Duda ejercicio C
Programación C/C++
cortex123 1 2,179 Último mensaje 13 Junio 2011, 21:09 pm
por El_Java
Duda con ejercicio
Programación C/C++
bigfu 2 2,174 Último mensaje 24 Agosto 2011, 22:43 pm
por bigfu
duda con un ejercicio
Programación C/C++
Freelancer 4 2,694 Último mensaje 10 Septiembre 2011, 04:31 am
por Freelancer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines