Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Augusto Stroligo

struct e funcoes.

Recommended Posts

Bom dia, boa tarde ou boa noite.

Em meio aos meus estudos eu me deparei com um problema que nao consegui decifrar. Provavelmente algo mal explicadonas apostilas que causou essa deficiencia. Eu preciso resolver esse exercicio:

 

Faça um programa que solicite a digitação do nome do aluno e de 3
notas do mesmo e calcule a média das notas. Caso a média seja maior
que 60, imprima uma mensagem contendo o nome do aluno e a palavra
Aprovado. Caso contrário, a mensagem deve conter o nome do aluno
e a palavra Reprovado.
Algo bem simples, mas que quando tento fazer utilizando structs e novas funcoes, eu fico extremamente confuso, nao sei exatamente como arrumar.

 

Queria saber como tornar esse codigo possivel:

 

 

 

#include <stdio.h>

struct t_aluno {

char nome[20];
int nota1[10], nota2[10], nota3[10];
float media[10];
}aluno[10];

float media(float aluno[10].nota1, float aluno[10].nota2, aluno[10].nota3) { // Nao sei o que declarar nas parenteses

float media = (aluno[10].nota1 + float aluno[10].nota2 + aluno[10].nota3)/3);
return media;
}

int main()
{
struct t_aluno aluno[10];
int qt;

for (qt=0; qt < 10; qt++){
printf("Nome: ");
scanf(" %s", aluno[qt].nome);
printf("Notas: ");
scanf(" %d %d %d", aluno[qt].nota1, aluno[qt].nota2, aluno[qt].nota2);
}

for (qt=0; qt <10; qt++) { // a partir daqui que a embolacao me confunde
if (aluno[qt].media < 6) printf("%s %d REPROVADO",aluno[qt].nome, media(aluno[qt].nota1, aluno[qt].nota2, aluno[qt].nota3));
if (aluno[qt].media >= 6) printf("%s %d APROVADO", aluno[qt].nome, aluno[qt].media);
}

}

 

 

Quando tento compilar esse codigo recebo essas mensagens:

 

|11|error: expected ';', ',' or ')' before '.' token|
||In function 'main':|
|30|warning: comparison between pointer and integer [enabled by default]|
|31|warning: comparison between pointer and integer [enabled by default]|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
E nao tenho nocao do que significam e muito menos de como resolver. Espero que consigam me ajudar.

Grato desde ja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está se confundindo com os tipos de dados que usa pra representar:

 

1. Um aluno com 3 notas

2. Uma lista de alunos, cada um com 3 notas.

 

 

Sugiro começar com o seguinte tipo de dados:

 

struct aluno 
{
    char nome[20];
    double notas[3];
};
Comece escrevendo uma função que calcule a média de um único aluno:

 

double media(double notas[], size_t n) 
{
    if (n == 0)
    {
        fprintf(stderr, "Indefinido");
        exit(EXIT_FAILURE);
    }

    // calcular a média normalmente:
    //   para um contador de 0 a n - 1, somar as notas.
    //   retornar este valor dividido por n.
}
Só com isso nas mãos pense em trabalhar com mais de um aluno.

Tente entender a diferença nas declarações que designam vetores e nas que designam tipos "atômicos".

 

Caso tenha qualquer outra dúvida, pode perguntar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao entendi muito bem seus exemplos, principalmente o segundo.

Pra que serve o double?

 

E como se interpreta essa parte

double media(double notas[], size_t n) 
{
    if (n == 0)
    {
        fprintf(stderr, "Indefinido");
        exit(EXIT_FAILURE);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou pesquisar um pouco?

 

O tipo "double" é usado pra armazenar números com casas decimais.

Consegue descobrir quais valores o tipo size_t pode representar?

 

Depois disso, pense no caso que incluí na função media.

Qual a média de 0 notas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa ser double. Pode ser float mesmo, já que não é necessário precisão (double).

 

 

Faça um programa que solicite a digitação do nome do aluno e de 3

notas do mesmo e calcule a média das notas. Caso a média seja maior

que 60, imprima uma mensagem contendo o nome do aluno e a palavra

Aprovado. Caso contrário, a mensagem deve conter o nome do aluno

e a palavra Reprovado.

Amigo, está claro o enunciado!

 

Entrada de dados:

 

Nome do aluno e 3 notas (3 notas do mesmo aluno).

 

Processamento:

 

Calcular a média.

 

Saída de dados:

 

Imprimir o nome do aluno e se o mesmo foi aprovado ou reprovado.

 

 

struct aluno{

char nome[45];

float notas[3];

float media;

};

 

Declara um vetor do tipo aluno se for necessário ler dados de vários alunos.

Leia o nome e as notas do aluno em um for e adicione na estrutura.

Apos a leitura de dados é só calcular a média de cada aluno (se for um vetor de alunos) e adicionar na estrutura.

No final é só mostrar o resultado, verificando a média e imprimindo se foi aprovado ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.