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++ - Funzioni senza argomenti
Forum - C/C++ - Funzioni senza argomenti - Pagina 2

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


Messaggi: 20
Iscritto: 19/02/2010

Segnala al moderatore
Postato alle 19:13
Mercoledì, 24/02/2010
Ho rifatto il programma ex novo e ho inserito anche la funzione di sottrazione.Ma ho ancora dei problemi.Posto il codice e poi ti spiego.
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Operazione
  6. {
  7.       public:
  8.          Operazione();
  9.          
  10.          int addizione();
  11.          int sottrazione();
  12.          
  13.          char operatore;
  14.          void setx();
  15.          void sety();
  16.          
  17.       private:
  18.          int x;
  19.          int y;
  20. };
  21.  
  22. Operazione::Operazione()
  23. {
  24.   x=y=0;
  25. }
  26.  
  27. int Operazione::addizione()
  28. {
  29.        return (x + y);
  30. }
  31.  
  32. int Operazione::sottrazione()
  33. {
  34.          return (x - y);
  35. }
  36. //definizione funzione di acquisizione
  37. void Operazione::setx()
  38. {
  39.       int a;
  40.       cin >> a;
  41.       //associazione del valori immesso
  42.       //in input alla variabile privata
  43.       x=a;
  44. }
  45.  
  46. void Operazione::sety()
  47. {
  48.       int b;
  49.       cin >> b;
  50.       y=b;
  51. }
  52.    
  53. int main()
  54. {
  55.     int risultato;
  56.     int scelta;
  57.     scelta = 0;
  58.     Operazione op;
  59.  
  60.     while( scelta == 0)        
  61.    {  
  62.        cout << "Inserisci il primo numero: ";  
  63.        op.setx();
  64.        cout << "Inserisci il secondo numero: ";  
  65.        op.sety();
  66.  
  67.        cout << "Operatore: ";      
  68.        cin >> op.operatore;
  69.        
  70.        switch(op.operatore)          
  71.        {
  72.            case '+':                      
  73.                risultato = op.addizione();
  74.            break;                          
  75.            case '-':
  76.               risultato = op.sottrazione();
  77.            break;
  78.            default:                    
  79.               cout << "L'operatore che hai inserito non e' valido!" <<std::endl;
  80.            continue;
  81.        }
  82.  
  83.        cout << std::endl;
  84.        cout <<"Il risultato dell'operazione e': " << risultato <<std::endl;
  85.        cout <<"Voui eseguire altre operazioni?" <<std::endl;
  86.        cout <<"Premi 0 per continuare,qualsiasi altro numero per uscire!" <<std::endl;
  87.        cin >> scelta;            
  88.    }
  89.    return 0;
  90. }



Il programma funzione,ma:
1.l'operatore l'ho messo pubblico perchè mettendolo privato non sono riuscita ad applicare la funzione set() su un char (...non so se si può fare)
2.ho utilizzato solo set() e non get():è corretto lo stesso?
3.se inserisco un carattere anzichè un numero...è la fine!non funziona!ci vorrebbe un controllo nelle funzioni setx() e sety()...potresti aiutarmi?
spero di essermi spiegata...e grazie ancora!

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 19:31
Mercoledì, 24/02/2010
Ci sono parecchie cose da vedere....magari prima di proseguire dovresti prenderti una pausa per leggerti qualche manuale sul c++.

comunque, passiamo al programma:

-"char operatore" deve essere messo come private, non lasciarlo come public. Si può fare e DEVE essere fatto.

-setx e sety non ricevono in ingresso nessun parametro. Come ti avevo detto, non è bene che i metodi di classe usino funzioni di I/O. La cin deve essere usata dal programmatore, che deve essere libero di scegliere se prendere i dati dalla console o da un file di testo(per esempio). Quindi, è bene che i set prendano in ingresso il dato da salvare nella classe.

-Il get deve essere usato quando vuoi permettere all'utilizzatore di leggere i valori salvati: devi decidere tu se usarlo o no. Di norma è bene metterlo per tutti quei parametri che non è essenziale nascondere all'interno della classe.

-Se tu inserisci un carattere al compilatore va bene lo stesso perché tutto avviene a runtime ma la cin "mette" il risultato in una variabile intera. Ovvio che ti manda tutto in palla. Ci sono dei modi ovviamente per risolvere il problema ma non devi pensarci tu: se la persona inserisce un carattere quando tu chiedi un numero allora la colpa è sua, tu devi infischiartene.

PM Quote
Avatar
streghetta (Normal User)
Newbie


Messaggi: 20
Iscritto: 19/02/2010

Segnala al moderatore
Postato alle 19:42
Mercoledì, 24/02/2010
Per la questione dell'iserimento di un carattere avevo pensato a questa soluzione,ma ovviamente non so se è giusta.Ti posto solo ciò che ho cambiato
Codice sorgente - presumibilmente C#

  1. class Operazione
  2. {
  3.       public:
  4.          Operazione();
  5.          
  6.          double addizione();
  7.          double sottrazione();
  8.          
  9.          char operatore;
  10.          void setx();
  11.          void sety();
  12.          
  13.       private:
  14.          double x;
  15.          double y;
  16.          char x1[20];
  17.          char y1[20];
  18. }
  19. void Operazione::setx()
  20. {  
  21.       cin >> x1;
  22.       x=atof(x1);
  23. }
  24.  
  25. void Operazione::sety()
  26. {
  27.       cin >> y1;
  28.       y=atof(y1);
  29. }


In questo modo è come se il compilatore considerasse 0 tutto ciò che viene inserito al posto di un numero.
Per quanto riguarda il char operatore...sto leggendo un manuale,thinking in c++,ma su questa cosa mi sono bloccata e non sono riuscita ad andare avanti...vedrò cosa riesco a fare perchè non è una mancanza di lettura ma un non riuscire ad applicare le cose.
Ho provato ad applicare la funzione set() su un char ma non va.
Cmq grazie...

Ultima modifica effettuata da streghetta il 24/02/2010 alle 19:42
PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 19:50
Mercoledì, 24/02/2010
Testo quotato

Postato originariamente da streghetta:

Per la questione dell'iserimento di un carattere avevo pensato a questa soluzione,ma ovviamente non so se è giusta.Ti posto solo ciò che ho cambiato
Codice sorgente - presumibilmente C#

  1. class Operazione
  2. {
  3.       public:
  4.          Operazione();
  5.          
  6.          double addizione();
  7.          double sottrazione();
  8.          
  9.          char operatore;
  10.          void setx();
  11.          void sety();
  12.          
  13.       private:
  14.          double x;
  15.          double y;
  16.          char x1[20];
  17.          char y1[20];
  18. }
  19. void Operazione::setx()
  20. {  
  21.       cin >> x1;
  22.       x=atof(x1);
  23. }
  24.  
  25. void Operazione::sety()
  26. {
  27.       cin >> y1;
  28.       y=atof(y1);
  29. }


In questo modo è come se il compilatore considerasse 0 tutto ciò che viene inserito al posto di un numero.
Per quanto riguarda il char operatore...sto leggendo un manuale,thinking in c++,ma su questa cosa mi sono bloccata e non sono riuscita ad andare avanti...vedrò cosa riesco a fare perchè non è una mancanza di lettura ma un non riuscire ad applicare le cose.
Ho provato ad applicare la funzione set() su un char ma non va.
Cmq grazie...


Non ci sei ancora !!!
A che serve creare una classe che storicizza un operatore, se poi devi fare tu un controllo ?
Se fai così è più figo ed è anche più corretto:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Operazione
  5. {
  6.     private:
  7.         int x;
  8.                 int y;
  9.                 char operatore;
  10.  
  11.                 int addizione ();
  12.                 int sottrazione ();
  13.         public:
  14.                 Operazione ();
  15.  
  16.                 int risultato ();
  17.  
  18.                 void setx (int a);
  19.                 void sety (int b);
  20.                 bool setOperazione (char operazione);
  21.                 bool setAll (int a, char op, int b);
  22. };
  23.  
  24. int main() {
  25.         bool controllo = false;
  26.  
  27.         while (!controllo) {
  28.                 char operatore;
  29.                 int a, b;
  30.                 Operazione op;
  31.                 cout << "Insere il calcolo da eseguire nella forma <primo numero> <operatore> <secondo numero>\n>> ";
  32.                 cin >> a >> operatore >> b;
  33.                 if (!op.setAll (a, operatore, b)) {
  34.                         cout << "Errore di lettura!!!\n";
  35.                         continue;
  36.                 }
  37.                 cout <<"Risultato: " << op.risultato() << endl;
  38.                 cout <<"Voui eseguire altre operazioni?" << endl;
  39.                 cout <<"Premi 0 per continuare, qualsiasi altro numero per uscire!" << endl;
  40.                 cin >> controllo;
  41.         }
  42.         return 0;
  43. }
  44.  
  45. Operazione::Operazione() {
  46.         x = y = 0;
  47. }
  48.  
  49. int Operazione::addizione() {
  50.         return (x + y);
  51. }
  52.  
  53. int Operazione::sottrazione() {
  54.         return (x - y);
  55. }
  56.  
  57. int Operazione::risultato () {
  58.         if (operatore == '+')
  59.                 return addizione();
  60.         else
  61.                 return sottrazione();
  62. }
  63.  
  64. void Operazione::setx(int a) {
  65.         x = a;
  66. }
  67.  
  68. void Operazione::sety(int b) {
  69.         y = b;
  70. }
  71.  
  72. bool Operazione::setOperazione (char operazione) {
  73.                 if (operazione != '-')
  74.                         if (operazione != '+')
  75.                                 return false;
  76.                 operatore = operazione;
  77.                 return true;
  78. }
  79.  
  80. bool Operazione::setAll(int a, char op, int b) {
  81.                 setx(a);
  82.                 sety(b);
  83.                 return setOperazione (op);
  84. }


E senza far leggere all'oggetto *_*

Ultima modifica effettuata da Xaratroom il 24/02/2010 alle 19:57
PM Quote
Avatar
streghetta (Normal User)
Newbie


Messaggi: 20
Iscritto: 19/02/2010

Segnala al moderatore
Postato alle 20:06
Mercoledì, 24/02/2010
1.perchè metti le operazioni private?
2.non ho capito le due funzioni  bool setOperazione (char operazione);
                                 bool setAll (int a, char op, int b);
E cmq non funziona nè se inserisco un carattere (va tutto in palla),nè se inserisco un operatore diverso da + e -, nè se voglio uscire:va sempre in palla!quindi...perchè più corretto??

PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 20:22
Mercoledì, 24/02/2010
Testo quotato

Postato originariamente da streghetta:

1.perchè metti le operazioni private?
2.non ho capito le due funzioni  bool setOperazione (char operazione);
                                 bool setAll (int a, char op, int b);
E cmq non funziona nè se inserisco un carattere (va tutto in palla),nè se inserisco un operatore diverso da + e -, nè se voglio uscire:va sempre in palla!quindi...perchè più corretto??


Guarda che a me funziona abbastanza bene ... devi solo mettere un controllo sul cin.

I metodi di somma e sottrazione puoi tranquillamente metterli pubblici se ti aggrada (sono privati solo per coerenza, dal momento che l'oggetto storicizza l'operatore), ma gli attributi no

Nel costruttore c'è un errore
Codice sorgente - presumibilmente Plain Text

  1. Operazione::Operazione() {
  2.         x = y = 0;
  3.         operatore = '+';
  4. }



Xaratroom ha allegato un file: Immagine.jpg (30965 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da Xaratroom il 24/02/2010 alle 20:23
PM Quote
Avatar
streghetta (Normal User)
Newbie


Messaggi: 20
Iscritto: 19/02/2010

Segnala al moderatore
Postato alle 20:43
Mercoledì, 24/02/2010
Quando dico che non funziona mi riferisco al controlla sull'inserimento dei caratteri e all'uscita:inserendo 0 va avanti ma inserendo un altro intero va in palla,come per il carattere!

PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 21:03
Mercoledì, 24/02/2010
Testo quotato

Postato originariamente da streghetta:

Quando dico che non funziona mi riferisco al controlla sull'inserimento dei caratteri e all'uscita:inserendo 0 va avanti ma inserendo un altro intero va in palla,come per il carattere!


Si avevo messo controllo bool
Codice sorgente - presumibilmente C++

  1. int main() {
  2.         int controllo = 0;
  3.  
  4.         while (!controllo) {
  5.                 char operatore;
  6.                 int a, b;
  7.                 Operazione op;
  8.                 cout << "Insere il calcolo da eseguire nella forma <primo numero> <operatore> <secondo numero>\n>> ";
  9.                 cin >> a >> operatore >> b;
  10.                 if (!op.setAll (a, operatore, b)) {
  11.                         cout << "Errore di lettura!!!\n";
  12.                         continue;
  13.                 }
  14.                 cout <<"Risultato: " << op.risultato() << endl;
  15.                 cout <<"Voui eseguire altre operazioni?" << endl;
  16.                 cout <<"Premi 0 per continuare, qualsiasi altro numero per uscire!" << endl;
  17.                 cin >> controllo;
  18.         }
  19.         return 0;
  20. }


PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo