Ola estou fasendo um programa que cadastre dados em uma pilha dinamica…Ra, nota1, nota2 e media, as funções desta pilha são: inserir, remover, mostrar topo da pilha, mostrar todos os dados cadastrados.
A media quando for apresentada junto com os demais dados é o que eu não estou conseguindo faser, gostaria de ajuda para emplementar esta função de media, vejam o meu código.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct
{
int ra;
float nota1, nota2;
float media;
}t_dados;
typedef struct
{
t_dados info;
struct t_pilha *prox;
}t_pilha;
t_pilha *topo;
t_dados novoDado;
void criar_pilha()
{
topo = (t_pilha*)malloc(sizeof (t_pilha));
topo = NULL;
}
int vazia()
{
return(topo == NULL ? 1:0);
}
void push(t_dados e)
{
t_pilha *aux = malloc(sizeof (t_pilha));
aux->info = e;
aux->prox = topo; //aux->topo aponta para topo.
topo = aux; //topo aponta para procimo elemento aux.
}
void pop()
{
t_pilha *aux;
if(vazia())
{
printf("\nPilha vazia\n");
return;
}
aux = topo;
topo = topo->prox;
free(aux);
printf("\nRegistro removido com sucesso\n");
}
void mostra_topo()
{
if(vazia())
{
printf("\nPilha vazia\n");
return;
}
system("cls");
printf("\n------DADOS CADASTRADOS------\n");
printf("%i\n", topo->info.ra);
printf("nota 1: %.2f\n nota 2: %.2f\n", topo->info.nota1, topo->info.nota2);
printf("%.2f\n", topo->info.media);
}
void mostra_tudo()
{
t_pilha *aux = topo;
if(vazia())
{
printf("\nPilha vazia\n");
return;
}
system("cls");
while(aux != NULL){
printf("RA: %i\n", topo->info.ra);
printf("Nota 1: %.2f\nNota 2: %.2f\n", topo->info.nota1, topo->info.nota2);
printf("Media: %.2f\n", topo->info.media);
aux = aux-> prox;
printf("\n\n");
}
}
float media()
{
t_pilha *aux = topo;
while(aux != NULL){
topo->info.media = (topo->info.nota1 + topo->info.nota2)/2;
aux = aux ->prox;
return;
}
}
int menu()
{
int opcao;
printf("\n\nMENU DE OPCOES\n\n");
printf("0 - Sair\n");
printf("1 - Inserir\n");
printf("2 - Remover\n");
printf("3 - Exibir topo\n");
printf("4 - Exibir tudo\n");
printf("\nOpcao desejada: ");
scanf("%i", &opcao);
return opcao;
}
void inserir()
{
printf("\n\nLendo os dados\n");
printf("\nRA: ");
scanf("%i", &novoDado.ra);
printf("\nNota 1: ");
scanf("%f", &novoDado.nota1);
printf("\nNota 2: ");
scanf("%f", &novoDado.nota2);
media();
}
int main()
{
int opcao;
criar_pilha();
do{
opcao = menu();
switch(opcao){
case 0:
break;
case 1:
inserir();
push(novoDado);
break;
case 2:
pop();
break;
case 3:
mostra_topo();
break;
case 4:
mostra_tudo();
break;
default:
printf("\nOpcao invalida\n");
break;
}
}while(opcao != 0);
getch();
return 0;
}