El programa hace mas o menos esto
Juan 90
Carlos 60
Luis 85
Cuando lo ordena queda asi
Juan 60
carlos 85
luis 90
Dejo codigo a ver quien de ustedes me ilumina un poco!!
Saludetes..
Código
#include <iostream> #include <iomanip> #include <string> using namespace std; #include <windows.h> #define c 40 #define MAX 30 struct notas { float nota1; float nota2; float nota3; float promedio; }; struct alumno { char nombre[c]; notas nota; int numcuenta; alumno(); void mostrar(); void comparar(int); void ordenar_cadenas(); }; alumno::alumno() { nota.nota3=0; } void alumno::ordenar_cadenas() { alumno a[c]; int total=2; char temp[100]; int i, j; for(i=0; i < total-1; i++) { for(j=i+1; j < total; j++) if(strcmp(a[i].nombre, a[j].nombre) > 0) { // Copia en variable temporal datos actuales strcpy(temp, a[i].nombre); // Intercambia informacion strcpy(a[i].nombre, a[j].nombre); strcpy(a[j].nombre, temp); } } for(i=0;i<total;i++) { cout<<a[i].nombre<<endl; } } void alumno::comparar(int cod) { if(cod!=numcuenta) { cout<<"\tContacto no existe"<<endl; cout<<"\tEjecute el programa de nuevo"<<endl; } } void alumno::mostrar() { cout<<endl; cout<<"Num Cuenta \t"<<"Nombre\t"<<"Notas"<<"Promedio"<<endl; cout<<numcuenta<<"\t\t"<<nombre<<"\t\t"<<nota.nota1<<" "<<nota.nota2<<" "<<nota.nota3<<"\t"<<fixed<<setprecision(2)<<nota.promedio<<endl; } int main() { char resp; int cantidad, accion,cod, i; alumno a[c]; alumno* ptr; do{ system("CLS"); system("COLOR 97"); cout<<"PROGRAMA BASE DATOS TEMPORAL CALIFICACIONES"<<endl; cout<<"QUE ACCION DESEA REALIZAR"<<endl; cout<<"1.Consulta\n2. Ingreso Datos\n3. Actualizacion Datos\n4. Ordenar por Promedio Ascendete\n5. Ordenar por Promedio Descendente\n6. Ordenar nombre\n8. Salir"<<endl; cin>>accion; while( accion <1 || accion >8 ) { system("CLS"); cout << "\n\tIngrese accion correcta\n\tElija entre 1 y 5: "; cout<<"QUE ACCION DESEA REALIZAR"<<endl; cout<<"1.Consulta\n2. Ingreso Datos\n3. Actualizacion Datos\n4. Ordenar por Promedio Ascendete\n5. Ordenar por Promedio Descendente\n6.Ordenar por Nombres\n8. Salir"<<endl; cin >> accion; } switch(accion) { case 1: cout<<"Contactos"<<endl; if(a[0].nota.nota3!=0) { for (ptr=a; ptr->nota.nota3;ptr++) { ptr->mostrar(); } } else cout<<"NO EXISTEN DATOS"<<endl; break;//sale del case case 2: cout<<"Numero de contactos que desea ingresar "; cin>>cantidad; for(i=0;i<cantidad;i++) { cout<<"Numero de Cuenta";cin>>a[i].numcuenta; cout<<"\nNombre ";fflush(stdin); gets(a[i].nombre); cout<<"Nota 1 ";cin>>a[i].nota.nota1; while(a[i].nota.nota1<0||a[i].nota.nota1>100) { cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl; cout<<"Nota 1 ";cin>>a[i].nota.nota1; } cout<<"Nota 2 ";cin>>a[i].nota.nota2; while(a[i].nota.nota2<0||a[i].nota.nota2>100) { cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl; cout<<"Nota 3 ";cin>>a[i].nota.nota3; } cout<<"Nota 3 ";cin>>a[i].nota.nota3; while(a[i].nota.nota3<0||a[i].nota.nota3>100) { cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl; cout<<"Nota 3 ";cin>>a[i].nota.nota3; } a[i].nota.promedio=(a[i].nota.nota1+a[i].nota.nota2+a[i].nota.nota3)/3; cout<<"Promedio"<<fixed<<setprecision(2)<<a[i].nota.promedio; } cout<<"\n\tINGRESO EXITOSO"<<endl; break; case 3: if(a[0].nota.nota3!=0) { cout<<"Lista de contactos"<<endl; for (ptr=a; ptr->nota.nota3;ptr++) { ptr->mostrar(); } cout<<"\n\n\tElija contacto a modificar"<<endl; cout<<"\n\n\tIngrese codigo del contacto que desea modificar ";cin>>cod; ptr->comparar(cod); for (ptr=a; ptr->numcuenta;ptr++) { if(ptr->numcuenta==cod) { cout<<"Modifique Su contacto"<<endl; cout<<"Codigo"<<cod<<endl; cout<<"Nombre "; cin>>ptr->nombre; cout<<"Nota 1 ";cin>>ptr->nota.nota1; while(ptr->nota.nota1<0||ptr->nota.nota1>100) { cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl; cout<<"Nota 1 ";cin>>ptr->nota.nota1; } cout<<"Nota 2 ";cin>>ptr->nota.nota2; while(ptr->nota.nota2<0||ptr->nota.nota2>100) { cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl; cout<<"Nota 2 ";cin>>ptr->nota.nota2; } cout<<"Nota 3 ";cin>>ptr->nota.nota3; while(ptr->nota.nota3<0||ptr->nota.nota3>100) { cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl; cout<<"Nota 3 ";cin>>ptr->nota.nota3; } a[i].nota.promedio=(a[i].nota.nota1+a[i].nota.nota2+a[i].nota.nota3)/3; cout<<"\nCONTACTO MODIFICADO"<<endl; ptr->mostrar(); }//fin if }//fin for } else cout<<"NO EXISTEN DATOS"<<endl; break; case 4: if(a[0].nota.nota3!=0) { int j,temp,temp2,temp3,temp4,temp5; //compara las posiciones for (ptr=a; ptr->nota.nota3;ptr++) { ptr->mostrar(); } for(i=1;i<cantidad;i++)//ayuda a recorrer el vector { for(j=0;j<cantidad-1;j++)//compara elementos del vector por posiciones y busca la posicion anterior, por el -1 { if(a[j].nota.promedio>a[j+1].nota.promedio)//Compara la primera posicion con la siguiente { //a[i].numcuenta=a[i].numcuenta; temp=a[j].nota.promedio; //variable auxiliar que almacena la primera posicion a[j].nota.promedio=a[j+1].nota.promedio; a[j+1].nota.promedio=temp; } } } for (ptr=a; ptr->nota.nota3;ptr++) { ptr->mostrar(); } } else cout<<"NO EXISTEN DATOS"<<endl; break; case 5: if(a[0].nota.nota3!=0) { int j,temp; //compara las posiciones for(i=0;i<cantidad;i++) { cout<<a[i].nota.promedio<<endl; } for(i=1;i<cantidad;i++)//ayuda a recorrer el vector { for(j=0;j<cantidad-1;j++)//compara elementos del vector por posiciones y busca la posicion anterior, por el -1 { if(a[j].nota.promedio<a[j+1].nota.promedio)//Compara la primera posicion con la siguiente { temp=a[j].nota.promedio; //variable auxiliar que almacena la primera posicion a[j].nota.promedio=a[j+1].nota.promedio; a[j+1].nota.promedio=temp; } } } cout<<"Vector ordenado"<<endl;//muestra las posiciones ordenadas for(i=0;i<cantidad;i++) { cout<<a[i].nota.promedio<<endl; } } else cout<<"NO EXISTEN DATOS"<<endl; break; case 6: for (ptr=a; ptr->nota.nota3;ptr++) { ptr->ordenar_cadenas(); } break; case 8: system("PAUSE"); cout<<"Adios"<<endl; return 0; break; } cout<<"\n\n\tIR AL MENU PRINCIPAL [S/N]"<<endl; cin>>resp; }while(resp=='s' || resp=='S'); return 0; }