elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ordenamiento de nombres en C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ordenamiento de nombres en C#  (Leído 1,649 veces)
BardoArmas

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Ordenamiento de nombres en C#
« en: 24 Noviembre 2018, 05:46 am »

Estoy trabajando en un programa en el cual se registran alumnos.
Tengo una opción que se trata en ordenar el nombre pero lo que debo verificar al ordenar el nombre es
1.-el apellido paterno y si el apellido paterno es igual al de otro alumno debo ahora verificar su apellido materno y si el otro alumno tiene el apellido paterno y materno igual ahora debo verificar el nombre.

Me podrían ayudar a resolverlo? 😅
Se lo agradecería mucho


« Última modificación: 24 Noviembre 2018, 05:50 am por BardoArmas » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 880



Ver Perfil
Re: Ordenamiento de nombres en C#
« Respuesta #1 en: 24 Noviembre 2018, 06:05 am »

Manda el código para ver cómo estás almacenando los alumnos, para ver si son estructuras, arrays...

De todas formas es simple, comparas un apellido con otro y si uno es menor, ese va primero y si son iguales, comparas el otro.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
BardoArmas

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ordenamiento de nombres en C#
« Respuesta #2 en: 24 Noviembre 2018, 06:27 am »


#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define max 50
typedef struct{
              char nombre[20];
              char apellidop[20];
              char apellidom[20];
}Alum;

typedef struct{
               int matricula;
              Alum alum;
              float dep[3];
              int edad;
              char sexo;
              float prom;
}Datos;

void guardar(Datos datos[max],int *conta);
void abrir(Datos datos[max],int *conta);
void modi_nombre(Datos datos[max],int *conta);
void modi_cal(Datos datos[max],int *conta);
void modi_edad(Datos datos[max],int *conta);
void modi_sexo(Datos datos[max],int *conta);
void modificar(Datos datos[max],int *conta);
void registro(Datos datos[max],int *conta);
void eliminar(Datos datos[max],int *conta);
void lista_a(Datos datos[max],int *conta);
void lista_r(Datos datos[max],int *conta);
void busqueda(Datos datos[max],int *conta);
void ordena(Datos datos[max],int *conta);
void prom(Datos datos[max],int *conta);
void consulta(Datos datos[max],int *conta);
void todos(Datos datos[max],int *conta);

//modulo principal indica todas las acciones principales a realizar
int main()
{
  int op, conta,res;
   Datos datos[max];
do {
    printf("\nPrograma que manipula lista de alumnos\n");
    printf("***************************************************\n");
    printf("seleccione la accion a realizar\n");
    printf("0.-Abrir un archivo\n");
    printf("1.-Registrar alumno\n");
    printf("2.-Modificar alumno\n");
    printf("3.-Eliminar un alumno\n");
    printf("4.-Consulta\n");
    printf("5.-Ordenar\n");
    printf("6.-Guardar archivo\n");
    printf("7.-Salir\n");
    scanf("%d",&op);
    switch (op) {
     case 0:
     printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
     printf("Usted selecciono abrir un archivo\n");
      abrir(datos,&conta);
           break;
      case 1:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono registrar un alumno\n");
      registro(datos,&conta);
              break;
      case 2:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono modificar datos de un alumno");
      modificar(datos,&conta);
           break;
      case 3:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono eliminar un alumnoo\n");
      eliminar(datos,&conta);
              break;
      case 4:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono consultar datos de los alumnos\n");
      consulta(datos,&conta);
              break;
      case 5:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono ordenar alumnos\n");
      ordena(datos,&conta);
              break;
      case 6:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono guardar un archivo\n");
      guardar(datos,&conta);
           break;
      case 7:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("selecciono salir\n");
      break;

      default:
      printf("Error proporcione una opcion valida\n");
    }
  }while (op!=7);
  do{
  printf("¿Desea guardar el archivo antes de salir?\n");
  printf("SI=1,NO=0\n");
  scanf("%d",&res);
   if (res!=1 && res!=0)
      printf("Error proporcione una opcion valida\n");
   if(res==1)
      guardar(datos,&conta);
   }while(res!=1 && res!=0);
  printf("Gracias por usar el Programa\n");
  return 0;
}

void abrir(Datos datos[max],int *conta)
{ char N[50];
   FILE *archivo;
   printf("Proporcione el nombre del archivo\n");
   scanf("%s",N);
   getchar();
   strcat(N,".dat");
   archivo=fopen(N,"rb");
     if(archivo==NULL)
      printf(" no se puede crear archivo \n \n");
      else{
    printf("archivo abierto\n");
    *conta=fread(datos,sizeof(Datos),max,archivo);
    while(feof(archivo)==0)
      *conta=fread(datos,sizeof(Datos),max,archivo);
    fclose(archivo);
  }
}

void guardar(Datos datos[max],int *conta)
{char N_archi[50];
int cont;
cont=*conta;
   FILE *archivo;
   printf("Proporcione el nombre del archivo\n");
   scanf("%s",N_archi);      
      strcat(N_archi,".dat");
      archivo=fopen(N_archi,"wb");
      if(archivo){
         fwrite(datos,sizeof(Datos),cont,archivo);
         fclose(archivo);
         printf("Archivo guardado\n");}
      else
         printf("Archivo no guardado\n");
}

//Registro de alumno//
void registro(Datos datos[max],int *conta)
{
  int cont=0,i,a=0,res,b=0;
  float prom=0;
 
  do { 
    cont=*conta;
    printf("Registro de un alumno\n");
   printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
   do{
    printf("Ingrese la matricula del alumno\n");
    scanf("%d",&datos[cont].matricula);
    a=0;
   for (i=0;i<cont;i++){
     if((datos.matricula)==(datos[i+1].matricula)){
       a=1;
       printf("La matricula esta repetida\n");}
   }
 }while(a==1);
  printf("Ingrese el apellido paterno del alumno\n");
     scanf("%s",datos[cont].alum.apellidop);
     for(i=0;i<strlen(datos[cont].alum.apellidop);i++)
     datos[cont].alum.apellidop=toupper(datos[cont].alum.apellidop);
     printf("Ingrese el apellido materno del alumno\n");
     scanf("%s",datos[cont].alum.apellidom);
     for(i=0;i<strlen(datos[cont].alum.apellidom);i++)
     datos[cont].alum.apellidom=toupper(datos[cont].alum.apellidom);
     printf("Ingrese el nombre del alumno\n");
     scanf("%s",datos[cont].alum.nombre);
     for(i=0;i<strlen(datos[cont].alum.nombre);i++)
     datos[cont].alum.nombre=toupper(datos[cont].alum.nombre);
     do{
       printf("ingrese la edad de el alumno\n");
       scanf("%d",&datos[cont].edad);
       if(datos[cont].edad<1)
       printf("Error la edad debe ser mayor a 0\n");
     }while(datos[cont].edad<1);
     getchar();
     do{
     printf("ingrese el sexo de el alumno(F/M)\n");
     scanf("%c",&datos[cont].sexo);
     b=0;
      if (datos[cont].sexo!='M' && datos[cont].sexo!='m' && datos[cont].sexo!='F' && datos[cont].sexo!='f'){
      b=1;
       printf("proporcione el sexo correcto\n");
       getchar();}
     datos[cont].sexo=toupper(datos[cont].sexo);
     }while(b==1);
     
     for(i=0;i<3;i++){
     do {
       printf("Ingrese la calificacion del departamental %d\n",i+1);
       scanf("%f",&datos[cont].dep);
       if (datos[cont].dep<0 ||datos[cont].dep>10)
       printf("la calificacion debe estar entre 0 a 10\n");
     } while(datos[cont].dep<0 || datos[cont].dep>10);
           prom=prom+datos[cont].dep;
         }
     datos[cont].prom=prom/3;
     printf("promedio de el alumno es %.2f\n",datos[cont].prom);
    printf("Desea ingresar los datos de otro alumno\n");
     printf("0.-no, 1.- si\n");
     scanf("%d",&res);
      cont++;
     printf(" alumnos registrados %d\n",cont);
     *conta=cont;
     prom=0;
     
 }while(res!=0 && cont<max);
}

//muestra todos los alumnos registrados//
void todos(Datos datos[max],int *conta)   //imprime todos lo alumnos registrados
 { int cont=0,i;
    cont=*conta;
   for(i=0;cont>i;i++)
     printf("N:%d  %d: %s, %s, %s, %d, %c,%.2f\t\n",i+1,datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);
    printf("\n");
   }



//lista de aprobados//
void lista_a(Datos datos[max],int *conta)   //imprime todos lo alumnos que tengan promedio mayor a 5
 { int cont=0,i;
    cont=*conta;
   for(i=0;cont>i;i++)
   {if(datos.prom>=6)
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);
    printf("\n");
   }
}

//lista de reprobados//
void lista_r(Datos datos[max],int *conta) //imprime todos lo alumnos que tengan promedio menor a 6
{ int i,cont=0;
   cont=*conta;
  for(i=0;i<cont;i++)
  {if(datos.prom<6)
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);
   printf("\n");
  }
}

//promedio//
void prom(Datos datos[max],int *conta) //suma el promedio de cada alumno y lo divide entre el total de alumnos registrados
{
  int i,cont=0;
  float prome=0,pro=0;
cont=*conta;
  for(i=0;i<cont;i++)
  prome=datos.prom+prome;
  pro=prome/(cont);
  printf("el promedio general de el grupo es %.2f \t\n\n",pro);
}

void eliminar(Datos datos[max],int *conta)
{
   int i, j, matricu, encontrado,cont=0;
   encontrado = 0;
   cont=*conta;
   printf("\nIngresa matricula: ");
   scanf("%d", &matricu);
   for (i=0; i<cont; i++) {
      if(datos.matricula == matricu) {      //al encontrar la matricula la variable "encontrado" cambia de valor
         encontrado = 1;
         for(j=i; j<cont; j++)
            if (j+1 != cont)
               datos[j].matricula = datos[j+1].matricula;
      }
   }
    if (encontrado==1) {
      cont--;
      *conta=cont;
      printf("\nEl alumno con la matricula %d, fue eliminado del registro.\n",matricu);
   } else
      printf("\nEl alumno con la matricula %d, no fue encontrado en el registro.\n",matricu);

}

//*modulo de busqueda*//
void busqueda(Datos datos[max],int *conta)
{int i,matri=0,res,cont=0,a;
   cont=*conta;
do{
   a=0;
  printf("ingrese la matricula del alumno a buscar\n");   //al encontrar la matricula la variable "a" cambia de valor
  scanf("%d",&matri);
  for(i=0;i<cont;i++)
    if(matri==datos.matricula){
    a=1;
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);
 }
 if(a==0){
    printf("la matricula ingresada no es correcta o no existe ese alumno\t\n\n");}
 printf("desea buscar otro alumno\t\n");
  printf("0.- no, 1.- si\n");
  scanf("%d",&res);
}while(res!=0);
}


//consulta informacion de un alumno//
void consulta(Datos datos[max],int *conta)
{
  int x;
  do{
    printf("Usted selecciono consulta de informacion\n");
   printf("1.-Todos los alumnos\n");
    printf("2.-Busqueda de un alumno\n");
    printf("3.-Lista de reprobados\n");
    printf("4.-Lista de aprobados\n");
    printf("5.-Promedio Gral\n");
    printf("6.-Salir al menu principal\n");
    scanf("%d",&x);
    switch (x) {
      case 1:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono mostar todos lo alumnos registrados\n");
      todos(datos,conta);//entra la estructura datos y el contador de alumnos e imprime a todos lo alumnos registrados
      break;
     
      case 2:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono buscar un alumno\n");
      busqueda (datos,conta);//entra la estructura datos y el contador de alumnos y solo imprime los datos de alumno seleccionado
      break;
     
      case 3:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono mostrar todos los alumnos reprobados\n");
      lista_r (datos,conta);//entra la estructura datos y el contador de alumnos e imprime a los alumnos reprobados
      break;

      case 4:
       printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
       printf("Usted selecciono mostrar todos los alumnos aprobados\n");
      lista_a (datos,conta);//entra la estructura datos y el contador de alumnos e imprime a los alumnos aprobados
      break;

      case 5:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("Usted selecciono mostrar el promedio general de los alumnos\n");
      prom (datos,conta);//entra la estructura datos y el contador de alumnos e imprime el promedio general de el gurpo
      break;

      case 6:
      printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
      printf("selecciono salir al menu anterior\n");
      break;

      default:
      printf("por favor seleccione una opcion valida\n");
    }
  }while(x!=6);
}


 
  void ordena(Datos datos[max],int *conta)//entra la estructura datos y el contador de alumnops y solo imprime lo que se pide
 {
    int i, x,j,cont=0;
    Datos aux;
    cont=*conta;
 do{
    printf("desea ordenar por:\n");
    printf("1.-Promedio\n");
    printf("2.-Edad\n");
    printf("3.-Nombre\n");
    printf("4.-Matricula\n");
    printf("5.-Salir\n");
    scanf("%d",&x);
    switch (x){
      case 1:
      printf("ordenamiento por Promedio\n");
      for(i=0;i<cont;i++){
         j=i;
        while(j>0 && datos[j].prom<datos[j-1].prom){   //se intercambian los elementos
            aux=datos[j];
            datos[j]=datos[j-1];
            datos[j-1]=aux;
            j--;
            }
         }
       
      for(i=0;i<cont;i++)
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);
    break;

      case 2:
      printf("Ordenamiento por Edad\n");
      for(i=0;i<cont-1;i++){
      for(j=cont-1;j>i;j--)
         {if(datos[j].edad < datos[j-1].edad){   //se intercambian los elementos
            aux=datos[j];
            datos[j]= datos[j-1];
            datos[j-1]=aux;
            }
      }
    }
    for(i=0;i<cont;i++)
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);
    break;

      case 3:
      printf("Ordenamiento por Nombre\n");
      for(i=0;i<cont;i++)//Ciclo q realiza el proceso de ordenamiento
      for(j=cont-1;j>0;j--)
          if(strcmp(datos[j].alum.apellidop,datos[j-1].alum.apellidop)<0)
          {
           aux= datos[j];
          datos[j]=datos[j-1];
           datos[j-1]=aux;

          }
      for(i=0;i<cont;i++)
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);

    break;

    case 4:
    printf("Ordenamiento por Matricula\n");
    for(i=0;i<cont-1;i++){
      for(j=cont-1;j>i;j--)
      { if (datos[j].matricula<datos[j-1].matricula){ //se intercambian los elementos
         aux=datos[j];
         datos[j]=datos[j-1];
         datos[j-1]=aux;
         }
      }
      }
    for(i=0;i<cont;i++)
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);
  break;

   case 5:
   printf("selecciono salir al menu anterior\n");
   break;

 default:
      printf("error proporcione una opcion valida\n");
      break;

   }
 }while(x!=5);
}


void modificar(Datos datos[max],int *conta)
{ int op=0;
 do
 {
  printf("MODIFICAR REGISTRO\n");
  printf("************************\n");
  printf("1.Modificar Nombre\n");
  printf("2.Modificar Edad\n");
  printf("3.Modificar Sexo\n");
  printf("4.Modificar Calificaciones\n");
  printf("5.-Salir al menu anterior\n");
  printf("Ingrese opcion\n");
  scanf("%d",& op);
     switch (op)
      {
       case 1:
                 modi_nombre(datos,conta);
                 break;
       case 2:
                 modi_edad(datos,conta);
                 break;
       case 3:
                 modi_sexo(datos,conta);
                 break;
       case 4:
                 modi_cal(datos,conta);
                 break;
               
       case 5:
            printf("selecciono Salir al menu anterior\n");
            break;
      default:
            printf("Proporcione una opcion valida\n");
      }
 }while(op!=5);
}


void modi_nombre(Datos datos[max],int *conta)
{
int matri,res,a,cont,j,i;
 cont=*conta;
   printf("Modificar Edad\n");
   todos(datos,conta);
   do{
   a=0;
  printf("ingrese la matricula del alumno a buscar\n");   //al encontrar la matricula la variable "a" cambia de valor
  scanf("%d",&matri);
  for(j=0;j<cont;j++)
    if(matri==datos[j].matricula){
    a=1;
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos[j].matricula, datos[j].alum.apellidop, datos[j].alum.apellidom, datos[j].alum.nombre,datos[j].edad, datos[j].sexo,  datos[j].prom);
               printf("\n\tIngrese el nombre\n\t");
               printf("Ingrese el apellido paterno del alumno\n");
               scanf("%s",datos[j].alum.apellidop);
               for(i=0;i<strlen(datos[j].alum.apellidop);i++)
               datos[j].alum.apellidop=toupper(datos[j].alum.apellidop);
               printf("Ingrese el apellido materno del alumno\n");
               scanf("%s",datos[j].alum.apellidom);
               for(i=0;i<strlen(datos[j].alum.apellidom);i++)
               datos[j].alum.apellidom=toupper(datos[j].alum.apellidom);
               printf("Ingrese el nombre del alumno\n");
               scanf("%s",datos[j].alum.nombre);
               for(i=0;i<strlen(datos[j].alum.nombre);i++)
               datos[j].alum.nombre=toupper(datos[j].alum.nombre);
               guardar(datos,conta);}
 if(a==0){
    printf("la matricula ingresada no es correcta o no existe ese alumno\t\n\n");}
 printf("desea buscar otro alumno\t\n");
  printf("0.- no, 1.- si\n");
  scanf("%d",&res);
}while(res!=0);                     
}

void modi_edad(Datos datos[max],int *conta)
{
int matri,res,a,cont,i;
cont=*conta;
   printf("Modificar Edad\n");
   todos(datos,conta);
   do{
   a=0;
  printf("ingrese la matricula del alumno a buscar\n");   //al encontrar la matricula la variable "a" cambia de valor
  scanf("%d",&matri);
  for(i=0;i<cont;i++)
    if(matri==datos.matricula){
    a=1;
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);
        do{
                  printf("ingrese la edad de el alumno\n");
                  scanf("%d",&datos.edad);
                  if(datos.edad<1)
                  printf("Error la edad debe ser mayor a 0\n");
                }while(datos.edad<1);
                getchar();
                guardar(datos,conta);}
 if(a==0){
    printf("la matricula ingresada no es correcta o no existe ese alumno\t\n\n");}
 printf("desea buscar otro alumno\t\n");
  printf("0.- no, 1.- si\n");
  scanf("%d",&res);
}while(res!=0);                  
}

void modi_cal(Datos datos[max],int *conta)
{
int matri,res,a,j,cont,i;
float prom=0;
 cont=*conta;
   printf("Modificar Calificacion\n");
   todos(datos,conta);
   do{
   a=0;
  printf("ingrese la matricula del alumno a buscar\n");   //al encontrar la matricula la variable "a" cambia de valor
  scanf("%d",&matri);
  for(j=0;j<cont;j++)
    if(matri==datos[j].matricula){
    a=1;
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos[j].matricula, datos[j].alum.apellidop, datos[j].alum.apellidom, datos[j].alum.nombre,datos[j].edad, datos[j].sexo,  datos[j].prom);
        for(i=0;i<3;i++){
     do {
            printf("Ingrese la calificacion del departamental %d\n",i+1);
            scanf("%f",&datos[j].dep);
            if (datos[j].dep<0 ||datos[j].dep>10)
            printf("la calificacion debe estar entre 0 a 10\n");
          } while(datos[j].dep<0 || datos[j].dep>10);
               prom=prom+datos[j].dep;
             }
          datos[j].prom=prom/3;
          printf("promedio de el alumno es %.2f\n",datos[j].prom);
          guardar(datos,conta);
         }
 if(a==0){
    printf("la matricula ingresada no es correcta o no existe ese alumno\t\n\n");}
 printf("desea buscar otro alumno\t\n");
  printf("0.- no, 1.- si\n");
  scanf("%d",&res);
}while(res!=0);                  
}

void modi_sexo(Datos datos[max],int *conta)
{
int matri,res,a,cont,i;
 cont=*conta;
   printf("Modificar Sexo\n");
   todos(datos,conta);
   do{
   a=0;
  printf("ingrese la matricula del alumno a buscar\n");   //al encontrar la matricula la variable "a" cambia de valor
  scanf("%d",&matri);
  for(i=0;i<cont;i++)
    if(matri==datos.matricula){
    a=1;
     printf("%d: %s, %s, %s, %d, %c,%.2f\t\n",datos.matricula, datos.alum.apellidop, datos.alum.apellidom, datos.alum.nombre,datos.edad, datos.sexo,  datos.prom);
     printf("ingrese el sexo de el alumno(F/M)\n");
    scanf("%c",&datos.sexo);
   if (datos.sexo!='M' && datos.sexo!='m' && datos.sexo!='F' && datos.sexo!='f'){
   printf("proporcione el sexo correcto\n");
   getchar();}
   datos.sexo=toupper(datos.sexo);
   guardar(datos,conta);
 }
 if(a==0){
    printf("la matricula ingresada no es correcta o no existe ese alumno\t\n\n");}
 printf("desea buscar otro alumno\t\n");
  printf("0.- no, 1.- si\n");
  scanf("%d",&res);
}while(res!=0);                  
   
}

En línea

BardoArmas

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ordenamiento de nombres en C#
« Respuesta #3 en: 24 Noviembre 2018, 06:29 am »

Manda el código para ver cómo estás almacenando los alumnos, para ver si son estructuras, arrays...

De todas formas es simple, comparas un apellido con otro y si uno es menor, ese va primero y si son iguales, comparas el otro.

Listo colo que el código lo único que no me funciona es el ordenamiento por nombre. Solo lo hice por apellido pero no se como anexarle lo demás.
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 880



Ver Perfil
Re: Ordenamiento de nombres en C#
« Respuesta #4 en: 24 Noviembre 2018, 07:20 am »

Aquí te dejo una versión que acabo de hacer simplificada para que veas la parte del ordenamiento. Lo que hay que hacer una vez se tienen los alumnos con sus respectivos nombres y apellidos, se comparan los apellidos del padre y el que sea menor se pone primero; si son iguales, se compara el de la madre y el menor se pone primero; y si son iguales, se comparan los nombres y el primero se pone primero.

Si tienes dudas sobre el valor de retorno de <strcmp> es el siguiente:
< 0 si la primera cadena es menor que la segunda.
> 0 si la primera cadena es mayor que la segunda.
= 0 si las dos cadenas son iguales.

Adapta esto a tu programa. Suerte.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define TAM 20
  5. #define MAX_STUDENTS 3
  6.  
  7. typedef struct{
  8. char name[TAM];
  9. char lastNameFather[TAM];
  10. char lastNameMother[TAM];
  11. } Student;
  12.  
  13. void initializeStudent(Student*, char*, char*, char*);
  14. void showStudent(Student);
  15. void sortStudents(Student*);
  16.  
  17. int main(){
  18. Student st1, st2, st3;
  19.  
  20. initializeStudent(&st1, "aaaa", "baba", "cccd");
  21. initializeStudent(&st2, "aaaa", "abab", "cccc");
  22. initializeStudent(&st3, "aaab", "baba", "cccc");
  23.  
  24. Student students[MAX_STUDENTS] = {st1, st2, st3};
  25.  
  26. puts("Alumnos sin ordenar");
  27. for(size_t i = 0; i < MAX_STUDENTS; i++)
  28. showStudent(students[i]);
  29.  
  30. sortStudents(students);
  31.  
  32. puts("\nAlumnos ordenados");
  33. for(size_t i = 0; i < MAX_STUDENTS; i++)
  34. showStudent(students[i]);
  35. }
  36.  
  37. void initializeStudent(Student *st, char *name, char *lastNameFather, char *lastNameMother){
  38. strncpy(st->name, name, TAM);
  39. strncpy(st->lastNameFather, lastNameFather, TAM);
  40. strncpy(st->lastNameMother, lastNameMother, TAM);
  41. }
  42.  
  43. void showStudent(Student st){
  44. printf("%s\t%s\t%s\n", st.lastNameFather, st.lastNameMother, st.name);
  45. }
  46.  
  47. void sortStudents(Student *students){
  48. Student assistant;
  49. for(size_t i = 0; i < MAX_STUDENTS-1; i++){
  50. if(strcmp(students[i].lastNameFather, students[i+1].lastNameFather) > 0){
  51. assistant = students[i];
  52. students[i] = students[i+1];
  53. students[i+1] = assistant;
  54. }
  55. else if(strcmp(students[i].lastNameFather, students[i+1].lastNameFather) == 0){
  56. if(strcmp(students[i].lastNameMother, students[i+1].lastNameMother) > 0){
  57. assistant = students[i];
  58. students[i] = students[i+1];
  59. students[i+1] = assistant;
  60. }
  61. else if(strcmp(students[i].lastNameMother, students[i+1].lastNameMother) == 0){
  62. if(strcmp(students[i].name, students[i+1].name) > 0){
  63. assistant = students[i];
  64. students[i] = students[i+1];
  65. students[i+1] = assistant;
  66. }
  67. }
  68. }
  69. }
  70. }
« Última modificación: 24 Noviembre 2018, 07:22 am por YreX-DwX » En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Ordenamiento de nombres en C#
« Respuesta #5 en: 24 Noviembre 2018, 11:01 am »

Qué tal si concatenas los 3 valores y haces solo 1 comparación?
« Última modificación: 24 Noviembre 2018, 16:50 pm por CalgaryCorpus » En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 880



Ver Perfil
Re: Ordenamiento de nombres en C#
« Respuesta #6 en: 24 Noviembre 2018, 11:05 am »

El problema es que no tienen porqué ser la misma cantidad de caracteres. Entonces no puedes formar una única palabra. No sé si me entiendes.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
BardoArmas

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ordenamiento de nombres en C#
« Respuesta #7 en: 24 Noviembre 2018, 15:07 pm »

Muchas gracias iré a probarlo
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 880



Ver Perfil
Re: Ordenamiento de nombres en C#
« Respuesta #8 en: 24 Noviembre 2018, 16:03 pm »

Sí que es cierto que si quieres concatenar todo podrías hacerlo concatenando un espacio entre palabra y palabra para saber donde acaba cada campo pero te metes en muchos líos. La mejor opción creo que sería (como hacemos lo mismo 3 veces cambiando sólo el campo que comparamos) crear una función que reciba dos parámetros y los compare y así podemos llamarla 3 veces usando como parámetros primero el apellido paterno, luego el materno y luego el nombre y así ese trozo de código queda más limpio. Es decir buscar el trozo de código que repetimos y crear una función (principio de una única vez).
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Ordenamiento de nombres en C#
« Respuesta #9 en: 24 Noviembre 2018, 16:20 pm »

Parece mejor hacer una funcion que compare y solo 1 intercambio, algo asi como:

Código
  1. if( mayor( student1, student2 ) ) {
  2.     // intercambiar
  3. }
  4.  


Sugiero corregir la funcion de ordenamiento que al parecer le falta un ciclo al interior del que ya esta, sino no va a ordenar completamente el arreglo.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Metodos de Ordenamiento en c#
.NET (C#, VB.NET, ASP)
alexvem 0 35,959 Último mensaje 4 Agosto 2008, 18:02 pm
por alexvem
Metodos de Ordenamiento
Programación Visual Basic
...:::Téotl:::... 4 12,446 Último mensaje 15 Junio 2012, 22:55 pm
por raul338
metodo de ordenamiento
Java
mojittoo 2 5,157 Último mensaje 24 Mayo 2009, 13:35 pm
por Aeros
Ordenamiento burbuja
Programación C/C++
jravelar 5 5,241 Último mensaje 29 Abril 2010, 17:13 pm
por Tha_Traker
Ayuda con ordenamiento de nombres y numeros
Java
Tada 3 880 Último mensaje 2 Abril 2016, 23:44 pm
por LaiaxanIV
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines