next up previous contents index
Next: Funzioni esponenziali Up: Funzioni matematiche Previous: Funzioni trigonometriche inverse   Indice   Indice analitico

Funzioni potenza

Indichiamo con tale nome le funzioni
double sqrt (double x)
double cbrt (double x)
double pow (double base, double power)
le quali indicano, rispettivamente, le operazioni di estrazione di radice quadrata (la quale fallisce nel caso $x$ sia negativo), estrazione di radice cubica ed elevamento a potenza. Vediamo un esempio, che ci permette di utilizzare qualche formula inversa di geometria solida elementare:


// ex4_7_3.cpp
#include <iostream.h>
#include <math.h>

const double PI = 3.14159265358979323846264338327;

char menu () {
  cout << "\n\nscegli un solido:\n"
    "(a) cubo\n"
    "(b) parallelepipedo\n"
    "(c) cono\n"
    "(d) cilindro\n"
    "(e) sfera\n"
    "(q) esce\n";
  char c;
  do {
    cout << "\t? ";
    cin >> c;
  } while (c != 'a' && c != 'b' && c != 'c' &&
           c != 'd' && c != 'e' && c != 'A' &&
           c != 'B' && c != 'C' && c != 'D' &&
           c != 'E' && c != 'q' && c != 'Q');
  return c;
}

void cubo() {
  double volume;
  cout << "volume? ";
  cin >> volume;
  double spigolo = cbrt(volume);
  cout << "spigolo = " << spigolo;
}

void parallelepipedo() {
  double a, b, c;
  cout << "a? "; cin >> a;
  cout << "b? "; cin >> b;
  cout << "c? "; cin >> c;
  double diagonale = sqrt ( pow(a,2) + pow(b,2) + pow(c,2) );
  cout << "diagonale = " << diagonale;
}

void cono() {
  double volume, altezza;
  cout << "volume? "; cin >> volume;
  cout << "altezza? "; cin >> altezza;
  double areaBase = 3 * volume / altezza;
  double raggioBase = sqrt( areaBase / PI);
  cout << "raggio di base = " << raggioBase;
}

void cilindro() {
  double volume, raggioBase;
  cout << "volume? "; cin >> volume;
  cout << "raggio di base? "; cin >> raggioBase;
  double areaBase = PI * pow(raggioBase, 2);
  double altezza = volume / areaBase;
  cout << "altezza = " << altezza;
}

void sfera() {
  double volume;
  cout << "volume? "; cin >> volume;
  double raggio = cbrt( volume / PI * 3 / 4);
  cout << "raggio = " << raggio;
}

void main () {
  bool continua = true;
  do {
    char comando = menu();
    switch (comando) {
    case 'a': case 'A':
      cubo();
      break;
    case 'b': case 'B':
      parallelepipedo();
      break;
    case 'c': case 'C':
      cono();
      break;
    case 'd': case 'D':
      cilindro();
      break;
    case 'e': case 'E':
      sfera();
      break;
    case 'q': case 'Q':
      continua = false;
      break;
    }
  } while (continua == true);
}

Un altro esempio, il quale può essere facilmente utilizzato in semplici problemi di Fisica, ad esempio, sulle forze, è il seguente:


// ex4_7_6.cpp
#include <iostream.h>
#include <math.h>

void main() {
  // m1, m2: moduli vettore 1 e 2
  // theta : angolo compreso tra essi
  double m1, m2, theta;
  cout << "modulo vettore 1? "; cin >> m1;
  cout << "modulo vettore 2? "; cin >> m2;
  cout << "angolo compreso ? "; cin >> theta;
  // si utilizza la formula di Carnot
  double somma = sqrt ( pow(m1,2) + pow(m2,2) +
                       2 * m1 * m2 * cos(theta) );
  double differenza = sqrt ( pow(m1,2) + pow(m2,2) -
                       2 * m1 * m2 * cos(theta) );
  double prVettore = m1 * m2 * sin(theta);
  double prScalare = m1 * m2 * cos(theta);
  cout << "modulo vettore somma = " << somma << "\n";
  cout << "modulo vettore differenza = " << differenza << "\n";
  cout << "modulo prodotto vettore = " << prVettore << "\n";
  cout << "prodotto scalare = " << prScalare << "\n";
}
esempio di output:
modulo vettore 1? 10
modulo vettore 2? 20
angolo compreso ? 0.7853981634
modulo vettore somma = 27.9793
modulo vettore differenza = 14.7363
modulo prodotto vettore = 141.421
prodotto scalare = 141.421



Claudio Cicconetti
2000-09-06