Pascal/Turbo Pascal - Por que da divion por cero?

 
Vista:

Por que da divion por cero?

Publicado por David (1 intervención) el 04/09/2009 18:51:40
estoy hasiendo este algoritmo y no termina de funkar. alguien me puede ayudar? me da division por cero

program matriz;
uses
crt;
type
matriz=array[1..20,1..20] of integer;
var
m:matriz;
f,c,i,j:integer;

PROCEDURE crear (var f1:integer;var c1:integer; var m1:matriz);
var
i,j:integer;
BEGIN
randomize;
write('introduce el numero de filas de la matriz: ');
readln(f1);
write('introduce el numero de columnas de la matriz: ');
readln(c1);
for i:=1 to f1 do
for j:= 1 to c1 do
m[i,j]:=random(1000);
END;

FUNCTION restar (f1,c1,x,y:integer;m1:matriz):integer;
var
sumfil,sumcol,k:integer;

BEGIN
sumfil:=0;
sumcol:=0;
for k:=1 to c1 do
sumfil:=sumfil+m1[x,k];

for k:=1 to f1 do
sumcol:=sumcol+m1[k,y];
restar:=sumfil-sumcol;
END;

PROCEDURE mostrar (f1,c1:integer;m1:matriz);
var
i,j:integer;

BEGIN
for i:=1 to f1 do
begin
for j:=1 to c1 do
write(m[i,j]:5);
writeln;
end;
END;

FUNCTION saber(f1,c1:integer; m1:matriz):boolean;
var
i,j:integer;
vf:boolean;
BEGIN

vf:=true;
for i:=1 to f1 do
for j:=1 to c1 do
if m[i,j]>9 then
vf:=false;
saber:=vf;

END;

FUNCTION sumardigitos(x:integer):integer;
var
cad:string;
num,temp,error:integer;
BEGIN
str(x,cad);
num:=0;
for i:=1 to length(cad) do
begin
val(cad[i],temp,error);
num:=num+temp;

end;
sumardigitos:=num;
END;

PROCEDURE undigito(f1,c1:integer; var m1:matriz);
var
n:integer;
i,j:integer;
BEGIN
while saber(f1,c1,m1)=false do
begin
for i:=1 to f1 do
for j:=1 to c1 do
begin
n:=m[i,j];
m[i,j]:=sumardigitos(n);
end;
mostrar(f,c,m);
readln;
end;
END;
PROCEDURE unocero(f1,c1:integer;var m1:matriz);
var
i,j:integer;
BEGIN
for i:=1 to f1 do
for j:=1 to c1 do
if m[i,j]<5 then
m[i,j]:=0
else
m[i,j]:=1;
END;

PROCEDURE sumarrestar (f1,c1:integer; var m1:matriz);
var
maux:matriz;
i,j:integer;
BEGIN
for i:=1 to f do
for j:=1 to c do
maux[i,j]:=restar(f1,c1,i,j,m1);
for i:=1 to f1 do
for j:=1 to c1 do
m1[i,j]:=maux[i,j];
END;

BEGIN(*programa principal*)
crear(f,c,m);
mostrar(f,c,m);
readln;
sumarrestar(f,c,m);
mostrar(f,c,m);
readln;
for i:=1 to f do
for j:=1 to c do
m[i,j]:=abs(m[i,j]);
mostrar(f,c,m);
readln;
undigito(f,c,m);
unocero(f,c,m);
mostrar(f,c,m);
readln;

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

RE:Por que da divion por cero?

Publicado por Diego Romero (996 intervenciones) el 04/09/2009 19:07:26
No veo que hagas ninguna división pero sí veo que usas la unidad CRT, por lo que deduzco que eres víctima del bug RTL200 de Turbo Pascal.

No te preocupes, no es culpa de tu programa sino del propio compilador. Tienes más información y el parche correspondiente en mi página web:

http://driverop.com.ar/pascal.php
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