listado alfabetico

victor
11 de Marzo del 2005
tengo un problema .. no se como listar alfabeticamente el nombre de los trabajadores de este programa (la funcion listado nombres esta en comentario por que no se como hacerla si alguien me colabora gracias.. este es el codigo.

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include <string.h>
#define N 20

struct trabajador
{ char nombre[40];
int categoria;
float sueldos[6];
float promedio;
float newsul;

};

trabajador leer()
{
trabajador trab;
float suma=0;
cout<<"Digite el nombre: ";
fflush(stdin);
gets(trab.nombre);
cout<<endl;
cout<<"Digite la categor¡a: ";
cin>>trab.categoria;
cout<<endl;
for (int i=0; i<6; i++)
{
cout<<"Digite el sueldo del mes "<<i+1<<": ";
cin>>trab.sueldos[i];
suma = suma+trab.sueldos[i];
}
cout<<endl;
trab.promedio = suma/6;
trab.newsul = 0;
return (trab);
}

void imprimir(trabajador trab)
{
printf("%st%d",trab.nombre,trab.categoria);
for(int i=0;i<6;i++)
printf("t%.2f",trab.sueldos[i]);
printf("t%.2fn",trab.newsul);
}

void nuevo_sueldo (trabajador trab[],int n)
{
float porcentaje;

printf("nNombretCattS1tS2tS3tS4tS5tS6tNSueldon");
for (int i=0;i<n;i++)
{ switch(trab[i].categoria)
{ case 1: porcentaje=0.15;
break;
case 2: porcentaje=0.10;
break;
case 3: porcentaje=0.08;
break;
case 4: porcentaje=0.07;
break;
}
trab[i].newsul = trab[i].promedio*porcentaje+trab[i].promedio;
imprimir(trab[i]);
}
}

void diferencia (trabajador trab[],int n)
{
float nomant=0,newnom=0,difer;

for (int i=0;i<n;i++)
{ nomant=nomant+trab[i].sueldos[5];
newnom = newnom+trab[i].newsul;
}
difer = newnom-nomant;
cout<<"El valor de la n¢mina anterior fue : $ "<<nomant<<endl;
cout<<"El valor de la n¢mina nueva es : $ "<<newnom<<endl;
cout<<"La diferencia es: $ "<<difer<<endl;
}
void mayor_promedio (trabajador trab[],int n)
{
float promtotal=0;

for (int i=0;i<n;i++)
{
promtotal = promtotal+trab[i].newsul;
}
promtotal = promtotal/n;
printf("nEl promedio es de $ %.2fn",promtotal);
printf("nNombretCattS1tS2tS3tS4tS5tS6tNSueldon");

for (int j=0;j<n;j++)
{
if (trab[j].newsul>promtotal)
imprimir(trab[j]);
}
}
/*
void listado_nombre (trabajador trab[],int n)
{
int j=0;
char aux;
for(int i=0;i<n-1;i++)
{
for(i+1;j<n;j++)
{
if(strcmp(trab[i].nombre,trab[j].nombre));
{
aux=trab[i].nombre;
trab[j].nombre=trab[i].nombre;
trab[i].nombre=aux;
}
}
}
printf("nNombretCattS1tS2tS3tS4tS5tS6tNSueldon");
lon = strlen(cad);
for (i=0; i<n;i++)
{ if (strncmp(trab[i].nombre,cad,lon)==0)
imprimir(trab[i]);
}
} */

void main()
{
clrscr();
int op,i,num;
trabajador vec[N];

do
{ clrscr();
cout<<"1.Ingresar datos"<<endl;
cout<<"2.Nominas nuevas y antiguas"<<endl;
cout<<"3.Diferencia entre nominas"<<endl;
cout<<"4.Listado de sueldos mayores que el promedio"<<endl;
cout<<"5.Listado de trabajdores por orden alfabetico"<<endl;
cout<<"6.Salir"<<endl;
cout<<"Digite opci¢n"<<endl;
cin>>op;
switch(op)
{ case 1: clrscr();
cout<<"Digite los datos de los trabajadores"<<endl;
cout<<endl;
cout<<"Para salir digite 0 en la categor¡a"<<endl;
cout<<endl;
i=0;
vec[i]= leer();
while (vec[i].categoria != 0)
{ i++;
vec[i]=leer();
}
num = i;
break;
case 2: clrscr();
cout<<"Listado de nuevos sueldos"<<endl;
nuevo_sueldo(vec,num);
getch();
break;
case 3: clrscr();
cout<<"Diferencia n¢mina anterior y nueva n¢mina"<<endl;
diferencia(vec,num);
getch();
break;
case 4: clrscr();
cout<<"Listar mayores que el promedio"<<endl;
mayor_promedio(vec,num);
getch();
break;
/*case 5: clrscr();
printf("Listar trabajadores por nombren");
listado_nombre(vec,num);
getch();
break; */
}
} while (op != 6);
getch();
}

luna_21
11 de Marzo del 2005
una pregunta por que ocupas printf y a la vez el cout??? y para que es tu clscr() ya que me marca un error al ejecutarlo

victor
11 de Marzo del 2005
pues es que uso el printf para algunas impresiones ya que se me hace mas facil para que salgan por ejemplo los sueldos de forma horizontal... pero bueno el clrscr() lo utilizo para limpiar pantalla depsues de cada proceso... pero en si sabes como es la funcion que necesito???