PDA

View Full Version : Determinare valori Min, Max e medio


Carmen
01-06-2005, 22:32
Ciao;

E possibile determinare avendo tre variabili quale di essi abbia il valore Min, Max e medio.

Es.

Var1= 0,88
Var2= 0,89
Var3= 0,96


Ciao

71104
01-06-2005, 23:05
:mbe: scusa, eh:

double Min, Max, Med;
if (Val1 < Val2) {
Min = Val1;
if (Val2 < Val3) {
Med = Val2;
Max = Val3;
}
}
else if (Val2 < Val3) {
Min = Val2;
if (Val1 < Val3) {
Med = Val1;
Max = Val3;
}
}
else {
Min = Val3;
if (Val1 < Val2) {
Med = Val1;
Max = Val2;
}
}

71104
01-06-2005, 23:07
no, un momento, c'è un errore :D
aspetta che lo rivedo... ^^'

ghiotto86
01-06-2005, 23:10
Ciao;

E possibile determinare avendo tre variabili quale di essi abbia il valore Min, Max e medio.

Es.

Var1= 0,88
Var2= 0,89
Var3= 0,96


Ciao

ciao.
scusami conosci gli array cosa sono??

71104
01-06-2005, 23:13
eccolo:

double Min, Max, Med;
if (Val1 < Val2) {
if (Val1 < Val3) {
Min = Val1;
if (Val2 < Val3) {
Med = Val2;
Max = Val3;
}
else {
Med = Val3;
Max = Val2;
}
}
else {
Min = Val3;
Med = Val1;
Max = Val2;
}
}
else {
if (Val2 < Val3) {
Min = Val2;
if (Val1 < Val3) {
Med = Val1;
Max = Val3;
}
else {
Med = Val3;
Max = Val1;
}
}
else {
Min = Val3;
Med = Val2;
Max = Val1;
}
}

Carmen
01-06-2005, 23:21
Ciao;

Forse o dimenticato di mensionare il linguaggio che utilizzo che è il VB6.

Le parentesi graffe mi fanno pensare che il codice che mi ai postato possa essere se non erro o per java, c


Te ne sarei grata se potresti postarmelo per VB6


Ciao e Grazie

Massi91
02-06-2005, 09:41
Public Sub Calcola()
' Questa parte del codice serve solo per renderlo più personalizzabile e adatto a ogni caso, niente di più
Dim Num_Val As Long
Num_Val = 3
' Dichiarazione delle variabili e ridimensionamento dell'array (var)
Dim Var() As Double
ReDim Var(Num_Val - 1)
Dim Max, Min, Med As Double
' A Min assegnamo un valore molto grande, o poi non verrà eseguito correttamente il codice
' è importante sapere che min dovrebbe essere più grande del numero massimo,
' ma questo comporta un'altro ciclo for
' quindi presuppondendo che il numero massimo non dovrebbe essere più di 999.999,
' assegnamo a min 999.999
Min = 999999
' Assegnazione
For h = 0 To Num_Val - 1
Var(h) = InputBox("Valore " & h)
Next h
For i = 0 To Num_Val - 1
' se il valore massimo è minore di Var(i), allora assegna il valore massimo come var(i)
If Max < Var(i) Then
Max = Var(i)
End If
'se il valore minimo è maggiore di Var(i), allora assegna il valore minimo come var(i)
If Min > Var(i) Then
Min = Var(i)
End If
' Addiziona tutto, per formare la media, in seguito
Med = Med + Var(i)
Next i
' Forma la media, quindi divide tutto per il numero del valori inseriti
Med = Med / Num_Val + 1
' Stampa a video il valore massimo, minimo e medio
MsgBox Min
MsgBox Max
MsgBox Med
End Sub

71104
02-06-2005, 14:30
ciao.
scusami conosci gli array cosa sono??
ma lei magari non ha un array, ha i 3 valori distinti; si fa prima a scrivere qualche if come ho fatto io che a mettere i valori nell'array e ordinarlo.
cmq Carmen, il tuo problema non è difficile, basta solo ragionarci un attimino. portare in VB6 il codice C che ho scritto è semplicissimo, si fa anche ad intuito; basta sapere che se in Cscrivi:
if (...) {
.
.
.
}
else {
.
.
.
}
è come scrivere:
If ... Then
.
.
.
Else
.
.
.
End If

Carmen
02-06-2005, 15:11
Cia a tutti;

La cosa purtroppo a me sembra complessa più che mai.

Il codice postato da "Massi91" potrebbe andare bene, dico potrebbe perche non funziona in tutti i casi che si possono verificare.

All'ora io o tre query le quali tutte e tre possono ritornare dati, oppure non possono ritornare nessuno dei tre, oppure ancora solo una.

Faccio un esempio pratico:

La prima query non contiene dati, la seconda nemmeno e la terza si, Minimo come valore mi ritorna 0 quando invece ci deve essere un valore.

Se invece la prima query e la terza query ritornano un risultato che mi dovrebbe tornare il valore minimo risulta vuoto.

Se invece la prima e la terza query contengono dati funziona.

Posto il codice:

' Questa parte del codice serve solo per renderlo più personalizzabile e adatto a ogni caso, niente di più
Dim Num_Val As Long
Num_Val = 10
' Dichiarazione delle variabili e ridimensionamento dell'array (var)
Dim Var() As Double
ReDim Var(Num_Val - 1)
Dim Max, Min, Med As Double
' A Min assegnamo un valore molto grande, o poi non verrà eseguito correttamente il codice
' è importante sapere che min dovrebbe essere più grande del numero massimo,
' ma questo comporta un'altro ciclo for
' quindi presuppondendo che il numero massimo non dovrebbe essere più di 999.999,
' assegnamo a min 999.999
Min = 999999

'prima query
Data2.RecordSource = "SELECT Min(campo) As PrMin, Max(campo) As PrMax, Avg(campo) As PrMed FROM Tabella1"
Data2.Refresh
If IsNull(Data2.Recordset("PrMin")) = False Then

'gestione prezzi min,max e med fatture
Var(1) = Data2.Recordset("PrMin")
Var(2) = Data2.Recordset("PrMax")
Var(3) = Data2.Recordset("PrMed")
End If

'seconda query
Data3.RecordSource = "SELECT Min(campo) As PrMin, Max(campo) As PrMax, Avg(campo) As PrMed FROM Tabella2"
Data3.Refresh
If IsNull(Data3.Recordset("PrMin")) = False Then

'gestione prezzi min,max e med bolle
Var(4) = Data3.Recordset("PrMin")
Var(5) = Data3.Recordset("PrMax")
Var(6) = Data3.Recordset("PrMed")
End If

'terza query
Data4.RecordSource = "SELECT Min(campo) As PrMin, Max(campo) As PrMax, Avg(campo) As PrMed FROM Tabella3"
Data4.Refresh
If IsNull(Data4.Recordset("PrMin")) = False Then

'gestione prezzi min,max e med vendita al dettaglio
Var(7) = Data4.Recordset("PrMin")
Var(8) = Data4.Recordset("PrMax")
Var(9) = Data4.Recordset("PrMed")
End If


For I = 0 To Num_Val - 1
' se il valore massimo è minore di Var(i), allora assegna il valore massimo come var(i)
If Max < Var(I) Then
Max = Var(I)
End If
'se il valore minimo è maggiore di Var(i), allora assegna il valore minimo come var(i)
If Min > Var(I) Then
Min = Var(I)
End If
' Addiziona tutto, per formare la media, in seguito
Med = Med + Var(I)
Next I
' Forma la media, quindi divide tutto per il numero del valori inseriti
Med = Med / Num_Val + 1
' Stampa a video il valore massimo, minimo e medio
MsgBox Min
MsgBox Max
MsgBox Med


Ciao

71104
02-06-2005, 17:32
ma scusa, sbaglio o alla fine hai usato un array? :mbe:
ordinalo, no? puoi usare l'insertion sort o il quick sort.

Carmen
02-06-2005, 18:11
OK! vi proverò sperando di riuscirci....

Ciao

leadergl
03-06-2005, 00:40
ciao, io non uso il C perchè potrei scrivere male la sintassi...però questa è la prima cosa che mi è venuta in mente, a funzionare funziona, forse non è il massimo dell'ottimizzazione :D

Le tue variabili sono Var1, Var2 e Var3 e da quelle abbiamo ricavato il Minimo, Medio e Massimo...

Min=Var1

if Var2 < Min then
Max = Min
Min = Var2
else
Max = Var2
end if

if Var3 < Max then
if Var3 > Min then
Med = Var3
else
Med = Min
Min = Var3
end if
else
Med = Max
Max = Var3
end if

Ziosilvio
03-06-2005, 14:23
Per determinare minimo, massimo, e medio di tre valori, basta usare un algoritmo di ordinamento semplice (anche insertion sort va bene), che, essendo tu una programmatrice, saprai sicuramente implementare in VB6.

Il problema vero, se ho capito bene, è che i tre valori sono ottenuti mediante interrogazioni a un database, che possono anche non dare risposta.
Allora bisogna anzitutto capire come si fa ad accorgersi che una risposta è stata data. Questo dipende dal database: cerca sul manuale.

Carmen
04-06-2005, 12:17
Grazie 1000 a tutti.


Ciao!!!!!!!!!!