Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ejercicio de arrays

Estas en el tema de ejercicio de arrays en el foro de C/C++ en Foros del Web. Hola, tengo un problema con el siguiente ejercicio: Tengo dos funciones, la primera calcula el total de todas las ventas y la segunda calcula el ...
  #1 (permalink)  
Antiguo 02/09/2010, 05:53
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
ejercicio de arrays

Hola, tengo un problema con el siguiente ejercicio: Tengo dos funciones, la primera calcula el total de todas las ventas y la segunda calcula el total de ventas de cada vendedor. No me suma las ventas de un vendedor y tampoco me suma todas las ventas de los vendedores.

Ejemplo de compilación:

1) Añadir datos
2) Mostrar total de vendedor
3) Mostrar total de ventas
4) Salir
1
Número del vendedor:1
Número del producto:1
Cantidad vendida: 3.2

1) Añadir datos
2) Mostrar total de vendedor
3) Mostrar total de ventas
4) Salir
1
Número del vendedor:1
Número del producto:1
Cantidad vendida:5.8

1) Añadir datos
2) Mostrar total de vendedor
3) Mostrar total de ventas
4) Salir
2

Número del vendedor: 1
Venta total del vendedor 1=5.80

1) Añadir datos
2) Mostrar total de vendedor
3) Mostrar total de ventas
4) Salir
3

Total de ventas: 5.80
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. #define N_VENDEDORES 18
  4. #define N_PRODUCTOS 10
  5.  
  6. /* Función que muestra el menú del programa y retorna
  7. el número de menú elegido por el usuario */
  8. int mostrarMenu();
  9.  
  10. /* Función que calcula el total de todas las ventas*/
  11. double mostrarTotal(double v[][N_PRODUCTOS]);
  12.  
  13. /* Función que calcula el total de ventas de un vendedor*/
  14. double totalVendedor(double v[][N_PRODUCTOS], int nVendedor);
  15.  
  16. int main(){
  17. double ventas[N_VENDEDORES][N_PRODUCTOS]={0};
  18. int resp=mostrarMenu();
  19. int nvend, nprod;
  20. double cantidad;
  21.  
  22. while(resp!=4){
  23. switch(resp){
  24. case 1:
  25. printf("Numero de vendedor: ");scanf("%d",&nvend);
  26. printf("Numero de producto: ");scanf("%d",&nprod);
  27. printf("Cantidad ventida: ");scanf("%lf",&cantidad);
  28. ventas[nvend][nprod]=cantidad;
  29. break;
  30. case 2:
  31. printf("Numero de vendedor: ");scanf("%d",&nvend);
  32. printf("Ventas total del vendedor %d=%.2lf\n",
  33. nvend,totalVendedor(ventas,nvend));
  34. break;
  35. case 3:
  36. printf("Total de ventas=%.2lf\n",
  37. mostrarTotal(ventas));
  38. break;
  39. }
  40. resp=mostrarMenu();
  41. }
  42.  
  43. }
  44. int mostrarMenu(){
  45. int resp;
  46. printf("\n\n");
  47. printf("1) Añadir datos\n");
  48. printf("2) Mostrar total de vendedor\n");
  49. printf("3) Mostrar total de ventas\n");
  50. printf("4) Salir\n");
  51. scanf("%d",&resp);
  52. return resp;
  53. }
  54.  
  55. double mostrarTotal(double v[][N_PRODUCTOS]){
  56. double resp=0;
  57. int i,j;
  58. for(i=0;i<N_VENDEDORES;i++){
  59. for(j=0;j<N_PRODUCTOS;j++){
  60. resp+=v[i][j];
  61. }
  62. }
  63. return resp;
  64. }
  65.  
  66. double totalVendedor(double v[][N_PRODUCTOS], int nVendedor){
  67. double resp=0;
  68. int i;
  69. for(i=0;i<N_PRODUCTOS;i++){
  70. resp+=v[nVendedor][i];
  71. }
  72. return resp;
  73. }
  #2 (permalink)  
Antiguo 02/09/2010, 11:18
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: ejercicio de arrays

Código C:
Ver original
  1. /*dos funciones, la primera calcula el total de todas las ventas
  2.  y la segunda calcula el total de ventas de cada vendedor.*/
  3. #include <stdio.h>
  4. #define N_VENDEDORES 18
  5. #define N_PRODUCTOS 10
  6.  
  7. /* Función que muestra el menú del programa y retorna
  8. el número de menú elegido por el usuario */
  9. int mostrarMenu();
  10.  
  11. /* Función que calcula el total de todas las ventas*/
  12. double mostrarTotal(double v[][N_PRODUCTOS]);
  13.  
  14. /* Función que calcula el total de ventas de un vendedor*/
  15. double totalVendedor(double v[][N_PRODUCTOS], int nVendedor);
  16.  
  17. int main(){
  18.     double ventas[N_VENDEDORES][N_PRODUCTOS]={0};
  19.     int resp=mostrarMenu();
  20.     int nvend, nprod;
  21.     double cantidad, cantidad_tmp[N_VENDEDORES][N_PRODUCTOS]={0};  // nueva linea
  22.  
  23.     while(resp!=4){
  24.         switch(resp){
  25.             case 1:
  26.                 printf("Numero de vendedor: ");scanf("%d",&nvend);
  27.                 printf("Numero de producto: ");scanf("%d",&nprod);
  28.                 printf("Cantidad vendida: ");scanf("%lf",&cantidad);
  29.                 ventas[nvend][nprod]=cantidad+cantidad_tmp[nvend][nprod];  //Nuevo linea
  30.                 cantidad_tmp[nvend][nprod] += cantidad;                    //Nueva linea
  31.                 break;
  32.             case 2:
  33.                 printf("Numero de vendedor: ");scanf("%d",&nvend);
  34.                 printf("Ventas total del vendedor %d=%.2lf\n",
  35.                 nvend,totalVendedor(ventas,nvend));
  36.                 break;
  37.             case 3:
  38.                 printf("Total de ventas=%.2lf\n",
  39.                 mostrarTotal(ventas));
  40.                 break;
  41.                 }
  42.             resp=mostrarMenu();
  43.             }
  44.  
  45.     }
  46. int mostrarMenu(){
  47.     int resp;
  48.     printf("\n\n");
  49.     printf("1) Añadir datos\n");
  50.     printf("2) Mostrar total de vendedor\n");
  51.     printf("3) Mostrar total de ventas\n");
  52.     printf("4) Salir\n");
  53.     scanf("%d",&resp);
  54.     return resp;
  55. }
  56.  
  57. double mostrarTotal(double v[][N_PRODUCTOS]){
  58.     double resp=0;
  59.     int i,j;
  60.     for(i=0;i<N_VENDEDORES;i++){
  61.         for(j=0;j<N_PRODUCTOS;j++){
  62.             resp+=v[i][j];
  63.                 }
  64.         }
  65.     return resp;
  66. }
  67.  
  68. double totalVendedor(double v[][N_PRODUCTOS], int nVendedor){
  69.     double resp=0;
  70.     int i;
  71.     for(i=0;i<N_PRODUCTOS;i++){
  72.         resp+=v[nVendedor][i];
  73.         }
  74.     return resp;
  75. }
ver: nueva linea , lo que te pasaba era que modificabas la cantidad pasada ingresada por la nueva ingresada en vez de sumarlas.
  #3 (permalink)  
Antiguo 02/09/2010, 14:02
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ejercicio de arrays

¿Por qué al declarar ambas funciones donde pone double v[][N_PRODUCTOS], los corchetes están vacíos?
  #4 (permalink)  
Antiguo 02/09/2010, 14:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: ejercicio de arrays

Cita:
Iniciado por minette1988 Ver Mensaje
¿Por qué al declarar ambas funciones donde pone double v[][N_PRODUCTOS], los corchetes están vacíos?

en realidad no es necesario solo es una declaracion (Asi lo colocastes tu.)

Lo correcto seria asi:

double mostrarTotal(double v[][]);
double totalVendedor(double v[][], int nVendedor);

en la definicion tampoco . solo que en muchos compiladores tira error:
invalid use of array with unspecified bounds .(info:http://bytes.com/topic/c/answers/223449-invalid-use-array-unspecified-bounds-why)

Última edición por logic_tristaN; 02/09/2010 a las 14:58
  #5 (permalink)  
Antiguo 03/09/2010, 05:52
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ejercicio de arrays

En la línea 29 de tu código, ventas[n_vend][n_prod]=cantidad + cantidad_tmp[n_vend][n_prod].

Tenemos inicializadas a 0 las ventas, sumamos la cantidad del pimer vendedor más cantidad_tmp, ¿para qué sirve esta variable?

Esta instrucción: cantidad_tmp[n_vend][n_prod] += cantidad va sumando las cantidades introducidas correspondientes a cada vendedor y el resultado lo almacena en cantidad_tmp ¿no?

En la línea 35 donde pone total_vendedor(ventas, n_vend) la variable ventas guarda el valor total de ventas de dicho vendedor y la variable n_vend guarda el número del vendedor asociado a su venta total ¿no?

En la línea 39 donde pone mostrar_total(ventas) esta variable guarda el valor total de las ventas de todos los vendedores ¿no?
  #6 (permalink)  
Antiguo 04/09/2010, 14:34
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: ejercicio de arrays

Cita:
Iniciado por minette1988 Ver Mensaje
En la línea 29 de tu código, ventas[n_vend][n_prod]=cantidad + cantidad_tmp[n_vend][n_prod].

Tenemos inicializadas a 0 las ventas, sumamos la cantidad del pimer vendedor más cantidad_tmp, ¿para qué sirve esta variable?

Esta instrucción: cantidad_tmp[n_vend][n_prod] += cantidad va sumando las cantidades introducidas correspondientes a cada vendedor y el resultado lo almacena en cantidad_tmp ¿no?

En la línea 35 donde pone total_vendedor(ventas, n_vend) la variable ventas guarda el valor total de ventas de dicho vendedor y la variable n_vend guarda el número del vendedor asociado a su venta total ¿no?

En la línea 39 donde pone mostrar_total(ventas) esta variable guarda el valor total de las ventas de todos los vendedores ¿no?
cantidad_tmp almacena la cantidad de venta pasada ingresada para ese usuario en particular. ( de otra forma cada vez que ingreses una nueva cantidad en el mismo producto estarias sustituyendo el valor en vez de sumarlo.

(total_vendedor) (mostrar_total) obviamente si.

pd: para que entiendas mejor.. prueba ambas versiones del codigo y compara.

Etiquetas: arrays
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:15.