Inversione di elementi.

di il
13 risposte

Inversione di elementi.

Nel seguente codice:
 
 void shellsort(int v[ ], int n) 
 { 
 int gap, i, j, temp; 
 
 for (gap=n/2; gap>0; gap /= 2) 
     for(i=gap; i<n; i++) 
         for(j=i-gap; j>0 && v[ j ]>v[ j+gap]; j-=gap) { 
             temp = v[ j ]; 
             v[ j ] = v[ j + gap]; 
             v[ j+gap] = temp; 
          } 
    }         
 


Ma che senso ha invertire gli elementi?
Sarà che non sto riuscendo a tradurre in italiano il codice e allora mi vengono questi dubbi?!

13 Risposte

  • Re: Inversione di elementi.

    Che vuol dire "che senso ha"?

    Altrimenti come li ordini?
  • Re: Inversione di elementi.

    Allora...., vediamo se ho compreso il codice.....

    Int gap è una variabile intera e se pensiamo che questo array è composto da da 0 a 10, allora con il primo ciclo for si parte dalla metà dell'array, cioè il gap= 10/2=5 e sempre lo stesso ciclo impone che sia 5>0 (gap>0), non comprenso il significato di (gap/=2)???
    Ma nel primo ciclo for si comincia a scambiare dalla metà dell'array fino allo scambiare tutti gli elementi, giusto?

    Il secondo ciclo forgenera un incremento, cioè se i=gap (si assegna la casella 5), allora se 5<n, si ha un incremento del ciclo con i++

    Nel terzo ciclo for si ha che nella prima esecuzione, j= i - gap = 0
    Perciò gap=5 ed j=0(si ha un gap di 5) se l'elemento dell'indice 0 è maggiore dell'elemento in 5 di v, tradotto in
    v[ j ]>v[ j+gap]......
    e siccome il gap è di 5, l'incremento sarà sempre di 5 volte e il ciclo sarà sempre verificato se si avranno valori negativi, cioè 0-5=-5, (j - = gap) e siccome j non sarà maggiore o uguale a zero, verrà verificato una sola volta e quindi non deve accadere due volte, e quindi si ha lo scambio.


    Cosa ne dite di quello che ho tradotto nella lingua Italiana?
    Dite che ho decifrato in modo corretto il testo C++ ?

    P.S. Ma perchè poi si dovrebbe avere questo scambio? Cioè, nella vita di tutti i giorni, sui sistemi informatici, dove si potrà avere impiego di queste funzioni?
  • Re: Inversione di elementi.

    Hai compreso cosa sta facendo quella funzione (non nelle singole istruzioni, ma lo scopo della funzione)?

    Sai cosa sia un sort (ordinamento)?

    P.S. gap/=2 è come scrivere gap = gap/2 quindi il valore di gap varia, non è sempre 5. Ma non dovresti chiedere cosa vuol dire /= perché fa parte delle nozioni di base del linguaggio, che vanno studiate in teoria PRIMA di scrivere programmi che la usano

    P.P.S. Se hai un elenco di nomi e cognomi con le età e le fornisci ad un computer da cui le vuoi stampate dal più giovane al più vecchio, cosa fai? Che tipo di programma scrivi? Sei sicuro che nella realtà non serva?
  • Re: Inversione di elementi.

    oregon ha scritto:


    Ma non dovresti chiedere cosa vuol dire /= perché fa parte delle nozioni di base del linguaggio, che vanno studiate in teoria PRIMA di scrivere programmi che la usano
    Comprendo il significato, esempio:
     x/=y 

    equivale a dire
    x= x/y 

    P.P.S. Se hai un elenco di nomi e cognomi con le età e le fornisci ad un computer da cui le vuoi stampate dal più giovane al più vecchio, cosa fai? Che tipo di programma scrivi? Sei sicuro che nella realtà non serva?


    Adesso comprendo il perchè del codice in generale...
  • Re: Inversione di elementi.

    MT09_full ha scritto:


    Comprendo il significato, esempio:
    Lo hai compreso ma non è il forum che te lo deve spiegare attraverso un codice che hai copiato e incollato.
    Stai ancora invertendo il metodo di studio e i problemi si vedono.
    Adesso comprendo il perchè del codice in generale...
    Beh ... non mi stancherò di ripeterlo. E' strano comprendere il perché si scrive un codice dopo averlo scritto.
    In pratica, così non potrai affrontare un compito scritto all'esame.

    Ripeto ancora ... si studia prima la teoria e poi si mette in pratica, c'è poco da fare ...
    Per lo shellsort puoi leggere da wikipedia le basi

    https://it.wikipedia.org/wiki/Shell_sor
  • Re: Inversione di elementi.

    Oregon, ti chiedo per favore di non dubitare del fatto che io stia studiando o non, sto minuziosamente studiando paragrafo per paragrafo, ma sto cercando di tradurre dei programmi per capire cosa fanno.

    Anche l'alfabeto lo si può sapere a memoria e quindi conferma il fatto che si conosce, ma se cominci a mettere lettere insieme a casaccio, non avrai mai un senso nel dire un qualcosa.

    Io adesso sto cercando di dare un senso a tutto quello che dicono i codici che vengono proposti dal testo e se c'è un ordine io cerco di seguirlo.

    Qual'è la morale?

    Che se prendo un simbolo singolarmente, potrò sapere cosa significa, ma se lo metto insieme ad altri simboli, avrà un effetto diverso!

    Cortesemente, non dirmi che sto facendo male, perchè è un tuo parere e io lo rispetto, ma per me è l'unico modo di impastare le mani in questi linguaggi e studiando e discutendo si cresce!

    Grazie
  • Re: Inversione di elementi.

    oregon ha scritto:



    Per lo shellsort puoi leggere da wikipedia le basi

    https://it.wikipedia.org/wiki/Shell_sor


    Sono precisamente al paragrafo 3.5 della pagina 58 e li spiega chi è Shell.......
  • Re: Inversione di elementi.

    oregon ha scritto:




    Lo hai compreso ma non è il forum che te lo deve spiegare attraverso un codice che hai copiato e incollato.
    Stai ancora invertendo il metodo di studio e i problemi si vedono.


    Allora vieni a chiedermi come fa a volare un elicottero, ma sappi che se lo fai venendo nel contesto in cui lavoro io, ti dirò che stai invertendo il metodo, allora tu non potrai lavorare nel contesto in cui lavoro , prima di venire qui da me, vai a studiare come fa a volare un elicottero!

    Ecco il tuo ragionamento e a mio parere è sbagliato!
  • Re: Inversione di elementi.

    Quello che hai scritto non ha senso e neanche mi soffermo. Sappi che per la programmazione è così.

    Guarda che io non faccio polemica o sono contro, semplicemente vorrei farti capire qual è il modo migliore di imparare e superare l'esame per te, ma se non ti interessa ...
  • Re: Inversione di elementi.

    @MT09_full curiosità mia personale: perché stai studiando programmazione? Per hobby, per lavoro o per superare un esame universitario (e in tal caso quale esame in quale facoltà)?
  • Re: Inversione di elementi.

    oregon ha scritto:




    Guarda che io non faccio polemica o sono contro, semplicemente vorrei farti capire qual è il modo migliore di imparare e superare l'esame per te, ma se non ti interessa ...


    Allora non ti sei accorto che sto ascoltando i tuoi consigli!

    TI ringrazio e non lo dico per fare ironia, ma se il sign.Brian W ecc., hanno fatto un testo che ha un certo ordine e io lo sto seguendo, e poi ci sei tu che mi dici che sto sbagliando, allora perchè non contatti il sign. Brian e gli dici di mettere un ordine differente al testo?

    P.S. Rispondo a Nippolo e magari anche per altri curiosi..., non rispondo a domande strettamente personali.
  • Re: Inversione di elementi.

    K&R hanno inventato il linguaggio. Capito? Quindi hanno scritto un manuale che andava bene per altri ricercatori/programmatori, sicuramente non va bene dal punto di vista didattico, per chi impara.
    E infatti non è una scelta che mi piace, non la condivido per una facoltà di informatica al primo approccio con il C.

    Va sicuramente letto "in seguito" da chi studia/lavora con tale linguaggio, ora come ora più per curiosità e per completare la propria cultura in quest'ambito ma, ripeto, non va bene dal punto di vista didattico, non è nato per quello.

    Semmai potresti provare con altri testi, più abbordabili ed organizzati diversamente che altre università adottano, come il Deitel & Deitel.
  • Re: Inversione di elementi.

    MT09_full ha scritto:


    P.S. Rispondo a Nippolo e magari anche per altri curiosi..., non rispondo a domande strettamente personali.
    Con tutto il rispetto, ma a me non frega nulla di venire a sapere delle tue "questioni personali", chiedevo soltanto per darti un consiglio quanto più pertinente possibile circa il modo in cui approcciarsi allo studio della programmazione...

    Per esempio se lo facessi per hobby mi limiterei ad imparare le basi della sintassi, per poi godermi il piacere della scoperta attraverso prove e tentativi fatti sporcandosi le mani davanti ad un compilatore, il tutto ovviamente prendendosi i propri tempi. Inoltre eviterei di autospoilerarmi i vari algoritmi, ma preferirei ragionare sui singoli problemi in modo autonomo, per poi confrontare le soluzioni ottenute con quelle "ufficiali" solo in un secondo momento, quando oramai l'averci sbattuto la testa renderà molto più semplice capire l'utilità di quell'algoritmo e di soppesarne limiti e potenzialità.
    Ovviamente se lo scopo è superare un esame, e magari si ha anche particolarmente fretta, la situazione cambia un po'... così come una cosa è un esame di fondamenti fatto a fisica, altro è un esame di fondamenti fatto ad ingegneria informatica...

    In ogni caso se ti poni in questi termini ti rispondo dicendoti che anche secondo me questo metodo di studio non ti porterà molto lontano, ma penso anche che a breve, quando l'entusiasmo iniziale passerà, te ne accorgerai da solo!
Devi accedere o registrarti per scrivere nel forum
13 risposte