Ir para conteúdo

POWERED BY:

Arquivado

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

ricardo gomes araujo

Struct - Cadastro de alunos

Recommended Posts

O programa deverá cadastrar alunos de uma determinada disciplina

e devera ser implementada uma função que imprima o número de matrícula, o nome, a turma e a média de todos os alunos aprovados na disciplina.

 

E deverá seguir o seguinte modelo de estrutura

struct aluno
{
char nome[81];
char matricula[8];
char turma;
float p1;
float p2;
float p3;

}; 

E o critério de aprovação é dado pelas media das três provas (p1,p2 e p3). A função devera obedecer ao seguinte protótipo:

 

void imprime_aprovados (int n, Aluno** turmas);

 

E também deverá ser feita uma função para imprimir a média dos alunos de uma determinada turma. E deverá seguir o seguinte protótipo:

 

float media_turma (int n, Aluno** turmas, char turma);

 

Tentei fazer o seguinte código

 

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

struct aluno
{
  int mat;
  char nome[81];
  char end[121];
  char tel[21];

}; 

typedef struct aluno Aluno;

#define MAX 100
Aluno* tab[MAX];

void inicializa (int n, Aluno** tab) /*funçãos para imprimir os aprovados*/
{
int i;
for (i=0; i<n; i++)
tab[i] = NULL;
}

void preenche (int n, Aluno** tab, int i)
{

    if (i<0 || i>=n) {
    printf("Indice fora do limite do vetor\n");
    exit(1);
    }

    if (tab[i]==NULL)
    tab[i] = (Aluno*)malloc(sizeof(Aluno));

    printf("Entre com a matricula");
    scanf("%d", &tab[i]->mat);
    printf("Entre com o nome");
    scanf("%80[^\n]", &tab[i]->nome);
    printf("Entre com o endereco");
    scanf("%120[^\n]", &tab[i]->end);
    printf("Entre com o telefone");
    scanf("%20[^\n]", &tab[i]->tel);

}

void retira (int n, Aluno** tab, int i)
{

    if (i<0 || i>=n) {
    printf("Indice fora do limite do vetor\n");
    exit(1);
    }

    if (tab[i] !=NULL)
    {
    free(tab[i]);
    tab[i] = NULL;
    }
}

void imprime (int n, Aluno** tab, int i)
{

    if (i<0 || i>=n) {
    printf("Indice fora do limite do vetor\n");
    exit(1);
    }

    if (tab[i]!=NULL)
   { 
   printf("\n\nMatricula: %d\n", tab[i]->mat);
   printf("\n\nNome: %s\n", tab[i]->nome);
   printf("\n\nEndereco: %s\n", tab[i]->end);
   printf("\n\nTelefone: %s\n", tab[i]->tel);
   printf("\n\n");
   }
}     


void imprime_tudo (int n, Aluno** tab)
{

int i;
for (i=0; i<n; i++)
imprime(i);     

} 

/*programa principal*/
main(){

      Aluno* tab[10];
      preenche(10,tab,0);
      preenche(10,tab,1);
      preenche(10,tab,1);
      imprime_tudo(10,tab);
      retira(10,tab,0);
      retira(10,tab,1);
      retira(10,tab,2);

      getch();

}

 

Alguém poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem alguns erros fundamentais da linguagem; coisas que você deve aprender antes de tentar resolver o exercício. Sugiro que leia um livro sobre C. Seu professor provavelmente saberá indicar um bom livro. Se não for o caso, sugiro Kerningham & Ritchie, The C Programming Language, 2a. edição.

 

Se preferir começar a ler agora mesmo, e não quiser pagar por um livro, uma alternativa é http://publications.gbdirect.co.uk/c_book/ . De qualquer forma, é importante que você se familiarize com conceitos fundamentais da linguagem.

 

 

Se tiver dúvidas específicas, pode postar aqui e responderemos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo corrigi o código

 

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

struct aluno
{
  char nome[81];
  char matricula[8];
  char turma;
  float p1;
  float p2;
  float p3;

}; 

typedef struct aluno Aluno;

#define MAX 100
Aluno* turmas[MAX];

void inicializa (int n, Aluno** turmas) /*funçãos para imprimir os aprovados*/
{
int i;
for (i=0; i<n; i++)
turmas[i] = NULL;
}

void preenche (int n, Aluno** turmas, int i)
{

    if (i<0 || i>=n) {
    printf("Indice fora do limite do vetor\n");
    exit(1);
    }

    if (turmas[i]==NULL)
    turmas[i] = (Aluno*)malloc(sizeof(Aluno));

    printf("Entre com o nome");
    scanf("%80[^\n]", &turmas[i]->nome);
    printf("Entre com a matricula");
    scanf("%c", &turmas[i]->matricula);
    printf("Entre com a turma");
    scanf("%120[^\n]", &turmas[i]->turma);
    printf("Entre com a primeira nota");
    scanf("%f", &turmas[i]->p1);
    printf("Entre com a segunda nota");
    scanf("%f", &turmas[i]->p2);
    printf("Entre com a terceira nota");
    scanf("%f", &turmas[i]->p3);

}

void imprime (int n, Aluno** turmas, int i)
{

    if (i<0 || i>=n) {
    printf("Indice fora do limite do vetor\n");
    exit(1);
    }

    if (turmas[i]!=NULL)
   { 
   printf("\n\nMatricula: %d\n", turmas[i]->matricula);
   printf("\n\nNome: %s\n", turmas[i]->nome);
   printf("\n\nTurma: %s\n", turmas[i]->turma);
 printf("\n\n");
   }
}     


void imprime_aprovados (int n, Aluno** turmas)
{

int i;
float media;
float p1,p2,p3;

media = (p1+p2+p3)/3;

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

{

if (media>6.0)
{
imprime(i);     
}   
}

} 

/*programa principal*/
main(){

      Aluno* turmas[10];
      preenche(10,turmas,0);
      preenche(10,turmas,1);
      preenche(10,turmas,1);
      imprime_aprovados(10,turmas);
      getch();

}

 

E agora o compilador mostra o seguinte erro:

 

H:\agendamentos\Sem Título2_2.cpp: In function `void imprime_aprovados(int, Aluno**)':

H:\agendamentos\Sem Título2_2.cpp:55: error: too few arguments to function `void imprime(int, Aluno**, int)'

H:\agendamentos\Sem Título2_2.cpp:87: error: at this point in file

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrigi novamente

 

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

struct aluno
{
  char nome[81];
  char matricula[8];
  char turma;
  float p1;
  float p2;
  float p3;

}; 

typedef struct aluno Aluno;

#define MAX 100
Aluno* turmas[MAX];

void inicializa (int n, Aluno** turmas) /*funçãos para imprimir os aprovados*/
{
int i;
for (i=0; i<n; i++)
turmas[i] = NULL;
}

void preenche (int n, Aluno** turmas, int i)
{

    if (i<0 || i>=n) {
    printf("Indice fora do limite do vetor\n");
    exit(1);
    }

    if (turmas[i]==NULL)
    turmas[i] = (Aluno*)malloc(sizeof(Aluno));

    printf("Entre com o nome");
    scanf("%80[^\n]", &turmas[i]->nome);
    printf("Entre com a matricula");
    scanf("%c", &turmas[i]->matricula);
    printf("Entre com a turma");
    scanf("%120[^\n]", &turmas[i]->turma);
    printf("Entre com a primeira nota");
    scanf("%f", &turmas[i]->p1);
    printf("Entre com a segunda nota");
    scanf("%f", &turmas[i]->p2);
    printf("Entre com a terceira nota");
    scanf("%f", &turmas[i]->p3);

}

void imprime (int n, Aluno** turmas, int i)
{

    if (i<0 || i>=n) {
    printf("Indice fora do limite do vetor\n");
    exit(1);
    }

    if (turmas[i]!=NULL)
   { 
   printf("\n\nMatricula: %d\n", turmas[i]->matricula);
   printf("\n\nNome: %s\n", turmas[i]->nome);
   printf("\n\nTurma: %s\n", turmas[i]->turma);
 printf("\n\n");
   }
}     


void imprime_aprovados (int n, Aluno** turmas)
{

int i;
float media;
float p1,p2,p3;

media = (p1+p2+p3)/3;

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

{

if (media>6.0)
{
imprime(n,turmas,i);     
}   


} 

/*programa principal*/
main(){

      Aluno* turmas[10];
      preenche(10,turmas,0);
      preenche(10,turmas,1);
      preenche(10,turmas,1);
      imprime_aprovados(10,turmas);
      getch();

}

 

Só que agora o programa esta com erro na hora de deixar eu colocar a matricula do aluno

 

 

o erro diz tudo: está faltando argumentos para imprime()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor idente seu código..

E você não deve acompanhar o fórum mesmo, ou até msm você ainda não se atualizou sobre algumas boas práticas..

 

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

typedef struct aluno{
  char nome[81];
  char matricula[8];
} Aluno;

void preenche (Aluno** turmas, int i){
    turmas[i] = (Aluno*) malloc (sizeof(Aluno));
    printf("Entre com o nome: ");
    scanf("%s*%*c", &turmas[i]->nome);
}

void imprime (Aluno** turmas, int i){
    printf("Nome: %s", turmas[i]->nome);
}

int main(){
      Aluno* turmas[10];
      preenche(turmas,0);
      imprime(turmas,0);
      return 0;
}

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

quitZAUMMM

 

Verifiquei o seu código e na hora de mostrar o resultado o programa não mostra.

E como fazer para colocar as outras funções que criei dentro deste programa?

 

Por favor idente seu código..

E você não deve acompanhar o fórum mesmo, ou até msm você ainda não se atualizou sobre algumas boas práticas..

 

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

typedef struct aluno{
  char nome[81];
  char matricula[8];
} Aluno;

void preenche (Aluno** turmas, int i){
    turmas[i] = (Aluno*) malloc (sizeof(Aluno));
    printf("Entre com o nome: ");
    scanf("%s*%*c", &turmas[i]->nome);
}

void imprime (Aluno** turmas, int i){
    printf("Nome: %s", turmas[i]->nome);
}

int main(){
      Aluno* turmas[10];
      preenche(turmas,0);
      imprime(turmas,0);
      return 0;
}

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim n mostra??

antes de postar eu ao menos dei uma compiladinha e testada básica neh..

 

Falar que não mostra é muito vago..

oq acontece?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu vou repetir o que eu disse, porque parece que você não entendeu ou ignorou:

 

Você precisa ler um livro sobre C. Creio que eu tenha feito 2 indicações. Escolha uma e mergulhe.

 

Você não vai aprender C lendo um post do fórum. Repito: suas dúvidas são sobre aspectos fundamentais da linguagem. Nós não vamos conseguir sanar todas elas, e mesmo que conseguíssemos, provavelmente desperdiçaríamos muito tempo, já que outras pessoas (que, cá entre nós, conhecem a linguagem muito mais a fundo que qualquer um aqui) já se deram ao trabalho de formular explicações e exercícios sobre os aspectos que você não entendeu.

 

O que podemos fazer é te ajudar quando você tiver problemas para interpretar, ou entender, tais materiais.

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.