Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
ConvertitoreMisure - Miglioramenti
Forum - ConvertitoreMisure - Miglioramenti

Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 17:22
Mercoledì, 28/03/2018
Salve,
Mi chiedevo se invece di creare "a mano" le label e le TextBox per i risultati delle conversioni, facessi una cosa del genere?

Codice sorgente - presumibilmente C#

  1. public static readonly string[] NameUnitTemp =
  2.          {"Kelvin","Celsius","Fahrenheit","Rainke","Delisle","Reamuer","Newton","Romer" };
  3.  
  4.         public static readonly string[] SimbolUnitTemp =
  5.          {"K","°C","°F","°R","°De","°r","°N","°Ro" };
  6.  
  7. private void Form1_Load(object sender, EventArgs e)
  8.         {
  9.             int f = 45;
  10.             for (int i = 0; i < 8; i++)
  11.             {
  12.                 Label     l = AddLabel(i, 40, f, NameUnitTemp);
  13.                 TextBox tex = AddTextBox(i, 100, f, NameUnitTemp);
  14.                 Label   lbl = AddLabel(i, 260, f, SimbolUnitTemp);
  15.                 this.Controls.Add(l);
  16.                 this.Controls.Add(tex);
  17.                 this.Controls.Add(lbl);
  18.  
  19.                 f += 25;
  20.             }
  21.  
  22.         }
  23.  
  24.         Label AddLabel(int i, int S, int E, string[] testi)
  25.         {
  26.             Label lbl = new Label();
  27.             lbl.Name = "lbl" + (i+1).ToString() + testi[i];
  28.             lbl.Text = testi[i];
  29.             lbl.Location = new Point(S, E);
  30.             return lbl;
  31.         }
  32.  
  33.         TextBox AddTextBox(int i, int S, int E, string[] testi)
  34.         {
  35.             TextBox lbl = new TextBox();
  36.             lbl.Name = "txt" + (i + 1).ToString() + testi[i];
  37.             lbl.Text = "";
  38.             lbl.Location = new Point(S + 50, E);
  39.             return lbl;
  40.         }



In modo da semplificare il codice?


PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1349
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 18:19
Mercoledì, 28/03/2018
E' una soluzione perseguibile.

Non so a che punto sei con le conversioni di temperatura, in VB .Net ho scritto questo, è funzionante ma non c'è alcun controllo sugli input:
Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  3.         Label4.Text = "Convertito dai Celsius"
  4.         Dim Fahrenheit As Double = TextCelsius.Text * 1.8 + 32
  5.         Dim Kelvin As Double = TextCelsius.Text + 273.15
  6.  
  7.         TextKelvin.Text = Math.Round(Kelvin, 3)
  8.         TextFahrenheit.Text = Math.Round(Fahrenheit, 3)
  9.     End Sub
  10.  
  11.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  12.         Label4.Text = "Convertito dai Fahrenheit"
  13.         Dim Celsius As Double = (TextFahrenheit.Text - 32) / 1.8
  14.         Dim Kelvin As Double = (TextFahrenheit.Text - 32) / 1.8 + 273.15
  15.  
  16.         TextKelvin.Text = Math.Round(Kelvin, 3)
  17.         TextCelsius.Text = Math.Round(Celsius, 3)
  18.     End Sub
  19.  
  20.     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  21.         Label4.Text = "Convertito dai Kelvin"
  22.         Dim Celsius As Double = TextKelvin.Text - 273.15
  23.         Dim Fahrenheit As Double = TextKelvin.Text * 1.8 - 459.67
  24.  
  25.         TextFahrenheit.Text = Math.Round(Fahrenheit, 3)
  26.         TextCelsius.Text = Math.Round(Celsius, 3)
  27.     End Sub
  28. End Class



allegato il progetto


Carlo ha allegato un file: Temperature.zip (37349 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 30/03/2018 alle 3:31


in programmazione tutto è permesso
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 18:45
Mercoledì, 28/03/2018
A parte qualche svista, il programma è finito nelle conversioni.

Ho adattato un metodo che forse non piacerà a molti.
Data una temperatura iniziale e una finale, prima converto quella iniziale in Kelvin e poi da kelvin in quella finale.
Semplifico molto il codice, a discapito del'errore di conversione (anche se trascurabile, sono sempre 2 conversioni anziché una diretta) e un po dalle performance (anche se il calcolo è semplice e non dovrebbe costare "molto" in tempi di performance).

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1349
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:00
Mercoledì, 28/03/2018
Per la performace non mi preoccuperei se fai la doppia conversione.
Invece ho visto che la precisione è importante, per esempio prova a vedere se 0 °C ti porta 32 °F, se passi per i kelvin, credo che avrai un 31,9

Ultima modifica effettuata da Carlo il 28/03/2018 alle 19:02


in programmazione tutto è permesso
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 19:13
Mercoledì, 28/03/2018
no, ho proprio 32.

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1349
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:41
Mercoledì, 28/03/2018
bene, vedrò come fai le conversioni.
Usi qualche arrotondamento? tipo Math.round?


in programmazione tutto è permesso
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 22:12
Mercoledì, 28/03/2018
Testo quotato

Postato originariamente da Carlo:

bene, vedrò come fai le conversioni.
Usi qualche arrotondamento? tipo Math.round?



Math.Round(value, 3);

Ma solo per scrivere le TextBox, le conversioni le effettua senza arrotondamento

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1349
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 2:43
Giovedì, 29/03/2018
Testo quotato

Postato originariamente da Mikelius:
Math.Round(value, 3);


Giusto funziona!
Nel mio calcolo:  Fahrenheit = Kelvin * 1.8 - 459.67
se imposto 273,15 °K come risultato ho 31,999999 °F
ma visualizzando con Math.Round(Fahrenheit , 3) = 32
e tre cifre decimali sono più che sufficienti per un convertitore.:k:

Ultima modifica effettuata da Carlo il 29/03/2018 alle 2:50


in programmazione tutto è permesso
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1349
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 8:54
Giovedì, 29/03/2018
Solo a scopo didattico, ho convertito il tuo programma in Vb .NET

C'è tutto meno, il tooltip e credo una selezione del testo premendo enter, non ho capito e non ho potuto riprodurre.

Il codice e le classi le ho convertite singolarmente con Instant Vb della Microsoft, poi le ho richiamate su un progetto Vb nuovo, aggiustando i namespace, che non mi hanno funzionato.

Per gli oggetti sul form (che non avevo mai visto), prima li ho messi a caso ma con il giusto nome, poi ho copiato tutti gli attributi dal tuo designer.

Mi sembra che funziona bene, ho controllato solo K C F


Carlo ha allegato un file: conv_temperature.zip (51816 bytes)
Clicca qui per scaricare il file


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo