Multiplicación de vectores C++

Iniciado por LauraD, 20 Junio 2014, 04:48 AM

0 Miembros y 1 Visitante están viendo este tema.

LauraD

Hola!!

Tengo que realizar el siguiente algoritmo:
Construya un algoritmo que realice la siguiente operación. Sean 2 vectores numéricos A y B de 9 elementos numéricos cada uno. El vector A se debe llenar solo con valores pares y el vector B solo con valores impares. En un vector C guarde el resultado de ejecutar 3A + 2B. Imprima el vector C en forma descendente. Determine el promedio del vector A y el promedio del Vector B.

Se presentan errores al realizar las multiplicaciones he intentado de varias formas pero no logro obtener un buen resultado y no sé como realizar la impresión en forma descendente! :c

Les agradeceria si lograran ayudarme este es el codigo

int main()
{
    int A[9];
    int B[9];
    int C[9];
    int sum1;
    int sum2;
    int prom1;
    int prom2;
    int num;
    int n;
    int p;
    int i;
    int multi;
    int mul;

   
    n = 0;
    sum1 = 0;
    sum2 = 0;
   
   
   
        for (p=0;p<9;p++)
        {
           cout<<"Ingrese un numero par"<<endl;
           cin>>A[p];
           
           sum1=sum1+A[p];
           A[p]*3;
           
        }
       
        for (i=0;i<9;i++)
        {
            cout<<"Ingrese un numero impar"<<endl;
            cin>>B[i];
           
            sum2=sum2+B[i];
            B[i]*2;
        }
       
        C[p]= A[p] + B[i];
         
         n++;
   
   
    prom1 = sum1/9;
    prom2 = sum2/9;
   
    cout<<"La suma de 3A + 2B es igual a: "<<endl; 
    cout<<C[p]<<", ";
   
    cout<<"\t"<<endl;
   
    cout<<endl<<"El promedio del vector A es igual a: "<<prom1;
    cout<<endl<<"El promedio del vector B es igual a: "<<prom2;

   
system ("PAUSE");
return EXIT_SUCCESS;
}

eferion

A[p]*3;

¿Y dónde dices que tienes que almacenar el resultado de la operación? Para almacenar un valor hay que usar en alguna parte el operador de asignación '=' y en esa línea no está... es decir, estás multiplicando el valor del vector por 3 pero tiras el resultado a la basura.

Además:

Código (cpp) [Seleccionar]

for (p=0;p<9;p++)
{

}
       
for (i=0;i<9;i++)
{

}
       
C[p]= A[p] + B[i]; // ????


La última línea está fuera de los bucles es decir, únicamente vas a calcular el siguiente resultado:

Código (cpp) [Seleccionar]
C[9] = A[9] + B[9];

Y ¿adivinas qué? A, B y C únicamente tienen 9 posiciones, luego A[9], B[9] y C[9] no existen.

Estás en C++... no hace falta que declares todas las variables al inicio del código. Puedes hacer cosas tal que:

Código (cpp) [Seleccionar]

for( int i=0; i<9; i++)
{
  cout<<"Ingrese un numero par"<<endl;
  cin>>A[i];
  sum1=sum1+A[i];
}

for( int i=0; i<9; i++ )
{
  cout<<"Ingrese un numero impar"<<endl;
  cin>>B[i];
  sum2=sum2+B[i];
}

for( int i=0; i<9; i++ )
  C[i] = A[i] + B[i];


Este código compila y funciona porque la variable "i" que hemos declarado en cada bucle pertenece al bucle... una vez el programa sale del bucle la variable, simplemente, deja de existir (se sale del ámbito). Esta forma de programar tiene sus ventajas, por ejemplo tu código no habría compilado. Esto te habría dado alguna pista acerca del error que tienes en tu código:

Código (cpp) [Seleccionar]

// int p;
// int i;

for ( int p=0;p<9;p++)
{

}
       
for ( int i=0;i<9;i++)
{

}
       
C[p]= A[p] + B[i]; // ERROR: no existe ni 'p' ni 'i'

leosansan

#2
Cita de: LauraD en 20 Junio 2014, 04:48 AM
Hola!!

Tengo que realizar el siguiente algoritmo:
Construya un algoritmo que realice la siguiente operación. Sean 2 vectores numéricos A y B de 9 elementos numéricos cada uno. El vector A se debe llenar solo con valores pares y el vector B solo con valores impares. En un vector C guarde el resultado de ejecutar 3A + 2B. Imprima el vector C en forma descendente. Determine el promedio del vector A y el promedio del Vector B.

Se presentan errores al realizar las multiplicaciones he intentado de varias formas pero no logro obtener un buen resultado y no sé como realizar la impresión en forma descendente! :c

Les agradecería si lograran ayudarme este es el código


Ante semejante petición cualquiera se niega.

Permite me la licencia de hacerte algunas observaciones respecto al código.

* Creo que cuando pusiste:

Código (cpp) [Seleccionar]
A[p]*3;

en realidad querías poner:

Código (cpp) [Seleccionar]
A[i] *= 3;

* Usar una línea para declarar cada variable "desparrama" en exceso el código. Yo te sugiero que agrupes al menos por tipo:

Código (cpp) [Seleccionar]
 int A[N], B[N], C[N];
 int sum1 = 0, sum2 = 0;
 float prom1, prom2;


* Al calcular los promedios necesitas "algo" para que te salgan decimales si procede. Una opción:

Código (cpp) [Seleccionar]
 prom1 = 1. * sum1 / N;
 prom2 = 1. * sum2 / N;


* Deberías usar una confirmación de que el valor introducido es realmente par o impar, y si no lo es volver a pedir el dato:

Con las sugerencias anteriores y a falta de que implementes un método para la ordenación del vector C[]:

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib> /// para "sysstem"
#define N 9

using namespace std;
int main(){
 int A[N], B[N], C[N];
 int sum1 = 0, sum2 = 0;
 float prom1, prom2;
 for (int i = 0; i < N; i++){
   do{
     cout << "Ingrese un numero PAR " << i+1 << ": ";
     cin >> A[i];
     sum1 += A[i];
     A[i] *= 3;
   }while ( A[i] %2 != 0 );
   do{
     cout << "Ingrese un numero IMPAR " << i+1 << ": ";
     cin >> B[i];
     sum2 += B[i];
     B[i] *= 3;
     C[i] = A[i] + B[i];
   }while ( ( B[i] + 1 ) %2 != 0 );
 }
 prom1 = 1. * sum1 / N;
 prom2 = 1. * sum2 / N;
 ///
 cout  << endl << "La suma de 3A + 2B es igual a: " << endl;
 for (int i = 0; i < N; i++)
   cout << C[i] << "   ";
 cout  << endl << "El promedio del vector A es igual a: " <<  prom1 << endl;
 cout << "El promedio del vector B es igual a: " <<  prom2 << endl;
 system ("PAUSE");
 /// Aqui te falta implementar un sistema de ordenacion del C[]
 /// Si no  te quieres liar usa el metodo burbuja
 return EXIT_SUCCESS;
}


Y por cierto, al usar las etiquetas GeSHi elige las de C++ para que el código salga numerado y coloreado.

¡¡¡¡ Saluditos! ..... !!!!



cgg18

Para imprimir el vector  C de forma descendente simplemente puedes utilizar un for de esta forma:


Código (cpp) [Seleccionar]

for (int i = 8; i >= 0 ; i--){
cout << C[i] << " ";
}

leosansan

#4
Cita de: cgg18 en 20 Junio 2014, 20:49 PM
Para imprimir el vector  C de forma descendente simplemente puedes utilizar un for de esta forma:
............................

Pues a mi entender, claro, va a ser que no. De esa forma los imprime al revés pero no ordenados.

Necesita implementar previamente un método que los ordene de mayor a menor, al menos como yo lo entiendo, aunque vaya usted a saber, si no se explican mejor podría ser lo que propones.


¡¡¡¡ Saluditos! ..... !!!!



eferion

Imprimir en orden descendente:

Código (cpp) [Seleccionar]

std::set< int > numeros;
numeros.insert( 3 );
numeros.insert( 1 );
numeros.insert( 2 );

for ( auto it = numeros.rbegin( ); it != numeros.rend( ); ++it )
  std::cout << *it << " ";


Salida:
Código (cpp) [Seleccionar]
3 2 1