Domanda Risolto Tipo variabile numerica adatta

Stato
Discussione chiusa ad ulteriori risposte.

martinbk.

Utente Electrum
18 Ottobre 2009
151
21
27
127
Ultima modifica:
Ciao a tutti. Mentre scrivevo un programma che fa dei calcoli con pow, sin e cos, mi sono accorto che più scrivevo codice e più i risultati fossero sbagliati, nonostante fossero corretti nel caso commentassi le parti di codice seguenti. Mi sono accorto che cambiando i tipi di variabile questi risultati cambiavano a loro volta (e di molto). Vorrei sapere che tipo di variabile dovrei utilizzare per double long vettore[2], matrice[3][3], angolo; o quale può essere il problema della non riuscita.

Per fare un esempio: prima faccio cout dopo ogni calcolo e poi stampo la prima riga della matrice con un ciclo for ottenendo risultati diversi.

C++:
#include <iostream>
#include <math.h>

using namespace std;

int main() {
    //DICHIARAZIONE VARIABILI
    double long vettore[2], matrice[3][3], angolo;
    vettore[0] = 1.0; //x
    vettore[1] = 1.0; //y
    vettore[2] = 1.0; //z
    angolo = 120.0;
    const double PI = 3.14;

    //CALCOLO COMPONENTI MATRICE - PRIMA COLONNA
    matrice[1][1] = pow(vettore[0], 2) + cos(angolo * PI / 180) * (1 - pow(vettore[0], 2));
    matrice[1][2] = (1 - cos(angolo * PI / 180)) * vettore[1] * vettore[2] + (sin(angolo * PI / 180)) * vettore[2];
    matrice[1][3] = (1 - cos(angolo * PI / 180)) * vettore[2] * vettore[0] - (sin(angolo * PI / 180)) * vettore[1];

    cout << "PRIMA COLONNA" << endl;
    cout << matrice[1][1] << endl;
    cout << matrice[1][2] << endl;
    cout << matrice[1][3] << endl;

    //CALCOLO COMPONENTI MATRICE - SECONDA COLONNA
    matrice[2][1] = (1 - cos(angolo * PI / 180)) * vettore[0] * vettore[1] - (sin(angolo * PI / 180)) * vettore[2];
    matrice[2][2] = pow(vettore[1], 2) + (1 - pow(vettore[1], 2)) * cos(angolo * PI / 180);
    matrice[2][3] = (1 - cos(angolo * PI / 180)) * vettore[1] * vettore[2] + (sin(angolo * PI / 180)) * vettore[0];

    cout << "SECONDA COLONNA" << endl;
    cout << matrice[2][1] << endl;
    cout << matrice[2][2] << endl;
    cout << matrice[2][3] << endl;

    //CALCOLO COMPONENTI MATRICE - TERZA COLONNA
    matrice[3][1] = (1 - cos(angolo * PI / 180)) * vettore[2] * vettore[0] + (sin(angolo * PI / 180)) * vettore[1];
    matrice[3][2] = (1 - cos(angolo * PI / 180))* vettore[1] * vettore[2]- (sin(angolo * PI / 180)) * vettore[0];
    matrice[3][3] = pow(vettore[2], 2) + (1 - pow(vettore[2], 2)) * cos(angolo * PI / 180);

    cout << "TERZA COLONNA" << endl;
    cout << matrice[3][1] << endl;
    cout << matrice[3][2] << endl;
    cout << matrice[3][3] << endl;

    //STAMPA MATRICE - PRIMA RIGA

    cout << endl << "PRIMA RIGA" << endl << endl ;
    for(int x=1;x<4;x++){
      cout << matrice[1][x];
      cout << "  ";
   }
return 0;
}

Questo è l'output:

J8inAe1.png
 
Risolto, non avevo in mente il funzionamento corretto dell'array. Mettevo indice 2 quando avevo bisogno di tre elementi.
 
Stato
Discussione chiusa ad ulteriori risposte.