Thread: Problem with order of list

  1. #1
    Registered User
    Join Date
    Mar 2008
    Posts
    34

    Problem with order of list

    I would like to order the list by the var distance but program will say always "Lista Vazia"

    Code:
    void imprime_lista (List lista){
    
    	int vect_distance[100];
    	int vect_x[100];
    	int vect_y[100];
    	int distancia,posicao;
    	int contador=-1;
    	int i=0;
    	int max=0;
    
    	List auxiliar = cria_lista(auxiliar);
    	List l = lista->next;
    	 
    	while (l!=NULL){
    		distancia=find_distance(l->info.coordenadas);
    		vect_distance[i]=distancia;
    		vect_x[i]=l->info.coordenadas.x;
    		vect_y[i]=l->info.coordenadas.y;
    		contador=contador+1;
    		i=i+1;
    		l=l->next;
    	}
    
    	while(vect_distance[contador]!=0){
    
    		for(i=0;i<=contador;i++){
    			
    			if (vect_distance[i]>max){
    				max=vect_distance[i];
    				posicao=i;
    			}
    		}
    
    		while(l!=NULL){
    			if (l->info.coordenadas.x==vect_x[posicao] && l->info.coordenadas.y==vect_y[posicao]){
    				insere_lista(auxiliar,l->info);
    			}
    			l=l->next;
    		}
    		vect_distance[posicao]=0;
    	}
    
    	List x = auxiliar->next;
    	
    	if(x==NULL){
    		printf("LISTA VAZIA!!");
    	}
    	
    	while (x!=NULL){     
    		printf("\nNome: %s", x->info.nome);
    		printf("\nMorada: %s", x->info.morada);
    		printf("\nE-Mail: %s", x->info.email);
    		printf("\nTipo de Comida: %s", x->info.comida);
    		printf("\nNumero de Telefone: %s", x->info.telefone);
    		printf("\nObservações: %s", x->info.observacoes);
    		printf("\nCoordenadas: %d,%d", x->info.coordenadas.x, x->info.coordenadas.y);
    		switch (x->info.dia_descanso){
    			case 1: printf("\nDia de descanso semanal: Domingo"); break;
                case 2: printf("\nDia de descanso semanal: Segunda-Feira"); break;
                case 3: printf("\nDia de descanso semanal: Terça-Feira"); break;
                case 4: printf("\nDia de descanso semanal: Quarta-Feira"); break;
                case 5: printf("\nDia de descanso semanal: Quinta-Feira"); break;
                case 6: printf("\nDia de descanso semanal: Sexta-Feira"); break;
                case 7: printf("\nDia de descanso semanal: Sábado"); break;
                default: printf("\n\nErro na leitura do dia de descanso!\n\n"); break;
    		}
    		printf("\nInicio das ferias: %d/%d", x->info.inicio_ferias.dia, x->info.inicio_ferias.mes);
    		printf("\nFim das ferias: %d/%d\n", x->info.fim_ferias.dia, x->info.fim_ferias.mes);
    		
    		x=x->next;
    	}
    }

  2. #2
    and the Hat of Guessing tabstop's Avatar
    Join Date
    Nov 2007
    Posts
    14,336
    I have no idea what cria_lista is supposed to do; create a list, perhaps? So since you create an auxiliar list, and then set x to be the second element of the list that doesn't have anything in it anyway, it's not surprising that x is NULL.

  3. #3
    Registered User
    Join Date
    Mar 2008
    Posts
    34
    cria_lista its create list, and "insere_lista" its put the actual lnode into a new list auxiliar...

  4. #4
    and the Hat of Guessing tabstop's Avatar
    Join Date
    Nov 2007
    Posts
    14,336
    Quote Originally Posted by Yannick View Post
    cria_lista its create list, and "insere_lista" its put the actual lnode into a new list auxiliar...
    Except that never happens, since it's inside a while (l != NULL) loop; but we can only get to that loop after the previous loop finishes -- when l equals NULL.

  5. #5
    Registered User
    Join Date
    Mar 2008
    Posts
    34
    i didnt understand...sorry

  6. #6
    Registered User
    Join Date
    Mar 2008
    Posts
    34
    i dont know how to solve this...

  7. #7
    and the Hat of Guessing tabstop's Avatar
    Join Date
    Nov 2007
    Posts
    14,336
    Code:
    		while(l!=NULL){
    			if (l->info.coordenadas.x==vect_x[posicao] && l->info.coordenadas.y==vect_y[posicao]){
    				insere_lista(auxiliar,l->info);
    			}
    			l=l->next;
    		}
    		vect_distance[posicao]=0;
    Where do you want l to be when this while loop starts?

  8. #8
    Registered User
    Join Date
    Mar 2008
    Posts
    34
    Before the loop i want that l is at start of the list and next to the header....what i've to do?

  9. #9
    and the Hat of Guessing tabstop's Avatar
    Join Date
    Nov 2007
    Posts
    14,336
    Quote Originally Posted by Yannick View Post
    Before the loop i want that l is at start of the list and next to the header....what i've to do?
    Put it there. Assign l to the head of the list before the while loop starts.

  10. #10
    Registered User
    Join Date
    Mar 2008
    Posts
    34
    if i put List l=lista it says that there were already a definition...

  11. #11
    and the Hat of Guessing tabstop's Avatar
    Join Date
    Nov 2007
    Posts
    14,336
    ASSIGN it, not DEFINE it.

  12. #12
    Registered User
    Join Date
    Mar 2008
    Posts
    34
    I've changed to this...it works but if there's 3 lists he will print 3times the same list...and not an order list..."Pesquisa special list" its a search funtion with 2 key-word and returns a list...

    Code:
    void imprime_lista (List lista){
    
    	int vect_distance[100];
    	int vect_x[100];
    	int vect_y[100];
    	int distancia,posicao;
    	int contador=-1;
    	int j=-1;
    	int i=0;
    	int max=0;
    
    	List pesquisa = cria_lista(pesquisa);
    	List auxiliar = cria_lista(auxiliar);
    	List l = lista->next;
    	 
    	while (l!=NULL){
    		distancia=find_distance(l->info.coordenadas);
    		vect_distance[i]=distancia;
    		vect_x[i]=l->info.coordenadas.x;
    		vect_y[i]=l->info.coordenadas.y;
    		contador=contador+1;
    		i=i+1;
    		l=l->next;
    	}
    
    	List mainlist=lista->next;
    
    	while(mainlist!=NULL){
    
    		for(i=0;i<=contador;i++){
    			
    			if (vect_distance[i]>max){
    				max=vect_distance[i];
    				posicao=i;
    			}
    		}
    
    		pesquisa=pesquisa_lista_special(lista,vect_x[posicao],vect_y[posicao]);
    		insere_lista(auxiliar,pesquisa->info);
    		vect_distance[posicao]=0;
    		j=j+1;
    		mainlist=mainlist->next;
    	}
    
    
    	List x = auxiliar->next;
    	
    	if(x==NULL){
    		printf("LISTA VAZIA!!");
    	}
    	
    	while (x!=NULL){     
    		printf("\nNome: %s", x->info.nome);
    		printf("\nMorada: %s", x->info.morada);
    		printf("\nE-Mail: %s", x->info.email);
    		printf("\nTipo de Comida: %s", x->info.comida);
    		printf("\nNumero de Telefone: %s", x->info.telefone);
    		printf("\nObservações: %s", x->info.observacoes);
    		printf("\nCoordenadas: %d,%d", x->info.coordenadas.x, x->info.coordenadas.y);
    		switch (x->info.dia_descanso){
    			case 1: printf("\nDia de descanso semanal: Domingo"); break;
                case 2: printf("\nDia de descanso semanal: Segunda-Feira"); break;
                case 3: printf("\nDia de descanso semanal: Terça-Feira"); break;
                case 4: printf("\nDia de descanso semanal: Quarta-Feira"); break;
                case 5: printf("\nDia de descanso semanal: Quinta-Feira"); break;
                case 6: printf("\nDia de descanso semanal: Sexta-Feira"); break;
                case 7: printf("\nDia de descanso semanal: Sábado"); break;
                default: printf("\n\nErro na leitura do dia de descanso!\n\n"); break;
    		}
    		printf("\nInicio das ferias: %d/%d", x->info.inicio_ferias.dia, x->info.inicio_ferias.mes);
    		printf("\nFim das ferias: %d/%d\n", x->info.fim_ferias.dia, x->info.fim_ferias.mes);
    		
    		x=x->next;
    	}
    }

  13. #13
    Registered User
    Join Date
    Mar 2008
    Posts
    34
    it was suppose to show diferent lists by order of min vect_distance but he always print the same list...

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Pleas take a look & give a critique
    By sh3rpa in forum C++ Programming
    Replies: 14
    Last Post: 10-19-2007, 10:01 PM
  2. instantiated from here: errors...
    By advocation in forum C++ Programming
    Replies: 5
    Last Post: 03-27-2005, 09:01 AM
  3. Replies: 3
    Last Post: 03-04-2005, 02:46 PM
  4. Reverse the order of a Singly Linked List
    By mlupo in forum C Programming
    Replies: 7
    Last Post: 09-02-2002, 09:42 PM
  5. singly linked list
    By clarinetster in forum C Programming
    Replies: 2
    Last Post: 08-26-2001, 10:21 PM