Ir para conteúdo

Arquivado

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

cool_man

Listas em c

Recommended Posts

Boas pessoal,

 

Tou com alguma dificuldade em fazer trabalho para a faculdade que usa listas.

 

O trabalho que tenho de fazer tem o enunciado que se encontra neste link http://trabalhosuniv.com.sapo.pt/Projecto.pdf

 

Alguma parte do programa ja está feito mas tou com dificuldade em fazer a listagem dos valores introduzidos, não saem como foram introduzidos, e isto esta-me a dificultar em poder avançar com o trabalho.

 

Em baixo junto o codigo que ja esta contruido.

 

Agradecia a vossa ajuda, pois tou a ter dificuldades em fazer o trabalho que tem de ser entregue até dia 30 de junho e conta para nota final. Até agora tenho conseguido fazer os trabalhos solicitados pelo professor, mas neste projecto, e devido ao facto de para alem estudar tambem ser trabalhador, não estou inserido num grupo e tenho feito o trabalho sozinho o que torna as coisas mais dificeis.

 

Agradeço imenso qualquer ajuda que possa ser dada.

 

 

Codigo ja feito:

 

 

 

#include <stdio.h>#include <stdlib.h>typedef struct lista{		char produto;		char data;		float quantidade;		float preco;		float iva;		struct lista *proximo, *anterior;};struct lista *primeiro;struct lista *actual; struct lista *anterior;struct lista *proximo;struct lista *gravar;char op;char prod[50];char dat[10];float quant[5];float prec[5];float i[4];void insere(void){	system("cls");	printf("Inserir novo registo\n\n");  	primeiro = NULL;	for(;;)		{		scanf("%s %s %d %d %d", ∏, &dat, &quant, &prec, &i);		op = getch();		actual = malloc( sizeof(struct lista) );		(*actual).produto = prod[50];		(*actual).data = dat[10];		(*actual).quantidade = quant[5];		(*actual).preco = prec[5];		(*actual).iva = i[4];		(*actual).proximo = primeiro;		primeiro = actual;		if( op == 42)			break;	}	primeiro->proximo = NULL;	for(actual = primeiro; actual != NULL; actual = (*actual).proximo)		printf( "%s	 %s	 %d	 %d	 %d\n", (*actual).produto, (*actual).data, (*actual).quantidade, (*actual).preco, (*actual).iva);	system("pause");}void listar(void){	system("cls");	actual = primeiro;	while( actual != NULL )	{	 printf( "%c	 %c	 %f	 %f	 %f\n", (*actual).produto, (*actual).data, (*actual).quantidade, (*actual).preco, (*actual).iva);	 actual = (*actual).proximo;	}	system("pause");}void elimina(void){	 char op;	 printf("Elimina produto\n\n");	 if(primeiro == NULL){				 system("cls");				 printf("Nenhum registro armazenado...\n\n");				 system("pause");	 return;	 }	 else{		  actual = primeiro->proximo;	 do{		system("cls");		printf("Pressione + e - para alternar entre os registros, sair e confirmar\n\n");		printf("Produto: %s\n\nData: %s\n\nQuantidade: %s\n\nPreco: %s\n\nIVA: %s\n",				actual->produto,actual->data,actual->quantidade,actual->preco,actual->iva);	   		op = getch();		switch (op){			   case 43:{					if (actual->proximo == primeiro)					   actual = primeiro->proximo;					else					actual = actual->proximo;					break;			   }			   case 45:{					if (actual->anterior == primeiro)					   actual = primeiro->anterior;					else					actual = actual->anterior;			   }		}	 }while((op != 27) && (op != 13));	 }	 if(op == 27)		   return;	 	 printf("\n\nVoce confirma a exclusao deste registro (S/N): [ ]\b\b");	 op = getch();	 if (op >= 97)		op -= 32;	 if(op == 'S'){		   anterior = actual->anterior;		   proximo = actual->proximo;		   anterior->proximo = proximo;		   proximo->anterior = anterior;		   free(actual);		   if (primeiro == primeiro->proximo)  // se for excluido o penultimo registro, sobrando apenas o registro "primeiro" que não é util para nós, o primeiro tambem será liberado			  primeiro = NULL;	 		   printf("\n\nRegistro excluido com sucesso!\n\n");		   system("pause");	 }	 else		 return;}int main(void){	char escolha;	insere();	do{	   system("cls");	   printf("I<nsere>, E<limina>, L<istar>, S<air>\n\nEscolha[ ]\b\b");	   escolha = getch();	   if(escolha >= 97)				  escolha -= 32;	   	   if(escolha == 'I')				  insere();				  	   if(escolha == 'E')				  elimina();	   	   if(escolha == 'L')				  listar();									   if(escolha == 'S')				  break;				  	}while(escolha != 27);		return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não adianta nada colocar um baita código porque muita gente não lê nada.Você tem que colocar só o teu problema, tipo específico e a parte do código, que daí dá pra ajudar. Fica mais fácil e você aprende mais.Eu sei que o prazo já acabou, mas é melhor assim, não só pra você, mas para todos.

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.