Ir ao conteúdo

Posts recomendados

Postado

:DOlá!

Galera novamente estou aqui e estou com um problema no código abaixo.

Se alguém puder me ajudar com ele ficarei grato, não sei o porque de ele não funcionar.

O código esta num arquivo em anexo.

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

typedef struct funcionario {
    int nrmatricula;
    char nome[40];
    float salario;
}funcCorp;

void ordem_stru (int tamanho, struct funcionario *p);
int pesquisaBinaria(struct funcionario *p, int inicio, int fim, int busca);

int main (){
    int n, busca;
    funcCorp func[n];
    
    printf("Quantos funcionarios tem na empresa?");
    scanf("%i", n);
    
    for(int x=0; x<n; x++){
        printf("\nnumero da matricula: ");
        scanf("%i", &func[x].nrmatricula);
        
        printf("\nnome: ");
        scanf("%s", func[x]);
        
        printf("\nsalario: ");
        scanf("%f", &func[x].salario);
        
    }
    ordem_stru(n, func);
    
    printf("Qual numero de matricula voce busca?");
    scanf("%i", &busca);
    
    busca = pesquisaBinaria(func,0,n-1, busca);
}

void ordem_stru (int tamanho, struct funcionario *p){
    
    int x,y;
    //resolvi criar uma outra struct por preguiça de ficar alocando caracteres iguais hehe
    // aux.a e mais rápido que aux.nrmatricula
    struct Aux{
        int a;
        char b[40];
        float c;
    }aux;
    
    for(x=0;x<tamanho-1;x++){
        
        //condicional para troca dos elementos
        if((*(p + x)).nrmatricula > (*(p + x + 1)).nrmatricula){
            
            // separa dados da struct
            aux.a = (*(p + x)).nrmatricula;
            strcpy(aux.b, (*(p + x)).nome);
            aux.c = (*(p+x)).salario;
            
            //ordena o menor elemnto da struct 
            (*(p + x)).nrmatricula = (*(p + x+1)).nrmatricula;
            strcpy((*(p + x)).nome, (*(p + x+1)).nome);
            (*(p+x)).salario = (*(p+x+1)).salario;
            
            //joga de volta o dado na struct
            (*(p + x)).nrmatricula = aux.a;
            strcpy((*(p + x)).nome, aux.b);
            (*(p+x)).salario = aux.c;
            
            y=x;
            
            while(y>0){

                if((*(p + y)).nrmatricula < (*(p + y - 1)).nrmatricula){
                    
                    aux.a = (*(p + y)).nrmatricula;
                    strcpy(aux.b, (*(p + y)).nome);
                    aux.c = (*(p+y)).salario;
            
                    (*(p + y)).nrmatricula = (*(p + y-1)).nrmatricula;
                    strcpy((*(p + x)).nome, (*(p + y-1)).nome);
                    (*(p+x)).salario = (*(p + y-1)).salario;
            
                    (*(p + y -1)).nrmatricula = aux.a;
                    strcpy((*(p + y-1)).nome, aux.b);
                    (*(p + y-1)).salario = aux.c;
            
                    y--;
                }
                else
                    break;
            }
        }
    }
    
    
}

int pesquisaBinaria(struct funcionario *p, int inicio, int fim, int busca){
    int meio;
    
    if(inicio>fim)
        {return -1;} 
    
    meio = (inicio + fim) / 2;
    
    if( (*(p+meio)).nrmatricula > busca){
        return( p,inicio, meio - 1, busca);
    }
    else if( (*(p+meio)).nrmatricula < busca){
        return pesquisaBinaria(p, meio + 1, fim, busca);
    }
    else{//se não é nem maior nem menor logo foi encontrado o cadastro 
        return meio;
    }
}

 

Pesquisa.txtBuscando informações...

  • Obrigado 1
Postado

Achei esses erros:

int n, busca;
 ///funcCorp func[n]; qual o valor de n?
    
    
    printf("Quantos funcionarios tem na empresa?");
    scanf("%i", &n); //faltou o &
    funcCorp func[n]; //o valor de n agora esta determinado
    
    for(int x=0; x<n; x++){
        printf("\nnumero da matricula: ");
        scanf("%i", &func[x].nrmatricula);
        
        printf("\nnome: ");
        scanf("%s", func[x].nome); //faltou o .nome
        
        printf("\nsalario: ");
        scanf("%f", &func[x].salario);
        
    }

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!