C/Visual C - ¿Como ordeno según el sexo?

 
Vista:
Imágen de perfil de Gabriel

¿Como ordeno según el sexo?

Publicado por Gabriel (10 intervenciones) el 16/03/2017 14:38:13
Tengo un problema al querer ordenar el saldo de Mayor a Menor, pero solo de las Mujeres, el codigo me da error, estuve cambiándolo constantemente para ver si funcionaba de alguna manera, pero se ve que algo estoy haciendo mal.

La Funcion :
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
void ordenamiento_saldo_mujeres(struct CLIENTES mujeres[],int NUM){
   struct CLIENTES AUX;
   int k,j;
 
 
   for(k=0;k<NUM;k++){
 
		for(j=0;j<NUM;j++)
             if(mujeres[j].sexo == 'F'){
			if(mujeres[j].saldo > mujeres[j+1].saldo){
				AUX = mujeres[j];
				mujeres[j] = mujeres[j+1];
				mujeres[j+1] = AUX;
			}
 
       }
 
  }
 
	printf("Las mujeres con los mejores salarios son : ");
	printf("\n");
 
	 for(k = N ; k<0 ; k--){
 
 
 
		 printf("Nombre : %s ",mujeres[k].nombre);
		 printf("\n");
		 printf("Saldo : %i",mujeres[k].saldo);
		 printf("\n");
	 }
 
 
 
 
return 0;
}


El Codigo completo :
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N 5
 
struct CLIENTES{
  char nombre[30];
  char sexo;
  int saldo;
};
 
void ingresar(struct CLIENTES[],int);
void ordenamiento_saldo_mujeres(struct CLIENTES[],int);
 
int main(){
  struct CLIENTES clientes[N];
  int opcion;
 
	while (opcion != 3){
 
    printf("Ingrese una Opcion : ");
		printf("\n\n");
		printf("Opcion 1: Ingresar los datos de los clientes :\n");
		printf("\n\n");
    printf("Opcion 2 : Mostrar saldo de mujeres de Mayor a Menor :");
    printf("\n\n");
    printf("Opcion 3 : Salir! :");
    printf("\n\n");
    scanf("%i", &opcion);
    fflush(stdin);
 
    switch (opcion){
 
      case 1: ingresar(clientes,N); break;
      case 2: ordenamiento_saldo_mujeres(clientes,N);break;
      case 3 : break;
    }
  }
 
  return 0;
 
}
 
 
void ingresar(struct CLIENTES client[],int NUM) {
   int i;
   for (i = 0; i<N; i++) {
     printf("Ingrese su nombre : ");
     scanf("%s",&client[i].nombre);
     printf("\n");
     fflush(stdin);
     printf("Ingrese su Sexo : ");
     scanf("%s",&client[i].sexo);
     printf("\n");
     printf("Ingrese su Saldo :");
     scanf("%i",&client[i].saldo);
     fflush(stdin);
     printf("\n");
   }
 
   }
 
 void ordenamiento_saldo_mujeres(struct CLIENTES mujeres[],int NUM){
   struct CLIENTES AUX;
   int k,j;
 
 
   for(k=0;k<NUM;k++){
 
		for(j=0;j<NUM;j++)
             if(mujeres[j].sexo == 'F'){
			if(mujeres[j].saldo > mujeres[j+1].saldo){
				AUX = mujeres[j];
				mujeres[j] = mujeres[j+1];
				mujeres[j+1] = AUX;
			}
 
       }
 
  }
 
	printf("Las mujeres con los mejores salarios son : ");
	printf("\n");
 
	 for(k = N ; k<0 ; k--){
 
 
 
		 printf("Nombre : %s ",mujeres[k].nombre);
		 printf("\n");
		 printf("Saldo : %i",mujeres[k].saldo);
		 printf("\n");
	 }
 
 
 
 
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
sin imagen de perfil
Val: 479
Plata
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

¿Como ordeno según el sexo?

Publicado por agustin (271 intervenciones) el 16/03/2017 16:51:59
No se puede hacer asi:
1
2
3
AUX = mujeres[j];
mujeres[j] = mujeres[j+1];
mujeres[j+1] = AUX;
Eso solo seria válido usando memoria dinamica y tu estas usando estática.
Tienes dos opciones:
1
2
3
4
5
6
7
8
9
10
11
strcpy (AUX.nombre, mujeres[j].nombre);
AUX.sexo=mujeres[j].sexo;
AUX.saldo=mujeres[j].saldo;
 
strcpy (mujeres[j].nombre, mujeres[j+1].nombre);
mujeres[j].sexo = mujeres[j+1].sexo;
mujeres[j].saldo = mujeres[j+1].saldo;
 
strcpy (mujeres[j+1].nombre, AUX.nombre);
mujeres[j+1].sexo = AUX.sexo;
mujeres[j+1].saldo = AUX.saldo;

O de esta manera:
1
2
3
memcpy (AUX, mujeres[j], sizeof(struct CLIENTES));
memcpy (mujeres[j], mujeres[j+1], sizeof(struct CLIENTES));
memcpy (mujeres[j+1], AUX, sizeof(struct CLIENTES));
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
Imágen de perfil de Gabriel

¿Como ordeno según el sexo?

Publicado por Gabriel (10 intervenciones) el 16/03/2017 17:15:16
Pero donde ubico el
1
if(mujeres[j].sexo == 'F')
? ,el tema es qu no me quedo claro si el condicional que puse esta bien o no? de la primera forma funciona aun siendo estática por ej: en otra funcion ,me funciono correctamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void ordenamiento_saldo(struct CLIENTES ordenamiento_client[], int NUM) {
 
	struct CLIENTES AUX;
	int i, j;
 
	for (i = 0; i<NUM; i++) {
		for (j = 0; j<NUM - i - 1; j++)
			if (ordenamiento_client[j].saldo > ordenamiento_client[j + 1].saldo) {
				AUX = ordenamiento_client[j];
				ordenamiento_client[j] = ordenamiento_client[j + 1];
				ordenamiento_client[j + 1] = AUX;
			}
 
 
	}
	printf("Los Clientes con mejores salarios son : ");
	printf("\n");
	for (i = 5; i<0; i--) {
		printf("Nombre : %s", ordenamiento_client[i].nombre);
		printf("\n");
		printf("Saldo : %f", ordenamiento_client[i].saldo);
		printf("\n");
 
	}
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

¿Como ordeno según el sexo?

Publicado por Diego (150 intervenciones) el 17/03/2017 18:28:09
Cuando trabajes con struct recuerda trabajar campo por campo.

https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Estructuras_y_Uniones
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: 479
Plata
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

¿Como ordeno según el sexo?

Publicado por agustin (271 intervenciones) el 17/03/2017 18:50:09
Creo que donde esta esta bien.
Como ya te dije, tu al intentar hacer el ordenamiento cómo lo haces lo que intentas hacer es intercambiar las direcciones pero eso con memoria estática no es posible con lo que tienes que intercambiar todo el contenido. Es igual que intentar asignar una cadena a un array de caracteres de manera directa.
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