estrcuturas+funciones

Iniciado por fernaEDLP, 3 Julio 2019, 19:05 PM

0 Miembros y 1 Visitante están viendo este tema.

fernaEDLP

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:
struct equipo
{
   char nombre[20];
   int resultados[3];
   int goles[2];
   int puntaje;
};
void puntaje(struct equipo* );

int main()
{
   int j=0;
   struct equipo datos[2];
   struct equipo *punt;
   for(j=0;j<2;j++)
   {
       printf("\ningrese nombre de equipo%d\n",j+1);
       gets(datos[j].nombre);
       fflush(stdin);
       printf("ingrese los partidos ganados \n");
       scanf("%d",&datos[j].resultados[j]);
       fflush(stdin);
       printf("ingrese los partidos empatados \n");
       scanf("%d",&datos[j].resultados[j+1]);
       fflush(stdin);
       printf("ingrese los partidos perdidos\n");
       scanf("%d",&datos[j].resultados[j+2]);
       fflush(stdin);
       printf("ingrese goles a favor\n");
       scanf("%d",&datos[j].goles[j]);
       fflush(stdin);
       printf("ingrese goles en contra\n");
       scanf("%d",&datos[j].goles[j+1]);
       fflush(stdin);
       punt=&datos[j];
       puntaje(punt);

   }



   return 0;
}
void puntaje(struct equipo*p )
{
   int i=0,puntos=0, num[3]={3,1,0};
   for(i=0;i<3;i++)
   {
       puntos=puntos+(p->resultados[i])*num[i];
   }
   printf("\nel puntaje es %d",puntos);
   return;
}

 
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...

K-YreX

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.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

fernaEDLP

perfecto graciass!! mañana rindo!, espero llegar a un 4, hoy le rezo a san judas tadeo :xD