Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: rafa011 en 2 Marzo 2014, 23:23 pm



Título: ayuda
Publicado por: rafa011 en 2 Marzo 2014, 23:23 pm
Un centenar de mujeres, hombres y niños asistieron a un banquete para recaudar fondos.

Cada uno de los hombres que asistió pagó 75 monedas, cada mujer 99 y cada niño 40 monedas. Si en total se ingresaron 7869 monedas,

Hacer un programa en C que determite Cuántos hombres, mujeres y niños había, respectivamente?


Título: Re: ayuda
Publicado por: engel lex en 2 Marzo 2014, 23:57 pm
1- no hagas doble post... con uno basta
http://foro.elhacker.net/programacion_general/ayuda_con_un_programa-t409716.0.html;topicseen (http://foro.elhacker.net/programacion_general/ayuda_con_un_programa-t409716.0.html;topicseen)

2- cual es tu duda? (no se hacen codigos, programas, tareas, trabajos, etc....)


Título: Re: ayuda
Publicado por: rafa011 en 3 Marzo 2014, 00:21 am
como puedo hacer ese programa en c++


Título: Re: ayuda
Publicado por: engel lex en 3 Marzo 2014, 00:57 am
qué sabes de c?

lo básico seria por fuerza bruta:

colocar 3 variables que entre ellas siempre deben sumar 100 (hombre, mujeres, y niños, las llamare A, B y C respectivamente)

usar 1 ciclo para recorrer la primera variable, desde 1  hasta 98 (esto porque las otras deben valer siempre por lo menos 1 c/u)

el segundo ciclo va desde 1 hasta 100-A-1 (100 es la sumatoria, A es el valor de la variable en primer ciclo, 1 es el valor minimo de la tercera variable)

en este segundo ciclo C va a ser igual a 100-A-B para mantener siempre la proporción de 100

por ultimo en este ciclo creas un if donde si A*75 + B*99 + C*40 = 7869 entonces tienes la combinación correcta... en ese caso, imprimes en pantalla y listo...

ya lo que tienes que hacer es volver a código eso que te dije... no es tanto, 2 ciclos  un if y algunas sumas...


Título: Re: ayuda
Publicado por: Gh057 en 3 Marzo 2014, 01:19 am
hola rafa011, primero resuélvelo  en lápiz y papel; llegarás a un algoritmo que resuelve tu problema como te indica engelx, luego lo codificas a c++. saludos.


Título: Re: ayuda
Publicado por: leosansan en 3 Marzo 2014, 09:46 am
hola rafa011, primero resuélvelo  en lápiz y papel; llegarás a un algoritmo que resuelve tu problema como te indica engelx, luego lo codificas a c++. saludos.

Yo le dejo el papel y el lápiz para que haga los números ya que see trata de una par de ecuaciones simples, pero acabará en algo como esto:

Citar

hombres=33   mujeres=46   niños=21

Process returned 0 (0x0)   execution t
[/quote]

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  int i=0;
  6.  for(i=0;i<98;i++)
  7.    if ((100-(369+35*i)/24-i)*75+99*(369+35*i)/24+40*i==7869 && (100-(369+35*i)/24-i>=1)  )
  8.      printf ("\nhombres=%d   mujeres=%d   ni\xA4os=%d\n",100-(369+35*i)/24-i,(369+35*i)/24,i);
  9.  return 0;
  10. }
  11.  

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: ayuda
Publicado por: engel lex en 3 Marzo 2014, 10:28 am
leosansan... la intención del foro es aprender, no hacer el trabajo...

por otro lado... wtf con la ecuación? XD de donde rayos sacaste?
por otros lado me suena a que es dependiente del valor final, ya que tienes 3 variables independientes y una sola ecuación

a demás evaluándola todos los valores manejados me dan 7869 en la primera parte del if y >=1 para todo entre 0 y 34 en la segunda parte...
podrías explicar la lógica de tu respuesta en este código sin tener el valor final?

Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4.  int i=0;
  5.  for(i=0;i<98;i++){
  6.    if ((100-(369+35*i)/24-i)*75+99*(369+35*i)/24+40*i==7869 && (100-(369+35*i)/24-i>=1)  ){
  7.      printf ("\nhombres=%d   mujeres=%d   ni\xA4os=%d\n",100-(369+35*i)/24-i,(369+35*i)/24,i);
  8.    }
  9.  }
  10.  return 0;
  11. }


Título: Re: ayuda
Publicado por: eferion en 3 Marzo 2014, 10:32 am
leosansan... la intención del foro es aprender, no hacer el trabajo...

En este caso concreto, el que copie esa ecuación no creo que sea capaz de explicarla... no porque sea complicada, sino porque copiar eso literal implica una falta total de conocimientos.

El que copia y no entiende suspende fijo... es ley de vida... llámalo selección natural.

por otro lado... wtf con la ecuación? XD de donde rayos sacaste?
por otros lado me suena a que es dependiente del valor final, ya que tienes 3 variables independientes y una sola ecuación

No es más que llevar, en el sentido literal y estricto, la ecuación de papel a código.

Se puede hacer de forma mucho más clara y comprensible, pero apostaría que lo ha hecho así precisamente para no hacerle la tarea a nadie.


Título: Re: ayuda
Publicado por: leosansan en 3 Marzo 2014, 10:54 am
leosansan... la intención del foro es aprender, no hacer el trabajo...

por otro lado... wtf con la ecuación? XD de donde rayos sacaste?
por otros lado me suena a que es dependiente del valor final, ya que tienes 3 variables independientes y una sola ecuación

a demás evaluándola todos los valores manejados me dan 7869 en la primera parte del if y >=1 para todo entre 0 y 34 en la segunda parte...
podrías explicar la lógica de tu respuesta en este código sin tener el valor final?


Es un sistema de ecuaciones indeterminado ya que hay tres variables y sólo dos ecuaciones. Ello da lugar a que puedan existir infinitas soluciones, al menos en el campo real. Otra cosa es si la solución que se busca es entera.

Y no tienen mayor misterio que plantear las ecuaciones:

* 75*x+99*y+40*z=7869

* x+y+z=100

Despejando una de las variables de la segunda, yo elegí la x, y sustituyendo en la primera, para a continuación volver a despejar una de las variables en la ecuación resultante de la primera sustitución, yo tomé la y, y tomar como parámetro o variable, la "i" del for, a la variable restante z. Simple pero efectivo, salvo pifia por mi parte.

Como comentó eferion quería que el código quedará "ofuscado" para que no se diga que había resuelto el ejercicio.

 
(http://st.forocoches.com/foro/images/smilies/simba2.gif)

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)



Título: Re: ayuda
Publicado por: eferion en 3 Marzo 2014, 11:17 am
Como comentó eferion quería que el código quedará "ofuscado" para que no se diga que había resuelto el ejercicio. [/size]

Podías haberle puesto alguna macro de por medio... jejejeje


Título: Re: ayuda
Publicado por: leosansan en 3 Marzo 2014, 11:32 am
Podías haberle puesto alguna macro de por medio... jejejeje

¡¡¡Lo tendré en cuenta para la próxima!!!.(http://st.forocoches.com/foro/images/smilies/24.gif)

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: ayuda
Publicado por: eferion en 3 Marzo 2014, 11:46 am
una propuesta rápida... con algo más de tiempo se puede currar más

Código
  1. #include <stdio.h>
  2.  
  3. #define _ 369+35
  4. #define M (100-(_
  5. #define A *i)/24-i)*75
  6. #define C +99*(_*i
  7. #define R )/24+40*i==7869
  8. #define O && (100-(_*i)/24-i>=1)
  9.  
  10. int main()
  11. {
  12.  int i=0;
  13.  for(i=0;i<98;i++){
  14.    if (M A C R O ){
  15.      printf ("\nhombres=%d   mujeres=%d   ni\xA4os=%d\n",100-(_*i)/24-i,(_*i)/24,i);
  16.    }
  17.  }
  18.  return 0;
  19. }
  20.  

segunda versión...

Código
  1. #include <stdio.h>
  2.  
  3. #define _ 369 H 35 X i
  4. #define A U Y Y F Z X J X V W >=1 Z
  5. #define B Y _ Z /24
  6. #define C ;
  7. #define D = 0 C
  8. #define E } }
  9. #define F 100 I B I G
  10. #define G i
  11. #define H +
  12. #define I -
  13. #define J 75 H 99
  14. #define K printf
  15. #define L B H 40 X G
  16. #define M Z { K Y "\nhombres=%d   mujeres=%d   ni\xA4os=%d\n" ,F,B,G Z
  17. #define N if
  18. #define O for(
  19. #define P int G
  20. #define Q C G++ Z {
  21. #define R D
  22. #define S return 0
  23. #define T C
  24. #define U G < 98 Q N
  25. #define V L == 7869 &&
  26. #define W Y F
  27. #define X *
  28. #define Y (
  29. #define Z )
  30.  
  31.  
  32. int main()
  33. {
  34.  P R O G R A M
  35.  T E S T
  36. }


Título: Re: ayuda
Publicado por: Gh057 en 3 Marzo 2014, 16:02 pm
exacto leosansan! es un sistemas de ecuaciones indeterminado.

por cierto, exquisitas las soluciones de eferion; solo me imagino la cara del profe cuando le muestren el código y le diga "lo hice así, está bien?" jajajajaaaa


Título: Re: ayuda
Publicado por: engel lex en 3 Marzo 2014, 18:51 pm
lo que pasa es que en la solucion de leosansan el solicitante puede entender por desconocimiento que esa es la ecuacion final y llevarlo a fallar la nota del trabajo por (obviamente flojo y no saber que dice ahí)

rayos! estoy oxidado en mate! nada más vi una ecuacion XD no habia notado la segunda

eferion
Código
  1. int main()
  2. {
  3.  P R O G R A M
  4.  T E S T
  5. }
solo te puedo decir que te fumaste algo raro y ya vencido! D:


Título: Re: ayuda
Publicado por: Gh057 en 3 Marzo 2014, 19:10 pm
jajaaja ese main es un delirioooo  :laugh:


Título: Re: ayuda
Publicado por: eferion en 4 Marzo 2014, 08:30 am
lo que pasa es que en la solucion de leosansan el solicitante puede entender por desconocimiento que esa es la ecuacion final y llevarlo a fallar la nota del trabajo por (obviamente flojo y no saber que dice ahí)

rayos! estoy oxidado en mate! nada más vi una ecuacion XD no habia notado la segunda

eferion
Código
  1. int main()
  2. {
  3.  P R O G R A M
  4.  T E S T
  5. }
solo te puedo decir que te fumaste algo raro y ya vencido! D:

Jajajajajaja... la idea es ofuscar con cierto estilo... la verdad es que solo me llevó unos 10 minutos conseguir ese código, tampoco es que me esmerase en exceso. Se puede conseguir código bastante más complicado de leer XDDDD


Título: Re: ayuda
Publicado por: Yoel Alejandro en 4 Marzo 2014, 17:28 pm
Saludos a todos. Como profesor de matemáticas me permito hacer algunos comentarios. Es básicamente un problema lógico de combinatoria. Pero quiero decir que el planteamiento de suponer un máximo de 100 asistentes hombres no es técnicamente correcto (empezando porque es un completamente arbitrario). Además, hay que tener en cuenta que elegido un valor para la cantidad de hombres, aún existen muchos pares de combinaciones de mujer-niño. O sea, se tienen tres variables i, j, k y no una.

En síntesis, el problema consiste en encontrar todas las tripletas de valores i, j, k que satisfagan:

A*i + B*j + C*k = T

siendo A, B, C la cantidad de monedas aportadas por cada hombre, mujer o niño respectivamente, T el total de monedas, y siendo i, j, k enteros positivos.
Y efectivamente hay infinitas soluciones, por tratarse de más incógnitas que ecuaciones!!!

Yo voy a suponer (no se si esto se halle efectivamente entre las condiciones del ejercicio) que hubo por lo menos uno hombre, por lo menos una mujer y por lo menos un niño, así que i, j, k deben ser mayores o iguales a 1.

Ahora, ¿cuáles son los mayores valores posibles de i, de j  y de k? Pues, el máximo de i viene dado cuando j  y k tienen los valores mínimos: j = k = 1 (una sola mujer y un solo niño). Ello produce:

i_MAX = (T - 1*B - 1*C)/A;

(redondeando i_MAX al entero más cercano por debajo). Similarmente se obtienen el máximo de j y el máximo de k:

j_MAX = (T - 1*A - 1*C)/B;
k_MAX = (T - 1*A - 1*B)/C;


Sacando las cuentas se obtiene un máximo de:

103 hombres
78 mujeres
192 niños

Luego debemos probar todas las combinaciones para 1 <= i <= i_MAX, 1 <= j <= j_MAX, 1 <= k <= k_MAX, y seleccionar aquéllas donde  A*i + B*j + C*k == T. Ahora sabiendo todo esto,el código del programa resulta bien sencillo, pero les cuento que se hallan 106 soluciones, jeje. La que se propuso H = 33, M = 46, N = 21 es una de ellas pero hay otras por ejemplo:

H = 25, M = 46, N = 36
H = 26, M = 21, N = 96
H = 27, M = 36, N = 57

y muchas más.

El programa aquí:
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. /* Nota: Sean
  5.  *
  6.  *  A la cantidad de monedas que aporta cada hombre
  7.  *  B la cantidad de monedas que aporta cada mujer
  8.  *  C la cantidad de monedas que aporta cada nino
  9.  *  T el total de monedas
  10.  *
  11.  * entones tenemos:
  12.  */
  13. #define A 75
  14. #define B 99
  15. #define C 40
  16. #define T 7869
  17. /* por otra parte, siendo i la cantidad de hombres, j la cantidad
  18.  * de mujeres y k la cantidad de ninos, la condicion buscada es que
  19.  *  
  20.  *  A*i + B*j + C*k = T
  21.  *
  22.  * siendo i, j, k numeros enteros y positivos. La solucion la buscaremos
  23.  * por tanteo (fuerza bruta) mostrando todas las combinaciones posibles.
  24.  */
  25.  
  26. int main () {
  27.  
  28. int i, j, k, count;
  29. int i_MAX, j_MAX, k_MAX;
  30.  
  31. printf( "********************************************\n"
  32.    "Programa de calculo de combinaciones\n"
  33.    "********************************************\n\n" );
  34.  
  35. printf( "Condiciones:\n"
  36. " cada hombre aporta %d monedas\n"
  37. " cada mujer aporta  %d monedas\n"
  38. " cada nino aporta   %d monedas\n"
  39. " Total:             %d monedas.\n\n",
  40. A, B, C, T );
  41.  
  42. /* El maximo valor posible de i sera el cociente entero de
  43. * (T - 1*B - 1*C) entre A, es decir, el valor entero de i que satisface
  44. * la ecuacion:
  45. *
  46. *  A*i + B*j + C*k = T
  47. *
  48. * con los valores minimos de j = 1, k = 1. De modo similar se calculan
  49. * los valores maximos posibles de j y k.
  50. */
  51. i_MAX = (T - 1*B - 1*C)/A;
  52. j_MAX = (T - 1*A - 1*C)/B;
  53. k_MAX = (T - 1*A - 1*B)/C;
  54.  
  55. printf("%d, %d, %d, %d\n", i_MAX, j_MAX, k_MAX, i_MAX*j_MAX*k_MAX);
  56.  
  57. count = 0;
  58. for ( i = 1; i <= i_MAX; i++ )
  59. for ( j = 1; j <= j_MAX; j++ )
  60. for ( k = 1; k <= k_MAX; k++ )
  61. if ( A*i + B*j + C*k == T ) {
  62. printf( "Se encontro la combinacion H = %d, M = %d, N = %d\n",
  63. i, j, k);
  64. count ++;
  65. }
  66. printf( "%d resultados. -- FIN DEL PROGRAMA --\n", count);
  67. }

y el resultado que arroja (larguísimo):

********************************************
Programa de calculo de combinaciones
********************************************

Condiciones:
 cada hombre aporta 75 monedas
 cada mujer aporta  99 monedas
 cada nino aporta   40 monedas
 Total:             7869 monedas.

Se encontro la combinacion H = 1, M = 6, N = 180
Se encontro la combinacion H = 1, M = 46, N = 81
Se encontro la combinacion H = 2, M = 21, N = 141
Se encontro la combinacion H = 2, M = 61, N = 42
Se encontro la combinacion H = 3, M = 36, N = 102
Se encontro la combinacion H = 3, M = 76, N = 3
Se encontro la combinacion H = 4, M = 11, N = 162
Se encontro la combinacion H = 4, M = 51, N = 63
Se encontro la combinacion H = 5, M = 26, N = 123
Se encontro la combinacion H = 5, M = 66, N = 24
Se encontro la combinacion H = 6, M = 1, N = 183
Se encontro la combinacion H = 6, M = 41, N = 84
Se encontro la combinacion H = 7, M = 16, N = 144
Se encontro la combinacion H = 7, M = 56, N = 45
Se encontro la combinacion H = 8, M = 31, N = 105
Se encontro la combinacion H = 8, M = 71, N = 6
Se encontro la combinacion H = 9, M = 6, N = 165
Se encontro la combinacion H = 9, M = 46, N = 66
Se encontro la combinacion H = 10, M = 21, N = 126
Se encontro la combinacion H = 10, M = 61, N = 27
Se encontro la combinacion H = 11, M = 36, N = 87
Se encontro la combinacion H = 12, M = 11, N = 147
Se encontro la combinacion H = 12, M = 51, N = 48
Se encontro la combinacion H = 13, M = 26, N = 108
Se encontro la combinacion H = 13, M = 66, N = 9
Se encontro la combinacion H = 14, M = 1, N = 168
Se encontro la combinacion H = 14, M = 41, N = 69
Se encontro la combinacion H = 15, M = 16, N = 129
Se encontro la combinacion H = 15, M = 56, N = 30
Se encontro la combinacion H = 16, M = 31, N = 90
Se encontro la combinacion H = 17, M = 6, N = 150
Se encontro la combinacion H = 17, M = 46, N = 51
Se encontro la combinacion H = 18, M = 21, N = 111
Se encontro la combinacion H = 18, M = 61, N = 12
Se encontro la combinacion H = 19, M = 36, N = 72
Se encontro la combinacion H = 20, M = 11, N = 132
Se encontro la combinacion H = 20, M = 51, N = 33
Se encontro la combinacion H = 21, M = 26, N = 93
Se encontro la combinacion H = 22, M = 1, N = 153
Se encontro la combinacion H = 22, M = 41, N = 54
Se encontro la combinacion H = 23, M = 16, N = 114
Se encontro la combinacion H = 23, M = 56, N = 15
Se encontro la combinacion H = 24, M = 31, N = 75
Se encontro la combinacion H = 25, M = 6, N = 135
Se encontro la combinacion H = 25, M = 46, N = 36
Se encontro la combinacion H = 26, M = 21, N = 96
Se encontro la combinacion H = 27, M = 36, N = 57
Se encontro la combinacion H = 28, M = 11, N = 117
Se encontro la combinacion H = 28, M = 51, N = 18
Se encontro la combinacion H = 29, M = 26, N = 78
Se encontro la combinacion H = 30, M = 1, N = 138
Se encontro la combinacion H = 30, M = 41, N = 39
Se encontro la combinacion H = 31, M = 16, N = 99
Se encontro la combinacion H = 32, M = 31, N = 60
Se encontro la combinacion H = 33, M = 6, N = 120
Se encontro la combinacion H = 33, M = 46, N = 21
Se encontro la combinacion H = 34, M = 21, N = 81
Se encontro la combinacion H = 35, M = 36, N = 42
Se encontro la combinacion H = 36, M = 11, N = 102
Se encontro la combinacion H = 36, M = 51, N = 3
Se encontro la combinacion H = 37, M = 26, N = 63
Se encontro la combinacion H = 38, M = 1, N = 123
Se encontro la combinacion H = 38, M = 41, N = 24
Se encontro la combinacion H = 39, M = 16, N = 84
Se encontro la combinacion H = 40, M = 31, N = 45
Se encontro la combinacion H = 41, M = 6, N = 105
Se encontro la combinacion H = 41, M = 46, N = 6
Se encontro la combinacion H = 42, M = 21, N = 66
Se encontro la combinacion H = 43, M = 36, N = 27
Se encontro la combinacion H = 44, M = 11, N = 87
Se encontro la combinacion H = 45, M = 26, N = 48
Se encontro la combinacion H = 46, M = 1, N = 108
Se encontro la combinacion H = 46, M = 41, N = 9
Se encontro la combinacion H = 47, M = 16, N = 69
Se encontro la combinacion H = 48, M = 31, N = 30
Se encontro la combinacion H = 49, M = 6, N = 90
Se encontro la combinacion H = 50, M = 21, N = 51
Se encontro la combinacion H = 51, M = 36, N = 12
Se encontro la combinacion H = 52, M = 11, N = 72
Se encontro la combinacion H = 53, M = 26, N = 33
Se encontro la combinacion H = 54, M = 1, N = 93
Se encontro la combinacion H = 55, M = 16, N = 54
Se encontro la combinacion H = 56, M = 31, N = 15
Se encontro la combinacion H = 57, M = 6, N = 75
Se encontro la combinacion H = 58, M = 21, N = 36
Se encontro la combinacion H = 60, M = 11, N = 57
Se encontro la combinacion H = 61, M = 26, N = 18
Se encontro la combinacion H = 62, M = 1, N = 78
Se encontro la combinacion H = 63, M = 16, N = 39
Se encontro la combinacion H = 65, M = 6, N = 60
Se encontro la combinacion H = 66, M = 21, N = 21
Se encontro la combinacion H = 68, M = 11, N = 42
Se encontro la combinacion H = 69, M = 26, N = 3
Se encontro la combinacion H = 70, M = 1, N = 63
Se encontro la combinacion H = 71, M = 16, N = 24
Se encontro la combinacion H = 73, M = 6, N = 45
Se encontro la combinacion H = 74, M = 21, N = 6
Se encontro la combinacion H = 76, M = 11, N = 27
Se encontro la combinacion H = 78, M = 1, N = 48
Se encontro la combinacion H = 79, M = 16, N = 9
Se encontro la combinacion H = 81, M = 6, N = 30
Se encontro la combinacion H = 84, M = 11, N = 12
Se encontro la combinacion H = 86, M = 1, N = 33
Se encontro la combinacion H = 89, M = 6, N = 15
Se encontro la combinacion H = 94, M = 1, N = 18
Se encontro la combinacion H = 102, M = 1, N = 3
106 resultados. -- FIN DEL PROGRAMA --

 :laugh:


Título: Re: ayuda
Publicado por: leosansan en 4 Marzo 2014, 18:10 pm

Saludos a todos. Como profesor de matemáticas me permito hacer algunos comentarios. .........................


Y yo como Ingeniero también aporto mis comentarios.

Lamento corregirte querido yoel_alejandro pero mantengo lo que propuse: la indeterminación del sistema es de uno ya que existen DOS ecuaciones y TRES incógnitas con lo que dos de ellas se obtendrán de la tercera, o sea una sola variable independiente.


Un centenar de mujeres, hombres y niños .......................


Al parecer no has leído correctamente el enunciado: un centenar, o sea 100, no un centenar y pico. Esa es una de las condiciones que se ha de cumplir y que tú obvias, quedando un sistema de dos ecuaciones y tres incógnitas. Claro que tu puedes interpretar centenar como más te guste.

Y para que quede constancia, esta es la solución que da tu código con esa condición:

(http://i1280.photobucket.com/albums/a497/leosansan/ecuacion_zps8a81cdd9.jpg)


Curiosamente coincide con mi solución (http://st.forocoches.com/foro/images/smilies/simba1.gif).

Y tu código con la condición del centenar:

..............................................
En síntesis, el problema consiste en encontrar todas las tripletas de valores i, j, k que satisfagan:

A*i + B*j + C*k = T

        Y

i+j+k=100


Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. /* Nota: Sean
  5.  *
  6.  *  A la cantidad de monedas que aporta cada hombre
  7.  *  B la cantidad de monedas que aporta cada mujer
  8.  *  C la cantidad de monedas que aporta cada nino
  9.  *  T el total de monedas
  10.  *
  11.  * entones tenemos:
  12.  */
  13. #define A 75
  14. #define B 99
  15. #define C 40
  16. #define T 7869
  17. /* por otra parte, siendo i la cantidad de hombres, j la cantidad
  18.  * de mujeres y k la cantidad de ninos, la condicion buscada es que
  19.  *
  20.  *  A*i + B*j + C*k = T
  21.  *
  22.  * siendo i, j, k numeros enteros y positivos. La solucion la buscaremos
  23.  * por tanteo (fuerza bruta) mostrando todas las combinaciones posibles.
  24.  */
  25.  
  26. int main () {
  27.  
  28. int i, j, k, count;
  29. int i_MAX, j_MAX, k_MAX;
  30.  
  31. printf( "********************************************\n"
  32.    "Programa de calculo de combinaciones\n"
  33.    "********************************************\n\n" );
  34.  
  35. printf( "Condiciones:\n"
  36. " cada hombre aporta %d monedas\n"
  37. " cada mujer aporta  %d monedas\n"
  38. " cada nino aporta   %d monedas\n"
  39. " Total:             %d monedas.\n\n",
  40. A, B, C, T );
  41.  
  42. /* El maximo valor posible de i sera el cociente entero de
  43. * (T - 1*B - 1*C) entre A, es decir, el valor entero de i que satisface
  44. * la ecuacion:
  45. *
  46. *  A*i + B*j + C*k = T
  47. *
  48. * con los valores minimos de j = 1, k = 1. De modo similar se calculan
  49. * los valores maximos posibles de j y k.
  50. */
  51. i_MAX = (T - 1*B - 1*C)/A;
  52. j_MAX = (T - 1*A - 1*C)/B;
  53. k_MAX = (T - 1*A - 1*B)/C;
  54.  
  55. printf("%d, %d, %d, %d\n", i_MAX, j_MAX, k_MAX, i_MAX*j_MAX*k_MAX);
  56.  
  57. count = 0;
  58. for ( i = 1; i <= i_MAX; i++ )
  59. for ( j = 1; j <= j_MAX; j++ )
  60. for ( k = 1; k <= k_MAX; k++ )
  61. if ( A*i + B*j + C*k == T  && i+j+k==100) {/** AQUI EL CENTENAR **/
  62. printf( "\n\nSe encontro la combinacion H = %d, M = %d, N = %d\n\n",
  63. i, j, k);
  64. count ++;
  65. }
  66. printf( "%d resultados. -- FIN DEL PROGRAMA --\n", count);
  67. }
  68.  
  69.  

Demasiado código para un problema tan nimio, al menos a mí me lo parece.

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: ayuda
Publicado por: engel lex en 4 Marzo 2014, 19:11 pm
apoyo a leosansan...

empiezas el tema de una manera un poco prepotente...
Citar
Saludos a todos. Como profesor de matemáticas me permito hacer algunos comentarios.

segundo ignoras datos del ejercicio
Citar
Un centenar de mujeres, hombres y niños

tu dices
Citar
Yo voy a suponer (no se si esto se halle efectivamente entre las condiciones del ejercicio)
si se haya ya que la condición que los separa es un "y" no un "o"

Citar
Sacando las cuentas se obtiene un máximo de:

103 hombres
78 mujeres
192 niños
el máximo es mayor a la sumatoria?

Citar
Y efectivamente hay infinitas soluciones, por tratarse de más incógnitas que ecuaciones!!!
absolutamente falso... tienes un sistema de variables basadas en números naturales en una suma con un resultado conocido... es lo mas lejos de infinito que se puede definir...

los detalles del ejercicio eran claros inequívocos y fácilmente comprensibles, a ver si nos ponemos a entenderlo mejor antes de empezar con "Como profesor de matemáticas" y meter la pata catastróficamente no solo en la interpretación del ejercicio, sino también en detalles como los aclarados aquí y por leosansan


Título: Re: ayuda
Publicado por: leosansan en 4 Marzo 2014, 21:36 pm
Gracias engel lex por tu punto de vista que considero neutral y totalmente objetivo.

No suelo hacer alarde de mi profesión  ... "a no ser que me los toquen". Siento haberlo hecho. Sorry!  :-X

Y conste que considero que yoel_alejandro me da mil vueltas en este mundillo de la programación, creo, pero otra cosa muy diferente es tratar de intervenir en todos los temas, a veces a costa de no aportar nada nuevo.

 Porque el código que aporta es para mí la expresión en código de lo que tu, engelx, expusiste en un post anterior de este hilo, ni más ni menos. Y se trataba de responder sin responder al que inició este hilo sin ninguna aportación, más allá del enunciado de un simple problema de ecuaciones.

Pero por mi parte el máximo respeto a  yoel_alejandro .... pero cuando no se tiene razón, no se tiene y no pasa nada.... aunque siempre se agradece una aclaración más que una disculpa ya que creo que el "tonito" de la respuesta de yoel_alejandro lo merece. Pero en fin ........


¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: ayuda
Publicado por: Yoel Alejandro en 5 Marzo 2014, 16:57 pm
Estimados engelx y leosansan,

Me acuso culpable de tener problemas de visión al no haber leído la palabra "centenar". A cualquiera le ocurre un lapsus de lectura, y esto no es motivo para descalificar la preparación de la persona. La solución que propuse es correcta de no ser por la condición i + j + k = 100 que sinceramente no había leído. ¡Sencillamente eso!

Y me parece que ustedes han exagerado este caso con el único motivo de descalificarme. Si me quieren fuera del foro, pues díganmelo, o dirijan una petición al moderador sustentada con los delitos de que me acusan.

El programa se corrige al añadir la condición i + j + k == 100 dentro del if y ajustar los valores de i_MAX, j_MAX y k_MAX para que no excedan de 98.

Respecto al código complejo, pues traté de hacer un programa un poco elaborado, que "hablara" con el usuario y fuera flexible en el sentido de que las constantes A, B, C, T pudieran ser cambiadas para resolver un problema con valores diferentes. Me acuso también culpable de estos delitos!!! Ah, ..... y la línea

printf("%d, %d, %d, %d\n", i_MAX, j_MAX, k_MAX, i_MAX*j_MAX*k_MAX);

no iba, era sólo con propósitos de debug  :D


Título: Re: ayuda
Publicado por: eferion en 5 Marzo 2014, 17:07 pm
Estimados engelx y leosansan,

Me acuso culpable de tener problemas de visión al no haber leído la palabra "centenar". A cualquiera le ocurre un lapsus de lectura, y esto no es motivo para descalificar la preparación de la persona. La solución que propuse es correcta de no ser por la condición i + j + k = 100 que sinceramente no había leído. ¡Sencillamente eso!

Y me parece que ustedes han exagerado este caso con el único motivo de descalificarme. Si me quieren fuera del foro, pues díganmelo, o dirijan una petición al moderador sustentada con los delitos de que me acusan.

El programa se corrige al añadir la condición i + j + k == 100 dentro del if y ajustar los valores de i_MAX, j_MAX y k_MAX para que no excedan de 98.

Respecto al código complejo, pues traté de hacer un programa un poco elaborado, que "hablara" con el usuario y fuera flexible en el sentido de que las constantes A, B, C, T pudieran ser cambiadas para resolver un problema con valores diferentes. Me acuso también culpable de estos delitos!!! Ah, ..... y la línea

printf("%d, %d, %d, %d\n", i_MAX, j_MAX, k_MAX, i_MAX*j_MAX*k_MAX);

no iba, era sólo con propósitos de debug  :D


Yo creo que los roces han tenido lugar por la forma en la que has explicado las cosas... da la sensación de que intentabas quedar por encima de los demás.

Seguramente no sea el caso... pero si los demás podemos interpretar eso de tus palabras es perfectamente lógico que tu hayas malinterpretado la intención que va detrás de las palabras de leosansan.

No hay que ponerse así, yo creo que en el foro todos intentamos aportar nuestro granito de arena a la causa... unas veces unos meten la pata y en otras lo meten otros... no pasa nada.

Lo que sí hay que tener en cuenta es que en un foro... como en cualquier medio de comunicación escrita, no se transmiten sentimientos en la conversación, por lo que es complicado hacerse una idea clara y acertada acerca de la motivación del interlocutor que se encuentra al otro lado de la conversación.

No hay que llegar a los extremos que se han visto en esta conversación.


Título: Re: ayuda
Publicado por: leosansan en 5 Marzo 2014, 19:14 pm
Estimados engelx y leosansan,

.........................................................................

Y me parece que ustedes han exagerado este caso con el único motivo de descalificarme. Si me quieren fuera del foro, pues díganmelo, o dirijan una petición al moderador sustentada con los delitos de que me acusan.

......................................................


En ningún momento ha sido mi intención descalificar a nadie y ahí están escritos mis post. Creo que confundes los términos ya que yo lo único que realicé son puntualizaciones a tu interpretación del problema, otra cosa es como tú te tomes mis observaciones.

Pero, como ya te comenté en otro post, pelillos a la mar.

Disfruto con algunas de tus aportaciones, especialmente si son en C puro y duro, ya que es el mundillo que en estos momentos me interesa y creo, y es una simple apreciación, que dominas muy bien ese  tema lo cual enriquece esta comunidad en general y a mí en particular, donde soy un auténtico pardillo comparados con ustedes en cuanto al conocimiento del lenguaje se refiere. Otra cosa son los "otros" conocimientos .......

Un fuerte saludo.


¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: ayuda
Publicado por: Yoel Alejandro en 6 Marzo 2014, 17:13 pm
Amigos, no era mi intención ponerme por encima de otros, pues tampoco quiero que ese rasgo caracterice mi personalidad.

Hace rato comenté que cuando era más joven yo era impulsivo, pero eso fue un error y quiero darlo por superado.

Mi comentario vino al caso pues siendo mi profesión u ocupación, y dada la naturaleza o tipo del problema, quise dar mi aporte en la materia del conocimiento que atañe a este ejercicio. Y siempre ha sido así en post similares que tratan temas matemáticos (operaciones con bases numéricas, resolución de ecuaciones, etc).

En fin, sólo quise hacer unos comentarios para nutrir la "base de información" disponible por todos para la resolución del problema. Y por supuesto que yo NO HARÍA estos comentarios si se tratase de ejercicios o temas de otra naturaleza: trato de limitarme a mi ámbito y no invadir el de los demás. Considero que esa es la base filosófica del respeto ajeno, tan necesario en este mundo.

La otra vez estaba pensando en compartir un código que hice hace tiempo para dibujar por consola (con asteriscos y líneas) la gráfica de una función. En coordenadas polares, y con algunas ecuaciones particulares tomadas de los libros, se producen una gráficas bellísimas (lissajous, mariposas, etc). Me gustaría poder hacerlo sin herir la sensibilidad de nadie aquí en el foro.

¿Saben? Me entristece mucho esa persistente rivalidad entre ingenieros y matemáticos, que se puso de manifiesto en un comentario que me hicieron. Y para ver que las cosas no son siempre lo que paracen, en realidad yo también soy ingeniero, pero estudioso de las matemáticas por afición. En realidad, también me gustan el ajedrez y otras cosas, jeje. Enseño matemáticas como mi trabajo, de eso me gano la vida. Una vez en una conferencia sobre métodos numéricos el ponente (que sí era un Matemático de carrera, al contrario que yo) salió con el bendito tema: los ingenieros esto y aquéllo .... Y yo por supuesto no le respondí, porque ya me tienen cansado con ese asunto .

No se, es una rivalidad que no debería existir. Antes no era así, recordemos que Pascal fue pionero en el diseño de una máquina de calcular, que luego fue perfeccionada por también matemático Leibniz. El Álgebra, la Aritmética y la Lógica siempre han estado ligadas a la Computación, y no se realmente por qué ahora existe ese divorcio y esa competencia. En la antiguedad, muchos intelectuales eran integrales e indagaban en varias áreas. Descartes es conocido por filósofo, pero también como autor del "plano cartesiano". Newton fue conocido por físico, pero sorprendentemente también fue alquimista. Y Leonardo, inventor, ingeniero y artista.

Pero en fin muchachos, reflexionando sobre la realidad actual del mundo está claro que por sobre todas las cosas: Hagamos la Paz y no la Guerra.   :D