Dev - C++ - Estructura descendente

 
Vista:

Estructura descendente

Publicado por Mickey (1 intervención) el 02/07/2017 23:32:10
Hola buenas tardes, alguien que me asesore con esta duda?
es un arreglo de estructuras y pide 3 equipos de fut y sus respectivos campos,
luego determina que equipo tiene mayor numero de goles pero necesito ordenar los equipos de manera descendente y lo unico que logra hacer es que me cambia de posicion los goles de manera descendente pero no los demas campos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include<stdio.h>
#include<conio.h>
#include<string.h>
 
struct fut
{
	char Nom_eq [30];
	int Num_vic;
	int Num_der;
	int Num_emp;
	int Num_golaf;
	int Num_golec;
	char goleador[30];
	int gol_num;
}futi[3];
 
int i,j,n=3,paso;
char nombre[30];
char equipo1[30];
 
int main()
{
		for(i=0;i<3;i++)
	{
		printf("\n Ingrese el nombre del equipo de futbol #%d: ",i+1);
		scanf("%s",&futi[i].Nom_eq);
		printf("\n Ingrese el numero de victorias del equipo de futbol #%d: ",i+1);
		scanf("%d",&futi[i].Num_vic);
		printf("\n Ingrese el numero de derrotas del equipo de futbol #%d: ",i+1);
		scanf("%d",&futi[i].Num_der);
		printf("\n Ingrese numero de empates del equipo de futbol #%d: ",i+1);
		scanf("%d",&futi[i].Num_emp);
		printf("\n Ingrese el numero de goles a favor del equipo de futbol #%d: ",i+1);
		scanf("%d",&futi[i].Num_golaf);
		printf("\n Ingrese el numero de goles en contra del equipo de futbol #%d: ",i+1);
		scanf("%d",&futi[i].Num_golec);
		printf("\n Ingrese el nombre del goleador del equipo de futbol #%d ",i+1);
		scanf("%s",&futi[i].goleador);
		printf("\n Ingrese el numero de goles del goleador del equipo de futbol #%d ",i+1);
		scanf("%d",&futi[i].gol_num);
	}
 
	for(i=0;i<3;i++)
	{
 
	   if(futi[i].gol_num>paso)
	   {
		paso=futi[i].gol_num;
	    strcpy(nombre,futi[i].goleador);
	    strcpy(equipo1,futi[i].Nom_eq);
 
	   }
	}
 
	printf("\n Equipo  Victorias  Derrotas   Empates  Goles a favor Goles en contra Goleador Goles goleador");
		for(i=0;i<3;i++)
	{
		printf("\n %s      %5d         %3d       %d         %3d           %4d         %s       %3d ",futi[i].Nom_eq,futi[i].Num_vic,futi[i].Num_der,futi[i].Num_emp,futi[i].Num_golaf,futi[i].Num_golec,futi[i].goleador,futi[i].gol_num);
 
	}
	printf("\n\n El equipo %s tiene mayor cantidad de goles(%d) y su goleador es %s",equipo1,paso,nombre);
 
printf("\n Equipos ordenados descendentemente ");
 
printf("\n Equipo  Victorias  Derrotas   Empates  Goles a favor Goles en contra Goleador Goles goleador");
 
    for (i=0;i<n-1;i++)
   {
    for(j=i+1;j<n;j++)
    {
       if(futi[i].gol_num<futi[j].gol_num)
       {
           paso=futi[i].gol_num;
           futi[i].gol_num=futi[j].gol_num;
           futi[j].gol_num=paso;
       }
    }
   }
 
   for(i=0;i<3;i++)
   {
   printf("\n %s      %5d         %3d       %d         %3d           %4d         %s       %3d ",futi[i].Nom_eq,futi[i].Num_vic,futi[i].Num_der,futi[i].Num_emp,futi[i].Num_golaf,futi[i].Num_golec,futi[i].goleador,futi[i].gol_num);
   }
	getch();
	return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Estructura descendente

Publicado por Dionicio (57 intervenciones) el 03/07/2017 20:03:22
En efecto el problema recae en que intercambias los goles pero no los equipos.
1
2
3
4
5
6
if(futi[i].gol_num<futi[j].gol_num)
{
           paso=futi[i].gol_num;
           futi[i].gol_num=futi[j].gol_num;
           futi[j].gol_num=paso;
}

Una manera de hacerlo es que la variable paso sea una variable del tipo de la estructura; Por consiguiente cuando el número de goles sea mayor pues intercambias las estructuras y listo. La implementación sería más o menos de la siguiente manera:
1
2
3
4
5
6
7
if(futi[i].gol_num < futi[j].gol_num)
	{
		//Siendo -paso- una variable del tipo de la estructura
		paso = futi[i];
		futi[i] = futi[j];
		futi[j] = paso;
	}


PD: para leer cadenas de caracteres yo recomendaría usar fgets();

Espero te sirva. Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Estructura descendente

Publicado por agustin (522 intervenciones) el 04/07/2017 00:14:56
Eso no funciona así cuando lo que tienes es un array estático. Hay varias formas de solucionarlo.
1-si lo dejas tal cual, usar memcpy para copiar los bloques de memoria de cada estructura a intercambiar.
2-usar memoria dinámica con lo que en realidad seria un array de punteros a estructuras con lo que al intercambiarlos cambias la dirección que apunta a cada estructura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 82
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Estructura descendente

Publicado por gregory (34 intervenciones) el 05/07/2017 04:02:32
Tambien puede probar otro metodo de ordenamiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar