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; }





Autor


En línea





, me ha surgido una duda leyendo tu comentario, sobre el uso del namespace std, yo siempre por comodidad suelo usarlo por defecto todo el espacio de nombres, pero quisiera saber por qué puede ser interesante no hacerlo o qué inconveniente podría tener.
¡muchas gracias a los dos!