DUDA - Comparar estructuras dentro de arrays (Quiniela)

Iniciado por Josogalar, 4 Enero 2014, 19:16 PM

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

Josogalar

Buenas a todos, al igual que otro compañero que ha estado posteando por el foro soy estudiante de matemáticas y necesito que me hechéis una mano para la quiniela que nos ha mandado el profesor de informática, ya que he agotado todos los recursos de los que dispongo y no tengo forma de continuar.

Mi quiniela sigue el siguiente proceso:

1.- TOMA DE DATOS.

2.- REVISAR DATOS O EMPEZAR CON LA QUINIELA.

3.- AL EMPEZAR CON LA QUINIELA, SE COMPARAN TODAS LAS CANTIDADES DE LA ESTRUCTURA ENTRE DOS EQUIPOS CONCRETOS EXCEPTO EL NOMBRE.


- Al empezar el programa supongamos que Equipos[0].nombre es ''Barsa'' y que Equipos[1].nombre es ''Madrid''.

La idea sería la siguiente:

Se crean dos enteros para las puntuaciones punt0 y punt 1 con valor 0 ambas.

PROGRAMA: ¿Que equipo quieres elegir?
USER: Madrid

PROGRAMA: ¿Que otro equipo quieres comparar?
USER: Barsa

Y una vez elegidos excepto el primer dato de ambas estructuras que son los nombres los demás se compararan a mi antojo al estilo de:

if (equipos[0].victorias < equipos[1].victorias)
    punt1=punt1+10;
else
  {
    punt0=punt0+10;
  }

if (equipos[0].derrotas < equipos[1].derrotas)
    punt0=punt0+7;
else
  {
    punt1=punt1+7;
  }


....

Así con todas las variables que tendré que añadir de jugar en casa, lesionados, etc tanto a la estructura como a estas comparaciones con diversas puntuaciones.

4.- EL USUARIO DECIDE NO COMPARAR MAS EQUIPOS Y SE CIERRA EL PROGRAMA.

¿Podríais ayudarme por favor? :) Muchas gracias de antemano.

Os dejo todo lo que llevo de código.



#include <stdio.h>
#include <stdlib.h>

main (void)

{
   struct equipo{
          char nombre[30]; //Nombre del equipo.
          int victorias; //Cuantas victorias tiene.
          int derrotas; //Posicion en la liga.
          int empates; //Empates dentro de la liga.
   };
   
   struct equipo equipos[14]; //N es el numero de equipos y asi decidimos el ancho del vector.
   int i;
   
   for(i=0;i<14;i++){                                  //Rellenamos el vector con las caracteristicas de cada equipo.
      printf("----Equipo Numero: %d----\n",i+1);   
     
      printf("\n Nombre(TODO JUNTO): ");  //NOMBRE 
      scanf("%s",equipos[i].nombre);
     
      printf("\n Victorias totales: "); //VICTORIAS
      scanf("%d",&equipos[i].victorias);
     
      printf("\n Derrotas totales: "); //DERROTAS
      scanf("%d",&equipos[i].derrotas);
     
      printf("\n Empates totales: "); //EMPATES
      scanf("%d",&equipos[i].empates);
      printf("\n");
   }
   int opcion;
   printf("PARA COMPROBAR DATOS PULSE 1");-
   printf("\n");
   printf("SI QUIERE EMPEZAR LA QUINIELA PULSE 2");
   printf("\n");
   printf("\n");
   scanf("%d",&opcion);
   switch(opcion)
{
case 1:

                for(i=0; i<14;i++){                                 
                printf("\n - %s -\n",equipos[i].nombre);
                printf("\n");
                printf("\n");
                printf("Victorias: %d\n",equipos[i].victorias);
                printf("Derrotas: %d\n",equipos[i].derrotas);
                printf("Empates: %d\n",equipos[i].empates);
                printf("\n");
                }
               
                printf("Empezamos con la quiniela\n");     

                //Aqui ya me atasco
break;

case 2:

printf("Empezamos con la quiniela\n");    

                //Aqui ya me atasco             
          break;

default:
printf("Ha ingresado un numero no valido\n");
break;
}

   system ("pause");
   return 0;
}

SoyelRobert

#1
mm a ver, no entiendo exactamente lo que quieres hacer:

el programa en si lo que hace es comparar 2 equipos con la misma estructura, correcto?.

si este es el caso, no tiene sentido un array de 14 componentes para almacenar los equipos... con 2 te vale y pones una opcion para sobrescribir los campos de las estructuras en caso de querer comparar otros equipos diferentes.

Si por el contrario lo que quieres es comparar mas de 2 equipos, pongamos N equipos, seria necesario un array de N componentes donde guardar cada equipo de tipo structura y cuyos campos tendrias que ir introduciendolos tu para cada equipo con el fin de poder compararlos entre ellos.

Personalmente me parece mucho mas facil de hacerlo de la primera forma si puedes elegir.

getting louder!

SoyelRobert

#2
mira a ver que tal esto:

Código (cpp) [Seleccionar]

#include <stdio.h>
main (void)

{
  struct equipo{
         int victorias; //Cuantas victorias tiene.
         int derrotas; //Posicion en la liga.
         int empates; //Empates dentro de la liga.
  }equipo1,equipo2;

otravez:

     printf("----Equipo Numero 1----\n");

     printf("\n Victorias totales: "); //VICTORIAS
     scanf("%d",&equipo1.victorias);

     printf("\n Derrotas totales: "); //DERROTAS
     scanf("%d",&equipo1.derrotas);

     printf("\n Empates totales: "); //EMPATES
     scanf("%d",&equipo1.empates);
     printf("\n");


     printf("----Equipo Numero 2----\n");

     printf("\n Victorias totales: "); //VICTORIAS
     scanf("%d",&equipo2.victorias);

     printf("\n Derrotas totales: "); //DERROTAS
     scanf("%d",&equipo2.derrotas);

     printf("\n Empates totales: "); //EMPATES
     scanf("%d",&equipo2.empates);
     printf("\n");


     /*ahora comparamos los equipos*/

int cont1=0, cont2=0;

if(equipo1.victorias>equipo2.victorias) cont1 ++;
else cont2 ++;

if(equipo1.empates>equipo2.empates) cont1 ++;
else cont2 ++;

if(equipo1.derrotas<equipo2.derrotas) cont1 ++;
else cont2 ++;

printf("El equipo1 ha acumulado: %d puntos mientras que el equipo2: %d, por tanto: ",cont1,cont2);

if(cont1>cont2)puts("el equipo1 es mejor que  el equipo2.");
if(cont1<cont2)puts("el equipo2 es mejor que el equipo1.");
if(cont1==cont2)puts("son igual de buenos ambos equipos.");

cont1=0;

puts("\n\n Desea comparar otros equipos diferentes (1 = si / 0 = no)? ");
scanf("%d",&cont1);

if(cont1==1) goto otravez;

return 0;

}


PD. lo siento por no indentarlo pero no soy capaz de ello  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
getting louder!

Josogalar

Muchísimas gracias, con la corrección conceptual que has hecho de que solo hay que reservar un array de dimensión 2, todas las comparaciones se vuelven muy sencillas.

Creo que ya puedo ponerme a trabajar fusionando mi código y el tuyo.

Un saludo y que empiezes el año con buen pie.  ;-)

SoyelRobert

#4
jaja nada hombre :), pero nisiquiera he usado un array de dim 2, solo con 2 variables equipo1 y equipo2.

Sospecho que lo que a ti te han podido es algo un pelín mas complejo... lo digo porque no he usado en ningún momento los punteros que tu has dicho. si puedes subes el enunciado de la practica y nos aseguramos

feliz año ;D
getting louder!