[ Foro de Pascal ]

buscar en una matriz

25-Oct-2014 15:39
Invitado (luis)
1 Respuestas

buenas, estoy estudiando materias de programación para poder hacer un postgrado, pero soy de otra disciplina, por lo que algunas lógicas me complican un poco...

tengo que programar una función que me devuelva true si un tablero (matriz construida con un array de array) no tiene cero en sus elementos. Digamos que la funcion en un array es sencilla, pero al pasarla a una matriz no estoy logrando que suceda nada...

creo que el problema esta en el for que utilizo para recorrer las filas pero no me doy cuenta como solucionarlo.

esto es lo que escribi hasta ahora, gracias desde ya


program p2018;

const
MAXTablero=4;
MAXValor=2048;
valortab=2;


type  
RangoIndice= 1 .. MAXTablero;
TipoValor = 0 .. MAXValor; 
TipoFila = array [RangoIndice] of TipoValor;
TipoTablero = array [RangoIndice] of TipoFila;

var
tablero: TipoTablero;

{procedimiento para iniciar el tablero}
procedure IniciarTablero(var tablero: TipoTablero);
var i,j,cont:integer;
begin
	cont:=1;
	for i:=1 to MAXTablero do
	  begin
	  for j:=1 to MAXTablero do
		begin
		tablero[i,j]:=cont;
		cont:=cont+1;
		end;
		tablero[1,1]:=0;
	  end;	

	
			
end;


	
{procedimiento mostrar tablero}
procedure MostrarTablero(tablero: TipoTablero);
var i,j:integer;
begin

	for i:=1 to MAXTablero do begin
		for j:=1 to MAXTablero do
		write (tablero[i,j],' ');
		writeln;
	end;


end;

function TieneCeros(tablero:TipoTablero): boolean;
var i,j:integer;
		
	begin
	j:=1
	for i:=1 to MAXTablero do begin
	
		while (j<=MAXTablero) and (tablero[i,j]<>0) do
		j:=i+1;
	
		end;
	TieneCeros:=j<=MAXTablero;	
	end;
	
	


begin
IniciarTablero (tablero);
MostrarTablero (tablero);

if TieneCeros(tablero) then
begin
writeLn ('el tablero tiene al menos un cero');
end
else
writeLn ('el tablero no tiene ningun cero')

end.




28-Oct-2014 00:48
Nacho Cabanes (+83)

Tienes la función "TieneCeros" resuelta en otro hilo muy reciente del foro. Podría ser así:


function TieneCeros(tablero:TipoTablero): boolean;
var i,j:integer;
    exito: boolean; 
 
    begin
    exito:=false;
    for i:=1 to MAXTablero do 
        for j:=1 to MAXTablero do
            if (tablero[i,j]=0) then
                exito:=true
                
    TieneCeros:=exito;
end;


Aunque se podría mejorar para que dejase de buscar en cuanto encontrase un cero, pero esa lógica debe resultarte fácil de seguir tal cual.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)