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.
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


0