Autor
|
Tema: Duda ejercicio con posibilidades infinitas (Leído 4,281 veces)
|
EstudXx
Desconectado
Mensajes: 4
|
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
|
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 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
Mensajes: 4
|
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
Mensajes: 4
|
Por cierto, ya tengo un código que no se ve limitado en la cantidad de valores que prueba, usando while´s anidados. 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
|
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
Mensajes: 4
|
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
Mensajes: 371
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda en ejercicio++
Ejercicios
|
Lamarkus
|
1
|
3,471
|
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
|
4 Febrero 2011, 01:24 am
por negux
|
|
|
Duda ejercicio C
Programación C/C++
|
cortex123
|
1
|
2,179
|
13 Junio 2011, 21:09 pm
por El_Java
|
|
|
Duda con ejercicio
Programación C/C++
|
bigfu
|
2
|
2,174
|
24 Agosto 2011, 22:43 pm
por bigfu
|
|
|
duda con un ejercicio
Programación C/C++
|
Freelancer
|
4
|
2,694
|
10 Septiembre 2011, 04:31 am
por Freelancer
|
|