Pascal/Turbo Pascal - Problema Matriz

 
Vista:

Problema Matriz

Publicado por Juan (11 intervenciones) el 23/06/2013 06:57:16
Hola, les comento:
Se me viene un parcial y practicando con un parcial de años anteriores se me complicó un poco. No sé donde está el eror, me compila y todo pero me tira error exitcode=201 al ejecutarlo. El problema es:


Desarrollar un programa Pascal, claro, eficiente, eficaz y modularizado que implemente la siguiente consigna:
Leer en la primera línea de un archivo de texto N y M, a continuación una matriz A entera de NxM y un B vector de N enteros. Cada línea tendrá una fila de la matriz y a continuación un elemento del vector paralelo a la fila.
Ejemplo del archivo

4 3
16 3 4 4
11 4 10 3
2 14 8 7
8 6 16 2






A partir de la matriz A y del arreglo B generar dos arreglos paralelos VProm y VFila.
VProm es el promedio con los elementos de la fila que sean divisibles por la componente del vector B en la misma posición. VFila es completado con el Nro de fila al cual corresponde el calculo. No generar elementos en ambos arreglos cuando:
 no hay múltiplos en la fila
 el promedio obtenido ya esta en VProm (para otra fila)
Desarrollar la función Promedio, que recibe como parámetros la matriz A, el arreglo B y un valor para la fila, y obtiene el promedio de dicha fila, cero si no hay elementos
Imprimir ambos arreglos.
(16+4)/2 14/1
N=4; M=3 VProm= 10 14
16 3 4 4
A= 11 4 10 B= 3 VFila= 1 3
2 14 8 7
8 6 16 2 (8+6+16)/3 =10 ya esta para la fila 1



Y acá esta el código que escribi:

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
Program SegundoParcial1;
Uses
Crt;
Type
TM=Array [1..5,1..5] of integer;
TV=Array [1..7] of Integer;
 
Procedure LeeMatriz(Var Mat:TM; Var V:TV; Var N,M:Byte);
Var
i,j:Byte;
Arch:Text;
Begin
 Assign(Arch,'DatosSegParcial1.txt'); Reset(Arch);
  Readln(Arch,N,M);
  For i:=1 to N do
  Begin
   For j:=1 to M do
    Read(Arch,Mat[i,j]);
    Readln(Arch);
  end;
   For i:=1 to N do
   Begin
    Read(Arch,V[i]);
    Readln(Arch);
   end;
 Close(Arch);
end;
 
Function Promedio(Mat:TM;V:TV;i,M:Byte):Integer;
Var
j:Byte;
Prom:Integer;
Acum:Integer;
Begin
Acum:=0;
 For j:=1 to M do
 Begin
  if (Mat[i,j] div V[i] =0) then
  Begin
   Acum:=Acum + Mat[i,j];
   Prom:=Trunc(Acum / M);
  end;
 end;
 Promedio:=Prom;
end;
 
 
 
Procedure FilaProm(Mat:TM;N,M:Byte;V:TV;Var A,Fila:TV; Var l:Byte);
Var
i,j:Byte;
Begin
l:=0;
 For i:=1 to N do
 Begin
Clrscr;
  Fila[l]:=0;
  For j:=1 to M do
  Begin
   l:=l+1;
   Fila[l]:=i;
   A[l]:=Promedio(Mat,V,i,M);
  end;
 end;
end;
 
 
Procedure MuestraVector(A:TV;l:Byte);
Var
i:Byte;
Begin
 For i:=1 to l do
  Write(A[i]:3);
  Writeln;
end;
 
Var
Mat:TM;A,V,Fila:TV;
N,M,l,j:Byte;
Begin
Clrscr;
LeeMatriz(Mat,V,N,M);
FilaProm(Mat,N,M,V,A,Fila,l);
Writeln('Promedio: ');
MuestraVector(A,l);
 
Writeln('Fila: ');
MuestraVector(Fila,l);
Readln;
End.


La matriz junto con el vector las leo de archivo y las guardé así:

4 3
16 3 4 4
11 4 10 3
2 14 8 7
8 6 16 2


A ver si me pueden dar una mano. 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

Problema Matriz

Publicado por ramon (2158 intervenciones) el 23/06/2013 17:42:21
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
{Mira tu programa funcionando}
 
Program SegundoParcial1;
Uses
Crt;
Type
TM=Array [1..5,1..5] of integer;
TV=Array [1..7] of Integer;
 
Procedure LeeMatriz(Var Mat:TM; Var V:TV; Var N,M:Byte);
Var
i,j:Byte;
Arch:Text;
Begin
 Assign(Arch,'DatosS~1.txt'); Reset(Arch);
  Readln(Arch,N,M);
  For i:=1 to N do
  Begin
   For j:=1 to M do
    Read(Arch,Mat[i,j]);
    Readln(Arch);
  end;
   For i:=1 to N do
   Begin
    Read(Arch,V[i]);
    Readln(Arch);
   end;
 Close(Arch);
end;
 
Function Promedio(Mat:TM;V:TV;i,M:Byte):Integer;
Var
j:Byte;
Prom:Integer;
Acum:Integer;
Begin
  Acum := 0;
 For j := 1 to M do
 Begin
  if (Mat[i,j] > 0) and (v[i] > 0) then
  begin
  if (Mat[i,j] div V[i] =0) then
  Begin
   Acum := Acum + Mat[i,j];
  end;
 end;
end;
 Prom := round(Acum / M);
 Promedio := Prom;
end;
 
 
 
Procedure FilaProm(Mat:TM;N,M:Byte;V:TV;Var A,Fila:TV; Var l:Byte);
Var
i,j:Byte;
Begin
l:=0;
 For i:=1 to N do
 Begin
Clrscr;
  Fila[l]:=0;
  For j:=1 to M do
  Begin
   l:=l+1;
   Fila[l]:=i;
   A[l]:=Promedio(Mat,V,i,M);
  end;
 end;
end;
 
 
Procedure MuestraVector(A:TV;l:Byte);
Var
i:Byte;
Begin
 For i:=1 to l do
  Write(A[i]:3);
end;
 
Var
Mat:TM;A,V,Fila:TV;
N,M,l,j:Byte;
Begin
Clrscr;
LeeMatriz(Mat,V,N,M);
FilaProm(Mat,N,M,V,A,Fila,l);
Write('Promedio: ');
MuestraVector(A,l);
writeln;
Write('Fila    : ');
MuestraVector(Fila,l);
Readln;
End.
 
{mira los cambios realizados tenias error de division por 0}
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

Problema Matriz

Publicado por Juan (11 intervenciones) el 23/06/2013 21:07:14
Hola, gracias por responder. Ahi lo modifiqué y me sigue tirando el mismo error, no se si será error en la lectura o que pero sigue igual. Con las modificaciones me quedó así:

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
Program SegundoParcial1;
Uses
Crt;
Type
TM=Array [1..5,1..5] of integer;
TV=Array [1..7] of Integer;
 
Procedure LeeMatriz(Var Mat:TM; Var V:TV; Var N,M:Byte);
Var
i,j:Byte;
Arch:Text;
Begin
 Assign(Arch,'DatosSegParcial1.txt'); Reset(Arch);
  Readln(Arch,N,M);
  For i:=1 to N do
  Begin
   For j:=1 to M do
    Read(Arch,Mat[i,j]);
    Readln(Arch);
  end;
   For i:=1 to N do
    Read(Arch,V[i]);
    Readln(Arch);
 Close(Arch);
end;
 
Function Promedio(Mat:TM;V:TV;i,M:Byte):Integer;
Var
j:Byte;
Prom:Integer;
Acum:Integer;
Begin
Acum:=0;
 For j:=1 to M do
 Begin
  If (Mat[i,j] > 0) and (V[i] > 0) then
  Begin
   if (Mat[i,j] div V[i] =0) then
   Begin
    Acum:=Acum + Mat[i,j];
   end;
  end;
 end;
 Prom:= round(Acum / M);
 Promedio:=Prom;
end;
 
 
 
Procedure FilaProm(Mat:TM;N,M:Byte;V:TV;Var A,Fila:TV; Var l:Byte);
Var
i,j:Byte;
Begin
l:=0;
 For i:=1 to N do
 Begin
 Clrscr;
  Fila[l]:=0;
  For j:=1 to M do
  Begin
   l:=l+1;
   Fila[l]:=i;
   A[l]:=Promedio(Mat,V,i,M);
  end;
 end;
end;
 
 
Procedure MuestraVector(A:TV;l:Byte);
Var
i:Byte;
Begin
 For i:=1 to l do
  Write(A[i]:3);
end;
 
Var
Mat:TM;A,V,Fila:TV;
N,M,l,j:Byte;
Begin
Clrscr;
LeeMatriz(Mat,V,N,M);
FilaProm(Mat,N,M,V,A,Fila,l);
Writeln('Promedio: ');
MuestraVector(A,l);
Writeln;
Writeln('Fila: ');
MuestraVector(Fila,l);
Readln;
End.


Me sigue dando el error exitcode=201 ... No se si habrá algún error en algún cálculo o de lectura... El archivo lo guardé como puse ahí arriba con el vector como una columna mas de la matriz..
Muchas 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

Problema Matriz

Publicado por ramon (2158 intervenciones) el 23/06/2013 23:39:07
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
{error correjido}
 
Program SegundoParcial1;
Uses
Crt;
Type
TM=Array [1..5,1..5] of integer;
TV=Array [1..7] of Integer;
var
Mat:TM;A,V,Fila:TV;
N,M,l,j:Byte;
 
Procedure LeeMatriz(Var Mat:TM; Var V:TV; Var N,M:Byte);
Var
i,j:Byte;
Arch:Text;
Begin
 Assign(Arch,'c:\tp\bin\DatosS~1.txt'); Reset(Arch);
  Readln(Arch,N,M);
  For i:=1 to N do
  Begin
   For j:=1 to M do
    Read(Arch,Mat[i,j]);
    Readln(Arch);
  end;
   For i:=1 to N do
    Read(Arch,V[i]);
    Readln(Arch);
 Close(Arch);
end;
 
Function Promedio(Mat:TM;V:TV;i,M:Byte):Integer;
Var
j:Byte;
Prom:Integer;
Acum:Integer;
Begin
Acum:=0;
 For j:=1 to M do
 Begin
  If (Mat[i,j] > 0) and (V[i] > 0) then
  Begin
   if (Mat[i,j] div V[i] =0) then
   Begin
    Acum:=Acum + Mat[i,j];
   end;
  end;
 end;
 Prom:= round(Acum / M);
 Promedio:=Prom;
end;
 
 
 
Procedure FilaProm(Mat:TM;N,M:Byte;V:TV;Var A,Fila:TV; Var l:Byte);
Var
i,j:Byte;
Begin
 For i:=1 to N do
 Begin
 l:=1;
 Clrscr;
  Fila[l]:=1;
  For j:=1 to M do
  Begin
   Fila[l]:=i;
   A[l]:=Promedio(Mat,V,i,M);
   l:=l+1;
  end;
 end;
end;
 
 
Procedure MuestraVector(A:TV;l:Byte);
Var
i:Byte;
Begin
 For i:=1 to l do
  Write(A[i]:3);
end;
 
 
Begin
Clrscr;
LeeMatriz(Mat,V,N,M);
FilaProm(Mat,N,M,V,A,Fila,l);
Writeln('Promedio: ');
MuestraVector(A,l);
Writeln;
Writeln('Fila: ');
MuestraVector(Fila,l);
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

Problema Matriz

Publicado por Juan (11 intervenciones) el 23/06/2013 23:55:07
Ahora sii, ahi me di cuenta, Muchas gracias por la ayuda.
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