Pascal/Turbo Pascal - Problema al ejecutar un programa en pascal

 
Vista:
sin imagen de perfil

Problema al ejecutar un programa en pascal

Publicado por Victor (1 intervención) el 26/07/2016 04:10:36
Buen día a todos, estoy realizando un programa en pascal el cual consiste en definir una matriz de orden NxM de tipo entero; que acepte valores entre [1..25].

Esta matriz contará con los siguientes procedimientos:

1) esperar: Espera que el usuario introduzca INTRO para continuar.
2) ini_matriz: Inicializa los valores de la matriz pasada como parámetro.
3)impr_matriz: Escribe por pantalla la matriz pasada como parámetro.
4)buscar_en_matriz: Busca el elemento elem en la matriz aaMatriz. Si lo encuentra actualiza encontrado a truey f_elem y c_elem a la fila y la columna de la matriz donde se encontraba dicho elemento. Una vez que encuentre el elemento se deja de buscar. Todos estos valores son pasados como parámetros.

Para finalizar, tras la búsqueda del elemento en la matriz, el programa deberá de informar del resultado de la búsqueda. Si se encuentra el elemento buscado se especificará la posición que ocupaba en la matriz.

Bueno el tema es que el programa ya lo tengo realizado cuando lo compilo en free pascal no me arroja ningún error y la compilación sale como satisfactoria, sin embargo cuando corro el programa me sale un error de "Runtime error 201...".

por favor si alguien me prodría explicar a que se debe dicho error adjunto el programa así como pantallazo de error

program matriz;
const
N = 3;
M = 5;
VALORES = 25;

type
tFilas = 1..N;
tColumnas = 1..M;
tValores = 1..VALORES;

taaMatriz = array[tFilas,tColumnas] of tValores;

var
aaMatriz : taaMatriz;
f : tFilas;
c : tColumnas;
elem : tValores;
encontrado : boolean;

procedure esperar;
(* Espera a que el usuario pulse INTRO *)
begin
Writeln;
write('Pulse INTRO para continuar...');
writeln;
readln
end;

procedure ini_matriz(var aaMatriz : taaMatriz);

(*Inicializa los valores de la matriz pasada como parametro *)
var
f : tFilas;
c : tColumnas;

begin

for f := 1 to N do
for c := 1 to M do
aaMatriz[f,c] := random(VALORES) + 1;
end;

procedure impr_matriz(var aaMatriz : taaMatriz);
var
f : tFilas;
c : tColumnas;

begin
for f := 1 to N do begin
for c :=1 to M do
write(aaMatriz[f,c] : 5);
writeln;
end;
esperar;
end;

procedure buscar_en_matriz(aaMatriz : taaMatriz; elem : tValores; var f_elem : tFilas; var c_elem : tColumnas; var encontrado : boolean);
var
f : tFilas;
c : tColumnas;

begin
f := 1;
encontrado := false;

while((f <= N) and (not encontrado)) do begin
c := 1;
while((c <= M) and (not encontrado)) do begin
if(aaMatriz[f,c] = elem) then begin
encontrado := true;
f_elem := f;
c_elem := c;
end
else
c := c + 1;
end;
f := f + 1;
end;
end;

begin

randomize;
ini_matriz(aaMatriz);
impr_matriz(aaMatriz);
elem := random(VALORES) + 1;

buscar_en_matriz(aaMatriz, elem, f, c, encontrado);

if(encontrado) then begin
write('La primera aparici¢n del elemento ',elem,' en la matriz ');
writeln('ha sido en la fila ',f,' ,columna ',c);
end
else
writeln('El elemento ',elem,' no estaba en la matriz');
esperar;

end.
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 al ejecutar un programa en pascal

Publicado por dario (42 intervenciones) el 26/07/2016 06:12:39
Probado en turbo pascal 7 para DOS, desde una maquina con Linux corriendo DOS-Emu.
Si funciona.

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 matriz;
const
	N = 3;
	M = 5;
	VALORES = 25;
 
type
	tFilas = 1..N;
	tColumnas = 1..M;
	tValores = 1..VALORES;
 
	taaMatriz = array[tFilas,tColumnas] of tValores;
 
var
	aaMatriz : taaMatriz;
	f : tFilas;
	c : tColumnas;
	elem : tValores;
	encontrado : boolean;
 
procedure esperar;
(* Espera a que el usuario pulse INTRO *)
begin
	Writeln;
	write('Pulse INTRO para continuar...');
	writeln;
	readln
end;
 
procedure ini_matriz(var aaMatriz : taaMatriz);
(*Inicializa los valores de la matriz pasada como parametro *)
var
	f : tFilas;
	c : tColumnas;
begin
	for f := 1 to N do
		for c := 1 to M do
			aaMatriz[f,c] := random(VALORES) + 1;
	end;
 
procedure impr_matriz(var aaMatriz : taaMatriz);
var
	f : tFilas;
	c : tColumnas;
begin
	for f := 1 to N do begin
		for c :=1 to M do
			write(aaMatriz[f,c] : 5);
		writeln;
	end;
	esperar;
end;
 
procedure buscar_en_matriz(aaMatriz:taaMatriz; elem:tValores; var f_elem:tFilas; var c_elem:tColumnas; var encontrado:boolean);
var
	f : tFilas;
	c : tColumnas;
begin
	f := 1;
	encontrado := false;
	while((f <= N) and (not encontrado)) do begin
		c := 1;
		while((c <= M) and (not encontrado)) do begin
			if(aaMatriz[f,c] = elem) then begin
				encontrado := true;
				f_elem := f;
				c_elem := c;
			end
			else
				c := c + 1;
		end;
		f := f + 1;
	end;
end;
 
begin
	randomize;
	ini_matriz(aaMatriz);
	impr_matriz(aaMatriz);
	elem := random(VALORES) + 1;
	buscar_en_matriz(aaMatriz, elem, f, c, encontrado);
	if(encontrado) then begin
		write('La primera aparici¢n del elemento ',elem,' en la matriz ');
		writeln('ha sido en la fila ',f,' ,columna ',c);
	end
	else
		writeln('El elemento ',elem,' no estaba en la matriz');
	esperar;
 
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 al ejecutar un programa en pascal

Publicado por ramon (2158 intervenciones) el 27/07/2016 11:21:18
El error que te marca es generado por desbordamiento en el array o sea estas lellendo fuera
se su longuitud rebisa el while con detenimiento.
Solo causara error cuando c sea mallor de m ya que el array es m no mas.
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