Ir ao conteúdo

Posts recomendados

Postado

 A questão e o seguinte!

 

Dadas as seguintes estruturas: struct listaDisciplina{ int código; char nome[50]; float nota; float frequência; struct listaDisciplina *próximo; }; struct listaAluno{ int código; char nome[50]; struct listaAluno *próximo; struct listaDisciplina *disc; }; Escrever um programa em C que contenha funções para inserir elementos na lista de alunos, alterar elementos na lista de alunos, excluir elementos da lista de alunos e mostrar elementos da lista de alunos. Na inclusão de elementos na lista de alunos, atribuir NULL para disc. Um aluno só pode ser excluído se não existir disciplina associada a ele, ou seja, o atributo disc deve ter o valor igual a NULL. O código é o campo chave, ou seja, não pode ter código duplicado. O programa deve ter funções para inserir, alterar, excluir e mostrar elementos na lista de disciplinas. Cada aluno pode ter uma lista de disciplina associada. O ponteiro disc da lista de alunos é o ponteiro início para a lista. O programa deverá mostrar os alunos e suas respectivas disciplinas, indicando se foi aprovado ou reprovado em algumas delas. Para ser aprovado a nota precisa ser maior ou igual a 6.0 e a frequência ser maior ou igual a 75. O programa deve ter menu com as opções para a lista de alunos e para a lista de disciplina.

 

 

//Trabalho

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


struct listaAluno
{
	int codigo;
	char nome[50];
	struct listaAluno * proximo;
	struct listaDisciplina * disc;
	
	
};

struct listaAluno * insereInicio (struct listaAluno *pinicio, int x, char y [] )
{
	struct listaAluno *aux;
	aux=(listaAluno *)malloc(sizeof(listaAluno));
	aux ->codigo = x;
	strcpy(aux->nome, y);
	aux ->proximo=pinicio; 
	pinicio=aux;
	return pinicio;
}

void insereDepois(struct listaAluno *p, int x, char y [])
{
	struct listaAluno *aux;
	aux=(listaAluno *)malloc(sizeof(struct listaAluno));
	aux ->codigo=x;
	strcpy(aux->nome, y);	
	aux ->proximo=p->proximo;
	p->proximo=aux;
}

struct listaAluno * insereOrdenado(struct listaAluno *pinicio, int x, char y[])
{
	struct listaAluno *p, *q;

	if((pinicio == NULL)||(x<pinicio->codigo))
	{
		return (insereInicio(pinicio, x, y));
		
	}
	p=pinicio;
	q=p;
	while((q!=NULL) && (q->codigo<x))
	{
		p=q;
		q=p->proximo;
	}
	if((q==NULL) || (q->codigo>x))
		insereDepois(p,x,y);
	else
		printf("\nCodigo ja existe");
		getch();
    return pinicio;
   
}




struct listaAluno * removeInicio(struct listaAluno * pinicio)
{  struct listaAluno *aux;
   aux = pinicio;
   pinicio = pinicio->proximo;
   free(aux);
   return pinicio;

}

void removeDepois(struct listaAluno *p)
{
   struct listaAluno *aux;
   aux = p->proximo;
   p->proximo = aux->proximo;
   free(aux);
}  

struct listaAluno * removeOrdenado(struct listaAluno * pinicio, int x)
  {
  	struct listaAluno *p,*q;

	if (pinicio==NULL)
	  { printf("lista vazia");
	    getch();
	    return pinicio;
	  }
	if (x == pinicio->codigo)
	  { return (removeInicio(pinicio));
	  
	  }
	p = pinicio;  
	q = p ;
	while ( q !=NULL && q->codigo < x )
	  {
	    p = q;
	    q = p->proximo;
	  }

	if (q!=NULL && q->codigo == x)
	   removeDepois(p);
	else
	  { printf("\nElemento nao Cadastrado");
	    getch();
	  }

    return pinicio;

 }


//....................................Disciplina..............................//
//....................................//////////..............................//


struct listaDisciplina{
	int codigo;
	char nome[50];
	float nota;
	float frequencia;
	struct listaDisciplina * proximo1;
	
};


struct listaDisciplina * iniciarLista (struct listaDisciplina *pinicio1, int x, char y [] )
{
	struct listaDisciplina *aux;
	aux=(listaDisciplina *)malloc(sizeof(listaDisciplina));
	aux ->codigo = x;
	strcpy(aux->nome, y);
	aux ->proximo1=pinicio1; 
	pinicio1=aux;
	return pinicio1;
}

void insereDepois(struct listaDisciplina *p, int x, char y [])
{
	struct listaDisciplina *aux;
	aux=(listaDisciplina *)malloc(sizeof(struct listaDisciplina));
	aux ->codigo=x;
	strcpy(aux->nome, y);	
	aux ->proximo1=p->proximo1;
	p->proximo1=aux;
	
}

struct listaDisciplina * insereOrdenado(struct listaDisciplina *pinicio1, int x, char y[])
{
	struct listaDisciplina *p, *q;

	if((pinicio1 == NULL)||(x<pinicio1->codigo))
	{
		return (iniciarLista(pinicio1, x, y));
		
	}
	p=pinicio1;
	q=p;
	while((q!=NULL) && (q->codigo<x))
	{
		p=q;
		q=p->proximo1;
	}
	if((q==NULL) || (q->codigo>x))
		insereDepois(p,x,y);
	else
		printf("\nElemento j? Existe");

    return pinicio1;
}

/*void mostraElementosDisciplina(struct listaDisciplina *pinicio1)
{
	struct listaDisciplina *p;
	p=pinicio1;
	system("cls");
	while(p != NULL)
	{
		printf("%d , %s", p->codigo, p->nome);
		p=p->proximo;
	}
	
	
	getch();

}
*/
struct listaDisciplina * removeInicio(struct listaDisciplina * pinicio1)
{  struct listaDisciplina *aux;
   aux = pinicio1;
   pinicio1 = pinicio1->proximo1;
   free(aux);
   return pinicio1;

}

void removeDepois(struct listaDisciplina *p)
{
   struct listaDisciplina *aux;
   aux = p->proximo1;
   p->proximo1 = aux->proximo1;
   free(aux);
}  

struct listaDisciplina * removeOrdenado1(struct listaDisciplina * pinicio1, int x)
  {
  	struct listaDisciplina *p,*q;

	if (pinicio1==NULL)
	  { printf("lista vazia");
	    getch();
	    return pinicio1;
	  }
	if (x == pinicio1->codigo)
	  { 
	  	return (removeInicio(pinicio1));
	  }
	p = pinicio1;  
	q = p ;
	while ( q !=NULL && q->codigo < x )
	  {
	    p = q;
	    q = p->proximo1;
	  }

	if (q!=NULL && q->codigo == x)
	   removeDepois(p);
	else
	  { printf("\nElemento nao Cadastrado");
	    getch();
	  }

    return pinicio1;

 }
 
 
 void mostraElementos(struct listaAluno *pinicio, struct listaDisciplina *pinicio1)
{
	struct listaAluno *p;
	struct listaDisciplina *q;
	p=pinicio;
	q=pinicio1;
	system("cls");
	while(p != NULL)
	{
		printf("\n........................................");
		printf("\nCogigo do aluno: %d ", p->codigo);
		printf("\nNome do aluno: %s ", p->nome);
		printf("\nCodigo da disciplina: %d", q->codigo);
		printf("\nMateria %s", q->nome);
		p=p->proximo;
		q=q->proximo1;
		
	}

	getch();

}

//******************//--------------------// 
 				//buscar//
	void buscar (listaAluno* pinicio, int n, char c[])
	{
 	struct listaAluno* p;
	struct listaDisciplina *q;
	p=pinicio;
	

 	for (p=pinicio; p!=NULL; p=p->proximo)
	 	if(n!=NULL)
	   	printf("\n........................................");
		printf("\nCodigo do aluno: %d ", n);
		printf("\nNome do aluno: %s ", c);
		printf("\nCodigo da disciplina:");
		
		printf("\nMateria:");
	   	getch();
	}

//-----------------//****************//

//.......................................MENU..............................................//
int menuOpcao()
{
  int i;
  while(1)
  {
     system("cls");
     printf("\n 1 - Inserir ");
     printf("\n 2 - Mostra  ");
     printf("\n 3 - Retirar ");
     printf("\n 4 - Buscar ");
     printf("\n 5 - Sair ");
  
     printf("\nDigite a Opcao Desejada:  ");
     scanf("%d",&i);
     if((i<1)||(i>5))
      {
	    printf("\nOpcao INVALIDA...Informe 1, 2, 3 ou 4 \n\n");
	    getch();
      }
     else
	   return i;
  }
}
//.............................................main.........................//

 main()
{
	int opcao, n,d, codD;
	char nome[50], disciplina[50];
	struct listaAluno * inicio;
	inicio=NULL;
	struct listaDisciplina * inicio1;
	
	while(1)
	{
       if((opcao=menuOpcao())==5)
	      break;
	   if(opcao==1)
	    {
		    printf("\nCodigo: ");
		    scanf("%d",&n);
		    printf("\nNome do Aluno(a): ");
		    scanf("%s", nome);
		    inicio=insereOrdenado(inicio,n, nome);
	     	printf("\nCodigo da Disciplina: ");
		   	scanf("%d",&codD);
		    printf("\nMateria: ");
		    scanf("%s", disciplina);
		    inicio1=insereOrdenado(inicio1,codD,disciplina);
		    
	    }
	   if(opcao==2)
	    {
		   mostraElementos(inicio, inicio1);
		   getch();
	    }
	   if(opcao==3)
	    {
		  printf("\nRemover Cod.");
		  scanf("%d",&n);
		  inicio = removeOrdenado(inicio,n);
		  inicio1 = removeOrdenado1(inicio1,n);

	    }
	    if(opcao==4)
	   {
	   	printf("\n\nDigite o codigo: ");
	   	scanf("%d", &n);
	   	buscar(inicio, n, nome);
	   	getch();
	   }

	}
	

}

alguma dica para conseguir fazer isso?

Postado

Na hora de adicionar o aluno o codigo da um erro e para de funcionar, alem do comando buscar nao funcionar da maneira certa 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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