Ir para conteúdo
Fórum Script Brasil
  • 0

Ponteiro com vetor de struct


Soniq

Pergunta

Tenho que entregar um trabalho na faculdade com a seguinte descrição: Suponha dois vetores, um de registros de estudantes e outro de registros de funcionários. Cada registro de estudante contém campos para o último nome, o primeiro nome e um índice de pontos de graduação. Cada registro de funcionário contém membros para o último nome, primeiro nome e o salário. Ambos os vetores são classificados em ordem alfabética pelo último e pelo primeiro nome. Dois registros com o último e o primeiro nome iguais não aparecem no mesmo vetor. Faça um programa em C para conceder um aumento de 10% a todo funcionário que tenha um registro de estudante cujo índice de pontos de graduação seja maior que 3.0.

ØObs: Não é necessário implementar a ordenação. Considere que os dados já são entrados pelo usuário na ordem correta.

Criei esse código, mas não consigo fazer com que funcione e travei totalmente :/ tenho q entregar esse trabalho até as 23h55 de segunda feira, se alguém poder me ajudar agradeço muito *-*

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

typedef struct{
    char ultimo_nome[25];
    char primeiro_nome[25];
    float pontos_de_graduacao;
} aluno;

typedef struct{
    char ultimo_nome[25];
    char primeiro_nome[25];
    float salario;
} funcionario;

void cadastro_funcionario(funcionario *cad_funcionario[], int numero_de_funcionarios)
{
    int i;
    for (i=0; i < numero_de_funcionarios; i++)
    {
        printf("\n%iºFuncionário\n\n", i+1);
        printf("Digite o ultimo nome do funcionário: ");
        scanf("%s", cad_funcionario[i]->ultimo_nome);
  printf("Digite o primeiro nome do funcionário: ");
        scanf("%s", cad_funcionario[i]->primeiro_nome);
        printf("Digite salario do funcionário: ");
        scanf("%f", &cad_funcionario[i]->salario);
        printf("\n");
    }
}

void cadastro_graduados(aluno *cad_aluno[], int numero_de_graduados)
{
    int i;
    for (i=0; i < numero_de_graduados; i++)
    {
        printf("\n%iºFuncionário Graduado\n\n", i+1);
        printf("Digite o ultimo nome do funcionário graduado: ");
        scanf("%s", cad_aluno[i]->ultimo_nome);
        printf("Digite o primeiro nome do funcionário graduado: ");
        scanf("%s", cad_aluno[i]->primeiro_nome);
        printf("Digite o índice de graduação (0.00 - 5.00): ");
        scanf("%f", &cad_aluno[i]->pontos_de_graduacao);
    }
}

/*/void pesquisa(funcionario *cad_funcionario[], aluno *cad_aluno[], int numero_pesquisa, int numero_de_funcionarios, int numero_de_graduados)
{

}//*/

int main()
{
    int numero_de_funcionarios, numero_de_graduados, numero_pesquisa, i,j;
    printf("Quantos funcionários deseja cadastrar em seu banco de dados (máximo 100): ");
    scanf("%d", &numero_de_funcionarios);
    funcionario *cad_funcionario[numero_de_funcionarios];
    for (i=0; i<numero_de_funcionarios; i++)
        cad_funcionario[i] = NULL;
    for (i=0; i<numero_de_funcionarios; i++)
        cad_funcionario[i] = malloc (sizeof(cad_funcionario));

    cadastro_funcionario(cad_funcionario, numero_de_funcionarios);

    printf("\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||\n\n");
    printf("Quantos funcionários graduados deseja cadastrar em seu banco de dados (máximo 100): ");
    scanf("%d", &numero_de_graduados);
    printf("\n|||||||||||CADASTRO DE FUNCIONARIOS GRADUADOS||||||||||||\n");

    aluno *cad_aluno[numero_de_graduados];
        for (i=0; i<numero_de_graduados; i++)
        cad_aluno[i] = NULL;
    for (i=0; i<numero_de_graduados; i++)
        cad_aluno[i] = malloc (sizeof(cad_aluno));

    cadastro_graduados(cad_aluno, numero_de_graduados);

    //pesquisa(cad_funcionario, cad_aluno, numero_pesquisa, numero_de_funcionarios, numero_de_graduados);

    int f,a;
    for (f = 0; f < numero_de_funcionarios; f++){
        int posicao = -1;
        for (a = 0; a < numero_de_graduados; a++){
            int compUltimo = strcmp(cad_funcionario[f]->ultimo_nome, cad_aluno[a]->ultimo_nome);
            if (compUltimo == 0){
                int compPrimeiro = strcmp(cad_funcionario[f]->primeiro_nome, cad_aluno[a]->primeiro_nome);
                if (compPrimeiro == 0){
                    posicao = a; //memoriza a posicao do aluno
                    break;
                } else if (compPrimeiro < 0){ //
                    break;
                }
            } else if (compUltimo < 0){ // se o nome vem depois não tem porque continuar a busca para este funcionario
                break;
            }
        }
        if (posicao >= 0){ //quer dizer que achou o registro de aluno
            if (cad_aluno[posicao]->pontos_de_graduacao >= 3){
                float antigo = cad_funcionario[f]->salario;
                cad_funcionario[f]->salario *= 1.1; //aumento de 10% no salario
                printf("Funcionario %s, %s possui %.2f pontos de graduacao, seu salario passou de %.2f para %.2f\n", cad_funcionario[f]->ultimo_nome, cad_funcionario[f]->primeiro_nome, cad_aluno[posicao]->pontos_de_graduacao, antigo, cad_funcionario[f]->salario);
            } else{
                printf("Funcionario %s, %s não possui pontos de graduacao suficientes (%.2f pontos)\n", cad_funcionario[f]->ultimo_nome, cad_funcionario[f]->primeiro_nome, cad_aluno[posicao]->pontos_de_graduacao);
            }
        } else{
            printf("Funcionario %s, %s não graduado\n", cad_funcionario[f]->ultimo_nome, cad_funcionario[f]->primeiro_nome);
        }
    }

    printf ("FUNCIONARIOS DEPOIS DO AUMENTO %d\n", numero_de_funcionarios);
    for (i=0; i < numero_de_funcionarios; i++){
        printf ("%s %s %.2f\n", cad_funcionario[i]->ultimo_nome, cad_funcionario[i]->primeiro_nome, cad_funcionario[i]->salario);
    }

}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...