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
C/C++ - Programma calcolatrice
Forum - C/C++ - Programma calcolatrice

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
streghetta (Normal User)
Newbie


Messaggi: 20
Iscritto: 19/02/2010

Segnala al moderatore
Postato alle 1:43
Venerdì, 19/02/2010
Sono nuova del forum e da poco mi sono avvicinata al C++.
Ho dato uno sguardo ai vari programmi messi a disposizione degli utenti e la mia attenzione si è soffermata su questo: Calcolatrice Light 0.2.
Ci sono però delle cose che non ho capito e vorrei chiedervi se foste così gentili da aiutarmi.
Vi posto il programma nel caso non lo trovaste:

Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5.  
  6. class calcolatrice
  7. {
  8.   double y;
  9.    char y2[25];
  10.    
  11.     public:
  12.      ~calcolatrice(){delete operazione;}
  13.      double x;
  14.       char *operazione, x2[25];
  15.        double moltiplica();
  16.        double dividi();
  17.        double addiziona();
  18.        double sottrai();
  19.        double potenza();
  20.        double radice ();
  21. };
  22.  
  23. int main()
  24. {
  25.   double ris;
  26.   char operatore;
  27.   calcolatrice calc;
  28.    calc.operazione = new char[25];
  29.  
  30.  
  31.  cout << "\n# Calcolatrice Light, versione Console\n";
  32.  cout << "# Autore: __GiReX__\n";
  33.  cout << "# Linguaggio: C++\n\n\n";
  34.  /* USAGE */
  35.  cout << "# USAGE: Inserire in ordine: Primo Numero - Operatore - Secondo Numero";
  36.  cout << "\n# Operatori:";
  37.  cout << "\n# * / + -      =       Mol - Div - Add - Sott";
  38.  cout << "\n# ^  =  Potenza";
  39.  cout << "\n# R  =  Radice";
  40.  
  41. while(1)
  42. {  
  43.     cout << "\n\n\nPrimo numero:\t";
  44.      cin >> calc.x2;
  45.       calc.x = atof(calc.x2);
  46.        fflush(stdin);
  47.      cout << "Operatore:\t";
  48.       cin >> operatore;
  49.        fflush(stdin);
  50.    
  51. switch(operatore)
  52.  {
  53.     case '+':
  54.         ris = calc.addiziona();
  55.     break;
  56.     case '-':
  57.         ris = calc.sottrai();
  58.     break;
  59.     case '*':
  60.         ris = calc.moltiplica();
  61.     break;
  62.     case '/':
  63.         ris = calc.dividi();
  64.     break;
  65.     case '^':
  66.         ris = calc.potenza();
  67.     break;
  68.     case 'R':
  69.         ris = calc.radice();
  70.     break;
  71.     default:
  72.         cout << "\nOperatore NON valido";
  73.         continue;
  74. }
  75.  
  76.     cout << "\n\nIl risultato della " << calc.operazione << " e': " << ris;
  77.    fflush(stdin);
  78.   cin.ignore();
  79.  }
  80.  return 0;
  81. }
  82.  
  83. double calcolatrice::addiziona()
  84. {
  85.    cout << "Secondo numero:\t";
  86.     cin >> y2;
  87.      y = atof(y2);
  88.       operazione = "addizione";
  89.     fflush(stdin);
  90.   return (x + y);
  91. }
  92.  
  93. double calcolatrice::sottrai()
  94. {
  95.    cout << "Secondo numero:\t";
  96.     cin >> y2;
  97.      y = atof(y2);
  98.       operazione = "sottrazione";
  99.     fflush(stdin);
  100.   return (x - y);
  101. }
  102.  
  103. double calcolatrice::moltiplica()
  104. {
  105.    cout << "Secondo numero:\t";
  106.     cin >> y2;
  107.      y = atof(y2);
  108.       operazione = "moltiplicazione";
  109.     fflush(stdin);
  110.   return (x * y);
  111. }
  112.  
  113. double calcolatrice::dividi()
  114. {
  115.    cout << "Secondo numero:\t";
  116.     cin >> y2;
  117.      y = atof(y2);
  118.       operazione = "divisione";
  119.     fflush(stdin);
  120.   return (x / y);
  121. }
  122.  
  123. double calcolatrice::potenza()
  124. {
  125.    cout << "Esponente:\t";
  126.     cin >> y2;
  127.      y = atof(y2);
  128.       operazione = "potenza";
  129.     fflush(stdin);
  130.   return (pow(x, y));
  131. }
  132.  
  133. double calcolatrice::radice()
  134. {  
  135.     cout << "Radicando:\t";
  136.      cin >> y2;
  137.       y = atof(y2);
  138.        operazione = "radice";
  139.      fflush(stdin);
  140.    return (pow(x, 1.0/y));
  141. }



Adesso,ciò che non ho capito è...........nella definizione della classe calcolatrice,double y rappresenta un tipo double;char y2[25] rappresenta un array di oggetti di tipo char(correggetemi se sbaglio!).A questo punto,dopo public,non dovrebbe esserci un costruttore o viene creato per default??e inoltre,perchè il distruttore è così dichiarato? ~calcolatrice(){delete operazione;}...non bastava scrivere solo ~calcolatrice()??
e in ultimo...
char *operazione, x2[25];...cosa significa precisamente questa istruzione?perchè c'è il puntatore??
scusatemi per tutte queste domande ma non sono pratica e scusatemi anche per eventuali errori se dovessero esserci...:)

EDIT by HeDo: Codice non racchiuso tra tag code

Ultima modifica effettuata da HeDo il 19/02/2010 alle 9:18
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 7:39
Venerdì, 19/02/2010
Esiste un costruttore di default (come anche un costruttore di copia di default).

char y2[25] rappresenta un array di char (e non di oggetti di tipo char). Il char non è un oggetto ma un tipo primitivo.

Infine, hai trovato un esempio fatto male ... L'array di char dovrebbe essere privato, doveva essere allocato nel costruttore (così come è eliminato nel distruttore) e l'allocazione doveva essere controllata...

Prova a migliorare tu il codice.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 9:20
Venerdì, 19/02/2010

credo che tu abbia preso proprio l'esempio sbagliato, non voglio dire nulla su girex ma non è proprio il massimo di programmazione. Spesso "cercare di capire" cosa è passato per la testa ad un programmatore è più difficile che riscrivere il codice in prima persona, oltretutto se l'esempio è così banale e il codice del programmatore così contorto e impreciso.

consiglio oltretutto un manuale cartaceo di C++, non fa mai male.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:35
Venerdì, 19/02/2010
Il problema Hedo, è che tutti i sorgenti presenti nel sito andrebbero controllati prima di essere pubblicati ... altrimenti possono esserci le "schifezze" piu' assurde che vengono prese come "esempio" da chi arriva dall'esterno ...

Se non si ha la possibilità di fare questi controlli, o non si vuole farli, almeno si scriva che l'esempio è da considerarsi "così com'è", e che non si dà alcuna garanzia di correttezza formale del codice ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 9:41
Venerdì, 19/02/2010
Testo quotato

Postato originariamente da nessuno:

Il problema Hedo, è che tutti i sorgenti presenti nel sito andrebbero controllati prima di essere pubblicati ... altrimenti possono esserci le "schifezze" piu' assurde che vengono prese come "esempio" da chi arriva dall'esterno ...

Se non si ha la possibilità di fare questi controlli, o non si vuole farli, almeno si scriva che l'esempio è da considerarsi "così com'è", e che non si dà alcuna garanzia di correttezza formale del codice ...



guarda antonio, su questo punto sfondi una porta aperta con me.
parla con piero riguardo alla filosofia del sito, non venire a dirlo a me.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:48
Venerdì, 19/02/2010
Testo quotato

Postato originariamente da HeDo:
... su questo punto sfondi una porta aperta con me.
parla con piero ...



Volevo solo seguire la "linea gerarchica" ... moderatore - amministratore ... :)


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 11:10
Venerdì, 19/02/2010
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da HeDo:
... su questo punto sfondi una porta aperta con me.
parla con piero ...



Volevo solo seguire la "linea gerarchica" ... moderatore - amministratore ... :)



sisi, non ti preoccupare :)

cmq se cambia qualcosa ti offro una birra

PM Quote
Avatar
streghetta (Normal User)
Newbie


Messaggi: 20
Iscritto: 19/02/2010

Segnala al moderatore
Postato alle 11:23
Venerdì, 19/02/2010
Testo quotato

Postato originariamente da nessuno:

Esiste un costruttore di default (come anche un costruttore di copia di default).

char y2[25] rappresenta un array di char (e non di oggetti di tipo char). Il char non è un oggetto ma un tipo primitivo.

Infine, hai trovato un esempio fatto male ... L'array di char dovrebbe essere privato, doveva essere allocato nel costruttore (così come è eliminato nel distruttore) e l'allocazione doveva essere controllata...

Prova a migliorare tu il codice.



...quindi,se ho capito bene,dovrei inserire l'array di char come privato e sempre come privato,creare un costruttore e un distruttore??
Invece,per allocazione controllata cosa intendi??(te lo chiedo in modo da modificare il programma e capirlo!)
Sto consultando un manuale ma sulla definizione delle classi...quando gli attributi devono essere public o private...non sono tanto sicura perciò mi ero rivolta a voi...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:46
Venerdì, 19/02/2010
Testo quotato

Postato originariamente da streghetta:
dovrei inserire l'array di char come privato



Sì ...

Testo quotato

e sempre come privato,creare un costruttore e un distruttore??



No ... il costruttore e il distruttore sono pubblici.

Nel costruttore allochi la memoria che devi utilizzare, nel distruttore la distruggi.

Testo quotato

Invece,per allocazione controllata cosa intendi??



Che devi essere sicura che l'allocazione sia andata a buon fine.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo