Ir para conteúdo

POWERED BY:

Arquivado

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

#Hnry#

Quando vou executar da um erro e encerra o programa

Recommended Posts

Pessoal estou com dois problemas nesse codigo :unsure:

Primeiro ele compila tudo correto. mas na hora de executar da um erro e encerra o programa.... se comentar o exclui_repetidos

 

Segundo no exclui_repetidos que parametro que coloco aqui para verificar se tem algum elemento repetido na fila?

 

 

Por favor me ajude http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

 

#include <stdio.h>
#include <conio.h>
#include <malloc.h>

struct nodo {
 int dados;
 int valor;
 struct nodo *prox;
};

void enfilera(struct nodo **inicio, struct nodo **fim, int v)
{
	 struct nodo *aux, *p;
	 aux = (struct nodo*) malloc (sizeof(struct nodo));
	 if (aux!=NULL)
	 {
	 aux->valor=v;
	 aux->prox=NULL;
	 if (*inicio=NULL)
	 {
		*inicio=aux;
		*fim=aux;
		}
		else
		{
			p=*inicio;
			while (p->prox !=NULL)
			p=p->prox;
			p->prox=aux;
			}
			}
			}
		void desenfilera (struct nodo **inicio, struct nodo **fim, int *valor)
		{
			 struct nodo *aux;
			 if (*inicio == NULL)
			 printf("FILA VAZIA");
			 else if ((*inicio)->prox== NULL)
			 {
				  *valor = (*inicio)->valor;
				  free(*inicio);
				  *inicio=NULL;
				  *fim=NULL;
				  }
				  else
				  {
					  *valor=(*inicio)->valor;
					  aux=*inicio;
					  *inicio=(*inicio)->prox;
					  free(aux);
					  }
					  }
					  
					  void exclui_repetidos(struct nodo **inicio, struct nodo **fim)
					  {
						   struct nodo *aux, *prim;
						   int v;
						   aux=*inicio;
						   prim=NULL;
													 
						   while  ((aux!=NULL) && (aux!=prim))
						   {
								  desenfilera (inicio, fim, &v);
								  if (?)// que parametro que coloco aqui para verificar se tem algum elemento repetido?
								  {
										  enfilera(inicio, fim, v);
										  if (prim== NULL)
										  prim=*fim;
										  }
										  aux=*inicio;
										  }
										  }
/* Programa principal */
int main()
{
  int val, test;
  struct nodo *ini=NULL, *fi=NULL;
 
	printf("\nPara encerrar a insercao digite 0 !");
  do {
	   printf("\nInforme um valor. : ");
	   scanf("%i",&val);
					if (val != 0)
						{
						enfilera(&ini, &fi, val);
						if (test == 0)
						printf("\nErro de alocacao de memoria...");
						}
	 }
  while (val != 0);

   getch();
		  printf("Exclui...\n");
		  getch();
		   exclui_repetidos(&ini, &fi);
   getch();
  }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho que testar esse programa.

Veja isso:

 

if (*inicio=NULL)

não seria

if (*inicio == NULL)

Ok...

Valeu mesmo...

Mas temos a questão de que paramentros que se coloca para ele testar a se tem elementos repetidos...

Obrigado

 

OBS:Olha eu te mandei um email se puder dar uma olhada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce quer testar se o elemento que deseja inserir já existe na fila?

 

Ok...

Valeu mesmo...

Mas temos a questão de que paramentros que se coloca para ele testar a se tem elementos repetidos...

Obrigado

 

OBS:Olha eu te mandei um email se puder dar uma olhada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, eu quero que ele compare todos os elementos que estao na fila, e se ele encontrar um elemento que ja tenha, ele deve remover.

 

Por Exemplo na fila:

1

2

3

4

1

2

 

Ele remove o 1 e 2 deixando apenas o 1 e 2 que apareceram primeiro, a fila ficaria assim:

1

2

3

4

 

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

:unsure: Não seria bem isso já que estamos falando de uma fila e trata-se de um algoritmo bem diferente... já que num vetor é mais facil percorrer os elementos e tem-se um numero definido de elementos...

 

http://forum.imasters.com.br/public/style_emoticons/default/upset.gif E na fila o maior problema é percorrer e comparar...

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

A comparação é igual.

 

Voce precisa de duas copias da lista.

 

Uma que é incrementada num laço e outra que é incrementada no outro laço.

 

aux = *inicio

while(aux->prox != NULL){
   aux2 = aux -> prox;
   while(aux2 != NULL){
	  if(aux->valor == aux2-> valor)
		 //isso quer dizer que tem alguem repetido.
		;
	  aux2 = aux2->prox
   }
   aux = aux->prox;
}

 

Achar se tem elementos iguais não é tão difícil o mais difícil é retirar ele da fila e refazer a ligação.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

A comparação é igual.

 

Voce precisa de duas copias da lista.

 

Uma que é incrementada num laço e outra que é incrementada no outro laço.

 

aux = *inicio

while(aux->prox != NULL){
   aux2 = aux -> prox;
   while(aux2 != NULL){
	  if(aux->valor == aux2-> valor)
		 //isso quer dizer que tem alguem repetido.
;
	  aux2 = aux2->prox
   }
   aux = aux->prox;
}

 

Achar se tem elementos iguais não é tão difícil o mais difícil é retirar ele da fila e refazer a ligação.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

:rolleyes: Vou tentar fazer um mostra_fila para ver se esta funcionado corretamente...

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.