Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mbxxx103 en 1 Septiembre 2021, 00:25 am



Título: Comparacion de vectores
Publicado por: mbxxx103 en 1 Septiembre 2021, 00:25 am
Hola a todos necesito que el programa de c me resuelva las condiciones pero no estoy seguro si utilizar un for como lo podria hacer?

d) en qué año hubo más ventas
e) a cada empleado se le pagó un 30% de comisión sobre sus ventas totales
en cada año. ¿Cuántos vendedores ganaron de comisión más de $1500 en
cada año?
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. main(){
  5.    int minima=1000,maxima=0;
  6.    int v19[20],v20[20];
  7.    int i,a,ct=0,ctt=0,prom=0,prom2=0,promg=0, acum=0, acum2=0;
  8.    //enceramos el vetor
  9.    for(i=0;i<20;i++)
  10.        v19[i]=0;
  11.    for(a=0;a<20;a++)
  12.        v20[a]=0;
  13.    //leer las tempeturas y guardar
  14.    printf("\n *** Ingrese las ventas por empleados del 2019 ***");
  15.    for(i=0;i<20;i++){
  16.        printf("\n Empleado N %d: ",i+1);
  17.        scanf("%d",&v19[i]);
  18.        acum=acum + v19[i];
  19.    }
  20.    system("cls");
  21.    printf("\n *** Ingrese las ventas por empleados del 2020 ***");
  22.    for(a=0;a<20;a++){
  23.        printf("\n Empleado N %d: ",a+1);
  24.        scanf("%d",&v20[a]);
  25.        acum2=acum2 + v20[a];
  26.    }
  27.  
  28.    //procesos
  29.    for(i=0;i<20;i++){
  30.        /*if(minima>edad[i])
  31.             minima=edad[i];*/
  32.  
  33.        if(maxima<v19[i])
  34.            maxima=v19[i];
  35.  
  36.        /*if(edad[i]>65)
  37.             ct++;
  38.         if(edad[i]>18 && edad[i]<64 )
  39.             ctt++;*/
  40.  
  41.        prom = acum / v19[i];
  42.    }
  43.  
  44.    for(a=0;a<20;a++){
  45.        /*if(minima>edad[i])
  46.             minima=edad[i];*/
  47.  
  48.        /*if(maxima<edad[i])
  49.             maxima=edad[i]; */
  50.  
  51.        /*if(edad[i]>65)
  52.             ct++;
  53.         if(edad[i]>18 && edad[i]<64 )
  54.             ctt++;*/
  55.  
  56.        prom2 = acum2 / v20[i];
  57.    }
  58.  
  59.    promg = (prom+prom2)/2;
  60.  
  61.    //salidas
  62.    system("cls");
  63.    //printf("\n edad mas baja: %d ",minima);
  64.    printf("\n edad mas alta: %d ",maxima);
  65.    printf("\n\n Promedio de ventas 2019: %d",prom);
  66.    printf("\n\n Promedio de ventas 2020: %d",prom2);
  67.    printf("\n\n Promedio de ventas general: %d",promg);
  68.    //printf("\n Cantidad de personas de la tercera edad es: %d",ct);
  69.    //printf("\n Cantidad de personas mayores de edad es: %d",ctt);
  70.    printf("\n\n");
  71.    system("pause");
  72.  
  73. }


MOD: El código debe ir entre etiquetas de Código GeSHi
MOD: Código formateado



Título: Re: Comparacion de vectores
Publicado por: K-YreX en 1 Septiembre 2021, 03:12 am
Antes de resolver tus dudas te diré algunos consejos para mejor el código:
  • main() es una función y como tal debe tener un tipo de retorno. La forma correcta de definir la función main() es:
Código
  1. // Version simplificada (cuando se utilizan argumentos de ejecucion)
  2. int main() {
  3.  //...
  4.  return 0; // Si no se especifica, se incluye implicitamente
  5. }
  6.  
  7. // Version completa (cuando se utilizan argumentos de ejecucion)
  8. int main(int argc, char *argv[]) {
  9.  //...
  10.  return 0; // Si no se especifica, se incluye implicitamente
  11. }

  • Utiliza constantes en vez de "números mágicos" (números literales que aparecen en el código sin explicación: 20). Así si de repente necesitas cambiar ese valor por otro, tan solo tendrás que cambiarlo en la definición y el resto del programa seguirá funcionando correctamente.
Código
  1. const int NUM_EMPLEADOS = 20;
  2.  
  3. int main() {
  4.  int ventas[NUM_EMPLEADOS];
  5.  for(int i = 0; i < NUM_EMPLEADOS; ++i) {
  6.    //...
  7.  }
  8. }

  • Utiliza funciones que hagan una tarea específica. Así tendrás el código más limpio, no repetirás código y podrás reutilizar una función tantas veces como necesites:
Código
  1. int calcularSumaTotal(int array[], const int longitud) {
  2.  int total = 0;
  3.  for(int i = 0; i < longitud; ++i) total += array[i];
  4.  return total;
  5. }
  6.  
  7. int main() {
  8.  int ventas2019[NUM_EMPLEADOS];
  9.  int ventas2020[NUM_EMPLEADOS];
  10.  //...
  11.  
  12.  int totalVentas2019 = calcularSumaTotal(ventas2019, NUM_EMPLEADOS);
  13.  int totalVentas2020 = calcularSumaTotal(ventas2020, NUM_EMPLEADOS);
  14.  //...
  15.  
  16.  int promedioVentas2019 = totalVentas2019 / NUM_EMPLEADOS;
  17.  int promedioVentas2020 = totalVentas2020 / NUM_EMPLEADOS;
  18.  


Ahora sobre tus dudas específicamente:
  • La primera duda ya te la he resuelto en el apartado de crear tus propias funciones.
  • Para calcular la comisión de cada empleado en cada año basta con lo siguiente:
Código
  1. const float PORCENTAJE_COMISION = 30;
  2.  
  3. int main() {
  4.  int ventas2019[NUM_EMPLEADOS];
  5.  //...
  6.  for(int i = 0; i < NUM_EMPLEADOS; ++i) {
  7.    printf("La comision del empleado %d en el 2019 es de: $%.2f\n", (i+1), ventas2019[i] * PORCENTAJE_COMISION / 100.0f);
  8.  }
  9. }

Aparte de eso:
  • Las líneas 41 y 56 no tienen sentido. Repites un cálculo 20 veces para quedarte únicamente con el último resultado.
  • Además en la línea 56 estás utilizando el contador equivocado.

PD: No utilices <system("pause")>. Utiliza mejor <getchar()>. Hace la misma función y requiere de menos recursos del sistema.