Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Il mio primo programma Calcolatrice
Forum - C# / VB.NET - [C#] Il mio primo programma Calcolatrice

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
sps84 (Normal User)
Expert


Messaggi: 202
Iscritto: 11/02/2009

Segnala al moderatore
Postato alle 21:59
Giovedì, 03/12/2009
Questo topic è stato chiuso dal moderatore

Ciao a tutti mi sto avvicinando al c# e ho realizzato questo mio programma, una semplice calcolatrice. Accetto consigli trucchi e tante critiche....

manca la gestione degli errori e non calcola valori con virgola mobile..
Grazie in anticipo a tutti
Codice sorgente - presumibilmente C#

  1. int valUno;
  2.         int valDue;
  3.         string operatore;        
  4.  
  5.         private void assValUno(int val1)
  6.         {
  7.            valUno = val1;
  8.         }
  9.         private void assValDue(int val2)
  10.         {
  11.             valDue = val2;
  12.         }
  13.         private void assOperatore(string op)
  14.         {
  15.             operatore = op;
  16.         }
  17.  
  18.         private void btnUguale_Click(object sender, RoutedEventArgs e)
  19.         {
  20.             if (operatore == "+")
  21.             {
  22.                 int result = somma(valUno, int.Parse(textRiga.Text));
  23.                 testoRiga(result.ToString());
  24.             }
  25.             else if (operatore == "-")
  26.             {
  27.                 int result = meno(valUno, int.Parse(textRiga.Text));
  28.                 testoRiga(result.ToString());
  29.             }
  30.             else if (operatore == "/")
  31.             {
  32.                 int result = div(valUno, int.Parse(textRiga.Text));
  33.                 testoRiga(result.ToString());
  34.             }
  35.             else if (operatore == "x")
  36.             {
  37.                 int result = molti(valUno, int.Parse(textRiga.Text));
  38.                 testoRiga(result.ToString());
  39.             }
  40.         }
  41.  
  42.         private void testoRiga(string val)
  43.         {
  44.             textRiga.Text = val;
  45.         }
  46.  
  47.         //bottoni operatori
  48.         private void btnPiu_Click(object sender, RoutedEventArgs e)
  49.         {
  50.             assValUno(int.Parse(textRiga.Text));
  51.             assOperatore("");
  52.             assOperatore("+");            
  53.             textVal1.Text = operatore.ToString();
  54.             textRiga.Text = "";
  55.         }
  56.         private void btnMeno_Click(object sender, RoutedEventArgs e)
  57.         {
  58.             assValUno(int.Parse(textRiga.Text));
  59.             assOperatore("");
  60.             assOperatore("-");
  61.             textVal1.Text = operatore.ToString();
  62.             textRiga.Text = "";
  63.         }
  64.         private void btnDiv_Click(object sender, RoutedEventArgs e)
  65.         {
  66.             assValUno(int.Parse(textRiga.Text));
  67.             assOperatore("");
  68.             assOperatore("/");
  69.             textVal1.Text = operatore.ToString();
  70.             textRiga.Text = "";
  71.         }
  72.         private void btnPer_Click(object sender, RoutedEventArgs e)
  73.         {
  74.             assValUno(int.Parse(textRiga.Text));
  75.             assOperatore("");
  76.             assOperatore("x");
  77.             textVal1.Text = operatore.ToString();
  78.             textRiga.Text = "";
  79.         }      
  80.        
  81.         //operazioni
  82.         private int somma(int valUno, int valDue)
  83.         {
  84.             return  valUno + valDue;              
  85.         }
  86.         private int meno(int valUno, int valDue)
  87.         {
  88.             return valUno - valDue;
  89.         }
  90.         private int div(int valUno, int valDue)
  91.         {
  92.             return valUno / valDue;
  93.         }
  94.         private int molti(int valUno, int valDue)
  95.         {
  96.             return valUno * valDue;
  97.         }      
  98.        
  99.         //codice dei pulsanti tastiera
  100.         private void concatena(string add)
  101.         {
  102.             textRiga.Text += add;
  103.         }
  104.         private void btn1_Click(object sender, RoutedEventArgs e)
  105.         {
  106.             concatena("1");
  107.         }
  108.         private void btn2_Click(object sender, RoutedEventArgs e)
  109.         {
  110.             concatena("2");
  111.         }
  112.         private void btn3_Click(object sender, RoutedEventArgs e)
  113.         {
  114.             concatena("3");
  115.         }
  116.         private void btn4_Click(object sender, RoutedEventArgs e)
  117.         {
  118.             concatena("4");
  119.         }
  120.         private void btn5_Click(object sender, RoutedEventArgs e)
  121.         {
  122.             concatena("5");
  123.         }
  124.         private void btn6_Click(object sender, RoutedEventArgs e)
  125.         {
  126.             concatena("6");
  127.         }
  128.         private void btn7_Click(object sender, RoutedEventArgs e)
  129.         {
  130.             concatena("7");
  131.         }
  132.         private void btn8_Click(object sender, RoutedEventArgs e)
  133.         {
  134.             concatena("8");
  135.         }
  136.         private void btn9_Click(object sender, RoutedEventArgs e)
  137.         {
  138.             concatena("9");
  139.         }
  140.         private void btn0_Click(object sender, RoutedEventArgs e)
  141.         {
  142.             concatena("0");
  143.         }
  144.         private void btn00_Click(object sender, RoutedEventArgs e)
  145.         {
  146.             concatena("00");
  147.         }
  148.         private void btnVirg_Click(object sender, RoutedEventArgs e)
  149.         {
  150.             concatena(",");
  151.         }
  152.         private void btnCancel_Click(object sender, RoutedEventArgs e)
  153.         {
  154.             textRiga.Text = "";
  155.             valUno = int.Parse("0");
  156.             valDue = int.Parse("0");
  157.         }



L'apprendista di C#...
PM
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 0:44
Venerdì, 04/12/2009
Beh per calcolare valori in virgola mobile basta che usi variabili di tipo float o double al posto degli integer. Ci vogliono 10 secondi a cambiare quello. Per la gestione degli errori non ci vuole molto, basta che verifichi, prima di fare qualsiasi cosa, che l'utente abbia inserito validi dati numerici.


"I have never let my schooling interfere with my education." Mark Twain
PM
Avatar
sps84 (Normal User)
Expert


Messaggi: 202
Iscritto: 11/02/2009

Segnala al moderatore
Postato alle 0:50
Venerdì, 04/12/2009
Testo quotato

Postato originariamente da Matthew:

Beh per calcolare valori in virgola mobile basta che usi variabili di tipo float o double al posto degli integer. Ci vogliono 10 secondi a cambiare quello. Per la gestione degli errori non ci vuole molto, basta che verifichi, prima di fare qualsiasi cosa, che l'utente abbia inserito validi dati numerici.



Grazie e per il resto come ti sembra il codice?


L'apprendista di C#...
PM
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1876
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:52
Venerdì, 04/12/2009
Io ti consiglierei di evitare tutti quei controlli raggruppandoli tutti in uno
più o meno in questo modo

Codice sorgente - presumibilmente C#

  1. public int calcola(int val1,string op,int val2) {
  2.  
  3.  
  4. if(op == "+") { return val1 + val2; }
  5. if(op == "-") { return val1 - val2; }
  6. if(op == "*") { return val1 * val2; }
  7.  
  8. //ecc.
  9.  
  10. }



tendendo sempre pubblica la var operatore
ed inviandola al momento che viene premuto uguale.


Altra domanda concatena cosa vuoi significare?
tutti quei controlli numeri su numeri?

pre il resto essendo il tuo primo programma sei sulla strada giusta :k:

Ultima modifica effettuata da Thejuster il 04/12/2009 alle 8:59


PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:22
Venerdì, 04/12/2009
Se vuoi un consiglio:
Codice sorgente - presumibilmente C++

  1. namespace WindowsApplication2
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         public Form1()
  6.         {
  7.             InitializeComponent();
  8.         }
  9.  
  10.         int valUno;
  11.         int valDue;
  12.         char operatore;
  13.  
  14.         private void btnUguale_Click(object sender, RoutedEventArgs e)
  15.         {
  16.             int result;
  17.             valDue = int.Parse(textRiga.Text);
  18.             switch (operatore)
  19.             {
  20.                 case '+':
  21.                     {
  22.                         result = valUno + valDue;
  23.                         break;
  24.                     }
  25.                 case '-':
  26.                     {
  27.                         result = valUno - valDue;
  28.                         break;
  29.                     }
  30.                 case '*':
  31.                     {
  32.                         result = valUno * valDue;
  33.                         break;
  34.                     }
  35.                 case '/':
  36.                     {
  37.                         result = valUno / valDue;
  38.                         break;
  39.                     }
  40.             }
  41.             textRiga.Text = result;
  42.         }
  43.  
  44.         //bottoni operatori
  45.         private void btnOperatori_Click(object sender, RoutedEventArgs e)
  46.         {
  47.             ValUno = int.Parse(textRiga.Text);
  48.             operatore = ((Button)sender).Text;
  49.             textVal1.Text = operatore.ToString();
  50.             textRiga.Text = "";
  51.         }
  52.  
  53.         private void btnNumeri_Click(object sender, RoutedEventArgs e)
  54.         {
  55.             textRiga.Text += ((Button)sender).Text;
  56.         }
  57.  
  58.         private void btnCancel_Click(object sender, RoutedEventArgs e)
  59.         {
  60.             textRiga.Text = "";
  61.             valUno = 0;
  62.             valDue = 0;
  63.         }  
  64.     }
  65. }



Le procedure composte da una riga non servono a nulla (sprecano solo spazio nel codice e nello stack). Se hai tanti pulsanti, e ognuno ha come testo "+", "*", o "1", "2", "3"... allora è inutile fare una procedura per ogni singolo click. Ne basta una che li gestisca tutti, tanto cosa concatenare lo sappiamo già: è il testo del pulsante premuto.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1876
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 20:13
Venerdì, 04/12/2009
in effetti basta cambiare l'handle di tutti i bottoni degli operatori
ed ancorarli ad una sola funzione


PM
Avatar
sps84 (Normal User)
Expert


Messaggi: 202
Iscritto: 11/02/2009

Segnala al moderatore
Postato alle 13:35
Lunedì, 07/12/2009
Testo quotato

Postato originariamente da Thejuster:

Io ti consiglierei di evitare tutti quei controlli raggruppandoli tutti in uno
più o meno in questo modo

Codice sorgente - presumibilmente C#

  1. public int calcola(int val1,string op,int val2) {
  2.  
  3.  
  4. if(op == "+") { return val1 + val2; }
  5. if(op == "-") { return val1 - val2; }
  6. if(op == "*") { return val1 * val2; }
  7.  
  8. //ecc.
  9.  
  10. }



tendendo sempre pubblica la var operatore
ed inviandola al momento che viene premuto uguale.


Altra domanda concatena cosa vuoi significare?
tutti quei controlli numeri su numeri?

pre il resto essendo il tuo primo programma sei sulla strada giusta :k:



concatena mi serve per la aggiungere i numeri alla stringa della textBox,
Testo quotato


//bottoni operatori
        private void btnOperatori_Click(object sender, RoutedEventArgs e)
        {
            ValUno = int.Parse(textRiga.Text);
            operatore = ((Button)sender).Text;
            textVal1.Text = operatore.ToString();
            textRiga.Text = "";
        }

        private void btnNumeri_Click(object sender, RoutedEventArgs e)
        {
            textRiga.Text += ((Button)sender).Text;
        }



porta pazienza ma questo  ((Button)sender).Text;  non l'ho molto capito...:k:


L'apprendista di C#...
PM
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1876
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:49
Lunedì, 07/12/2009
io avrei usato semplicemente

textRiga.Text = textRiga.Text & numero da incollare
cmq e un ottimo risultato.

ti vorrei dare un'altra info.
molto probabilmente non che sia qualche tuo errore o cosa.
ma semplicemente una funzione che tutti dimenticano di inserirla :rotfl:

tra i tantissimi calcolatori che ho provato, tipo 10 su 1000 ho trovato questa funzione.

in pratica hai presente sulla calcolatrice quando hai un risultato

tipo fai  4 + 4 = 8

premendo di nuovo il tasto =

ti calcola in automatico il risultato mediante l'ultima operazione useguita
se hai fatto 4 + 4 = 8  premendo dinuovo = avrai 12
prova su una calcolatrice comune :k:

ehehe e un bel esercizio in più per farti lavorare sulle operazioni.

Ultima modifica effettuata da Thejuster il 07/12/2009 alle 15:54


PM
Avatar
sps84 (Normal User)
Expert


Messaggi: 202
Iscritto: 11/02/2009

Segnala al moderatore
Postato alle 18:43
Lunedì, 07/12/2009
Testo quotato

Postato originariamente da Thejuster:

io avrei usato semplicemente

textRiga.Text = textRiga.Text & numero da incollare
cmq e un ottimo risultato.

ti vorrei dare un'altra info.
molto probabilmente non che sia qualche tuo errore o cosa.
ma semplicemente una funzione che tutti dimenticano di inserirla :rotfl:

tra i tantissimi calcolatori che ho provato, tipo 10 su 1000 ho trovato questa funzione.

in pratica hai presente sulla calcolatrice quando hai un risultato

tipo fai  4 + 4 = 8

premendo di nuovo il tasto =

ti calcola in automatico il risultato mediante l'ultima operazione useguita
se hai fatto 4 + 4 = 8  premendo dinuovo = avrai 12
prova su una calcolatrice comune :k:

ehehe e un bel esercizio in più per farti lavorare sulle operazioni.



mmm bene appena posso prova adesso sono in trasloco.... grazie mille a tutti!


L'apprendista di C#...
PM
Pagine: [ 1 2 ] Precedente | Prossimo