Jump to content

Quick Sort


msousa7
 Share

Recommended Posts

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

/*Painel de Controlo do Usuário Pouco Avançado*/
//Instruções: Altere o numero [MAX(numero)]. Este numero é o numero de registos que voce pode introduzir no programa
#define MAX 4        
/*--------------------------------------------*/   
               
#define ERRO        0
#define OK          1
#define F           0
#define V           1

typedef struct 
{
        int dia;
        int mes;
        int ano;
} t_data;


typedef struct 
{
        int id;
        char nome[30];
        t_data dnasc;
        char sexo;
        double salario;
} t_pessoa;


/*Chama de Funções - Estão todas chamadas no caso do editor do programa queira alterar a posição das funções*/
int controlador=0;
int inserir(int n, t_pessoa funcionarios1[], int *elems, int cap);
void consultar(t_pessoa funcionarios2[]);
void alterar(t_pessoa funcionarios3[],int cont8);
void sub(t_pessoa funcionarios4[],int cont1);
void ord_id(t_pessoa funcionarios6[], int cont3);
void ord_nome(t_pessoa funcionarios7[], int cont4);
void ord_sal(t_pessoa funcionarios6[], int cont3);
int remover(int n,t_pessoa funcionarios6[], int *elems);
void total_salarios(t_pessoa funcionarios8[], int cont5);
int verificador_id (t_pessoa funcionarios[],int cont10,int id);
/*--------------------------------------------------------------------------------*/


int main()
{
      system("color 1F");
      int sair,h=0,id[MAX],retorno;
      int op,i, cont=0,q;
      char opr;
      int elementos = 0,identificador;
      t_pessoa funcionarios[MAX];
      if(MAX==0)
      {
                system("color 4F");
                printf("\n\n\n\t\t\t  ERRO em #define MAX (numero)\n");
                printf("\t   Altere no programa a contante MAX para um numero superior a 0!\n\n\n\n");
                system("pause");
      }
      if(MAX!=0)
      {
                MENUP:printf("\n----- Menu Principal -----------------------------------------------------------\n");
                printf("  1 - Inserir registos\n"); 
                printf("  2 - Consultar Registo\n");  
                printf("  3 - Alterar Registos\n");  
                printf("  4 - Listar Registos\n"); 
                printf("  5 - Remover Registo\n");
                printf("  6 - Total de salarios pagos pela empresa\n");
                printf("  7 - Sair\n\n");
                printf("\t\t\t\t\t      Digite 112 para recorrer a ajuda!\n");
                printf("--------------------------------------------------------------------------------\n");
                OPMP:printf("> Insira a Operacao:");
                scanf("%d", &op);
                printf("\n\n");
                switch(op)
                {
                               case 1:
                                    system("cls");
                                    ID:printf("\n----- Introducao de dados ------------------------------------------------------");
                                    printf("\nIntroduza o identificador do registo: ");
                                    scanf("%d", &identificador);
                                    retorno=verificador_id (funcionarios,elementos,identificador);
                                    if(retorno==0)
                                    {
                                                  printf("\n\t\tO Identificador Introduzido ja esta em uso!\n\n");
                                                  printf("\n--------------------------------------------------------------------------------\n");
                                                  system("pause");
                                                  system("cls");
                                                  goto ID;
                                    }
                                    else
                                    if(!inserir(identificador,funcionarios, &elementos, MAX))
                                                                            printf("\nCapacidade esgotada.\n");
                                    if(controlador==0)
                                    {
                                                  printf("\n--------------------------------------------------------------------------------\n");
                                                  RE:printf("Deseja introduzir novos registos(s/n)?");
                                                  fflush(stdin);
                                                  scanf("%c",&opr);
                                                  if(opr=='s')
                                                  {
                                                              system("cls");
                                                              goto ID;
                                                  }
                                                  else
                                                  if(opr=='n')
                                                  {
                                                              system("cls");
                                                              goto MENUP;
                                                  }
                                                  else
                                                              printf("\t\t\tA operacao inserida e invalida!\n\n");
                                                              goto RE;
                                                              break;
                                    }
                                    system("cls");
                                    goto MENUP;
                                    break;
                               case 2:
                                    system("cls");
                                    consultar(funcionarios);
                                    system("cls");
                                    goto MENUP;
                                    break;
                               case 3:
                                    system("cls");
                                    alterar(funcionarios,elementos);
                                    system("cls");
                                    goto MENUP;
                                    break;
                               case 4:
                                    system("cls");
                                    sub(funcionarios,elementos);
                                    system("cls");
                                    goto MENUP;
                                    break;
                               case 5:
                                    system("cls");
                                    printf("\n----- Menu Remover -------------------------------------------------------------");
                                    printf("\nIntroduza o identificador do registo que pretende remover: ");
                                    scanf("%d", &identificador);
                                    if(!remover(identificador,funcionarios, &elementos))
                                    printf("\n\n\t\tO Identificador Introduzido e Invalido ou nao existe!\n\n");
                                    printf("\n--------------------------------------------------------------------------------\n");    
                                    system("pause");
                                    system("cls");
                                    goto MENUP;
                                    break;
                               case 6:
                                    system("cls");
                                    printf("\n----- Total de Salarios --------------------------------------------------------\n");
                                    total_salarios(funcionarios,elementos);
                                    printf("\n--------------------------------------------------------------------------------\n");        
                                    system("pause");
                                    system("cls");
                                    goto MENUP;
                                    break;
                               case 7:
                                    printf("Deseja mesmo sair? (s/n):");
                                    fflush(stdin);
                                    scanf("%c",&sair);
                                    if(sair=='n')
                                    {
                                                 system("cls");
                                                 goto MENUP;
                                    }
                                    break;
                               default:
                                       printf("A Operacao inserida e invalida!\n\n");
                                       goto OPMP;
                                       break;
                }
      }
}
      
int verificador_id (t_pessoa funcionarios[],int cont10,int id)
{
     int contador,i=0;
     for(contador=0; contador<cont10;contador++)
     {
                     if(id==funcionarios[contador].id)
                          return i;
     }
     if(i!=0)
             return 1;
}
         
           
int inserir(int n,t_pessoa funcionarios1[], int *elems, int cap){
    int i, j, id1;
    if (*elems == cap)
    {
                         printf("\n\t\t       O Programa nao suporta mais resgistos! \n\t   Altere as definicoes do programa para adicionar mais registos!\n\n\n");
                         controlador=1;
                         printf("--------------------------------------------------------------------------------\n"); 
                         system("pause");
    }
    if(controlador==0)
    {
                         if (*elems == 0){
                         funcionarios1[0].id=n;
                         printf("Introduza o nome:");
                         fflush(stdin);
                         gets(funcionarios1[0].nome);
                         printf("Intruduza a data de nascimento(dd/mm/aaaa):");
                         scanf("%d/%d/%d", &funcionarios1[0].dnasc.dia,&funcionarios1[0].dnasc.mes,&funcionarios1[0].dnasc.ano);
                         SEXX:printf("Introduza o sexo(m/f):");
                         fflush(stdin);
                         scanf("%c", &funcionarios1[0].sexo);
                         if(funcionarios1[0].sexo!='m' && funcionarios1[0].sexo!='f')
                         {
                                                       printf("\t\t\tO Sexo Inserido e invalido!\n");
                                                       goto SEXX;
                         }                                                  
                         printf("Introduza o salario:");
                         scanf("%lf", &funcionarios1[0].salario);
                         (*elems)++;
                         return OK;
    }
}
    for(i = 0; i < (*elems); i++)
          if(funcionarios1[i].id > id1) 
                                 break;
          for(j = (*elems); j > i; j--)
          funcionarios1[j].id =  funcionarios1[j-1].id;
          if(controlador==0)
          {
                            funcionarios1[i].id=n;
                            printf("Introduza o nome:");
                            fflush(stdin);
                            gets(funcionarios1[i].nome);
                            printf("Intruduza a data de nascimento(dd/mm/aaaa):");
                            scanf("%d/%d/%d", &funcionarios1[i].dnasc.dia,&funcionarios1[i].dnasc.mes,&funcionarios1[i].dnasc.ano);
                            SEX:printf("Introduza o sexo(m/f): ");
                            fflush(stdin);
                            scanf("%c", &funcionarios1[i].sexo);
                            if(funcionarios1[i].sexo!='m' && funcionarios1[i].sexo!='f')
                            {
                                                          printf("\t\t\tO Sexo Inserido e invalido!\n");
                                                          goto SEX;
                            }
                            printf("Introduza o salario: ");
                            scanf("%lf", &funcionarios1[i].salario);
                            (*elems)++;
                            return OK;
    }
} 


void consultar(t_pessoa funcionarios2[])
{
     int i, id1,op,ver=0;
     char opr;
          CON:printf("Introduza o numero de identificacao do registo a consultar:");
          scanf("%d", &id1);
          for(i=0;i<MAX;i++)
          {
                            if(funcionarios2[i].id==id1)
                            {                           printf("\n----- Dados do Registo ---------------------------------------------------------\n");
                                                        printf("Nome: %s\n", funcionarios2[i]. nome);
                                                        printf("Data de nascimento: %d/%d/%d\n", funcionarios2[i].dnasc.dia, funcionarios2[i].dnasc.mes, funcionarios2[i].dnasc.ano);
                                                        if(funcionarios2[i].sexo=='m')
                                                            printf("Sexo:  Masculino\n");
                                                        else
                                                        if(funcionarios2[i].sexo=='f')
                                                            printf("Sexo:  Feminino\n");
                                                        else
                                                            printf("Sexo:  Invalido\n");
                                                            printf("Salario: %.2lf\n", funcionarios2[i].salario);
                                                            printf("\n--------------------------------------------------------------------------------\n");
                                                        do
                                                        {
                                                                      printf("Deseja consultar mais algum registo(s/n)?");
                                                                      fflush(stdin);
                                                                      scanf("%c",&op);
                                                        }while(op!='s' && op!='n');
                                                        if(op=='s')
                                                        {
                                                                   system("cls");
                                                                   goto CON;
                                                        }
                                                        else
                                                        if(op=='n')
                                                        {
                                                                   system("cls");
                                                                   ver=ver+1;
                                                        }
                            }
          }
          if(ver!=1)
          {
                    printf("\n\t    O Identificador Introduzido e enixistente ou invalido!\n\n");
                    system("pause");
                    ver=0;
          }        
}
void alterar(t_pessoa funcionarios3[],int cont8)
{
     int contador, id1, op,ver=0;
     char ald,alr;
     ver=0;
          ALR:printf("\nIntroduza o identificador do registo a alterar:");
          scanf("%d", &id1);
          for(contador=0;contador<MAX;contador++)
          {
                            if(funcionarios3[contador].id==id1)
                            {
                                  ver++;
                                  system("cls");
                                  printf("\nO identificador %d contem os seguintes dados: \n\n",id1);
                                  printf("Nome: %s\n", funcionarios3[contador]. nome);
                                  printf("Data de nascimento: %d/%d/%d\n", funcionarios3[contador].dnasc.dia, funcionarios3[contador].dnasc.mes, funcionarios3[contador].dnasc.ano);
                                  if(funcionarios3[contador].sexo=='m')
                                      printf("Sexo:  Masculino\n");
                                  else
                                      if(funcionarios3[contador].sexo=='f')
                                          printf("Sexo:  Feminino\n");
                                      else
                                          printf("Sexo:  Invalido\n");
                                          printf("O salario: %.2lf\n", funcionarios3[contador].salario);
                                          ALD:printf("\n----- Menu Alterar -------------------------------------------------------------\n");
                                          printf(" 1 - Nome\n");
                                          printf(" 2 - Data de nascimento\n");
                                          printf(" 3 - Sexo\n");
                                          printf(" 4 - Salario\n");
                                          printf("\n--------------------------------------------------------------------------------\n");
                                          printf("> Introduza a Operacao:");
                                          scanf("%d" ,&op);
                                          switch(op)
                                          {              
                                          case 1:
                                               printf("Introduza o nome: ");
                                               fflush(stdin);
                                               gets(funcionarios3[contador].nome);
                                               break;
                                          case 2:
                                               printf("Intruduza a data de nascimento(dd/mm/aaaa) ");
                                               scanf("%d/%d/%d", &funcionarios3[contador].dnasc.dia,&funcionarios3[contador].dnasc.mes,&funcionarios3[contador].dnasc.ano);
                                               break;
                                          case 3:
                                               printf("Introduza o sexo(m/f): ");
                                               fflush(stdin);
                                               scanf("%c", &funcionarios3[contador].sexo);
                                               break;
                                          case 4:
                                               printf("Introduza o salario: ");
                                               scanf("%lf", &funcionarios3[contador].salario);
                                               break;
                                          }
                            }
          }
                           if(ver==0)
                           {
                                     system("cls");
                                     printf("\n----- Menu Alterar -------------------------------------------------------------\n");
                                     printf("\n\t     O Identificador Introduzido e inexistente ou invalido!\n\n");
                                     printf("\n--------------------------------------------------------------------------------\n");
                                     system("pause");
                           }
                           if(ver!=0)
                           {
                                     printf("\nPretende alterar mais algum dado(s/n)?:");
                                     fflush(stdin);
                                     scanf("%c",&ald);
                                     if(ald=='s')
                                     {
                                                 system("cls");
                                                 goto ALD;
                                     }
                                     else
                                     if(ald=='n')
                                     {
                                                 printf("\nPretende alterar mais algum registo(s/n)?:");
                                                 fflush(stdin);
                                                 scanf("%c",&alr);
                                     }
                                     if(alr=='s')
                                     {
                                                 system("cls");
                                                 goto ALR;
                                     }
                                     else
                                     if(alr=='n')
                                     {
                                                 printf("\n\n");
                                     }
                           }    
}    

int remover(int n,t_pessoa funcionarios6[], int *elems)
{
    int encontrou = F; //sinaliza se n foi encontrado no vector
    int p, t;
    for(p = 0; p < (*elems); p++)
        if(funcionarios6[p].id == n)
        {
            encontrou = V;
            printf("\n\n\t\t\tRegisto Removido com sucesso!\n\n");
            break;
        }
    if(!encontrou) return ERRO;
                   for(t = p + 1; t < (*elems); t++)
                         funcionarios6[t - 1] = funcionarios6[t];
                         (*elems)--;
                         return OK;
}
  
  
                              
void sub(t_pessoa funcionarios4[], int cont1)
{
     int op;
     MENUL:printf("\n----- Listar Registos ----------------------------------------------------------\n");
     printf("  1 - Listar todos os registos\n");
     printf("  2 - Listar Registos ordenados pelo salario\n");
     printf("  3 - Listar Registos ordenados pelo nome\n");
     printf("  4 - Regressar ao Menu principal\n");
     printf("\n--------------------------------------------------------------------------------\n");
     OPL:printf("Introduza a Opcao: ");
     scanf("%d",&op);
     switch(op)
     {
                  case 1:
                         ord_id(funcionarios4, cont1);
                         system("cls");
                         goto MENUL;
                         break;
                  case 2:
                         ord_sal(funcionarios4, cont1);
                         system("cls");
                         goto MENUL;
                         break;
                  case 3:
                         ord_nome(funcionarios4, cont1);
                         system("cls");
                         goto MENUL;
                  case 4:
                         break;
                  default:
                         printf("\t\t\tA Operacao inserida e invalida!\n\n");
                         goto OPL;
                         getch();
     }
}














void ord_id(t_pessoa funcionarios5[], int cont2)
{
     
     
     int tempid,tempdia,tempmes,tempano, baixo,alto,separador,contador,primeiro=0,ultimo=(cont2-1),ver=0;
     char tempnome[30],tempsexo;
     system("cls");
     double tempsalario;
     baixo = primeiro;
     alto = ultimo;
     separador = funcionarios5[(primeiro + ultimo) / 2].id;
     do
     {
     while(funcionarios5[baixo].id < separador)
     baixo++;
     while (funcionarios5[alto].id > separador)
     alto--;
     if(baixo <= alto)
     {
     tempid = funcionarios5[baixo].id;
     funcionarios5[baixo++].id = funcionarios5[alto].id;
     funcionarios5[alto--].id = tempid;
     
     tempsexo = funcionarios5[baixo].sexo;
     funcionarios5[baixo].sexo = funcionarios5[alto].sexo;
     funcionarios5[alto].sexo = tempsexo;
     
     tempsalario = funcionarios5[baixo].salario;
     funcionarios5[baixo].salario = funcionarios5[alto].salario;
     funcionarios5[alto].salario = tempsalario;
     
     strcpy(tempnome,funcionarios5[baixo].nome); 
     strcpy(funcionarios5[baixo].nome,funcionarios5[alto].nome);
     strcpy(funcionarios5[alto].nome,tempnome);
     
     tempdia = funcionarios5[baixo].dnasc.dia;
     funcionarios5[baixo].dnasc.dia = funcionarios5[alto].dnasc.dia;
     funcionarios5[alto].dnasc.dia = tempdia;
     
     tempmes = funcionarios5[baixo].dnasc.mes;
     funcionarios5[baixo].dnasc.mes = funcionarios5[alto].dnasc.mes;
     funcionarios5[alto].dnasc.mes = tempmes;
     
     tempano = funcionarios5[baixo].dnasc.ano;
     funcionarios5[baixo].dnasc.ano = funcionarios5[alto].dnasc.ano;
     funcionarios5[alto].dnasc.ano = tempano;
     baixo++;
     alto--;
     }
     }while(baixo <= alto);
     
     if(primeiro < alto)
     {
     ord_id(funcionarios5,cont2);
     if(baixo < ultimo)
     ord_id(funcionarios5,cont2);
     }
     system("cls");
     for(contador = 0;contador < cont2;contador++)
     {
     printf("--------------------------------------------------------------------------------\n");    
     ver=1; 
     printf(" N Identificacao:    %d\n", funcionarios5[contador].id);
     printf(" Nome:               %s\n", funcionarios5[contador].nome);
     printf(" Data de nascimento: %d/%d/%d\n", funcionarios5[contador].dnasc.dia, funcionarios5[contador].dnasc.mes, funcionarios5[contador].dnasc.ano);
     if(funcionarios5[contador].sexo=='m')
     printf(" Sexo:               Masculino\n");
     if(funcionarios5[contador].sexo=='f')
     printf(" Sexo:               Feminino\n");
     printf(" Salario:            %.2lf\n", funcionarios5[contador].salario);
     printf("--------------------------------------------------------------------------------\n");
     }
     system("pause");
     system("cls");
     printf("\n");
     system("cls");
}

void ord_sal(t_pessoa funcionarios6[], int cont3)
{
     
     
     int tempid,tempdia,tempmes,tempano, baixo,alto,contador,primeiro=0,ultimo=(cont3-1),ver=0;
     char tempnome[30],tempsexo;
     system("cls");
     double tempsalario,separador;
     baixo = primeiro;
     alto = ultimo;
     separador = funcionarios6[(primeiro + ultimo) / 2].salario;
     do
     {
     while(funcionarios6[baixo].salario < separador)
     baixo++;
     while (funcionarios6[alto].salario > separador)
     alto--;
     if(baixo <= alto)
     {
     tempid = funcionarios6[baixo].id;
     funcionarios6[baixo++].id = funcionarios6[alto].id;
     funcionarios6[alto--].id = tempid;
     
     tempsexo = funcionarios6[baixo].sexo;
     funcionarios6[baixo].sexo = funcionarios6[alto].sexo;
     funcionarios6[alto].sexo = tempsexo;
     
     tempsalario = funcionarios6[baixo].salario;
     funcionarios6[baixo].salario = funcionarios6[alto].salario;
     funcionarios6[alto].salario = tempsalario;
     
     strcpy(tempnome,funcionarios6[baixo].nome); 
     strcpy(funcionarios6[baixo].nome,funcionarios6[alto].nome);
     strcpy(funcionarios6[alto].nome,tempnome);
     
     tempdia = funcionarios6[baixo].dnasc.dia;
     funcionarios6[baixo].dnasc.dia = funcionarios6[alto].dnasc.dia;
     funcionarios6[alto].dnasc.dia = tempdia;
     
     tempmes = funcionarios6[baixo].dnasc.mes;
     funcionarios6[baixo].dnasc.mes = funcionarios6[alto].dnasc.mes;
     funcionarios6[alto].dnasc.mes = tempmes;
     
     tempano = funcionarios6[baixo].dnasc.ano;
     funcionarios6[baixo].dnasc.ano = funcionarios6[alto].dnasc.ano;
     funcionarios6[alto].dnasc.ano = tempano;
     baixo++;
     alto--;
     }
     }while(baixo <= alto);
     
     if(primeiro < alto)
     {
     ord_id(funcionarios6,cont3);
     if(baixo < ultimo)
     ord_id(funcionarios6,cont3);
     }
     system("cls");
     for(contador = 0;contador < cont3;contador++)
     {
     printf("--------------------------------------------------------------------------------\n");    
     ver=1; 
     printf(" N Identificacao:    %d\n", funcionarios6[contador].id);
     printf(" Nome:               %s\n", funcionarios6[contador].nome);
     printf(" Data de nascimento: %d/%d/%d\n", funcionarios6[contador].dnasc.dia, funcionarios6[contador].dnasc.mes, funcionarios6[contador].dnasc.ano);
     if(funcionarios6[contador].sexo=='m')
     printf(" Sexo:               Masculino\n");
     if(funcionarios6[contador].sexo=='f')
     printf(" Sexo:               Feminino\n");
     printf(" Salario:            %.2lf\n", funcionarios6[contador].salario);
     printf("--------------------------------------------------------------------------------\n");
     }
     system("pause");
     system("cls");
     printf("\n");
     system("cls");
}


void ord_nome(t_pessoa funcionarios7[], int cont4)
{
     system("cls");
     int tempid,tempdia,tempmes,tempano, baixo,alto,contador,primeiro=0,ultimo=(cont4-1),ver=0;
     char tempnome[30],tempsexo,separador[30];
     double tempsalario;
     baixo = primeiro;
     alto = ultimo;
     strcpy(separador,funcionarios7[(primeiro + ultimo) / 2].nome);
     do
     {
     while(strcmp(funcionarios7[baixo].nome,separador)>0)
     baixo++;
     while (strcmp(funcionarios7[alto].nome,separador)<0)
     alto--;
     if(baixo <= alto)
     {
     tempid = funcionarios7[baixo].id;
     funcionarios7[baixo].id = funcionarios7[alto].id;
     funcionarios7[alto].id = tempid;
     
     tempsexo = funcionarios7[baixo].sexo;
     funcionarios7[baixo].sexo = funcionarios7[alto].sexo;
     funcionarios7[alto].sexo = tempsexo;
     
     tempsalario = funcionarios7[baixo].salario;
     funcionarios7[baixo].salario = funcionarios7[alto].salario;
     funcionarios7[alto].salario = tempsalario;
     
     strcpy(tempnome,funcionarios7[baixo].nome); 
     strcpy(funcionarios7[baixo].nome,funcionarios7[alto].nome);
     strcpy(funcionarios7[alto].nome,tempnome);
     
     tempdia = funcionarios7[baixo].dnasc.dia;
     funcionarios7[baixo].dnasc.dia = funcionarios7[alto].dnasc.dia;
     funcionarios7[alto].dnasc.dia = tempdia;

     tempmes = funcionarios7[baixo].dnasc.mes;
     funcionarios7[baixo].dnasc.mes = funcionarios7[alto].dnasc.mes;
     funcionarios7[alto].dnasc.mes = tempmes;
     
     tempano = funcionarios7[baixo].dnasc.ano;
     funcionarios7[baixo].dnasc.ano = funcionarios7[alto].dnasc.ano;
     funcionarios7[alto].dnasc.ano = tempano;
     baixo++;
     alto--;
     }
     }while(baixo <= alto);
     
     if(primeiro < alto)
     {
     ord_id(funcionarios7,cont4);
     if(baixo < ultimo)
     ord_id(funcionarios7,cont4);
     }
     
     for(contador = 0;contador < cont4;contador++)
     {
     printf("--------------------------------------------------------------------------------\n");    
     ver=1; 
     printf(" N Identificacao:    %d\n", funcionarios7[contador].id);
     printf(" Nome:               %s\n", funcionarios7[contador].nome);
     printf(" Data de nascimento: %d/%d/%d\n", funcionarios7[contador].dnasc.dia, funcionarios7[contador].dnasc.mes, funcionarios7[contador].dnasc.ano);
     if(funcionarios7[contador].sexo=='m')
     printf(" Sexo:               Masculino\n");
     if(funcionarios7[contador].sexo=='f')
     printf(" Sexo:               Feminino\n");
     printf(" Salario:            %.2lf\n", funcionarios7[contador].salario);
     printf("--------------------------------------------------------------------------------\n");  
     }
     system("pause");
     system("cls");
     printf("\n");
     system("cls");
}



void total_salarios(t_pessoa funcionarios8[], int cont5)
{
     int contador;
     double soma=0;
     for(contador = 0;contador < cont5;contador++)
     {
     soma=soma+funcionarios8[contador].salario;
     }
     printf("\n\t\tO Total de Salarios pagos pela empresa = %.2lf\n\n",soma);
}

Este é o meu programa. e tou com muita dificuldade com o quick sorte das funções :

void ord_id(t_pessoa funcionarios6[], int cont3);

void ord_nome(t_pessoa funcionarios7[], int cont4);

void ord_sal(t_pessoa funcionarios6[], int cont3);

.

O Objectivo é ver os registos inseridos ordenados pelo id, no outro ordenados pelo salario e no outro ordenados pelo nome.

Se alguem me poder corrigir pelo menos 1 dos quick sort eu agradecia imenso.

Link to comment
Share on other sites

antes de "tentar" ver alguma coisa tenta implementar estas alterações porque senão fica muito confuso :

- uma função de troca de elementos : desta forma o código de troca de valores entre os elementos fica fora do código de ordenação tendo duas vantagens : reutilização e facilidade de leitura do código

- código de mudança de elementos utilizando do memcpy : em vez de teres 20-30 linhas de código para trocar elementos ficas com 3

- 1 função para cada tipo de ordenação dando a distância entre dois elementos do array

    - id

    - nome

    - salário

        com estas funções auxiliares podes fazer a melhor das simplificações :

- uma única função de ordenação que recebe como parâmetros : o array e um ponteiro para a função de ordenação

    ficas com um código de oredenação de 10 linhas e fácil de ler e determinar algum erro

- retirar o código de apresentação de dados da função de ordenação ... é bom ter as funções separadas por funcionalidades

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.