Algoritmo ordnamento per selezione
Salve. Secondo voi, questo algoritmo di ordinaento per selezione è scritto bene (uso il Pascal Like per scriverlo su foglio - o almeno così mi pare che il prof. lo abbia chiamato
)

begin ord_sel var : A[10] : array of real var : t,max : real var : i,j,n,m,p : integer read n for i=1 to n do read A[i] endfor for i=1 to n-1 do m:=n-i+1 p:=1 max:=A[1] for j=2 to m if (A[j]>max) then p:=j max:=A[j] endif endfor t:=A[m] A[m]:=A[p] A[p]:=t endfor for i=1 to n do print A[i] endfor end ord_sel
Risposte
L'istruzione: max:=A[1] per me è incomprensibile..
E' un banale assegnamento di un elemento dell'array alla variabile, Umby.
Comunque il meccanismo sembra andar bene, controlla semmai la presenza di eventuali ridondanze.
E commenta il codice, specie per chi come me è abituato a ordinare il vettore dall'inizio alla fine
.
Comunque il meccanismo sembra andar bene, controlla semmai la presenza di eventuali ridondanze.
E commenta il codice, specie per chi come me è abituato a ordinare il vettore dall'inizio alla fine

lore, il mio incomprensibile si riferiva a dove è stata posta questa istruzione, non alla istruzione in se.

"Umby":
lore, il mio incomprensibile si riferiva a dove è stata posta questa istruzione, non alla istruzione in se.
E allora potevi dirlo chiaramente.
Qui i bit per gli utenti sono gratis e la cortesia non è mai abbastanza, come mostra questo mio post.
Credo che la lettura dell'array e della sua dimensione e la visualizzazione non facciano parte dell'algoritmo e non siano da inserire. Il lettore è in questo modo costretto a cercare all'interno dello pseudocodice la parte interessante che invece dovrebbe essere subito evidente. L'algoritmo mi sembra comunque corretto e abbastanza comprensibile.
@ apatriarca
Non ti ho capito: se all'esecutore dell'algoritmo non dico quanto è lungo l'array e quali elementi esso contine, come fa l'esecutore a lavorarci sopra?
@Umby
Dove dovrebbe stare l'istruzione max:=A[1]?
Non ti ho capito: se all'esecutore dell'algoritmo non dico quanto è lungo l'array e quali elementi esso contine, come fa l'esecutore a lavorarci sopra?
@Umby
Dove dovrebbe stare l'istruzione max:=A[1]?
Un algoritmo di ordinamento si implementa normalmente come una funzione in cui l’array e la sua dimensione vengono passati come argomenti. Non ha importanza al fine del tuo algoritmo in che modo vengono letti questi dati o in che modo verranno usati (per esempio visualizzandoli). Per farti un esempio, nel paper “Real-Time KD-Tree Construction on Graphics Hardware” di Kun Zhou, Qiming Hou, Rui Wang e Baining Guo pubblicato al Siggraph Asia 2008 (il primo che mi è capitato sotto mano) gli algoritmi vengono presentati come funzioni (o procedure se non restituiscono valori) nel modo seguente:
procedure BUILDTREE(triangles:list)
begin
// ... codice
end
Nel tuo caso n e A sono i parametri della tua funzione.
procedure BUILDTREE(triangles:list)
begin
// ... codice
end
Nel tuo caso n e A sono i parametri della tua funzione.
"apatriarca":
Un algoritmo di ordinamento si implementa normalmente come una funzione in cui l’array e la sua dimensione vengono passati come argomenti. Non ha importanza al fine del tuo algoritmo in che modo vengono letti questi dati o in che modo verranno usati (per esempio visualizzandoli). Per farti un esempio, nel paper “Real-Time KD-Tree Construction on Graphics Hardware” di Kun Zhou, Qiming Hou, Rui Wang e Baining Guo pubblicato al Siggraph Asia 2008 (il primo che mi è capitato sotto mano) gli algoritmi vengono presentati come funzioni (o procedure se non restituiscono valori) nel modo seguente:
procedure BUILDTREE(triangles:list)
begin
// ... codice
end
Nel tuo caso n e A sono i parametri della tua funzione.
Amico mio, ti ringrazio per le informazioni molto complete che mi hai fornito, ma per me sono arabo

Terrò a mente questo tuo post per rileggerlo in tempi più maturi.
Grazie.
In realtà non ti ho detto niente di così complicato. Volevo solo farti notare che solo una parte del tuo pseudocodice descrive l'algoritmo di ordinamento, il resto non è necessario e potrebbe essere omesso.
C’è inoltre un errore che ho notato solo adesso. A ha dimensione 10, ma poi leggi tranquillamente n valori senza verificare se questo numero è inferiore al massimo.
C’è inoltre un errore che ho notato solo adesso. A ha dimensione 10, ma poi leggi tranquillamente n valori senza verificare se questo numero è inferiore al massimo.
"WiZaRd":
@Umby
Dove dovrebbe stare l'istruzione max:=A[1]?
è sempre un po difficile, entrare nella logica di chi ha scritto un programma, seppur semplice.
Rileggendo ho capito di cosa si tratta.
Praticamente dopo aver trovato il numero piu alto, lo posizioni in fondo alla stringa, ripartendo dal primo.
