Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-08-2007, 08:16   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[qualsiasi]problemino matematico

Ciao a tutti

Chiedo aiuto a voi per il seguente problema che riguarda la lettura dei contatori dell'acqua nei condomini:

1)Si legge il contatore generale, che per esempio segnerà 2385 scatti; In base al numero di utenze di questo condominio, c'è da fare la moltiplicazione per una costante (23) ed in base al risultato si applica una determinata tariffa. Per esempio:

Condominio A, numero utenze = 40

Devo fare: 40 * 23 = 920 e applicare la prima fascia di tariffazione, per esempio = 0.45 quindi: 920 * 0.45 = 414

poi, dovrei fare sempre 40 * 23 che fa sempre 920 e applicare la seconda tariffa: 920 * 0.75 = 690

A questo punto, io devo sempre tenere presente che devo arrivare al numero totale di scatti (2385) e quindi devo fare:

920 + 920 (1a e 2a tariffa) = 1840

2385 - 1840 = 545 e applicare una terza tariffa (o una quarta...)

Sperando di essere stato chiaro, come potrei automatizzare il tutto?

Grazie mille

RaouL.

P.S.: credo che il tutto si possa sintetizzare in questo modo:

quante volte il risultato della moltiplicazione del numero di utenze * 23 è contenuto nel numero di scatti del contatore generale;
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek

Ultima modifica di RaouL_BennetH : 13-08-2007 alle 08:30.
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 10:08   #2
mastoo
Member
 
Iscritto dal: Apr 2006
Città: V.E. (na)
Messaggi: 115
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
P.S.: credo che il tutto si possa sintetizzare in questo modo:

quante volte il risultato della moltiplicazione del numero di utenze * 23 è contenuto nel numero di scatti del contatore generale;
non ho capito bene il problema
ma dalla sintesi che hai fatto sembra che il tutto si riduce ad una divisione

n = numero di scatti /(numero di utenze * 23)
mastoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 10:21   #3
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da mastoo Guarda i messaggi
non ho capito bene il problema
ma dalla sintesi che hai fatto sembra che il tutto si riduce ad una divisione

n = numero di scatti /(numero di utenze * 23)
si, ma il problema che ho io è di applicare a questo numero delle tariffazioni.

Per esempio, ho una tabella con 13 tipi di tariffe:

Codice:
1) 0.45
2) 0.72
3) 1.18
4) 2.15

blabla
Ora, il contatore generale segna 2560 scatti;
le utenze del condominio sono 34;

il primo calcolo che faccio è:

Codice:
int numTariffeDaApplicare = contatore / (utenze * 23);
//che non mi darà il numero esatto perchè c'è il resto che calcolo così:

int resto = contatore % (utenze * 23);

//con i numeri che ho messo in esempio ho:

numTariffeDaApplicare = 3

//così divise:
primaTariffa = (utenze * 23) * 0.45
secondaTariffa = (utenze * 23) * 0.72
terzaTariffa = (utenze * 23) * 1.18

//rimane quella del resto che secondo l'operazione di prima è:
214 
//e su quest'ultima devo fare:
quartaTariffa = 214 * 2.15
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 10:45   #4
mastoo
Member
 
Iscritto dal: Apr 2006
Città: V.E. (na)
Messaggi: 115
ma il tuo problema è calcolare la tariffa sul resto, perche non sai qual applicare ?
mastoo è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:10   #5
naoto84
Registered User
 
Iscritto dal: Jun 2006
Città: Tuttoporto (Sicily) Tipologia: Giocatore-samurai
Messaggi: 2199
Insomma, se ho capito bene è come la tassazione progressiva...
In tal caso puoi fare così.

(codice simil-C)

Codice:
int n_utenze = 34;
int costante =  23;
fascia = n_utenze*costante;
int lettura= 2560;

int totale = 0;

double[] tariffe = {0.45, 0.72, 1.18...  etc }

for (int i=0; lettura>0; i++)
{
if (lettura>=fascia)
   {
    totale+=fascia*tariffe[i];
    lettura-=fascia;
    }
else
   {
    totale+=lettura*tariffe[i];
    lettura=0;
   }
}
Naturalmente si può sistemare per avere parametri, non sovrascrivere le variabili, gestire le eccezioni... etc. etc.

A livello puramente matematico era un bell'integrale di una funzione a gradini... ma è meglio non trattarlo così.
naoto84 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:10   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da mastoo Guarda i messaggi
ma il tuo problema è calcolare la tariffa sul resto, perche non sai qual applicare ?
Prima di tutto grazie per l'interessamento

Per il momento ho risolto così:

Codice:
//il codice è in C#
private void MyData()
        {
            int result = Int32.Parse(cmbUtenze.ComboBox.Text) * 23;
            
            int contatore = Int32.Parse(txtContatore.Text);
            
            int numTariffe = contatore / result;
            
            int resto = contatore % result;

            switch (numTariffe)
            {
                case 1:
                    double totale = (result * 0.417) + (resto * 0.719);
                    MessageBox.Show("caso 1");
                    label2.Text = totale.ToString();

                    break;

                case 2:
                    double totale2 = (result * 0.417) + (result * 0.719) + (resto * 0.835);
                    MessageBox.Show("caso 2");
                    label2.Text = totale2.ToString();
                    break;

                case 3:
                    double totale3 = (result * 0.417) + (result * 0.719) + (result * 0.835) + (resto * 1.121);
                    MessageBox.Show("caso 3");
                    label2.Text = totale3.ToString("N3");
                    break;

                case 4:
                    double totale4 = (result * 0.417) + (result * 0.719) + (result * 0.835) + (result * 1.121) + (resto * 1.334);
                    MessageBox.Show("caso 4");
                    label2.Text = totale4.ToString();
                    break;

                case 5:
                    double totale5 = (result * 0.417) + (result * 0.719) + (result * 0.835) + (result * 1.121) + (result * 1.334) + (resto * 1.334);
                    MessageBox.Show("caso 5");
                    label2.Text = totale5.ToString();
                    break;
            }
Qualsiasi critica o consiglio è ben accetto
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:22   #7
naoto84
Registered User
 
Iscritto dal: Jun 2006
Città: Tuttoporto (Sicily) Tipologia: Giocatore-samurai
Messaggi: 2199
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Qualsiasi critica o consiglio è ben accetto
Forse ti è sfuggito il mio messaggio perché abbiamo postato insieme. Nella tua soluzione vedo che calcoli preventivamente quante "aliquote" incontri e fai un calcolo ad hoc per ogni caso, ma non è necessario.
E poi è poco flessibile... appena cambia una tariffa o se ne aggiunge una devi andare a cambiare tutto il codice.
naoto84 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:25   #8
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Scusa se mi permetto, mi sento di darti un consiglio.
Da quel che ho capito, si tratta di un problema che ben si presta ad una soluzione impostata mediante tabelle.

Il consiglio e' quindi di fare in modo che l'applicazione vada a consultare delle tabelle ed eventualmente fare i conti con il loro contenuto invece di usare uno switch.

Il vantaggio e' che il risultato e' piu' comprensibile di uno switch chilometrico (con parti di codice che, per forza di cose, sono duplicate o comunque molto simili).
Hai anche il vantaggio della configurabilita': in versioni future, potresti inserire le tabelle in un file di configurazione, e cambiarlo senza nemmeno toccare il codice. Puoi prendere come riferimento il codice di naoto84 ed eventualmente ampliarlo....
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11:54   #9
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Grazie a tutti per i consigli

Per rispondervi:

Si, alle tabelle ci avevo pensato, magari lasciando all'utente la possibilità di inserirle in una list box o in un db, in modo che possa aggiornarle in tempo reale quando cambiano.

Quello che ho fatto con lo switch era più che altro per rendermi conto di come far fare matematicamente l'operazione.

Ora vedo cosa riesco a capire dal codice di nato84.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 13:02   #10
a2000.1
Senior Member
 
L'Avatar di a2000.1
 
Iscritto dal: Aug 2004
Messaggi: 311
__________________
Senior Member
Registrato il: Jan 2001
Messaggi: 2609
a2000.1 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 19:10   #11
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da a2000.1 Guarda i messaggi
lol! questo è il consiglio migliore
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 20:19   #12
a2000.1
Senior Member
 
L'Avatar di a2000.1
 
Iscritto dal: Aug 2004
Messaggi: 311
tre righe tre di codice e passa la paura

Codice:
Sub ppp()
 Dim t(1 To 10), tt(1 To 10)
 t(1) = 0.45
 t(2) = 0.75
 t(3) = 0.95
 t(4) = 1.15

 tt(1) = t(1)
 For i = 2 To 10: tt(i) = tt(i - 1) + t(i): Next i
  
 
 Nsc = 2385
 Nut = 40
 a = 23

 c = Nut * a
 II = Int(Nsc / c)
 TOT = c * tt(II) + (Nsc Mod c) * t(II + 1)

End Sub
__________________
Senior Member
Registrato il: Jan 2001
Messaggi: 2609
a2000.1 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 21:07   #13
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da a2000.1 Guarda i messaggi
tre righe tre di codice e passa la paura

Codice:
...

sono 15
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 21:43   #14
naoto84
Registered User
 
Iscritto dal: Jun 2006
Città: Tuttoporto (Sicily) Tipologia: Giocatore-samurai
Messaggi: 2199
Quote:
Originariamente inviato da a2000.1 Guarda i messaggi
tre righe tre di codice e passa la paura
Un aiutone gli hai dato.

" "
naoto84 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 22:03   #15
a2000.1
Senior Member
 
L'Avatar di a2000.1
 
Iscritto dal: Aug 2004
Messaggi: 311
Quote:
Originariamente inviato da marco.r Guarda i messaggi

sono 15
eh, bisogna saperle contare ...
__________________
Senior Member
Registrato il: Jan 2001
Messaggi: 2609
a2000.1 è offline   Rispondi citando il messaggio o parte di esso
Old 14-08-2007, 08:51   #16
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da a2000.1 Guarda i messaggi
eh, bisogna saperle contare ...
ciao a2000.1
okay è offline   Rispondi citando il messaggio o parte di esso
Old 14-08-2007, 13:16   #17
a2000.1
Senior Member
 
L'Avatar di a2000.1
 
Iscritto dal: Aug 2004
Messaggi: 311
ciao
__________________
Senior Member
Registrato il: Jan 2001
Messaggi: 2609
a2000.1 è offline   Rispondi citando il messaggio o parte di esso
Old 14-08-2007, 23:10   #18
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da a2000.1 Guarda i messaggi
eh, bisogna saperle contare ...
Piu' che altro carina l'idea che hai usato per calcolare il risultato.
Capita proprio a proposito, perche' sfruttandola si riesce a scrivere una soluzione in due righe
Codice:
rates = zip (0.45:0.75:0.95:repeat 1.15) (scanl (+) 0.0 (map fst rates))
bill users amount = (\fi u -> (\(x,y) -> x*(fi (mod amount u)) + y*(fi u) ) (rates !! (div amount u))) fromIntegral (users*23)
Non sono proprio 80 colonne, ma cmq sotto le 132
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 15-08-2007, 04:08   #19
a2000.1
Senior Member
 
L'Avatar di a2000.1
 
Iscritto dal: Aug 2004
Messaggi: 311
certo anche perchè, da buon copy-paste programmer, non sapendo un C++ di matematica ti tocca copiare la sostanza dagli altri e incollare il tutto con un po' di immonda C-like glue-shit .

P.S.
non te la prendere ma è la verità, d'altra parte non è colpa tua: ve lo hanno insegnato che il codice (degli altri ) va riutilizzato e che non si deve reinventare la ruota (anche se ve la danno quadrata )
__________________
Senior Member
Registrato il: Jan 2001
Messaggi: 2609

Ultima modifica di a2000.1 : 15-08-2007 alle 04:44.
a2000.1 è offline   Rispondi citando il messaggio o parte di esso
Old 15-08-2007, 04:35   #20
a2000.1
Senior Member
 
L'Avatar di a2000.1
 
Iscritto dal: Aug 2004
Messaggi: 311
dopo lo mandiamo in esecuzione 10^9 volte e vediamo quello che ci mette di meno, se il tuo anacoluto da barboni pala&piccone o quello in lingua evoluta porsche-cayenne modello ranzani (alias fortran).


comunque eccotelo servito, non in anacoluto da cavernicoli , in una sola riga (con una ripetizione)

Codice:
Function f_TOT(Nsc, c, tt(), t())
 'II = Int(Nsc / c)
 f_TOT = c * tt(Int(Nsc / c)) + (Nsc Mod c) * t(Int(Nsc / c) + 1)
End Function
va a laürà barbün !!!
__________________
Senior Member
Registrato il: Jan 2001
Messaggi: 2609

Ultima modifica di a2000.1 : 15-08-2007 alle 05:05.
a2000.1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
GeForce NOW: ecco tutte le novità in arr...
Il Realme 16 5G debutta sul mercato glob...
HONOR svela tre nuovi tablet: il più int...
Tineco Floor One S9 Master: aspira e pul...
Vivo X300 Ultra, il lancio globale è ini...
Offerte robot aspirapolvere Amazon: ECOV...
L'AI genera codice in 8 minuti e i senio...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Google Pixel 9 a 449,90€ con caricatore ...
Ecco la top 7 delle offerte Amazon, aggi...
Ex ingegnere ammette il sabotaggio: migl...
I coupon nascosti di Amazon si rinnovano...
Disponibili i video e le immagini in alt...
La NASA ha rilasciato le prime fotografi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:21.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v