Pascal/Turbo Pascal - Consulta matriz

   
Vista:

Consulta matriz

Publicado por Andy (3 intervenciones) el 18/09/2012 15:47:50
Hola a toda la comunidad! tengo un problemita.. tengo q hacer una matriz (como en álgebra) de N x M (filas x columnas) y tengo q verificar si es LI(linealmente independiente).. no se bien como hacer para verificar que sea LI ya q siempre se me escapa algún detalle. he pensado en for anidados, etc pero no se bien como hacerlo. Alguien me podría dar una mano? cabe destacar que recién estoy aprendiendo. solo se vectores matrices. Muchas gracias!
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

Consulta matriz

Publicado por ramon (2072 intervenciones) el 18/09/2012 19:50:13
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
{Mira el procedimiento crea y pone unos valores en la matriz  luego los presenta si tienes que
 leerlos de forme salteada por ejemplo:
 matriz[1,1] * matriz[2,2] o cualquier otra posición solo tienes que poner los números que ocupan}
 
program matrizes;
 uses
    crt;
    const
        x = 4;
        y = 3;
    type
    matrizxy = array[1..x,1..y] of integer;
 
   var
     matriz : matrizxy;
 
  procedure cargamatriz;
  var
    t, d : integer;
  begin
     for d := 1 to y do
       for t := 1 to x do
       matriz[t,d] := d * t;
  end;
 
  procedure presentamatriz;
  var
    p1, p2 : integer;
  begin
     for p1 := 1 to y do
     begin
       for p2 := 1 to x do
       write('  ',matriz[p2,p1]);
       writeln;
     end;
  end;
 
 
  begin
      clrscr;
      cargamatriz;
      writeln(' ****   Valores Matriz  ****');
      writeln;
      presentamatriz;
      readkey;
  end.
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

Consulta matriz

Publicado por Andy (3 intervenciones) el 19/09/2012 05:58:32
Muchas gracias por la respuesta..esa parte ya le he hecho sin problemas lo q me causa probleas verificar si al matriz q ingrse el usuario es Linealmente Independiente es decir q las filas no sean multiplos.. se que si divids los numeros con DIV y te da 0 son multiplos.. no se como hacer eso con cada fila de la matriz NxM q yo quiero. no se si me explico bien!
gracias!
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

Consulta matriz

Publicado por ramon (2072 intervenciones) el 21/09/2012 17:03:41
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
{  Linealmente Independiente usando  determinantes a ver  si te sirve}
 
 program Determinante;
 uses
  crt;
 const
    mx = 6;
 
type
  contador = 0..maxint;
  trmatriz = record
    cont : contador;
    matri : array[1..mx,1..mx] of integer;
  end;
 
var
  carg, maux, matriz : trmatriz;
  x, y, nn : integer;
 
procedure ponvalores(var matriz : trmatriz);
  var
    nu, d1, d2 : contador;
    elec : char;
    mx1 : integer;
  begin
    writeln('  El Tama¤o De La Matriz Es : ',mx,' El Maximo');
    writeln('  Si Desea Otro Elija Numero Sino [Enter]');
    elec := readkey;
    if elec in['2'..'5'] then
    begin
      case elec of
    '2' : mx1 := 2;
    '3' : mx1 := 3;
    '4' : mx1 := 4;
    '5' : mx1 := 5;
      end;
    end;
    if mx1 < mx then
    matriz.cont := mx1
   else
    matriz.cont := mx;
    randomize;
    d2 := 1;
  repeat
   d1 := 1;
   repeat
    nu := random(matriz.cont + 1);
    matriz.matri[d1,d2] := nu;
    d1 := d1 + 1;
   until d1 > matriz.cont;
   d2 := d2 + 1;
  until d2 > matriz.cont;
  end;
 
procedure presentamatriz(matriz : trmatriz);
  var
    d1, d2 : contador;
  begin
    for d1 := 1 to matriz.cont do
    begin
      for d2 := 1 to matriz.cont do
      begin
        write(' ',matriz.matri[d1,d2]);
      end;
      writeln;
    end;
  end;
 
  function elterminante(matriz : trmatriz) : integer;
  var
    d1, d2, d3, lant : contador;
    taux : integer;
    sino : integer;
  begin
    taux := 0;
    if matriz.cont > 1 then
      for d1 := 1 to matriz.cont do
      begin
        lant := 0;
        maux.cont := matriz.cont - 1;
        for d2 := 2 to matriz.cont do
        begin
          lant := 0;
          for d3 := 1 to matriz.cont do
            if d3 <> d1 then
            begin
              lant := lant + 1;
              maux.matri[lant, d2 - 1] := matriz.matri[d3, d2];
            end;
        end;
        if (d1 mod 2) <> 1 then
        sino := - 1
      else
        sino := 1;
        taux := taux + matriz.matri[d1,1] * sino * elterminante(maux);
      end
    else
      taux := matriz.matri[1,1];
      elterminante := taux
  end;
 
begin
  clrscr;
  writeln('Calcula el determiante');
  ponvalores(matriz);
  clrscr;
  writeln('La matriz introducida es: ');
  writeln;
  presentamatriz(matriz);
  writeln;
  nn := elterminante(matriz);
  if nn >= 0 then
  writeln('El determinante es: ', nn,' Es Positivo');
  if nn < 0 then
  writeln('El determinante es: ', nn,' Es Negativo');
  readln;
end.
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

Consulta matriz

Publicado por Andy (3 intervenciones) el 22/09/2012 23:57:48
Guauu gracias! no hace falta q te tomes demasiado trabajo! pero el problema es si no ingreso una matriz cuadrada.. el determinante no me sirve..
Lo estoy pensando dividir fila por fila con MOD .. si toda las filas cuando hago MOD me da 0 es que son multiplos entonces son LI. pero no hay chance que pueda hacer andar el programa.
Igual de todas maneras me sirvio de mucho el programe del determinante!
Gracias!
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