|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Jul 2002
Città: Lucca
Messaggi: 966
|
[C++] Calcolatrice
Come posso migliorarla? Come posso alleggerire il codice?
qualche trucchetto? cosa aggiungo? Codice:
#include "math.h"
#include "iostream.h"
//funzione menu ;)
void menu ()
{
cout<<"**********************************************************"<<endl;
cout<<"* *"<<endl;
cout<<"* TDO banner's calculator v1.0 *"<<endl;
cout<<"* 12 September 2004 *"<<endl;
cout<<"* By: tdo staff ([email protected]) *"<<endl;
cout<<"* http://tdo.altervista.org *"<<endl;
cout<<"* Copyright © 2004 by TDO Portal *"<<endl;
cout<<"* *"<<endl;
cout<<"**********************************************************"<<endl;
}
//funzione menu scelta ^^
void menu_scelta ()
{
cout<<"**********************************************************"<<endl;
cout<<"* *"<<endl;
cout<<"* 1. Addizione *"<<endl;
cout<<"* 2. Sottrazione *"<<endl;
cout<<"* 3. Moltiplicazione *"<<endl;
cout<<"* 4. Divisione *"<<endl;
cout<<"* 5. Elevamento a potenza *"<<endl;
cout<<"* *"<<endl;
cout<<"* 0. Exit *"<<endl;
cout<<"* *"<<endl;
cout<<"**********************************************************"<<endl;
}
//funzione per l'elevamento a potenza
double potenza (double x, double y)
{
return pow(x,y);
}
//funzione per l'addiozione
double addizione (double x, double y)
{
return x+y;
}
//funzione per la sottrazione
double sottrazione (double x, double y)
{
return x-y;
}
//funzione per la moltiplicazione
double moltiplicazione (double x, double y)
{
return x*y;
}
//funzione per la divisione
double divisione (double x, double y)
{
return x/y;
}
void sw_ca ()
{
double a,b;
int scelta=-1;
do
{
cout<<endl<<"Inserisci il primo numero ";
cin>>a;
cout<<endl<<"Inserisci il secondo numero ";
cin>>b;
cout<<endl<<endl;
menu_scelta();
cout<<endl<<endl<<"Quale operazione vuoi eseguire? ";
cin>>scelta;
cout<<endl;
switch(scelta)
{
case 1:
cout<<"Il risultato dell'addizione relativa ai numeri "<<a<<" e "<<b<<" e': "<<addizione(a,b)<<endl;
scelta=-1;
break;
case 2:
cout<<"Il risultato della sottrazione relativa ai numeri "<<a<<" e "<<b<<" e': "<<sottrazione(a,b)<<endl;
scelta=-1;
break;
case 3:
cout<<"Il risultato della moltiplicazione relativa ai numeri "<<a<<" e "<<b<<" e': "<<moltiplicazione(a,b)<<endl;
scelta=-1;
break;
case 4:
if((a!=b)&&(b==0)){ cout<<"Impossibile eseguire l'operazione"; scelta=-1; break; }
cout<<"Il risultato della divisione relativa ai numeri "<<a<<" e "<<b<<" e': "<<divisione(a,b);
scelta=-1;
break;
case 5:
cout<<"Il risultato dell'elevamento a potenza relativa ai numeri "<<a<<" e "<<b<<" e': "<<potenza(a,b)<<endl;
scelta=-1;
break;
case 0:
scelta=0;
break;
default: { cout<<"Inserisci un numero compreso fra 0 e 5"<<endl; scelta=-1; }
}
}
while(scelta==-1);
}
void main ()
{
menu();
cout<<endl;
sw_ca();
}
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Re: [C++] Calcolatrice
Quote:
Invece che chiedere all'utente ogni singola operazione potresti implementare un piccolo parser e permettere cose come: 9 + 9 - 4. E poi mettere in output subito il risultato senza "il risultato...." qualcosa tipo: 2 + 2 <invio> 4 ciao |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
E poi puoi implentare il tutto usando la OOP (il C++ non abdrebbe usato per programmare come si programma in C...): una classe per il parser, una classe per rappresentare un'operazione: la calcolatrice avrà quindi un parser a cui passare la strunga immessa dall'untente che che restituisce un oggetto Operazione in basse alla stringa elaboarta, la calcolatrice esegue l'operaione, senza sapere neanche di che operazione si tratta, e visualizza il risultato. Cosi diventa molto modulare e si possono agiungere nuove funzionalità facilmente.
Inoltre sostituisci: #include "iostream.h" che è obsoleto con Codice:
#include <iostream> using namespace std; void main () con Codice:
int main (){
...
...
...
return 0;
}
Ciao.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Jul 2002
Città: Lucca
Messaggi: 966
|
scusate ragazzi ma ho solo 16 anni e studio da poco....
cosa è un parser? cosa sono le classi? scusate ma non conosco il sistema ad oggetti (OOP) potreste spiegarmi un po il OOP e darmi qualche esempio da applicare al mio programma? grazie ve ne sono molto grato |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Se stai strudiando da poco il C++ ok...arrivaerai a studiare le classi e la programmazione ad oggetti...non è un aromento che si puo spiegare in un post sul forum preche molto vasto, è il cuore di totta la programmazione C++. Magari quando la inizia a studiare prova a riformulare il problema usando le calssi e gli oggetti.
Un parser è un componente del programma che si dovrebbe occupare di 'interpretare' una stringa inserita dall'utente, individuandone gli elementi costitutivi; ovviamente devi prima stabilire quale deve essere 'il linguggio' che la tua calcolatrice accetta. Ad esempio potresti accettare espressioni del tipo: 1 + 3 * 5 - 4 un parser deve occuparsi di individuare nella stringa inserita i numeri e le operazioni, memorizzando queste informazioni in un'apposita struttura dati. Quindi, in base alle informazioni estratte dal parser puoi eseguire l'operazione. Un modo elementare di eseguire ciò è di memoriazzare i numeri e le operazioni in un unico array; quindi ti scorri l'array dal fondo, estrai il primo operando, estrai l'operazione, estrai il secondo operando, calcoli il risultato e lo insrisci in fondo all'array, e ripeti l'operazione finche l'array nn contiene un solo elemento che è il risultato. Questo è il modo piu semplice, che non tiene conto delle precedenze tra gli operatori, e inizia a calcolare a partire dal fondo del'esporessione. Per migliroerare la cosa andrebbero usate strutture dati piu consone come ad esempio alberi. Ciao.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Jul 2002
Città: Lucca
Messaggi: 966
|
ho studiato c++ per tutto l anno scolastico con la scuola ma ovviamente il 95% di quello che ho appreso è stato per merito di internet libri ecc... insomma autodidatta rulez
cmq adesso ho capito cosa è un parser... se tu magari potessi linkarmi un sito dove studiare l' OOP o un tutorial te ne sarei grato anche perche ho visto che è molto importante anche per il JAVA cmq ritornando al tuo esempio ho capito come fare ma inserendo una stringa (ovvero tutto d'un colpo senza piu di un cin o di un get) dopo come faccio a fargli capire che * e / ha piu importanza di + e - ? |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Un buon testo sul c++ è Thinking in C++, che puoi scaricare sul sito dell'autore:
http://mindview.net/Books disponibile anche in italiano, anche se la traduzione a volte non è proprio impeccabile, io ti consilio di seguire la versione in inglese, e consultare l'italiana se proprio non capisci un concetto. Sulla stessa pagina puoi anche scaircare Thinking in Java. Quando al calcolo del valore di un'espressione, se usi la tecnica dell'array ti basta fare una prima passata in cui risolvi le operazioni con priorita maggiore, e poi una seconda passata per le operazioni con priorita minore.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Jul 2002
Città: Lucca
Messaggi: 966
|
un ultima cosa...
ma quando inserisco tutta l espressione la inserisco passo a passo oppure con una stringa? |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
buttati su java che è il linguaggio del futuro ........è il linguaggio ad oggetti per eccellenza ed è molto più semplice sopratutto per chi vuole fare qualche programmino un pò + serio di un semplice hello world o di una calcolatrice testuale.
il C++ è troppo vincolato alla macchina e alla capacità del compilatore.....
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#11 | |
|
Bannato
Iscritto dal: Jul 2002
Città: Lucca
Messaggi: 966
|
Quote:
|
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
Quote:
cioè di solito quando uno vuole imparare inizia con le cose più semplici, magari con un linguaggio accessibile che ti permetta di avere qualche piccola soddisfazione e ti permetta in futuro, appunto, il passaggio a un linguaggio più complesso come può essere il C++
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Jul 2002
Città: Lucca
Messaggi: 966
|
posso assicurarti che non mi pento di aver studiato c++
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
Quote:
poi ognuno è libero di fare quello che vuole
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jan 2003
Città: Lucca
Messaggi: 2165
|
Ciao stermi...
Com'è? Ti stai dando alla programmazione? Ormai hai lasciato il mondo CS? Oh mettici almeno anche le radici... o sennò mettici "Elevamento a potenza o radice"... (questo l'ho scritto altrimenti questo post è totalmente OT) Ci vediamo domattina... Ciao
__________________
Intel G1820T | Asus H87-Pro | 8Gb DDR3 1333Mhz | Crucial M4 64Gb | WD Green 2Tb | Xonar Essence ST My pictures on 500px |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
Detto questo...la parte che StErMiNeiToR ha studiato, ovvero tutto cio che non riguarda le classi, è la parte semplice del c++.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#17 |
|
Bannato
Iscritto dal: Jul 2002
Città: Lucca
Messaggi: 966
|
perfetto quindi io mi sono fatto solo le stronzate
adesso allora comincia il bello cmq x jonny32 io è piu di un anno ke mi sono dato alla programmazione non solo del c++ cmq ci becchiamo domani mattina ciao bello |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
Quote:
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
|
#19 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Re: [C++] Calcolatrice
Quote:
La cosa piu' semplice e' quella di usare la cosiddetta notazione polacca inversa (RPN), conosciuta molto bene da chi usa una calcolatrice scientifica HP. Ad esempio invece di scrivere 3+5*2 scriveresti 3 5 + 2 * Questo rende piu' difficile a te la scrittura delle espressioni, ma molto piu' semplice il lavoro della calcolatrice In questo modo infatti il calcolo diverrebbe relativamente semplice. Questo e' un passo relativamente facile da implementare una volta che capisci come funziona. |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Re: Re: [C++] Calcolatrice
Quote:
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:46.


















