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

STRUCT e FUNÇÂO


dusty

Pergunta

Comecei a estudar C a dois meses e estou com um problema nesse programa:

A dúvida maior é em relação a passar a struct inteira para uma função de ordenação e dentro dela como se atribui seus valores para variáveis locais.

Procurei detalhar o programa e os possíveis preoblemas:

Alguém pode me ajudar?

// O programa deve ler um vetor de alunos tipo "struct", contendo nome, matricula e CR e depois ordena-los 
// por ordem crescente do cr usando a ordenaçao "insert sort".

// A main está OK o algoritmo da funçao "insert" está OK tambem (já testei com vetor simples de inteiros)


#include<stdio.h>

# define n 5

/*criaçao do struct Aluno*/

typedef struct aluno
    {
        //char nome [n];
        int mat;
        float cr;
    }Aluno;

/* Funçao que vai ordenar crescentemente os CR's e imprimir os dados dos alunos já ordenados*/

Aluno insert(Aluno tab[])
{
    Aluno aux; // vi essa atribuição aqui no fórum, mas não consegui usar. 
    int i, j, y, k;
    float z;
    //char x[n];

    /*O erro pode estar aqui: Talvez não seja permitido atribuir para essas variaveis declaradas acima,
    o conteúdo da struct Aluno, pode ser esse o problema...mas mesmo assim o programa compila */

    for(i=1;i<n;i++) 
    {
        x=tab[i].nome;
        y=tab[i].mat;
        z=tab[i].cr;
        
        for(j=i-1;j>=0 && tab[j].cr > z;j--)
        {
            Vet[j+1].nome=tab[j].nome;
            tab[j+1].mat=tab[j].mat;
            tab[j+1].cr=tab[j].cr;
        }
    tab[j+1].nome=x;
    tab[j+1].mat=y;
    tab[j+1].cr=z;
    }
    /* Imprimir */
    printf("Informações dos alunos: \n");
    for (k=0;k<n;k++);
    {
        printf ("\nNome: %s \nMatrícula: %d \nCR: %.2f \n",tab[k].nome tab[k].mat, tab[k].cr);
        
    }
    printf("\n\n");    

    return tab[n];
}

int main ()
{
    # define n 5
    
    int i, k;

    Aluno tab[n]; 

    /*entrada de dados*/

    for (i=0;i < n; i++)
    {
        printf("Digite o nome do %d° aluno: ", i+1);
        scanf("%s", tab[i].nome);
        printf("Digite a matrícula do %d° aluno: ", i+1);
        scanf("%d", &tab[i].mat);
        printf("Digite o CR do %d° aluno: ", i+1);
        scanf("%f", &tab[i].cr);
    }
    for (i=0;i < n; i++) // Só para testar se o vetor está armazenando corretamente os dados.
    {
        printf("\nNome: %s \nMatrícula: %d\n CR: %.2f\n",tab[i].nome tab[i].mat, tab[i].cr);
        
    }
    insert (tab); // chama insert
    
    return 0;
}

Não reparei que quando colei o programa ficou que a identação ficou desse jeito...foi mal

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Otimizei o programa. Ele está fazendo tudo corretamente, o problema é que como eu fiz a função insert retornar um tipo "Aluno", daí só consigo imprimir os dados de apenas um aluno, que é aquele que eu determino dentro insert, e não de todos, como é o objetivo.

Agora a minha dúvida é como imprimir: Alguém sabe como consigo imprimir todos os alunos?

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

# define n 5

/*criaçao do struct Aluno*/

typedef struct aluno
    {
        char nome [n];
        int mat;
        float cr;
    }Aluno;

/* Funçao que vai ordenar crescentemente os CR's e imprimir os dados dos alunos já ordenados*/

void imprime(struct aluno tab[n])
{
    int k;

    printf("Informações dos alunos: \n");
    for (k=0;k<n;k++);
    {
        printf ("\nNome: %s \nMatrícula: %d \nCR: %.2f \n",tab[k].nome, tab[k].mat, tab[k].cr);
        
    }
    printf("\n\n");
}

Aluno insert(struct aluno tab[n])
{
    Aluno aux; // vi essa atribuição aqui no fórum, mas não consegui usar. 
    int i, j, k;
    
    for(i=1;i<n;i++) 
    {
        strcpy(aux.nome,tab[i].nome);
        aux.mat=tab[i].mat;
        aux.cr=tab[i].cr;
        
        for(j=i-1;j>=0 && tab[j].cr > aux.cr;j--)
        {
            strcpy(tab[j+1].nome,tab[j].nome);
            tab[j+1].mat=tab[j].mat;
            tab[j+1].cr=tab[j].cr;
        }
    strcpy(tab[j+1].nome,aux.nome);
    tab[j+1].mat=aux.mat;
    tab[j+1].cr=aux.cr;
    }
    
    return (tab[3]); // só imprime esse cara

    
}

int main ()
{
    # define n 5
    
    int i, k;

    Aluno tab[n], tab2[n]; 

    /*entrada de dados*/

    for (i=0;i < n; i++)
    {
        printf("Digite o nome do %d° aluno: ", i+1);
        scanf("%s", tab[i].nome);
        printf("Digite a matrícula do %d° aluno: ", i+1);
        scanf("%d", &tab[i].mat);
        printf("Digite o CR do %d° aluno: ", i+1);
        scanf("%f", &tab[i].cr);
    }
    for (i=0;i < n; i++) // Só para testar se o vetor está armazenando corretamente os dados.
    {
        printf("\nNome: %s \nMatrícula: %d\n CR: %.2f\n",tab[i].nome, tab[i].mat, tab[i].cr);
        
    }
    tab2 [n] = insert (tab); // chama insert. Só recebe um aluno para imprimir.

    
    printf("Informações dos alunos: \n");
    for (k=0;k<n;k++);
    {
        printf ("\nNome: %s \nMatrícula: %d \nCR: %.2f \n",tab2[k].nome, tab2[k].mat, tab2[k].cr);
        
    }
    printf("\n\n");    

    return 0;
}

Link para o comentário
Compartilhar em outros sites

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...