Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154

    [C] Problemi con liste e funzioni

    Ciao a tutti.
    Sono ormai da ore che provo a cercare l'errore in questo codice ma non riesco a venirne a capo. Spero qualcuno riesca a farmi luce. In pratica non mi modifica firstVertex facendolo rimanere sempre NULL. Come mai? Ve lo posto:

    codice:
    typedef struct node *edgeInfo; //Informazione su un arco della rete
    
    typedef struct node {
    	int secondVertex;
        	int edgeCost;
        	edgeInfo nextAdj;
    } edge;
    
    	.....
    	
    	firstVertex = NULL;
    	
    	srand((unsigned) time(&t)); //genera un seme casuale basato sul tempo per rand() a riga 71
    	for(i=0; i<numNodi; i++)
    	{
    		power = rand() % 12; // genera un valore casuale da 0 a 11
    		if (power == 0) i--; // elimino le istanze pari a 0
    		else
    		{
    			if (power == 11) power = 50; // massima distanza
    			printf("%d: %d \n", i, power);
    			pnt1 = creaStruct(i, power);
    			aux = scorriLista(firstVertex, i);
    			assegnaAux(aux, pnt1)
    		}
    	}
    	
    	......
    	
    edgeInfo creaStruct(int sV, int eC)
    {
    	edgeInfo pnt;
    	
    	pnt = (edgeInfo) malloc (sizeof(edge));
    	pnt->secondVertex = sV;
    	pnt->edgeCost = eC;
    	pnt->nextAdj = NULL;
    	return pnt;
    }
    
    edgeInfo scorriLista(edgeInfo pnt, int i)
    {
    	edgeInfo aux;
    	
    	aux = pnt;
    	if (aux == NULL)
    		return aux;
    	while(aux->nextAdj != NULL)
    		aux = aux->nextAdj;
    	return aux;
    }
    
    
    void assegnaAux(edgeInfo aux, edgeInfo pnt)
    {
    	if (aux==NULL)
    		aux = pnt;
    	else
    		aux->nextAdj = pnt;
    }
    Grazie

  2. #2
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    innanzi tutto come dichiari firstVertex??
    secondo io
    codice:
    typedef struct node *edgeInfo; //Informazione su un arco della rete
    
    typedef struct node {
            int secondVertex;
            int edgeCost;
            edgeInfo nextAdj;
    } edge;
    l'avrei scritto, anche per maggior comprensione,
    codice:
    typedef struct node {
            int secondVertex;
            int edgeCost;
            struct node *nextAdj;
    } edge;
    typedef edge *edgeInfo; //Informazione su un arco della rete(più che
     //informazione è un puntatore..stai attento che non è il contenitore vero e 
    //proprio ma il puntatore)
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  3. #3
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Hai ragione. Piccola dimenticanza...
    firstVertex è di tipo edgeInfo.

  4. #4
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    riguardando bene la tua funzione, l'unica che "potrebbe" modificare il puntatore cioè scorriLista(), non modificherà mai il valore di firstVertex, perchè:
    - è passata per valore(infatti il C non ha il passaggio di parametri per riferimento)
    - poi proprio nella funzione stessa assegni al puntatore temporaneo il valore del parametro e poi esegui tutto con il puntatore temporaneo ritornandolo...
    insomma vuoi che si giochi a pallone ma poi giochi a basket!!!

    inoltre che dovrebbe fare a parole la funzione?? scorrere solo la lista?
    che ti aspetti di trovare alla fine dell'esecuzione in firstVertex??
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.