Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-08-2007, 09: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 09:30.
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2007, 11: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, 11: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, 11: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, 12: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, 12: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, 12: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, 12: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, 12: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, 14: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, 20: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, 21: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, 22: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, 22: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, 23: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, 09: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, 14: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 15-08-2007, 00: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, 05: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 05:44.
a2000.1 è offline   Rispondi citando il messaggio o parte di esso
Old 15-08-2007, 05: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 06:05.
a2000.1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
Obbligati ad acquistare una scheda madre...
GTA VI su PC? La data non c'è, ma...
Monopattini elettrici, a un anno dal dec...
Tesla Robotaxi, autista di sicurezza si ...
Samsung Galaxy S26: svelate le combinazi...
Microsoft Ignite: arriva Edge for Busine...
OPPO e Lamine Yamal uniscono sport e tec...
Microsoft, NVIDIA e Anthropic siglano un...
SpaceX potrebbe comunicare alla NASA rit...
Scoperte cavità sotterranee scava...
OnePlus anticipa l'arrivo di due nuovi p...
DJI lancia Osmo Action 6: la prima actio...
NASA: conferenza stampa sulla cometa int...
Ex CEO di TSMC passa a Intel: aperta un'...
Gigabyte X870E Aorus Elite X3D, una moth...
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: 01:46.


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