Dev - C++ - matrices

 
Vista:

matrices

Publicado por juan ro (2 intervenciones) el 08/06/2017 20:45:55
hola buenos dias necesito un programa en c++ que haga lo siguiente:
1- El usuario deberá introducir los coeficientes de las incógnitas, uno detrás de otro, por filas (ecuaciones), de izquierda a derecha, empezando por el correspondiente a la primera fila, primera columna (1,1), siguiendo por la primera fila segunda columna (1,2) , hasta el final de la primera fila; después por la segunda fila, primera columna (2,1), segunda fila, segunda columna (2,2), etc.
2- Una vez entrados los coeficientes de las incógnitas, el usuario deberá entrar los términos independientes del sistema, empezando por el correspondiente a la primera ecuación y terminando por el termino independiente de la última ecuación
3-Dibujar por el terminal el sistema de ecuaciones. Siguiendo con el ejemplo anterior: El SISTEMA introducido es el siguiente:
1.00x + 2.00y -3.00z 3.00x + 1.00y -2.00z 2.00x - 3.00y + 1.00z
= -16.00 = -10.00 = -4.00
4- Calcular si el sistema es compatible determinado, indeterminado o incompatible e indicarlo al usuario.
5- Si el sistema no es compatible determinado, mostrar un error y dar la opción al usuario de volver a entrar otro sistema de ecuaciones o salir del programa.
6- Si el sistema es compatible determinado, resolverlo utilizando el sistema de la matriz inversa. 7 – Mostrar las soluciones del sistema de ecuaciones.
7-Podemos expresar el sistema de ecuaciones en formato matricial:
donde A es la matriz de coeficientes, y B es el vector con los términos independientes de las ecuaciones: pero para ello el determinante no tiene que ser igual a 0
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Carlos Luis
Val: 57
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

matrices

Publicado por Carlos Luis (19 intervenciones) el 08/06/2017 23:06:11
Estimado amigo, todos deseamos ayudarte ha realizarlo, si muestras algo del código que estas usando seguro tendrás muchas respuestas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

matrices

Publicado por jorge (2 intervenciones) el 10/06/2017 14:27:27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <stdio.h>
 
int const Tam=100;
void PideDatos(int *Dim, float Sist[][Tam]);
void EscribeDatos(int Dim, float Sist[][Tam]);
void Invierte(int Dim, float Sist[][Tam], float Inv[][Tam]);
 
 
int main(void)
{
    int Dimension;
    float Sistema[Tam][Tam],Inversa[Tam][Tam];
    PideDatos(&Dimension,Sistema);
    printf("\n\n\nLa matriz introducida es la siguiente: \n\n");
    EscribeDatos(Dimension,Sistema);
    Invierte(Dimension,Sistema,Inversa);
    printf("\n\n\nLa inversa de la matriz es: \n\n");
    EscribeDatos(Dimension,Inversa);
 
    scanf("%d",);
    return(0);
}
 
 
void PideDatos(int *Dim,float Sist[][Tam])
{
    int A,B;
    printf("\n\n ||CALCULA INVERSA||");
    printf("\n\n\n Introduce el tamano de la matriz:");
    scanf("%d",&*Dim);
    printf("\n\n Introducir cada componente de la matriz A:");
    for(A=1;A<=*Dim;A++) for(B=1;B<=*Dim;B++){
        printf("\n Termino A(%d,%d):",A,B); scanf("%f",&Sist[A][B]);}
}
 
void EscribeDatos(int Dim, float Sist[][Tam])
{
    int A,B;
    for(A=1;A<=Dim;A++){
        for(B=1;B<=(Dim);B++) printf("%7.2f",Sist[A][B]);
        printf("\n");
    }}
 
void Invierte(int Dim, float Sist[][Tam], float Inv[][Tam])
{
    int NoCero,Col,C1,C2,A;
    float Pivote,V1,V2;
 
    /*Se inicializa la matriz inversa, como la matriz identidad:*/
    for(C1=1;C1<=Dim;C1++) for(C2=1;C2<=Dim;C2++)
        if (C1==C2) Inv[C1][C2]=1; else Inv[C1][C2]=0;
 
    for(Col=1;Col<=Dim;Col++){
        NoCero=0;A=Col;
        while(NoCero==0){
            if((Sist[A][Col]>0.0000001)||((Sist[A][Col]<-0.0000001))){
                NoCero=1;}
            else A++;}
        Pivote=Sist[A][Col];
        for(C1=1;C1<=Dim;C1++){
            V1=Sist[A][C1];
            Sist[A][C1]=Sist[Col][C1];
            Sist[Col][C1]=V1/Pivote;
            V2=Inv[A][C1];
            Inv[A][C1]=Inv[Col][C1];
            Inv[Col][C1]=V2/Pivote;
        }
        for(C2=Col+1;C2<=Dim;C2++){
            V1=Sist[C2][Col];
            for(C1=1;C1<=Dim;C1++){
                Sist[C2][C1]=Sist[C2][C1]-V1*Sist[Col][C1];
                Inv[C2][C1]=Inv[C2][C1]-V1*Inv[Col][C1];}
        }}
 
    /*Aqui ya esta triangularizada, con 1s en diagonal, ahora se diagonaliza*/
    for(Col=Dim;Col>=1;Col--) for(C1=(Col-1);C1>=1;C1--)
    {
        V1=Sist[C1][Col];
        for(C2=1;C2<=Dim;C2++){
            Sist[C1][C2]=Sist[C1][C2]-V1*Sist[Col][C2];
            Inv[C1][C2]=Inv[C1][C2]-V1*Inv[Col][C2];
        }}
}
solo se hacer esto , no se calcular el rango ni el determinante alguien podría seguir y decirme como?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar