Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: faakuh en 9 Agosto 2017, 17:07 pm



Título: Duda con C, funciones y menu de opciones.
Publicado por: faakuh en 9 Agosto 2017, 17:07 pm
Hola gente, buen día.

Necesito ayuda con un ejercicio de la universidad el cual no sé donde está el error que no me deja seguir. El ejercicio es el siguiente:

Una empresa de Internet tiene 5 tipos de servicios distribuidos en 10 zonas de trabajo.

Cada vez que se realiza una instalación se tiene los siguientes datos, que finalizan con el nro de instalación = 0

Nro de instalación
Tipo de servicio
Nro de zona
Monto a cobrar

Si la zona es la nro 3 y el tipo de servicio es el nro 1, recibe una bonificación del 20% sobre el monto a cobrar.

Se desea saber:

1. Tipo de instalación más solicitada en total
2. Promedio del valor de las instalaciones
3. Promedio del valor de las instalaciones realizadas en cada zona.




Ante todo mi S.O es W10 y el compilador que utilizo es Dev-C++
Y mi código hasta el momento es este (Todavía está incompleto ya que me estanqué en querer mostrar el tipo de instalación más solicitada en total):


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int vs [5];
  4. int vz [10];
  5. void mostrartipodeinstalacion();
  6. int promediodelvalordelasinstalaciones();
  7. void promedioinstalacionesxzona();
  8. int cargadatos();
  9. int main(int argc, char *argv[]) {
  10. int nroinstalacion;
  11.    int nroservicio;
  12.    int zona;
  13. int instsolicitada;
  14. int promedio = 0;
  15. int acumulador;
  16. int opc = 0;
  17. // Opciones del programa
  18. do {
  19. system ("cls");
  20. printf(" > 1 Carga de datos \n" );
  21. printf(" > 2 Mostrar tipo de instalacion mas solicitada en total \n" );
  22. printf(" > 3 Promedio del valor de las instalaciones \n" );
  23. printf(" > 4 Promedio del valor de las instalaciones realizadas en cada zona \n" );
  24. printf(" > 0 Salir " );
  25. printf("\n \n");
  26. printf("Seleccione alguna opcion segun su numero: \n");
  27. scanf("%d",&opc);
  28.  
  29. switch (opc)
  30. {
  31. case 1:
  32. cargadatos();
  33. break;
  34. case 2:
  35. mostrartipodeinstalacion();
  36. break;
  37. case 3:
  38.    promediodelvalordelasinstalaciones(acumulador);
  39.    printf("El promedio del valor de las instalaciones es de: %d. \n",promedio);
  40. break;
  41. case 4:
  42. promedioinstalacionesxzona();
  43. break;
  44. }
  45.  
  46. } while (opc != 0); //Mientras que "opc" sea indistinto a cero el programa se seguirá ejecutando.
  47. system("pause");
  48. return 0;
  49. }
  50.  
  51. void mostrartipodeinstalacion(){
  52.  
  53. }
  54.  
  55.  
  56. int promediodelvalordelasinstalaciones(int acumulador){
  57. int promedio = 0;
  58. promedio = acumulador / 2;
  59. printf("El promedio del valor de las instalaciones es de: %d. \n",promedio);
  60. return promedio;
  61. }
  62.  
  63. void promedioinstalacionesxzona(){
  64.  
  65. }
  66.  
  67. int cargadatos() {
  68. int i;
  69. int nroinstalacion = 0;
  70. int nroservicio = 0;
  71. int zona = 0;
  72. int monto = 0;
  73.    int acumulador = 0;
  74.  
  75.  
  76.  
  77. for (i=0;i<2;i++){
  78. printf("\n");
  79. printf("Introduzca el numero de instalacion: \n");
  80. scanf("%d",&nroinstalacion);
  81. printf("Introduzca el numero de servicio: \n");
  82. scanf("%d",&nroservicio);
  83. printf("Introduzca el numero de zona: \n");
  84. scanf("%d",&zona);
  85. printf("Introduzca el monto: \n");
  86. scanf("%d",&monto);
  87. vs [nroservicio];
  88. vz [zona];
  89. acumulador += monto;
  90. promediodelvalordelasinstalaciones(acumulador);
  91. }
  92. return 0;
  93. }
Cualquier ayuda que me quieran dar es bienvenida.

Saludos y desde ya gracias! :D


Título: Re: Duda con C, funciones y menu de opciones.
Publicado por: MAFUS en 9 Agosto 2017, 17:32 pm
Este es un ejercicio de estructuras. Con variables de datos básicos no la vas a sacar.
Debes preparar una estructura para que aloje todos los datos de cada instalación,
también deberás usar, según lo que he leído en el enunciado, memoria dinámica (malloc, free, ...) para incluir en una lista las instalaciones que se van haciendo.
Deberás usar funciones que hagan uso de esta lista e identifiquen los datos necesarios para realizar el conteo que te piden.

También puedes liberarte de todo eso usando tantos arrays como tipos de datos diferentes te piden (deberás poner una dimensión aceptable como para alojar todas las posibles instalaciones que se vayan a hacer) y que a cada instalación se le distribuyan los datos en sendos arrays y, por tanto, cada dicha instalación se encuentre en un único índice compartidos por todos los arrays.

Esta segunda opción es más complicada de mantener pero solo sirve si no te han enseñado como usar estructuras.


Título: Re: Duda con C, funciones y menu de opciones.
Publicado por: faakuh en 10 Agosto 2017, 20:15 pm
Hola, vi su respuesta e intente aprender estructuras, pero no logro hacer que me funcionen las opciones con los vectores.

Que estoy haciendo mal?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct datos {
  4.  int nroinstalacion;
  5.  int tiposervicio;
  6.  int zona;
  7.  int monto;
  8. }vservicio[5],vzona[10];
  9. float promedio;
  10. void mostrartipodeinstalacion();
  11. float promediodelvalordelasinstalaciones(int monto, float promedio);
  12. void promedioinstalacionesxzona();
  13. float cargadatos();
  14. void menu();
  15. int main(int argc, char *argv[]) {
  16. menu ();
  17.  
  18. system("pause");
  19. return 0;
  20. }
  21.  
  22. void mostrartipodeinstalacion(){
  23.  
  24. }
  25.  
  26.  
  27. float promediodelvalordelasinstalaciones(int monto,float promedio){
  28. printf("El promedio del valor de todas las instalaciones es: %.2f. ",promedio/2);
  29.  
  30. return promedio/2;
  31.  
  32. }
  33.  
  34. void menu (){
  35. int opc = 0;
  36. // Opciones del programa
  37. do {
  38. system ("cls");
  39. printf(" > 1 Carga de datos \n" );
  40. printf(" > 2 Mostrar tipo de instalacion mas solicitada en total \n" );
  41. printf(" > 3 Promedio del valor de las instalaciones \n" );
  42. printf(" > 4 Promedio del valor de las instalaciones realizadas en cada zona \n" );
  43. printf(" > 0 Salir " );
  44. printf("\n \n");
  45. printf("Seleccione alguna opcion segun su numero: \n");
  46. scanf("%d",&opc);
  47.  
  48. switch (opc)
  49. {
  50. case 1:
  51. cargadatos();
  52. break;
  53. case 2:
  54. mostrartipodeinstalacion();
  55. break;
  56. case 3:
  57.    promediodelvalordelasinstalaciones(promedio);
  58.    printf("El promedio del valor de todas las instalaciones es: %.2f. ",promedio/2);
  59. break;
  60. case 4:
  61. promedioinstalacionesxzona();
  62. break;
  63. }
  64.  
  65. } while (opc != 0); //Mientras que "opc" sea indistinto a cero el programa se seguirá ejecutando.
  66.  
  67.  
  68.  
  69.  
  70.  
  71. }
  72. void promedioinstalacionesxzona(){
  73.  
  74. }
  75.  
  76. float cargadatos() {
  77. int i;
  78. for (i=0;i<2;i++){
  79. printf("\n");
  80. printf("#%d Introduzca el numero de instalacion: \n",(i+1));
  81. scanf("%d",&vservicio[i].nroinstalacion);
  82. printf("#%d Introduzca el tipo de servicio: \n",(i+1));
  83. scanf("%d",&vservicio[i].tiposervicio);
  84. printf("#%d Introduzca el numero de zona: \n",(i+1));
  85. scanf("%d",&vzona[i].zona);
  86. printf("#%d Introduzca el monto: \n",(i+1));
  87. scanf("%d",&vservicio[i].monto);
  88. promedio = vservicio[0].monto + vservicio[1].monto / 2;
  89.  
  90. }
  91. return promedio;
  92. }

Desde ya, gracias!

Saludos.


Título: Re: Duda con C, funciones y menu de opciones.
Publicado por: MAFUS en 10 Agosto 2017, 23:34 pm
Creas dos arrays de la misma estructura: vservicios y vzona de 5 y 10 elementos respectivamente ¿por qué?. Los servicios y la zona son datos de la misma estructura no hay que separarlo después en un array. Además ¿dos números diferentes de elementos de cada estructura?