| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  14-07-2009, 11:57 | #1 | 
| Senior Member Iscritto dal: May 2000 
					Messaggi: 1135
				 | 
				
				[C#] Soluzione logica problema
			 
		Salve, vi spiego la situazione: io inserisco record in un db in cui un campo "valore" inserisco appunto un valore monetario; io vorrei che quando la somma del campo valore supera i valori di X (o multipli di esso) debba fare una operazione ma solamente la 1° volta che supera la soglia Il mio problema appunto è quella di creare un algoritmo che risolva il problema. X= 90 Valore 10 --> niente 40 --> niente 30 --> niente 15 --> sum 95 superato X, prima volta, eseguo operazione 20 --> sum 105 superato X, seconda volta, niente 60 --> sum 165 superato X, seconda volta, niente 25 --> sum 190 superato X*2, prima volta, eseguo operazione 20 --> sum 210 superato X*2, seconda volta, niente ps: ovviamente posso registrare il fatto di aver superato la soglia per la prima volta   
				__________________ Ultima modifica di Napalm : 14-07-2009 alle 12:03. | 
|   |   | 
|  14-07-2009, 12:32 | #2 | 
| Senior Member Iscritto dal: Oct 2007 Città: Padova 
					Messaggi: 4131
				 | 
		te la cavi con un "counter" inizializzato a 1 e che viene incrementato di 1 ogni volta che superi un multiplo del tuo numero X. A questo punto basta che ogni volta che confronti il risultato della somma del campo attuale con le somme già accumulate, se il risultato è uguale o maggiore a "X*counter" (counter vale 1 all'inizio) fai quello che devi fare e incrementi counter di 1. 
				__________________ As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) | 
|   |   | 
|  14-07-2009, 12:43 | #3 | 
| Senior Member Iscritto dal: Apr 2005 Città: Resana - TV 
					Messaggi: 960
				 | 
		Esempio in T-SQL, assolutamente non controllato, assolutamente non la migliore soluzione Codice: CREATE PROCEDURE dbo.InserisciEdEseguiSeSommaMaggioreUgualeASoglia
(
    @nuovoValore FLOAT
   ,@soglia FLOAT
)
AS
   DECLARE @sommaValorePreInsert FLOAT
   SELECT @sommaValorePreInsert = SUM(Tabella.Valore)
   FROM Tabella
   WHERE ...
   INSERT INTO Tabella
   VALUES (@nuovoValore)
   IF @sommaValorePreInsert < @soglia BEGIN
      DECLARE @sommaValorePostInsert FLOAT
      SELECT @sommaValorePostInsert = SUM(Tabella.Valore)
      FROM Tabella
      WHERE ...
      IF @sommaValorePostInsert >= @soglia BEGIN
         FAI QUELLO CHE DEVI
      END
   END
END | 
|   |   | 
|  14-07-2009, 13:56 | #4 | |
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 3210
				 | Quote: 
 10 --> niente 40 --> niente 30 --> niente 15 --> sum 95 superato X, prima volta, eseguo operazione 20 --> sum 115 superato X, seconda volta, niente 60 --> sum 175 superato X, seconda volta, niente 25 --> sum 200 superato X*2, prima volta, eseguo operazione 20 --> sum 220 superato X*2, seconda volta, niente Non so se cerchi una soluzione più Sql o più C#, comunque puoi risolvere semplicemente usando come incremento il valore stesso della "soglia" 90, senza contatori o variabili boolean accessorie : Codice:         private static int sum = 0;
        //oppure calcolo sum facendo la Select Sum dal DB...
        private static int incrSogliaSum = 90;
        //calcolo della prossima soglia basata su sum attuale
        private int sogliaSum = sum / incrSogliaSum * incrSogliaSum;Codice:             if (sogliaSum == 0) { sogliaSum = incrSogliaSum; }
            MessageBox.Show(sogliaSum.ToString(),"Soglia =");
            //inserimento nuovo record
            int nuovoValore = Convert.ToInt32(textBox1.Text) ;
            //insert ...
            //...
            sum += nuovoValore;
            if ( sum >= sogliaSum ) 
            {
                //esegui operazione
                MessageBox.Show(sum.ToString(),"Eseguita Operazione su sum =");
                //...
                sogliaSum += incrSogliaSum;                 
            }La prima MsgBox informa sul "cambio di soglia", mentre la seconda è una simulazione del tuo "esegui operazione"... Funziona con un sum=0 ( DB vuoto ), ma anche con sum casuale > 0, nel qual caso sum andrà calcolato ad ogni apertura dell'applicazione, mentre la prossima "sogliaSum" viene calcolata in auto, basandosi sul sum attuale. Prova...   | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 20:41.









 
		 
		 
		 
		










 
  
 



 
                        
                        










