Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: fernaEDLP en 3 Julio 2019, 19:05 pm



Título: estrcuturas+funciones
Publicado por: fernaEDLP en 3 Julio 2019, 19:05 pm
hola bochos, espero que la vida los trate bien, me dan una mano con este código?

el problema dice así:
a)haciendo uso de estructuras implemente un tipo de dato que permita modelar un equipo de fútbol, del equipo interesa conocer: nombre, cantidad de partidos ganados, empatados, y perdidos, goles a favor y goles en contra y puntaje.
b)
implemente un código en c que de una función que permita calcular el puntaje de un equipo, el mismo se calcula en función de los partidos ganados(3 puntos), perdidos(0) y empatados(1), nota: se pretende que que la función a implementar reciba un equipo por referencia para setear su puntaje y que no devuelva nada.
c)
Escriba  las lineas de código que permitan gestionar una liga de 40 equipos usando memoria estática debe generar la lista de 40 equipos e inicializarlos por teclado,toda la información para cada equipo se cargara por teclado, a excepción del puntaje que se calculara usando la función implementada.


mi código es el siguiente:
Código
  1. struct equipo
  2. {
  3.    char nombre[20];
  4.    int resultados[3];
  5.    int goles[2];
  6.    int puntaje;
  7. };
  8. void puntaje(struct equipo* );
  9.  
  10. int main()
  11. {
  12.    int j=0;
  13.    struct equipo datos[2];
  14.    struct equipo *punt;
  15.    for(j=0;j<2;j++)
  16.    {
  17.        printf("\ningrese nombre de equipo%d\n",j+1);
  18.        gets(datos[j].nombre);
  19.        fflush(stdin);
  20.        printf("ingrese los partidos ganados \n");
  21.        scanf("%d",&datos[j].resultados[j]);
  22.        fflush(stdin);
  23.        printf("ingrese los partidos empatados \n");
  24.        scanf("%d",&datos[j].resultados[j+1]);
  25.        fflush(stdin);
  26.        printf("ingrese los partidos perdidos\n");
  27.        scanf("%d",&datos[j].resultados[j+2]);
  28.        fflush(stdin);
  29.        printf("ingrese goles a favor\n");
  30.        scanf("%d",&datos[j].goles[j]);
  31.        fflush(stdin);
  32.        printf("ingrese goles en contra\n");
  33.        scanf("%d",&datos[j].goles[j+1]);
  34.        fflush(stdin);
  35.        punt=&datos[j];
  36.        puntaje(punt);
  37.  
  38.    }
  39.  
  40.  
  41.  
  42.    return 0;
  43. }
  44. void puntaje(struct equipo*p )
  45. {
  46.    int i=0,puntos=0, num[3]={3,1,0};
  47.    for(i=0;i<3;i++)
  48.    {
  49.        puntos=puntos+(p->resultados[i])*num[i];
  50.    }
  51.    printf("\nel puntaje es %d",puntos);
  52.    return;
  53. }
 
mi problema esta en la linea de código del inciso 3 b, la cuestión es que cuando quiero calcular el puntaje para cada equipo y llamo a la función,para luego utilizar la asignación punt=&datos[j], me calcula el puntaje para el primer partido, pero luego calcula cualquier cosa. Se supone que datos es un puntero a una variable de tipo struct equipo, luego guardo esa direccion en un puntero (punt), y luego aumento el indice para que recorra paquete de datos ( es decir los que voy inicializando), pero no se porque no funciona, graciass de antemanooo



para facilitar la carga de datos obviamente que no hice el programa con 40 equipos...


Título: Re: estrcuturas+funciones
Publicado por: K-YreX en 4 Julio 2019, 15:57 pm
El problema lo tienes después de la primera iteración con las variables <resultados> y <goles> y eso es porque no puedes usar el índice <j> para controlar esos arrays ya que no coinciden los valores. Los arrays siempre son {0,1,2} y si usas el índice <j>; en la primera iteración estás usando correctamente {0,1,2} pero en la segunda estás usando {1,2,3} por lo que el índice 0 tiene basura y estás accediendo al 3 que está fuera del array.


Título: Re: estrcuturas+funciones
Publicado por: fernaEDLP en 5 Julio 2019, 06:22 am
perfecto graciass!! mañana rindo!, espero llegar a un 4, hoy le rezo a san judas tadeo :xD