Logo Hardware.com.br
diogo.last
diogo.last Novo Membro Registrado
2 Mensagens 0 Curtidas

[Ajuda]Cadastro de alunos em C

#1 Por diogo.last 06/04/2010 - 20:32
Olá sou novato aqui, criei esse programa mas estou com um problema. O código funciona mas gostaria que na função lerAluno a matricula sempre desse uma mensagem de erro ao se repetir o valor. No jeito que está, se você digitar a primeira e a segunda matriculas iguais da o aviso, mas se a terceira for igual a primeira o programa aceita ela.




#include<stdio.h>

typedef struct Aluno
{
int matricula[5];
float nota1[5];
float nota2[5];
float somamedia[5];

}Aluno;

void lerAluno (Aluno *p);
void ordena (Aluno *v);
void imprimi (Aluno *b);

int main()
{
Aluno a;
lerAluno(&a);
ordena(&a);
imprimi(&a);
return 0;
}

void lerAluno (Aluno *p)
{
int i;
printf("Matricula: &quot;
scanf("%d",&(p->matricula[0]));
printf("Nota1: &quot;
scanf("%f",&(p->nota1[0]));
printf("Nota2: &quot;
scanf("%f",&(p->nota2[0]));
printf("\n&quot;
p->somamedia[0] = p->nota1[0] + p->nota2[0];
for(i=1;i<=4;i++)
{
printf("Matricula: &quot;
scanf("%d",&(p->matricula[i]));
while(p->matricula[i] == p->matricula[i-1])
{
printf("\n ERRO - MATRICULA JA CONSTA NO SISTEMA!\n\n&quot;
printf("Nova Matricula: &quot;
scanf("%d",&(p->matricula[i]));
}
printf("Nota1: &quot;
scanf("%f",&(p->nota1[i]));
printf("Nota2: &quot;
scanf("%f",&(p->nota2[i]));
printf("\n&quot;
p->somamedia[i] = p->nota1[i] + p->nota2[i];
}
}

void ordena( Aluno *v )
{
int i ,j,aux;
for(i=0; i < 4; i++)
{
for(j=i; j < 4 ; j++)
{
if (v->matricula[i] >= v->matricula[j])
{
aux = v->matricula[i];
v->matricula[i] = v->matricula[j];
v->matricula[j] = aux;
}
}
}



}

void imprimi(Aluno *b)
{
int i;
for(i=0;i<4;i++)
{
printf("\n-------------------------------------------------------------\n&quot;
printf("Matricula: %d\n",b->matricula[i]);
printf("Nota1: %1.2f\n",b->nota1[i]);
printf("Nota2: %1.2f\n",b->nota2[i]);
printf("Media do Aluno: %1.2f\n",b->somamedia[i]/2);
if(b->somamedia[i]/2 < 6.0)
printf("Reprovado\n\n&quot;
else
printf("Aprovado\n\n&quot;
}
}




É só isso que falta para eu finalizar meu trabalho.
Obrigado
Responder
tsukanomon
tsukanomon Novo Membro Registrado
21 Mensagens 0 Curtidas
#2 Por tsukanomon
06/04/2010 - 22:27
kra eu resolvi o seu problema, ao inves de voce checar depois que a matricula ja esta efetuada o faca na hora de insercao.
No caso faca um while que varre seu vetor em tempo de execucao, pois qual o proposito em voce checar algo que ja esta cadastrado mas nao deveria?
No caso o certo seria fazer o que eu te falei falei, nao deixar a pessoa inserir a matricula caso ela ja exista, logo faz o while em cima do vetor enquanto a pessoa tenta inserir o numero.

Bom se nao conseguir me fala q eu te passo o codigo, mas acho qe o ideal era voce fazer e outra nao sei como é o nivel de suas provas aih mas se tu nao conseguir fazer isso kra...estuda um poko mais aih..flwww.
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#4 Por tpcvasco
07/04/2010 - 23:34
Tente pensar da seguinte forma:
-Peça a matrícula ao usuário e guarde em uma variável separada (um int qualquer)
-Use esse int para procurar se a matrículo já está no vetor (um loop)
-Se não estiver, insere, senão, imprime um erro

Simples assim
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal