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++ - Visual C++ express non mi riconosce POW()
Forum - C/C++ - Visual C++ express non mi riconosce POW()

Avatar
simone97 (Normal User)
Newbie


Messaggi: 14
Iscritto: 28/03/2010

Segnala al moderatore
Postato alle 20:33
Venerdì, 28/05/2010
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5.  
  6. int main(){
  7.         double rad;
  8.         float b, e;
  9.  
  10.         cout<<"Inserisci la base: ";
  11.         cin>>b;
  12.         cout<<"\nInserisci l'esponente: ";
  13.         cin>>e;
  14.        
  15.         rad = pow(b, 1.0 / e);
  16.         cout<<endl<<"La radice e': "<<rad<<endl;
  17.  
  18.         system("pause");
  19. }



mi evidenzia POW, eppure la cmath l'ho inclusa, dov'è il problema??

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:49
Venerdì, 28/05/2010
double rad, b, e;


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 12:51
Sabato, 29/05/2010

è un problema di cast, nè di pow nè di visual c++ :)

PM Quote
Avatar
simone97 (Normal User)
Newbie


Messaggi: 14
Iscritto: 28/03/2010

Segnala al moderatore
Postato alle 13:36
Sabato, 29/05/2010
grazie :k:

PM Quote
Avatar
BlueWay (Normal User)
Rookie


Messaggi: 49
Iscritto: 21/03/2010

Segnala al moderatore
Postato alle 10:32
Lunedì, 07/06/2010
E in ogni caso, se una funzione standard non viene riconosciuta dal compilatore, ti conviene riscrivertela da te. Non era questo il caso (qui l'errore era tuo), ma la funzione pow potrebbe essere riscritta così:
Codice sorgente - presumibilmente C#

  1. template<class T> double pow2(T &num, int exp)
  2. {
  3.         double num2;
  4.         int i = 0;
  5.         for(i = 0; i < exp; i++)
  6.         {
  7.                 num2 = num * num;
  8.         }
  9.         return num2;
  10. }



In questo modo, non avresti piu il problema del tipo: la funzione accetterebbe qualunque tipo e ritornerebbe sempre un double. Unico problema: accetterebbe anche un tipo non numerico, e li sarebbe da implementare meglio, ma al momento puo bastare

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:45
Lunedì, 07/06/2010
Non credo che sia una buona idea riscrivere le funzioni (già scritte e ottimizzate) della libreria standard.

Se un compilatore non le prevede, non è proprio così standard e quindi non è da utilizzarsi (ma da buttare nel secchio).

Anche perchè si fanno tanti errori nel riscrivere le funzioni già esistenti ... come hai fatto tu ...

Nella riga

num2 = num * num;

infatti, num2 sarà sempre uguale al quadrato di num, per quanto tu possa farla eseguire all'interno di un ciclo (a questo punto, inutile).

Un consiglio ... non riscropriamo l'acqua calda ...


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 10:48
Lunedì, 07/06/2010
Testo quotato

Postato originariamente da BlueWay:

E in ogni caso, se una funzione standard non viene riconosciuta dal compilatore, ti conviene riscrivertela da te. Non era questo il caso (qui l'errore era tuo), ma la funzione pow potrebbe essere riscritta così:
Codice sorgente - presumibilmente C#

  1. template<class T> double pow2(T &num, int exp)
  2. {
  3.         double num2;
  4.         int i = 0;
  5.         for(i = 0; i < exp; i++)
  6.         {
  7.                 num2 = num * num;
  8.         }
  9.         return num2;
  10. }



In questo modo, non avresti piu il problema del tipo: la funzione accetterebbe qualunque tipo e ritornerebbe sempre un double. Unico problema: accetterebbe anche un tipo non numerico, e li sarebbe da implementare meglio, ma al momento puo bastare



Mah... quel codice non porta nessuna parte :)

Codice sorgente - presumibilmente C/C++

  1. int temp = 1;
  2.  
  3. for (int n = 0; n < exp; n++) {
  4.    
  5.     temp *= num;
  6.    
  7. }
  8.  
  9. return temp;



aggiungo una piccola nota: prima di reimplementare librerie almeno si dedichi 10 minuti al testing...

PM Quote
Avatar
BlueWay (Normal User)
Rookie


Messaggi: 49
Iscritto: 21/03/2010

Segnala al moderatore
Postato alle 12:40
Lunedì, 07/06/2010
Ops..... ho pubblicato un codice sbagliato :d Chiedo scusa :d
Ecco il codice corretto:

Codice sorgente - presumibilmente C#

  1. template<class T> double pow2(T &num, int exp)
  2. {
  3.     double num2 = 1;
  4.     int i = 0;
  5.     for(i = 0; i < exp; i++)
  6.     {
  7.         num2 *= num;
  8.     }
  9.     return num2;
  10. }


Ultima modifica effettuata da BlueWay il 07/06/2010 alle 12:42
PM Quote