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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Crear matriz partiendo de un vector ingresado
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear matriz partiendo de un vector ingresado  (Leído 2,931 veces)
Faceless

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Crear matriz partiendo de un vector ingresado
« en: 5 Octubre 2016, 05:14 am »

Buenas, necesito ayuda con la siguiente parte que se pide para el programa, por que en verdad no se me ocurre como hacerlo:

Citar
el programa llama a la función "calcular_matriz" la
 cual debe calcular una matriz cuadrada cuyo numero de filas y de
 columnas es igual a la longitud del vector. En la fila 'k' y columna
 'n' de debe almacenar la suma de todos los números del vector que se
encuentran entre las posiciones 'k' y 'n' incluyendo a estas
 últimas. Por ejemplo, si el vector es [1 2 3 4 5] con k=1 y n=3,
 entonces en la fila 1 y conlumna 3 de la matriz se debe poner el
 numero vector[1]+vector[2]+vector[3] = 2+3+4 = 9 y lo mismo vale si
 k=3 y n=1. Es decir que la matriz resultante es simétrica.


El programa consiste en que se almacena un vector de máximo 10 digitos enteros. Se pueden almacenar menos numeros introduciendo un entero negativo al final del vector, el cual no va a ser almacenado.

 El vector es impreso en pantalla

Luego la función que calcula la matriz debe crear una matriz de numero de filas y columnas iguales a la longitud del vector hecha a partir del vector de la manera en que mencioné arriba, y por último debe ser impresa, quedando por ejemplo:

Citar
Ingrese los numeros del vector: 7 6 5 4 3 2 1 -1

 El vector es: 7 6 5 4 3 2 1

 La matriz es:

    7   13   18   22   25   27   28
   13    6   11   15   18   20   21
   18   11    5    9   12   14   15
   22   15    9    4    7    9   10
   25   18   12    7    3    5    6
   27   20   14    9    5    2    3
   28   21   15   10    6    3    1


Aquí dejo lo que tengo hecho del programa, solo me falta la función calcular_matriz e imprimir_matriz, tengan en cuenta que soy nuevo en esto de la programación, aunque no se me exige mucho con este programa :

Código:
#include<iostream>

using namespace std;
const int MAX = 10;

void cargar_vector(int [],int& );
void imprimir_vector(int [],int );

void calcular_matriz(double [][],int [],int);

void imprimir_matriz(double [][],int )

int main
{

int vector[MAX];
int longitud;
double matriz[MAX][MAX];

        cargar_vector(vector,longitud);

    imprimir_vector(vector,longitud);
     
        calcular_matriz(matriz, vector, longitud);
   
        imprimir_matriz(matriz, longitud);


       
return 0;
}

void cargar_vector(int V[],int& L)
{
    int i;
    cout<<"Ingrese los numeros del vector:"<<endl;   
    for(i=0;i<MAX;i++)
    {
        cin>>V[i];
       
       
        if(V[i]<0)
        {
            V[i]=0;
            break;
        }
       
        else if(V[i]>=0)
        {
            L++;
           
        }
        if(L>10)
            {
                L=10;  // EL PROGRAMA PERMITE INGRESAR NUMEROS UNO AL LADO DEL
            }              // OTRO, SEPARADOS POR UNO O MAS ESPACIOS, ENTONCES , SI
                                       // SE INGRESA MAS DE 10 NUMEROS, EL PROGRAMA TOMA 10.

       
    }


return;
}


void imprimir_vector(int V[],int L)
{
    int j;
   
    cout<<"El vector es :  ";
    for(j=0;j<L;j++)
    {
        cout<<V[j]<<" ";
    }
    cout<<endl;
    return;
   
}

void calcular_matriz(double M[][],int V[],int L)
{

}

void imprimir_matriz(double M[][],int L)
{

}
     


En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Crear matriz partiendo de un vector ingresado
« Respuesta #1 en: 5 Octubre 2016, 18:42 pm »

Pues si que es un problema interesante, y me esta dando un verdadero dolor de cabeza hacerlo, lo que no entiendo es si eres nuevo en programación porque te complicas tanto con funciones, hazlo todo de una vez en el main, no es un código muy largo, o al menos, hasta que tengas el algoritmo resuelvas la matriz.

algo así es suficiente, sigo echandole cabeza al algoritmo porque simplemente es mucho más complicado de lo que parece, alguien más se suma??

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int numero = 7; // número máximo para el control del ciclo
  8.    int elementosMatriz[numero] = {7, 6, 5, 4, 3, 2, 1}; // números base de la matriz
  9.    int matrizAutomatica[numero][numero]; // matriz de forma filas X columnas
  10.  
  11.  
  12.    // Imprimiendo los números base
  13.    for(int i=0; i<numero; i++)
  14.    {
  15.        cout << elementosMatriz[i] << " - ";
  16.    }
  17.  
  18.    cout << endl << endl;
  19.  
  20.    // realizando el cálculo de los números
  21.    for(int fila=0; fila<numero; fila++){
  22.        for(int columna=fila; columna<numero; columna++) // toma el valor de cada fila para realizar cada sumatoria
  23.        {
  24.            if(fila == columna) // si son iguales fila y columna asigna el valor de la Base (diagonal)
  25.            {
  26.                matrizAutomatica[fila][columna] = elementosMatriz[fila];
  27.            }
  28.  
  29.            else
  30.            {
  31.              int Sumatoria = matrizAutomatica[fila][columna-1] + elementosMatriz[columna]; // variable temporal de sumatoria
  32.  
  33.              // asignado en forma de espejo, de forma simetrica
  34.              matrizAutomatica[fila][columna] = Sumatoria; // asignando en cada columna de la fila de la matriz
  35.              matrizAutomatica[columna][fila] = Sumatoria; // asignando en cada fila de la columna de la matriz
  36.            }
  37.        }
  38.    }
  39.  
  40.    //Imprimiendo la matriz
  41.    for(int fila=0; fila<numero; fila++){
  42.        for(int columna=0; columna<numero; columna++)
  43.        {
  44.            cout << matrizAutomatica[fila][columna] << " - ";
  45.        }
  46.  
  47.        cout << endl;
  48.    }
  49.  
  50.    return 0;
  51. }
  52.  

Slds


« Última modificación: 6 Octubre 2016, 00:27 am por dato000 » En línea


MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Crear matriz partiendo de un vector ingresado
« Respuesta #2 en: 5 Octubre 2016, 20:46 pm »

Te lo voy a dar en seudocódigo.
Un bucle que recorra las filas, índice i.
Un bucle que recorra las columnas de una forma especial, índice j.
Una variable llamada size guarda el tamaño del vector
Código:
Bucle i desde 0 hasta size - 1:
    tabla[i,i] = vector[i]
    var suma = vector[i]
    Bucle j desde i - 1 hasta 0
        suma = suma + vector[j]
        tabla[i,j] = suma
    suma = vector[i]
    Bucle j desde i + 1 hasta size - 1:
        suma = suma + vector[j]
        tabla[i,j] = suma
o usando triquiñuelas
Código:
Bucle i desde 0 hasta size - 1:
    tabla[i,i] = vector[i]
    var suma = vector[i]
    Bucle j desde i - 1 hasta 0
        suma = suma + vector[j]
        tabla[i,j] = suma
        tabla[j,i] = suma

Al terminar la tabla estará rellenada.
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Crear matriz partiendo de un vector ingresado
« Respuesta #3 en: 5 Octubre 2016, 20:56 pm »

personalmente no entiendo eso de Bucle j desde i - 1 hasta 0, pero finalmente di con el problema, era que tenia que inicializar el valor de columna con el de la fila para realizar la sumatoria en cada fila y luego añadirla como un espejo en las columnas.

Dejo el código editado arriba
En línea


MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Crear matriz partiendo de un vector ingresado
« Respuesta #4 en: 5 Octubre 2016, 21:08 pm »

bucle j desde i - 1 hasta 0:
Código:
for( j = i-1; j >= 0; --j)
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Crear matriz partiendo de un vector ingresado
« Respuesta #5 en: 5 Octubre 2016, 21:21 pm »

ah capto, entonces empiezas desde el final, eso seria más complicado no???
En línea


MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Crear matriz partiendo de un vector ingresado
« Respuesta #6 en: 5 Octubre 2016, 21:47 pm »

La idea es:
i se mueve desde la primera fila hasta la última. Como se trata de una tabla cuadrada
Código:
tabla[i][i]
se mueve en la diagonal.
Ahora si se hace uso de j partiendo desde i - 1 hasta 0 y a cada paso se va sumando su posición anterior, se tiene que se rellena la tabla desde la diagonal hacia la izquierda de la forma deseada.
Lo mismo se hace después desde i + 1 hasta size - 1, que en código sería:
Código:
for(j = i + 1; j < size; ++j)
haciendo uso del algoritmo descrito anteriormente, con lo que se rellenará la tabla desde la diagonal hacia la derecha.
En línea

Faceless

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Crear matriz partiendo de un vector ingresado
« Respuesta #7 en: 5 Octubre 2016, 23:41 pm »

Muchas gracias a ambos por su ayuda!  :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pasar matriz a vector
Programación C/C++
mapers 1 5,276 Último mensaje 11 Diciembre 2010, 04:59 am
por Siuto
extraer un vector de una matriz
Programación C/C++
pastyto 4 7,014 Último mensaje 22 Enero 2012, 05:40 am
por pastyto
Matriz con Vector auxiliar
Programación C/C++
brunojuy 1 2,056 Último mensaje 10 Septiembre 2012, 23:50 pm
por durasno
Crear un script partiendo de fichero cvs windows server 2008
Windows
betto92 1 3,589 Último mensaje 23 Octubre 2013, 01:29 am
por ccrunch
Matriz de controles MenuStrip partiendo modo diseño (VBasic 2013) (Solucionado)
.NET (C#, VB.NET, ASP)
Tazmania40 6 4,900 Último mensaje 14 Octubre 2015, 11:55 am
por Tazmania40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines