valore di mezzo

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
jumoonp
GMI VIP
Messaggi: 3292
Iscritto il: 13/01/2008, 20:59
Contatta:

valore di mezzo

Messaggio 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?
Spoiler
Gabriele Dell'Otto e Lee bermejo

Immagine

Avatar utente
SP Games
Membro
Messaggi: 241
Iscritto il: 27/06/2014, 11:21
Specialità: Programmer
Uso: GM:Studio 1.4 Pro
Contatta:

Re: valore di mezzo

Messaggio 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

Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: valore di mezzo

Messaggio 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

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#



Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: valore di mezzo

Messaggio 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.
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: valore di mezzo

Messaggio da civic71 »

Bello l'Aliante Slittante :D

Avatar utente
pacmino
GMI Guru
Messaggi: 2569
Iscritto il: 03/06/2009, 16:38
Specialità: Scazzato cronico
Uso: GM:Studio 2
Località: Seconda stella a destra questo è il cammino e poi dritto, fino al mattino...
Contatta:

Re: valore di mezzo

Messaggio 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
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: valore di mezzo

Messaggio da BaronVsCorsar »

ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
Alv
Membro
Messaggi: 133
Iscritto il: 14/11/2014, 22:33
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Sicilia
Contatta:

Re: valore di mezzo

Messaggio 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;
Ultima modifica di Alv il 29/11/2020, 23:37, modificato 1 volta in totale.

Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: valore di mezzo

Messaggio da Barnack »

È esattamente quello che intendevo con "fare tutta la casistica"

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#



Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: valore di mezzo

Messaggio 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

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 39 ospiti