Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Josogalar en 4 Enero 2014, 19:16 pm



Título: DUDA - Comparar estructuras dentro de arrays (Quiniela)
Publicado por: Josogalar en 4 Enero 2014, 19:16 pm
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:

Código
  1. if (equipos[0].victorias < equipos[1].victorias)
  2.    punt1=punt1+10;
  3. else
  4.  {
  5.    punt0=punt0+10;
  6.  }
  7.  
  8. if (equipos[0].derrotas < equipos[1].derrotas)
  9.    punt0=punt0+7;
  10. else
  11.  {
  12.    punt1=punt1+7;
  13.  }

....

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.

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. main (void)
  6.  
  7. {
  8.   struct equipo{
  9.          char nombre[30]; //Nombre del equipo.
  10.          int victorias; //Cuantas victorias tiene.
  11.          int derrotas; //Posicion en la liga.
  12.          int empates; //Empates dentro de la liga.
  13.   };
  14.  
  15.   struct equipo equipos[14]; //N es el numero de equipos y asi decidimos el ancho del vector.
  16.   int i;
  17.  
  18.   for(i=0;i<14;i++){                                  //Rellenamos el vector con las caracteristicas de cada equipo.
  19.      printf("----Equipo Numero: %d----\n",i+1);  
  20.  
  21.      printf("\n Nombre(TODO JUNTO): ");  //NOMBRE  
  22.      scanf("%s",equipos[i].nombre);
  23.  
  24.      printf("\n Victorias totales: "); //VICTORIAS
  25.      scanf("%d",&equipos[i].victorias);
  26.  
  27.      printf("\n Derrotas totales: "); //DERROTAS
  28.      scanf("%d",&equipos[i].derrotas);
  29.  
  30.      printf("\n Empates totales: "); //EMPATES
  31.      scanf("%d",&equipos[i].empates);
  32.      printf("\n");
  33.   }
  34.   int opcion;
  35.   printf("PARA COMPROBAR DATOS PULSE 1");-
  36.   printf("\n");
  37.   printf("SI QUIERE EMPEZAR LA QUINIELA PULSE 2");
  38.   printf("\n");
  39.   printf("\n");
  40.   scanf("%d",&opcion);
  41.   switch(opcion)
  42. {
  43. case 1:
  44.  
  45.                for(i=0; i<14;i++){                                
  46.                printf("\n - %s -\n",equipos[i].nombre);
  47.                printf("\n");
  48.                printf("\n");
  49.                printf("Victorias: %d\n",equipos[i].victorias);
  50.                printf("Derrotas: %d\n",equipos[i].derrotas);
  51.                printf("Empates: %d\n",equipos[i].empates);
  52.                printf("\n");
  53.                }
  54.  
  55.                printf("Empezamos con la quiniela\n");    
  56.  
  57.                //Aqui ya me atasco
  58. break;
  59.  
  60. case 2:
  61.  
  62. printf("Empezamos con la quiniela\n");    
  63.  
  64.                //Aqui ya me atasco              
  65.          break;
  66.  
  67. default:
  68. printf("Ha ingresado un numero no valido\n");
  69. break;
  70. }
  71.  
  72.   system ("pause");
  73.   return 0;
  74. }


Título: Re: DUDA - Comparar estructuras dentro de arrays (Quiniela)
Publicado por: SoyelRobert en 4 Enero 2014, 21:33 pm
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.



Título: Re: DUDA - Comparar estructuras dentro de arrays (Quiniela)
Publicado por: SoyelRobert en 4 Enero 2014, 22:06 pm
mira a ver que tal esto:

Código
  1. #include <stdio.h>
  2. main (void)
  3.  
  4. {
  5.   struct equipo{
  6.          int victorias; //Cuantas victorias tiene.
  7.          int derrotas; //Posicion en la liga.
  8.          int empates; //Empates dentro de la liga.
  9.   }equipo1,equipo2;
  10.  
  11. otravez:
  12.  
  13.      printf("----Equipo Numero 1----\n");
  14.  
  15.      printf("\n Victorias totales: "); //VICTORIAS
  16.      scanf("%d",&equipo1.victorias);
  17.  
  18.      printf("\n Derrotas totales: "); //DERROTAS
  19.      scanf("%d",&equipo1.derrotas);
  20.  
  21.      printf("\n Empates totales: "); //EMPATES
  22.      scanf("%d",&equipo1.empates);
  23.      printf("\n");
  24.  
  25.  
  26.      printf("----Equipo Numero 2----\n");
  27.  
  28.      printf("\n Victorias totales: "); //VICTORIAS
  29.      scanf("%d",&equipo2.victorias);
  30.  
  31.      printf("\n Derrotas totales: "); //DERROTAS
  32.      scanf("%d",&equipo2.derrotas);
  33.  
  34.      printf("\n Empates totales: "); //EMPATES
  35.      scanf("%d",&equipo2.empates);
  36.      printf("\n");
  37.  
  38.  
  39.      /*ahora comparamos los equipos*/
  40.  
  41. int cont1=0, cont2=0;
  42.  
  43. if(equipo1.victorias>equipo2.victorias) cont1 ++;
  44. else cont2 ++;
  45.  
  46. if(equipo1.empates>equipo2.empates) cont1 ++;
  47. else cont2 ++;
  48.  
  49. if(equipo1.derrotas<equipo2.derrotas) cont1 ++;
  50. else cont2 ++;
  51.  
  52. printf("El equipo1 ha acumulado: %d puntos mientras que el equipo2: %d, por tanto: ",cont1,cont2);
  53.  
  54. if(cont1>cont2)puts("el equipo1 es mejor que  el equipo2.");
  55. if(cont1<cont2)puts("el equipo2 es mejor que el equipo1.");
  56. if(cont1==cont2)puts("son igual de buenos ambos equipos.");
  57.  
  58. cont1=0;
  59.  
  60. puts("\n\n Desea comparar otros equipos diferentes (1 = si / 0 = no)? ");
  61. scanf("%d",&cont1);
  62.  
  63. if(cont1==1) goto otravez;
  64.  
  65. return 0;
  66.  
  67. }
  68.  

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


Título: Re: DUDA - Comparar estructuras dentro de arrays (Quiniela)
Publicado por: Josogalar en 5 Enero 2014, 09:36 am
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.  ;-)


Título: Re: DUDA - Comparar estructuras dentro de arrays (Quiniela)
Publicado por: SoyelRobert en 5 Enero 2014, 12:34 pm
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