Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [fortran] domanda concettuale

    codice:
    ...
    
    DO 10, I=1, DIM-1
              PRIMO=VETTORE (I)
              COST=I
              DO 20, J=I+1, DIM
               IF(VETTORE (J) .GT. PRIMO) THEN
                PRIMO= VETTORE (J)
                COST=J
               ENDIF
    20        CONTINUE
                    IF (COST .NE. I) THEN
                      TEMP=VETTORE (I)
                      VETTORE (I) = VETTORE (COST)
                      VETTORE (COST) = TEMP
                     ENDIF
    10        CONTINUE
    
            PRINT*, "IL VETTORE ORDINATO Š:"
            DO 30, I=1, DIM
             PRINT*, VETTORE (I)
    30      CONTINUE
            STOP
            END
    Come si sa, questo è un modo per effettuare l'ordinamento di un vettore (precisamente si tratta del cosiddetto "ordinamento per selezione", se non vado errato).

    Io cerco di capire cosa fa effettivamente la CPU in tale procedimento, sia pure senza entrare nel dettaglio (e questo rientra sempre nella mia difficoltà di capire BENE cosa faccia un ciclo, non nei casi più semplici, ma in quelli in cui ci sono più cicli indentati, etc. etc.).

    In questo caso, ad esempio (il mio livello è praticamente infimo, quindi non vi meravigliate del fatto che io faccia simili domande), io ho due cicli annidati.

    Io penso che succeda una cosa del genere: si prende il primo elemento del vettore, lo si confronta con TUTTI i successivi, dopodichè si passa al secondo, e si fa lo stesso, fino ovviamente all' (n-1) - esimo (nel mio caso al dim-1 esimo).
    Mi confermate che sia così?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    19
    ti do' un suggerimento : se non riesci a capire cosa fa un pgm, fatti uno schemino delle variabili, dei vettori, e quant'altro entri in gioco nell'algoritmo.
    imposta dei valori di prova alle variabili ed eseguilo passo-passo, vedrai che cosi' ti verra' piu' facile : questo e' quello che fa la CPU (ad alto livello) !!

    in questo caso il pgm fa un sort decrescente (dal piu' alto al piu' basso) dei valori contenuti nel vettore.
    il primo ciclo scorre tutti gli elementi dal primo all'N-1, e per ogguno di questi (I) il secondo loop lo confronta con tutti i sucessivi moemorizzando qual'e' il piu' grande e la sua posizione.
    alla fine del loop piu' interno se ho trovatop un elemento piu' grande lo scambio.
    il secondo loop parte da I+1 perche' diamo gia' per scontato che i primi I elementi sono gia' in ordine !
    se vuoi ordinare il vettore in ordine crescente devi, ovviamente, sostituiore il GT in LT sull'IF.

    quindi la tua ipotesi sul funzionamento e' corretta.

    bye

    ste

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 © 2024 vBulletin Solutions, Inc. All rights reserved.