Ordinamento di array: per selezione Definizione del problema : Ordinare in senso crescente gli elementi di un array monodimensionale e visualizzare lo array risultante. Definizione della specifica del programma: I: l’array monodimensionale; il valore di ciascun elemento dello array Pi: nessuna U: l’array monodimensionale con gli elementi ordinati in senso crescente Pu: nessuna Descrizione del metodo di elaborazione :Si userà l’algoritmo di ordinamento per selezione (detto anche per minimi successivi). Detto T lo array mono-dimensionale di cardinalità n, per ottenere l’ordinamento desiderato deve verificarsi che sia T[i] ? T[i+1] ? i=1..n. Si trova, allora, il valore minimo T[p] dell’intero array e si scambia il valore di T[p] con quello di T[1]; poi, si trova il nuovo minimo T[p] tra tutti gli elementi T[2] e T[n] e si scambia il valore diT[p] con quello di T[2]; si continua in tal modo con tutti gli altri elementi dell’array. Alla fine visualizzare sono visualizzati gli elementi dell’array risultante. 1 Ordinamento di array: per selezione 9 5 8 2 4 2 5 8 9 4 9 5 8 2 4 2 4 5 9 8 2 4 5 9 8 2 5 8 9 4 2 4 8 9 5 2 4 8 9 5 2 4 5 8 9 2 1 Ordinamento di array: per selezione Tabella delle variabili di ingresso Nome variabile VET Descrizione Array da ordinare in senso crescente Tipo INT Tabella delle variabili di uscita Nome variabile VET Descrizione Array da ordinato Tipo INT 3 Program Ordina_array; const cardinalita:=50; INT VET[cardinalita], I, R,MIN, POS; begin // Lettura valori elementi dell’array Leggi_array(VET, cardinalita, R); minimi_successivi(VET, R); Stampa_array(VET, R); end. Procedure minimi_successivi (inout INT T[ ], in RP) INT K, A, PS; begin for K:=1 to (RP-1) do begin trova_minimo(T, K, RP, PS); A:=T[K]; T[K]=T[PS];T[PS]=A; end; endfor; end; Ordinamento di array: per selezione Procedure trova_minimo (inout INT V[]; in INT Inz, Fn; out INT POS); // Cerca il valore minimo nello array INT I; MIN := VET[Inz]; POS:=Inz; for I:=(Inz+1) to Fn do begin if VET[I]<MIN then begin MIN:=VET[I]; POS:=I; end endif end; endfor; end; 4 2 Ricerca di un elemento in un array ordinato Definizione del problema : Si vuole verificare se in un array ordinato esiste un elemento con un dato valore e se esso esiste si vuole conoscere la sua posizione. Definizione della specifica del programma: I: lo array monodimensionale ordinato; il valore dell’elemento che si vuole cercare Pi: nessuna U: la posizione dell’elemento con valore pari a quello cercato se esso esiste nello array Pu: nessuna Descrizione del metodo di elaborazione : Viene letto il valore da cercare; viene considerato l’elemento dello array (ordinato supponiamo in senso crescente) in posizione centrale (rispetto al riempimento); se il dato da cercare è ugale a quello centrale la ricerca è terminata altrimenti: • se il dato da cercare è minore di quello centrale viene applicato lo stesso algoritmo alla prima parte dello array se questa ha almeno un elemento, altrimenti • se il dato da cercare è maggiore di quello centrale viene applicato lo stesso algoritmo alla seconda parte dello array, se questa ha almeno un elemento Si continua fin quando un elemento centrale è pari a quello cercato o nessuna parte contirne più elementi 5 Riemp = 9 Card = 12 3 10 28 31 33 40 57 93 98 =? Inf = 1 Sup = 9 93 Posizione elemento centrale: P=(Sup+Inf)/2=5 33 10 10 28 28 31 31 33 33 40 57 93 98 =? Inf = 6 Sup = 9 93 Posizione elemento centrale: P=(Sup+Inf)/2=7 33 10 10 28 28 31 31 33 33 40 40 57 57 93 98 Inf = 8 =? Sup = 9 Posizione elemento centrale: P=(Sup+Inf)/2=8 93 6 3