Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - mikem

#1
Es aconsejable usar Matlab y listo, pero me solicitaron utilizar C++.
Este sistema de ecuaciones al ser tridiagonal y cumplir ciertas características puede resolverse aplicando el algoritmo de Thomas (como descomposición LU), utilizando vectores.
Sólo precisaba la visualización de la matriz para que el usuario se entere qué matriz ha de resolverse.
Muchas gracias por responder :)
#2
Hola :).
Necesito sus ayudas para poder armar una matriz a partir de un sistema de ecuaciones, cuyos parámetros son ingresados por el usuario. Sólo preciso la matriz.
El sistema de ecuaciones es el siguiente: https://imageshack.com/i/p5jShAlcj



Los parámetros ingresados por el usuario son k y W .
Lo que me interesa es obtener ésta matriz:

k1+k2        -k2                 0
-ki             ki+ki+1        -ki+1
                 -kn                     kn


(Para enésimas k ingresadas)
Eme aquí el código construido (desastroso) hasta ahora:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
using namespace std;
const int nb=100;

int main()
{
    float D[nb][nb];
    int i,j;
    float m[i][j];
    int nbloques;
    int nresortes;
float w[100];
float k[100];
   
    cout<<"-------------------------------------------\n";
    cout<<"Bienvenido al sistema vertical masa resorte.\n";
    cout<<"Ingrese cantidad de bloques y resortes al sistema:\n"<<endl;
    do{
        cout<<"Cantidad de bloques: ";
        cin>>nbloques;
     
        cout<<"Cantidad de resortes: ";
        cin>>nresortes;
        cout<<endl;
        if((nbloques<nresortes)||(nbloques>nresortes))
         {
                                                     
        cout<<"RECUERDE: el sist. admite igual cantidad de resortes y bloques.\n";
        cout<<endl;
        cout<<"Vuelva a ingresar los par\xa0metros, por favor: \n"<<endl;
            }else
            break;
        }while(1);
       cout<<"Pesos (kg) de cada uno de los bloques:"<<endl;
       
        for(int i=0; i<nbloques; i++)
        { cout<<"Bloque "<<i+1<<": ";
                cin>>w[i];
                cout<<endl;
                }
        for(int i=0; i<nresortes;i++)
                {
                cout<<"Ki del resorte "<<i+1<<": ";
                cin>>k[i];
                cout<<endl;
                }
cout<<"El sistema matricial a resolver:\n"<<endl;

//------AQUI COMIENZA EL HORROR
             for (int i=0; i<(nbloques+1); i++)
             for (int j=0; j<(nbloques+1); j++)
              {
             if(i==0 && j==1)
             {
                    m[i][j]=-k[0];
             }
             else if((i==0) && (j==nbloques+1))
             {
                  m[i][j]=0;
              }
              else if((j==0) && (i==nbloques+1))
              {
                   m[i][j]=0;
                   }
              else if(i==j)
              {
                   m[i][j]=k[j+1]+k[i];
                   }
              else
              {
                  m[i][j]=-k[(j+1)-i];
                  }
             }
             
          for (int i=0; i<(nbloques+1); i++)
             for (int j=0; j<(nbloques+1); j++)
             {
                 cout<<m[i][j]<<endl;
                 }     
        system("pause");         
}


#3
Excelente, muchas gracias. Un error tonto, a ponerse los anteojos...

Otro detalle, para obtener la DIAGONAL PRINCIPAL, la sección del código debe quedar así:
Código (cpp) [Seleccionar]

void Diag (int a[TAM][TAM], int n, int d[TAM])
{
cout<<"Te voy a dar la diagonal principal: \n\n";
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
d[i]=a[i][i]; //<---CORRECCIÓN
}





Hola. Quiero saber cómo hacer para que se imprima la CANTIDAD de ELEMENTOS NULOS de la matriz pero SÓLO LOS QUE ESTÁN ARRIBA (por encima, sobre) de LA DIAGONAL PRINCIPAL.
Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;
const int TAM=4;
int main()

{
int nonul=0;
int c=0;
int M[TAM][TAM]={1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

int i,j;
//---------------------------------EL ERROR ESTÁ AQUÍ:
 for (int i=0; i<=TAM-2; i++)
 for (int j=1; j<=TAM-1; j++)
 if(M[i][j]==0)
 {
c++;
}
cout<<"nulos:"<<c<<endl;

}
#4
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <stdio.h>
using namespace std;
const int TAM=10;

//Prototipos de funciones:

void Leer(int a [TAM][TAM],int n);
void Imprimir (int a[TAM][TAM], int n);

void Diag (int a [TAM][TAM], int n, int d[TAM]);
void Printdiag (int d[TAM], int n);

int main ()
{
int n;
int i,j;
int a[TAM][TAM];
int d[TAM];

do
{

cout<<"Ingrese tam. de la matriz, por favor: \n";
cin >>n;

}
while (n<1 || n>TAM);
if (n<1 || n>TAM)
{
cout<<"Invalido. \n";
}
//Llamada de funciones:
Leer (a,n);
Imprimir (a,n);
system ("PAUSE");
system ("cls");
Diag (a,n,d);
Printdiag (d,n);
}
void Leer (int a [TAM][TAM], int n)
{
cout<<"Ingrese datos a la matriz: \n \n";
int i,j;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
cin >>a[i][j];
}
}
void Imprimir (int a [TAM][TAM], int n)
{
cout<<"La matriz ingresada es: \n";
for(int i=0; i<n; i++)
for (int j=0; j<n; j++)
cout <<setw(3)<<a[i][j]<<"\n\n";
}
void Diag (int a[TAM][TAM], int n, int d[TAM])
{
cout<<"Te voy a dar la diagonal principal: \n\n";
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
d[i]==a[i][j];
}

void Printdiag (int d[TAM], int n)
{
//AQUÍ ESTÁ EL PROBLEMA:
//¿por qué no imprime el vector d como corresponde?
//Sale en pantalla todos números raros...
for (int i=0; i<n; i++)
cout<<d[i];
}

¿Qué cosa debería modificar?
Saludos :D