Pagina 1 di 1

valore di mezzo

Inviato: 27/10/2016, 15:14
da jumoonp
Salve ragazzi,
mi serve un piccolo aiuto. Ho tre valori in altrettante variabili. Con la funzione "MIN" trovo il valore più piccolo, con "MAX" quello più grande, ma il valore di mezzo non so quale funzione devo usare. Ho provato "MEDIAN", "MEAN" , ma mi danno dei valori che non corrispondono . Non devo cercare un valore medio, ma proprio quello reale che sta in mezzo tra il valore minimo e il massimo. Come faccio?

Re: valore di mezzo

Inviato: 27/10/2016, 16:35
da SP Games
Per una quantità dispari di valori devi solo inserirli in un array, ordinarlo e prendere il valore che sta nella posizione di mezzo, che nel caso degli array standard di GM (il cui indice parte da 0) sarà [MAX_INDEX] / 2.
Es. 9 - 27 - 12 - 8 - 14 -> 8 - 9 - 12 - 14 - 27 è l'array ordinato, il max index è 4, il tuo valore sta alla posizione 2 ed è pari a 12.

P.S. se hai solo 3 valori puoi anche usare semplicemente MIN e MAX per escludere i due estremi e il numero che ti rimane è quello che ti interessa.
Puoi fare la stessa cosa anche con piu numeri volendo, se ad esempio ne hai 5 fai 2 volte MIN e 2 volte MAX per escludere di nuovo gli estremi e quello che resta è sempre il tuo numero.
E ora che ci penso ci potrebbe uscire pure una bella funzione ricorsiva :D

Re: valore di mezzo

Inviato: 27/10/2016, 17:16
da Barnack
3 variabili? beh ci sono tanti modi. puoi metterli in una lista, assortirla e cercare il secondo elemento:

Codice: Seleziona tutto

///trova_valore_medio(a, b, c)
var tmp = ds_list_create()
ds_list_add(tmp, a, b, c)
ds_list_sort(tmp)
var ret = ds_list_find_value(tmp, 1)
ds_list_destroy(tmp)
return(ret)
O più semplicemente in un array

Codice: Seleziona tutto

///trova_valore_medio(a, b, c)
var tmp;
tmp[0]=a tmp[1]=b tmp[2]=c
array_sort(tmp)
var ret = tmp[1]
return(ret)
Così ti eserciti un po' a scriverti un algoritmo di sorting ;)
O fai tutta la casistica
Oppure fai come ha detto jumoonp che di fatto è come farsi tutta la casistica

Re: valore di mezzo

Inviato: 27/10/2016, 23:25
da BaronVsCorsar
in gm 8.1 è proprio median()...

median(val1,val2,val3,...) Returns the median of the values, that is, the middle value. (When the number of arguments is even, the smaller of the two middle values is returned.) The function can have up to 16 arguments. They must all be real values.
in matematica "il valore in mezzo" si definisce mediana.

Re: valore di mezzo

Inviato: 28/10/2016, 14:09
da civic71
Bello l'Aliante Slittante :D

Re: valore di mezzo

Inviato: 28/10/2016, 15:20
da pacmino
civic71 ha scritto:Bello l'Aliante Slittante :D
hover pilder https://www.youtube.com/watch?v=ZHdFLLfYLt4

chissà se a grandezza naturale riuscirebbe a portare un uomo

Re: valore di mezzo

Inviato: 28/10/2016, 21:10
da BaronVsCorsar

Re: valore di mezzo

Inviato: 31/10/2016, 14:22
da Alv
Per la mediana fra 3 valori, penso possa andar bene anche una semplice (e performante) funzione:

Codice: Seleziona tutto

if (val1<=val2) {
	if (val2<=val3)
		return val2;
	return val3;
}
if (val1<=val3)
	return val1;
return val3;

Re: valore di mezzo

Inviato: 31/10/2016, 17:03
da Barnack
È esattamente quello che intendevo con "fare tutta la casistica"

Re: valore di mezzo

Inviato: 01/11/2016, 16:23
da Tizzio
Alv ha scritto:Per la mediana fra 3 valori penso può andar bene anche una semplice (e performante) funzione:

Codice: Seleziona tutto

if (val1<=val2) {
	if (val2<=val3)
		return val2;
	return val3;
}
if (val1<=val3)
	return val1;
return val3;
ovvero median(...); come ha già detto baron