elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Operaciones con vectores en: 13 Agosto 2011, 02:53 am
Hola a todos, este es mi primer mensaje en el foro así que saludos a todos los miembros. Soy estudiante de 1º de Ingeniería de Software y se me plantea el siguiente problema:

Citar
Implementa un programa que permita realizar operaciones sobre vectores de
dimensión N. El programa deberá mostrar un menú con una opción para cada
una de las siguientes operaciones:
a) Suma de vectores
b) Resta de vectores
c) Módulo de un vector
d) Producto escalar de 2 vectores
e) Producto vectorial de 2 vectores
f) Normalización de un vector
g) Obtención de la componente de mayor valor
Además, habrá una opción de finalización del programa. Los vectores sobre los
que se realizan las operaciones deberán solicitarse por teclado.


Mi programa resuelve estas cuestiones para vectores de dimensión 3.  Mi pregunta es cómo mejoraríais el programa para que pudiera realizar los mismos cálculos para vectores de dimensión definida por el usuario.  Si defino mi struct antes de las funciones, ¿cómo puedo hacer que la longitud del array lo introduzca el usuario?

Gracias!!!

Código
  1. /*
  2.  * Created on 12 de agosto de 2011, 15:19
  3.  */
  4.  
  5. #include <iostream>
  6. #include <cmath>
  7.  
  8. using namespace std;
  9.  
  10. #define N 3
  11. #define PI 3,141592
  12. #define RPG 0,0174532
  13.  
  14. /* Definición del tipo vector de N componentes */
  15.  
  16. typedef struct  {
  17.  
  18.    float vector[N];
  19.  
  20. }tVector;
  21.  
  22. void pedirDatos (tVector &A, tVector&B) {
  23.  
  24.    cout << "Escribe las componentes del vector A: " << endl;
  25.    for (int i=0; i<N; i++)
  26.        cin >> A.vector[i];
  27.    cout << "Escribe las componentes del vector B: " << endl;
  28.    for (int j=0; j<N; j++)
  29.        cin >> B.vector[j];
  30.    }
  31.  
  32. void pedirDatos (tVector &A) {
  33.  
  34.    cout << "Escribe las componentes del vector A: " << endl;
  35.    for (int i=0; i<N; i++)
  36.        cin >> A.vector[i];
  37.  
  38.    }
  39.  
  40. char menuPrincipal () {
  41.  
  42.    char opcion;
  43.    cout << "----- OPCIONES -----" << endl << endl;
  44.    cout << "1: Suma escalar de dos vectores." << endl;
  45.    cout << "2: Resta escalar de dos vectores." << endl;
  46.    cout << "3: Modulo de un vector." << endl;
  47.    cout << "4: Producto escalar de dos vectores." << endl;
  48.    cout << "5: Producto vectorial de dos vectores." << endl;
  49.    cout << "6: Normalizacion de un vector." << endl;
  50.    cout << "7: Obtencion de la componente mayor de un vector." << endl;
  51.    cout << "0: Salir." << endl << endl;
  52.    cout << "Opcion:";
  53.  
  54.    cin >> opcion;
  55.    return opcion;
  56. }
  57.  
  58. tVector sumaEscalar (tVector A, tVector B) {
  59.    tVector vectorSuma;
  60.    for (int i=0; i<N; i++)
  61.        vectorSuma.vector[i]=A.vector[i]+B.vector[i];
  62.    return vectorSuma;
  63.  
  64. }
  65.  
  66. tVector restaEscalar (tVector A, tVector B) {
  67.    tVector vectorResta;
  68.    for (int i=0; i<N; i++)
  69.        vectorResta.vector[i]=A.vector[i]-B.vector[i];
  70.    return vectorResta;
  71.  
  72. }
  73.  
  74. float moduloVector (tVector A) {
  75.  
  76.    float modulo;
  77.    float suma=0;                 //Suma de los componentes del vector
  78.    for (int i=0; i<N; i++) {
  79.    A.vector[i]*=A.vector[i];
  80.    suma+=A.vector[i];
  81.        }
  82.    modulo=sqrt(suma);
  83.    }
  84.  
  85. float productoEscalar (tVector A, tVector B) {
  86.  
  87.    float producto, angulo;
  88.    cout << "Angulo que forman los vectores: ";
  89.    cin >> angulo;
  90.    angulo*=RPG;
  91.    producto=moduloVector(A)*moduloVector(B)*cos(angulo);
  92.    return producto;
  93.  
  94. }
  95.  
  96. tVector productoVectorial (tVector A, tVector B) {
  97.  
  98.    tVector producto;
  99.  
  100.    producto.vector[0]=A.vector[1]*B.vector[2]-A.vector[2]*B.vector[1];
  101.    producto.vector[1]=A.vector[0]*B.vector[2]-A.vector[2]*B.vector[0];
  102.    producto.vector[1]*=-1;
  103.    producto.vector[2]=A.vector[0]*B.vector[1]-A.vector[1]*B.vector[0];
  104.  
  105.    return producto;
  106.  
  107.    }
  108.  
  109. tVector normalizacionVector (tVector A) {
  110.  
  111.    float modulo;
  112.    modulo=moduloVector(A);
  113.  
  114.    for (int i=0; i<N; i++)
  115.        A.vector[i]/=modulo;
  116.  
  117.    return A;
  118.  }
  119.  
  120. float componenteMayor (tVector A) {
  121.  
  122.    float mayor;
  123.    if (A.vector[0]>A.vector[1])
  124.        mayor=A.vector[0];
  125.    else mayor=A.vector[1];
  126.    if (A.vector[1]>A.vector[2])
  127.        mayor=A.vector[1];
  128.    else mayor=A.vector[2];
  129.  
  130.    return mayor;
  131.  
  132. }
  133.  
  134. int main() {
  135.  
  136.    tVector vectorA;
  137.    tVector vectorB;
  138.    tVector vectorResultado;
  139.    char opcion;
  140.    float modulo, producto, mayor;
  141.  
  142.  
  143.  
  144.    do {
  145.    opcion=menuPrincipal();
  146.    switch (opcion) {
  147.  
  148.        /* Suma escalar de dos vectores */
  149.  
  150.        case '1': {
  151.                pedirDatos(vectorA,vectorB);
  152.                vectorResultado=sumaEscalar(vectorA,vectorB);
  153.                cout << "La suma escalar de A y B es: (" << vectorResultado.vector[0]
  154.                        << "," << vectorResultado.vector[1] << "," << vectorResultado.vector[2] << ")";
  155.        }
  156.  
  157.        break;
  158.  
  159.        case '2': {
  160.                pedirDatos(vectorA,vectorB);
  161.                vectorResultado=restaEscalar(vectorA,vectorB);
  162.                cout << "La resta escalar de A y B es: (" << vectorResultado.vector[0]
  163.                        << "," << vectorResultado.vector[1] << "," << vectorResultado.vector[2] << ")";
  164.        }
  165.  
  166.        break;
  167.  
  168.        case '3': {
  169.            pedirDatos(vectorA);
  170.            modulo=moduloVector(vectorA);
  171.            cout << "|A| = " << modulo << endl << endl;;
  172.  
  173.  
  174.        }
  175.  
  176.        break;
  177.  
  178.        case '4': {
  179.            pedirDatos(vectorA,vectorB);
  180.            producto=productoEscalar(vectorA,vectorB);
  181.            cout << "Su producto escalar es: " << producto << endl << endl;
  182.             }
  183.        break;
  184.  
  185.        case '5': {
  186.  
  187.            pedirDatos(vectorA,vectorB);
  188.            vectorResultado=productoVectorial(vectorA,vectorB);
  189.            cout << "El producto vectorial de A y B es (" << vectorResultado.vector[0] << "," <<
  190.            vectorResultado.vector[1] << "," << vectorResultado.vector[2] << ")" << endl << endl;
  191.        }
  192.  
  193.        break;
  194.  
  195.        case '6': {
  196.  
  197.            pedirDatos(vectorA);
  198.            vectorResultado=normalizacionVector(vectorA);
  199.            cout << "El vector asociado a A es (" << vectorResultado.vector[0] << "," <<
  200.            vectorResultado.vector[1] << "," << vectorResultado.vector[2] << ")" << endl << endl;
  201.  
  202.        }
  203.  
  204.        break;
  205.  
  206.        case '7': {
  207.  
  208.            pedirDatos(vectorA);
  209.            mayor=componenteMayor(vectorA);
  210.            cout << "La componente mayor es: " << mayor;
  211.        }
  212.  
  213.        break;
  214.        case '0':
  215.            return 0;
  216.    }
  217.  
  218.    } while (opcion!=0);
  219.  
  220.    return 0;
  221. }

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines