Ir ao conteúdo
  • Cadastre-se

C lee


GoodBoop

Posts recomendados

Estou fazendo uma LEE e estou tendo problemas com meu código.

ele apresenta um menu com as opções de incerir aluno, mostrar dados de alunos cadastrados, excluir aluno pelo ra e mostrar alunos aprovados //media >= 5;

queria ajuda para criar a função de media pos a ke eu fiz não esta tendo muita logica, e na hora de encerir um aluno da para encerir o primeiro mas o segundo não e quando vou excluir um aluno pelo ra ele não encontra.

estou tendo dificudade com linguagem estruturada como a c e agradeço desde já.

Descupem pelo código muito grande...se não poder postalo aqui me indiquem outro site que eu mudo o topico.

o código segue abaixo.

#include <stdio.h>

#include <conio.h>

#define MAX 5

typedef struct {

int ra;

char nome[30];

float nota1, nota2;

float media;

} t_dados;

typedef struct{

t_dados info;

int prox;

} t_info;

typedef struct{

t_info vetor[MAX];

int inicio, dispo;

} t_lista;

t_dados novoDados;

t_lista L;

int anterior, atual = -1;

void iniciliza(){

int i;

L.inicio = -1;

L.dispo = 0;

i = 0;

while(i < MAX){

L.vetor.prox = i + 1;

i += 1;

}

L.vetor[i - 1].prox = -1; //utimo elemento = -1

}

int vazia(){

return (L.inicio == -1 ? 1:0);

}

int cheia(){

return (L.dispo == -1 ? 1:0);

}

int obterNo(){

//obtém o proximo no livre

int aux;

aux = L.dispo;

L.dispo = L.vetor[aux].prox; //atualiza dispo para a proxima posição livre

return aux;

}

void devolverNo(int no){

//devolve o no passado como parametro para a lista de disponiveis

L.vetor[no].prox = L.dispo;

L.dispo = no;

}

void lerDados(){

printf("\n\nIncerir aluno\n");

printf("Ra: ");

scanf("%i", &novoDados.ra);

printf("Nome: ");

fflush(stdin);

gets(novoDados.nome);

printf("icira a nota 1: ");

scanf("%f", &novoDados.nota1);

printf("incira a nota 2: ");

scanf("%f", &novoDados.nota2);

}

void inserir_antes_primeiro(t_dados dados){

int j;

j = obterNo();

L.vetor[j].info = dados;

L.vetor[j].prox = L.inicio;

L.inicio = j;

}

void inserir_primeira_posicao(t_dados dados){

int j;

j = obterNo();

L.vetor[j].info = dados;

L.vetor[j].prox = -1;

L.inicio = j;

}

void inserir(t_dados dados, int k){

//insere os elementos em uma posição apos k

int j;

j = obterNo();

L.vetor[j].info = dados;

L.vetor[j].prox = L.vetor[k].prox;

L.vetor[k].prox = j;

}

int busca_pos_ins(t_dados dados){

int i, ia;

int achou;

i = L.inicio;

achou = 0;

while(achou == 0){

if(i == -1)

achou == 1;

else

if(dados.ra <= L.vetor.info.ra)

achou = 1;

if(achou == 0){

ia = i;

i = L.vetor.prox;

}

}

return ia;

}

void busca_pos_del(float ra){

//remove um elemento baseado no ra

int i;

int achou;

achou = L.inicio;

i = 0;

//se encontrar na primeira posição

if(ra == L.vetor.info.ra){

achou = 1;

anterior = 0;

atual = L.inicio;

return;

}

while(achou == 0){

if(i == -1){//se chegou ao final da lista

atual = -1;

return;

}

if(ra == L.vetor[L.vetor.prox].info.ra){

achou = 1;

anterior = i;

atual = L.vetor.prox;

}

else{//se não achou avança para o próximo elemento

i = L.vetor.prox;

}

}

}

void eliminarPrimeiro(){

//eliminar primeiro elemento da lista.

int j;

j = L.inicio;

L.inicio = L.vetor[j].prox;

devolverNo(j);

}

void eliminar(int k, int j){

//função para eliminar o elemento da posição k

L.vetor[k].prox = L.vetor[j].prox;

devolverNo(j);

}

void mostra(){

int aux;

aux = L.inicio;

if(vazia()){

printf("\nLista vazia\n");

return;

}

while(L.vetor[aux].prox != -1){

printf("\n\nDados dos alunos\n");

printf("\n%i", L.vetor[aux].info.ra);

printf("\n%s", L.vetor[aux].info.nome);

printf("\n\n");

}

printf("\n\nDados dos alunos\n");

printf("\n%i", L.vetor[aux].info.ra);

printf("\n%s", L.vetor[aux].info.nome);

printf("\n\n");

}

int media(){

int i;

for(i = 0; i <= L.vetor.prox; i++){

L.vetor.info.media = ((L.vetor.info.nota1 + L.vetor.info.nota2)/2);

if(L.vetor.info.media >= 5){

printf("\n%i", L.vetor.info.ra);

printf("\n%s", L.vetor.info.nome);

}

}

}

int menu(){

int opcao;

printf("\n\nOpcoes possiveis \n");

printf("0 - Sair\n");

printf("1 - Cadastrar\n");

printf("2 - Mostrar dados de alunos\n");

printf("3 - Excluir aluno\n");

printf("4 - Mostrar alunos aprovados\n");

printf("\nOpcao desejada: ");

scanf("%i", &opcao);

return opcao;

}

int main(){

int opcao;

iniciliza();

do{

opcao = menu();

switch(opcao){

case 0: //sair

break;

case 1: //cadstrar aluno

{

if(!cheia()){

lerDados();

if(vazia()){

inserir_primeira_posicao(novoDados);

}

else{

if(novoDados.ra <= L.vetor[L.inicio].info.ra){

inserir_antes_primeiro(novoDados);

}

else{

int aux = busca_pos_ins(novoDados);

inserir(novoDados, aux);

}

}

}

else{

printf("\nLista cheia\n");

}

break;

}

case 2: //exibir lista

mostra();

break;

case 3: //remover elemento da lista

{

if(!vazia()){

mostra();

printf("\nDigite um ra para ser eliminado\n");

float valor;

scanf("%i", &valor);

busca_pos_del(valor);

if(atual == -1){

printf("\nO valor nao foi encontrado\n");

break;

}

else{

if(atual == L.inicio){

eliminarPrimeiro();

printf("\nItem removido");

}

else{

eliminar(anterior, atual);

printf("\nItem removido\n");

}

}

}

printf("\nLista vazia\n");

break;

}

break;

case 4: //aprovados media >= 5

media();

break;

case 5://exibir dados de um aluno, buscando pela posição que o elemento ocupa na lista

break;

default:

printf("\nOpcao invalida\n");

break;

}

}while(opcao != 0);

getch();

return 0;

}

Link para o comentário
Compartilhar em outros sites

Arquivado

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

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!