Aiuto, programma per l'esame...

di il
22 risposte

22 Risposte - Pagina 2

  • Re: Aiuto, programma per l'esame...

    barba59 ha scritto:


    
    void Ordina(Nodo* primo)
    {
       // ripete finchè ci sono scambi, se non vi è stato nessuno scambio allora la lista è ordinata
    	int flag = 1;
    	while (flag == 1) 
    	{  
    		Nodo* p = primo;
    		flag = 0;
    		while (p->next != NULL)
    		
    
    Grazie Grazie Grazie... l'ultima cosa puoi spiegarmi quelle righe di codice a parole?? per favore.
  • Re: Aiuto, programma per l'esame...

    Intendi dire che vuoi che ti spieghi l' algoritmo a parole?
    Immagina di fare una passata su tutta la lista e se trovi degli elementi non in ordine li scambi. Se fai una passata e non fai nessuno scambio vuol dire che la lista è in ordine.

    Usi la variabile flag per indicare se vi sono stati scambi (flag == 0 nessuno scambio). Poi continui a scorrere la lista fino a che non c' è stato nessuno scambio. In pratica sono due cicli uno dentro l' altro, il ciclo più esterno termina quando il ciclo più interno non fà scambi.

    Se non sono stato chiaro lo ripeto.
  • Re: Aiuto, programma per l'esame...

    In pratica il primo ciclo comincia con "while flag==0" poi parte dal primo nodo e continua finchè non trova elementi da scambiare e li scambia. e lo fa tante volte finchè tutta la lista non è in ordine. giusto?
  • Re: Aiuto, programma per l'esame...

    Si giusto, (a parte che il ciclo esterno è while(flag == 1)), comunque è un dettaglio, avresti potuto scrivere while(flag != 0), oppure meglio ancora invece di 'flag' usare una variabile chiamata 'ciSonoStatiScambi'. Comunque hai capito giusto.
  • Re: Aiuto, programma per l'esame...

    GRAZIE GRAZIE GRAZIE GRAZIE GRAZIE =)
  • Re: Aiuto, programma per l'esame...

  • Re: Aiuto, programma per l'esame...

    Vins3Xtreme ha scritto:


    La lista non viene ordinata a causa della definizione della funzione di ordinamento:
    
    void Ordina(L l); //E' come se scrivessi 'void Ordina(struct Nodo *l);
    
    In C le variabili alle funzoni vengono passate solo per 'valore' (non abbiamo come il C++ situazioni come 'void Ordina(L &l)' ). infatti quando si passa ad una generica funzione un puntatore, viene 'istanziato' ex novo un puntatore temporaneo con il 'valore' di quello passato alla funzione stessa. Per cui, nel caso il valore del puntatore (e non il valore del dato puntato, occhio eh) viene modificato nella funzione, lo stesso non accade al puntatore usato come parametro di input, dato che in pratica sono due variabili distinte e separate. un esempio:
    Ciao Vins3Xtreme,
    il ragionamneto non fà una grinza ed è stato la prima cosa che ho pensato pure io. Pero se guardi bene l' algoritmo di sort non scambia i puntatori ma scambia in testo contenuto nei nodi. E quindi funziona.
    Lo scambio dei puntatori sarebbe indubbiamente più efficiente, ma trattandosi di un esercizio scolastico direi che può andare bene cosi. (a meno che tittadomi non punti a voti altissimi nel qual caso riapriamo il discorso).
  • Re: Aiuto, programma per l'esame...

    Punto a bei voti si ma non ho il tempo di prepararmi bene...purtroppo... ma kmq sono negata con il c xD cioè capisco anche come si fanno le cose ma non so scriverle xD vabbè l'importante è che lo passo.. anche con 20 *_*
Devi accedere o registrarti per scrivere nel forum
22 risposte