in fortran, ma il discorso vale penso anche per altri linguaggi.
abbiamo un vettore contenente N valori numerici (reali o interi che siano
non penso faccia differenza).
Si vuole riordinare il vettore in modo che i valori risultino disposti in
ordine decrescente quindi dal più grande al più piccolo.
Ho scritto il codice, e alla fine sono riuscito ad ottenere un risultato
che mi pare giusto, almeno vedendo il grafico (perchè ho un vettore piuttosto
ingombrante con migliaia di elementi...).
Vi metto di seguito il pezzo del codice riguardante l'ordinamento del vettore
con l'algoritmo "selection sort":
Codice: Seleziona tutto
! Ordinamento array in ordine decrescente.
!
write(*,*)
write(*,*) 'Ordinamento array'
write(*,*) n, n-1
write(*,*)
open(unit=3,file='contatori',status='replace')
do i=1,n-1
max=i
do j=i+1,n
if (q(j)>q(max)) then
max=j
endif
end do
if (max/=i) then
temp=q(i)
q(i)=q(max)
q(max)=temp
endif
end do
write(3,*) i,j
close(3)
gli ultimi valori che i due contatori dovrebbero assumere sono rispettivamente:
i=n-1
j=n
invece nel file di controllo che ho chiamato "contatori", dove scrivo alla fine i valori di
"i" e "j", ecco che leggo:
n n+1
Anche se alla fine il risultato dovrebbe essere giusto perchè il vettore contiene ancora "n"
elementi, non mi torna questo punto.
Visto che non programmo in fortran da anni e mi sono dovuto rivedere un bel po' di roba,
potrebbe semplicemente essere normale che uscendo dai cicli "do", i contatori vengano incrementati
di un'unità....
Non mi ricordavo di questo comportamento, ma potrebbe anche essere.
Vorrei semplicemente chiedervi una conferma se avete voglia di spiegarmelo in due righe di numero.