Ir ao conteúdo

Posts recomendados

Postado

Bom dia galera, beleza?

 

Estou com dificuldades para aprender a sintaxe da struct.

 

Segue o que fiz:

 

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define alunos 5

struct reg_aluno
{
    char nome[30];
    int serie;
    float freq;
    float nota[2]
};

void consulta()
{
    printf("Todos os alunos",reg_aluno);

}

float aluno_media(reg_aluno x, float *m)
{
    int i;
    for(i=0;i<2;i++)
    {
        *m = x.nota;
    }
    *m /= 2;
}


void menu()
{
    int opcao=0;

    printf("CONTROLE DE ALUNOS\n");
    printf("-----------------/-------------------");
    printf("1 - Cadastro");
    printf("2 - Consulta");
    printf("3 - Maior e menor media");
    printf("4 - Maior e menor frequencia");
    printf("5 - Alunos acima da media");
    printf("6 - Sair");
    printf("Escolha uma opcao");

    scanf("%d",&opcao);

    switch(opcao)
    {
        case 1:

        break;

        case 2:

        consulta();

        break;
    }

}


int main()
{
struct reg_aluno aluno[1];
int i,j,notas;
float media = 0;

    for (i=0;i<alunos;i++)
    {
        printf("Informe o nome");
        gets(aluno.nome);

        printf("Informe a serie");
        scanf("%i", &aluno.serie);

        printf("informe as notas");
        for (notas=0;notas>2;notas++)
        {
        scanf("%f", &aluno.nota[notas];
        }
        aluno_media(aluno,&media);

        printf("Informe a frequencia");
        scanf("%f", &aluno.freq);
    }
    for(i=0;i<alunos;i++)
    {
    printf("%s %i %f %f %f,", aluno.nome,aluno.serie,aluno.nota[notas],aluno.freq);
    printf("media %f",media[notas]);

    }


}

}

 

Bom, sou novato ainda e portanto deve possuir muitos erros.

 

Minha ideia é fazer um procedimento contendo o menu e um case para cada escolha, e depois fazer as funcoes e ir retornando o que o usuario escolher, porém estou um pouco perdido. Aceito dicas...

 

valeu galera

 

(Exercício no anexo).

 

 

 

ex1.PNG

  • Obrigado 1
Postado

Olá

 

Está indo bem, mas está um pouco longe ainda

 

Nessas funções que está construindo , inicialmente apenas retorne algo, tipo return 0; se a função retorna um int, ou return;  se for void() e tal. A função consulta() por exemplo não tem sentido do modo como escreveu, porque a chamada a printf() está incompleta e errada.

Ou mostre um printf() com o nome da função antes de retornar, o que pode ser útil.

 

struct

Em relação à sintaxe de struct, vou te mostrar dois exemplos. Veja se entende melhor com eles e volte a perguntar.

 

typedef struct
{
    char nome[30];
    int serie;
    float freq;
    float nota[2];
} registro;

registro a[30];

struct reg_aluno
{
    char nome[30];
    int serie;
    float freq;
    float nota[2];
} alunos[30];

Usando o typedef acho que fica mais claro que essa estrutura declarada passa a ser um novo tipo e aí você pode declarar variáveis desse tipo como de qualquer outro.

 

Média

Em relação às funções de média, como são duas notas apenas talvez não precise do loop. E como é só pra calcular a média não precisa passar o registro inteiro. Seria o caso se fosse por exemplo mostrar o nome do cara também...

Vou te mostrar então duas maneiras de escrever a função pra ajudar a entender a sintaxe
 

float aluno_media_1(registro* r)
{
    return (r->nota[0] + r->nota[1]) / 2.;
}

float aluno_media_2(float* notas)
{
    return (notas[0] + notas[1]) / 2.;
}

A segunda recebe só a parte das notas como eu disse

 

Essa saída

nota 1 = [7.000000] nota 2 = [8.000000] media = [7.500000]
nota 1 = [7.000000] nota 2 = [8.000000] media = [7.500000]

Corresponde a esse programa. Atente para a maneira de endereçar as coisas

#include <stdio.h>

typedef struct
{
    char nome[30];
    int serie;
    float freq;
    float nota[2];
} registro;

registro a[30];

struct reg_aluno
{
    char nome[30];
    int serie;
    float freq;
    float nota[2];
} alunos[30];

float aluno_media_1(registro* r)
{
    return (r->nota[0] + r->nota[1]) / 2.;
}

float aluno_media_2(float* notas)
{
    return (notas[0] + notas[1]) / 2.;
}

int main(int argc, char** argv)
{
    // usando o tipo novo, registro
    a[29].serie = 12;
    a[29].nota[0] = 7.0;
    a[29].nota[1] = 8.0;

    printf("nota 1 = [%f] nota 2 = [%f] media = [%f]\n",
        a[29].nota[0], a[29].nota[1],
        aluno_media_1(&a[29])
    );

    printf("nota 1 = [%f] nota 2 = [%f] media = [%f]\n",
        a[29].nota[0], a[29].nota[1],
        aluno_media_2(a[29].nota)
    );

    // usando struct alunos
    alunos[29].serie = 12;
    alunos[29].nota[0] = 7.0;
    alunos[29].nota[1] = 8.0;

    return 0;
}

Usei só o último registro de alunos das duas maneiras pra ajudar a entender

 

Postado

Boa noite Arfneto, desculpe a demora para responder, acabei viajando e voltando só domingo. 

 

Eu alterei poucas coisas, segue:

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define ALUNOS 5

struct reg_aluno
{
    char nome[30];
    int serie;
    float freq;
    float nota[2];
    int i,j;
    float media;
    char aluno_pesquisado;
}aluno[ALUNOS];

// Menu de opções
void menu()
{
    int opcao=0;
    printf("CONTROLE DE ALUNOS\n");
    printf("-----------------/-------------------");
    printf("1 - Cadastro\n");
    printf("2 - Consulta\n");
    printf("3 - Maior e menor media\n");
    printf("4 - Maior e menor frequencia\n");
    printf("5 - Alunos acima da media\n");
    printf("6 - Sair\n");
    printf("Escolha uma opcao\n");

    scanf("%d",&opcao);

    switch(opcao)
    {
        case 1:

        cadastro(aluno);

        break;

        case 2:



        break;

        case 3:

        break;
        

        case 4:


        break;

        case 5:
            
            
        break;
        
        case 6:

            printf("Sair");

        break;
    }
}
    //fazer cadastro do aluno (case 1)
            void cadastro()

    {
        int media = 0;
        for (i=0;i<alunos;i++)
    {
        printf("Informe o nome");
        gets(aluno[i].nome);

        printf("Informe a serie");
        scanf("%i", &aluno[i].serie);

        printf("informe as notas");

        for (j=0;j>2;j++)
        {
        scanf("%f", &aluno[i].nota[j]);
        }

        printf("Informe a frequencia");
        scanf("%f", &aluno[i].freq);


    }

    }
    //consultar aluno por nome
            void consulta(aluno x)
{
        printf("Informe o nome do aluno que deseja pesquisar");
        gets(aluno_pesquisado);

        for(i=0;i<ALUNOS;i++)
        {
        if (aluno_pesquisado == aluno.nome[i])
        {
            printf("Dados do aluno pesquisado %s %i %f %f", aluno.nome[i],aluno.serie[i],aluno.nota[j],aluno.freq[i]);
        }

        }
}
    //maior e menor media
    float maior_menor_media(float media_aluno);
    {

         float media,i;

            for (i=0;i>ALUNOS;i++)
        {
            (media = (aluno[i].nota[0] + aluno[i].nota[1]) / 2 );
        }


        maior = 0;
        menor = aluno[i].media;
        int k,posmaior,posmenor;

        for(i=0;i<ALUNOS;i++)

            {
               if(aluno[i].media > maior)

                posmaior = i;
                maior = aluno[i].media;

            }
                if(aluno[i].media < menor)
            {
                posmenor = i;
                menor = aluno[i].media;
            }
             for(k=0;k<ALUNOS;k++)
            {
            printf("[Maior Media] Aluno: %s, media %0.1f\n", aluno[posmaior].nome, aluno[posmaior].media);
            printf("[Menor Media] Aluno: %s, media %0.1f\n", aluno[posmenor].nome, aluno[posmenor].media);
            }

        }

    //maior e menor frequencia

         float aluno_frequencia(float *frequencia)
         {


         }

    //aluno acima da media(case 5)
    
    char nome_aluno(char acima_media)

            if (media>7)
            {
                printf("%s",aluno.nome)
            }
}




int main()
{
    
struct reg_aluno aluno[ALUNOS];
int i,j,notas;
float media = 0;

    cadastro()
}

Eu mudei um pouco a ideia, quero fazer um procedimento do menu de opções contendo vários cases, e cada case ser feito uma chamada de procedimento ou função (não aprendi direito como fazer essa chamada). E na minha main eu apenas fazer a chamada do procedimento menu de opções. Estou com uma dúvida, no meu case 1 passa um procedimento, e precisa ser salvo os dados do aluno(informados pelo usuário), o procedimento consegue salvar os dados? 

 

Para o case 3 e 4, é necessário ser utilizado ponteiro?

 

Eu criei uma variável na struct chamada media, acredito que ira facilitar para fazer o case 3.

 

Obrigado desde já.

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

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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!