Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda con busqueda de palabra en una matriz (https://www.clubdelphi.com/foros/showthread.php?t=89316)

diego21x 31-10-2015 16:34:46

ayuda con busqueda de palabra en una matriz
 
:(me podrian ayudar a buscar una palabra en una matriz ya echa
Código:

unit fvector;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Grids, ExtCtrls, uvector;






type

  { TForm1 }

  TForm1 = class(TForm)
    Bcrear: TButton;
    Bsetdim: TButton;
    Bgetdim: TButton;
    Bsetelem: TButton;
    Bgetelem: TButton;
    Bsalir: TButton;
    Button1: TButton;
    ponerletras: TButton;
    Notebook1: TNotebook;
    Titulo: TLabel;
    ele: TStringGrid;
    procedure BcrearClick(Sender: TObject);
    procedure BgetdimClick(Sender: TObject);
    procedure BsetdimClick(Sender: TObject);
    procedure BsetelemClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ponerletrasClick(Sender: TObject);
    procedure DrawGrid1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Notebook1ChangeBounds(Sender: TObject);
  private
    { private declarations }
    V:Vector;
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.BcrearClick(Sender: TObject);
begin
  v:=Vector.Crear();
  ele.ColCount:=13;
  ele.RowCount:=13;
  ShowMessage('Sopa de letras Creada...!!!');





end;

procedure TForm1.BgetdimClick(Sender: TObject);
begin
//  ShowMessage('La dimension es : '+IntToStr(v.getDim()));
end;

procedure TForm1.BsetdimClick(Sender: TObject);
var
  s:string;
  n:integer;
begin
  s:=InputBox('Sopa de letras','Dimension :','0');
  n:=StrToInt(s);
 // v.setDim(n);
 v.set_fila(n);
 v.set_col(n);
  //v.setDim(StrToInt(InputBox('Vector','Dimension :','0')));
  ele.ColCount:=v.get_col();
  ele.RowCount:=v.get_fila();
  //ele.FilaCount:=v.get.fila();
  //ele.
  //v.setElem(1,d);
end;

procedure TForm1.BsetelemClick(Sender: TObject);
var
  pos,pos2, elem :integer;

  elem1: string;
  elem2:string;
begin
  pos:=StrToInt(InputBox('Sopa de letras','Columna :','0'));
  ///elem1:=InputBox('Sopa de letraS','Elemento :','0');
    pos2:=StrToInt(InputBox('Sopa de letras','Fila :','0'));
  elem1:=InputBox('Sopa de LeTRAS','Elemento :','0');

  //elem:=StrToInt(elem1);

  //v.setElem(pos,elem1);


  //ele.Cells[pos-1,0]:=IntToStr(elem1);
  ele.Cells[pos-1,pos2-1]:=(elem1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin






end;

procedure TForm1.ponerletrasClick(Sender: TObject);
begin
  ele.Cells[0,0]:='e'; ele.Cells[1,0]:='a';ele.Cells[2,0]:='m'; ele.Cells[3,0]:='a'; ele.Cells[4,0]:='a'; ele.Cells[5,0]:='a';ele.Cells[6,0]:='m'; ele.Cells[7,0]:='a';ele.Cells[8,0]:='n'; ele.Cells[9,0]:='a';ele.Cells[10,0]:='x'; ele.Cells[11,0]:='z';ele.Cells[12,0]:='f';
  ele.Cells[0,1]:='n'; ele.Cells[1,1]:='b';ele.Cells[2,1]:='a'; ele.Cells[3,1]:='a'; ele.Cells[4,1]:='l'; ele.Cells[5,1]:='a';ele.Cells[6,1]:='a'; ele.Cells[7,1]:='g';ele.Cells[8,1]:='a'; ele.Cells[9,1]:='ñ';ele.Cells[10,1]:='a'; ele.Cells[11,1]:='a';ele.Cells[12,1]:='a';
  ele.Cells[0,2]:='e'; ele.Cells[1,2]:='o';ele.Cells[2,2]:='r'; ele.Cells[3,2]:='a'; ele.Cells[4,2]:='i'; ele.Cells[5,2]:='a';ele.Cells[6,2]:='y'; ele.Cells[7,2]:='a';ele.Cells[8,2]:='j'; ele.Cells[9,2]:='a';ele.Cells[10,2]:='a'; ele.Cells[11,2]:='a';ele.Cells[12,2]:='a';
  ele.Cells[0,3]:='r'; ele.Cells[1,3]:='f';ele.Cells[2,3]:='z'; ele.Cells[3,3]:='a'; ele.Cells[4,3]:='r'; ele.Cells[5,3]:='a';ele.Cells[6,3]:='o'; ele.Cells[7,3]:='j';ele.Cells[8,3]:='u'; ele.Cells[9,3]:='n';ele.Cells[10,3]:='i'; ele.Cells[11,3]:='o';ele.Cells[12,3]:='g';
  ele.Cells[0,4]:='a'; ele.Cells[1,4]:='g';ele.Cells[2,4]:='o'; ele.Cells[3,4]:='a'; ele.Cells[4,4]:='b'; ele.Cells[5,4]:='a';ele.Cells[6,4]:='a'; ele.Cells[7,4]:='a';ele.Cells[8,4]:='l'; ele.Cells[9,4]:='a';ele.Cells[10,4]:='a'; ele.Cells[11,4]:='a';ele.Cells[12,4]:='a';
  ele.Cells[0,5]:='o'; ele.Cells[1,5]:='o';ele.Cells[2,5]:='a'; ele.Cells[3,5]:='a'; ele.Cells[4,5]:='a'; ele.Cells[5,5]:='a';ele.Cells[6,5]:='a'; ele.Cells[7,5]:='g';ele.Cells[8,5]:='i'; ele.Cells[9,5]:='a';ele.Cells[10,5]:='a'; ele.Cells[11,5]:='a';ele.Cells[12,5]:='a';
  ele.Cells[0,6]:='f'; ele.Cells[1,6]:='o';ele.Cells[2,6]:='a'; ele.Cells[3,6]:='a'; ele.Cells[4,6]:='a'; ele.Cells[5,6]:='a';ele.Cells[6,6]:='f'; ele.Cells[7,6]:='o';ele.Cells[8,6]:='o'; ele.Cells[9,6]:='f';ele.Cells[10,6]:='a'; ele.Cells[11,6]:='a';ele.Cells[12,6]:='h';
  ele.Cells[0,7]:='g'; ele.Cells[1,7]:='e';ele.Cells[2,7]:='a'; ele.Cells[3,7]:='a'; ele.Cells[4,7]:='a'; ele.Cells[5,7]:='a';ele.Cells[6,7]:='g'; ele.Cells[7,7]:='s';ele.Cells[8,7]:='a'; ele.Cells[9,7]:='a';ele.Cells[10,7]:='a'; ele.Cells[11,7]:='a';ele.Cells[12,7]:='a';
  ele.Cells[0,8]:='m'; ele.Cells[1,8]:='o';ele.Cells[2,8]:='b'; ele.Cells[3,8]:='a'; ele.Cells[4,8]:='a'; ele.Cells[5,8]:='a';ele.Cells[6,8]:='a'; ele.Cells[7,8]:='t';ele.Cells[8,8]:='a'; ele.Cells[9,8]:='a';ele.Cells[10,8]:='a'; ele.Cells[11,8]:='a';ele.Cells[12,8]:='a';
  ele.Cells[0,9]:='q'; ele.Cells[1,9]:='o';ele.Cells[2,9]:='a'; ele.Cells[3,9]:='r'; ele.Cells[4,9]:='a'; ele.Cells[5,9]:='a';ele.Cells[6,9]:='m'; ele.Cells[7,9]:='o';ele.Cells[8,9]:='o'; ele.Cells[9,9]:='a';ele.Cells[10,9]:='a'; ele.Cells[11,9]:='a';ele.Cells[12,9]:='k';
  ele.Cells[0,10]:='s';ele.Cells[1,10]:='o';ele.Cells[2,10]:='a';ele.Cells[3,10]:='a'; ele.Cells[4,10]:='e'; ele.Cells[5,10]:='a';ele.Cells[6,10]:='a'; ele.Cells[7,10]:='a';ele.Cells[8,10]:='q'; ele.Cells[9,10]:='v';ele.Cells[10,10]:='u'; ele.Cells[11,10]:='a';ele.Cells[12,10]:='a';
  ele.Cells[0,11]:='d';ele.Cells[1,11]:='o';ele.Cells[2,11]:='a';ele.Cells[3,11]:='a'; ele.Cells[4,11]:='a'; ele.Cells[5,11]:='r';ele.Cells[6,11]:='a'; ele.Cells[7,11]:='a';ele.Cells[8,11]:='a'; ele.Cells[9,11]:='a';ele.Cells[10,11]:='a'; ele.Cells[11,11]:='a';ele.Cells[12,11]:='b';
  ele.Cells[0,12]:='m';ele.Cells[1,12]:='o';ele.Cells[2,12]:='a';ele.Cells[3,12]:='a'; ele.Cells[4,12]:='a'; ele.Cells[5,12]:='a';ele.Cells[6,12]:='o'; ele.Cells[7,12]:='a';ele.Cells[8,12]:='w'; ele.Cells[9,12]:='a';ele.Cells[10,12]:='s'; ele.Cells[11,12]:='e';ele.Cells[12,12]:='a';


end;

procedure TForm1.DrawGrid1Click(Sender: TObject);
begin

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.Notebook1ChangeBounds(Sender: TObject);
begin

end;

end.

y este el constructor
Código:

unit uvector;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Dialogs;
Const
  MAX_E=1000;
  MAX_F=1000;
  MAX_C=1000;
type
  Vector=Class
    private
      //elem:array[1..MAX_E]of string;
      elem:array[1..MAX_F, 1..MAX_C] of string;
      dim:integer;
      cant:Integer;
      nfils, ncols:integer;
    public
      constructor crear();
    // procedure setDim(num:integer);
    // function  getDim():integer;
    // procedure setElem(pos:integer;ele:string);
    // function  getElem(pos:integer):string;


        procedure set_ele(f,c:integer;ele:string);
      function get_ele(f,c:integer):string;
      procedure set_fila(fils:integer);
      function get_fila():integer;
      procedure set_col(cols:integer);
      function get_col():integer;
      //  function busquedarecto():integer;
      //function Pos( Substr: string; S: string ): Integer;


 end;

implementation
//constructor Vector.crear();
//var
 // i:integer;
//begin
 // i:=1;
 // while(i<=MAX_E)do
 // begin
 //  elem[i]:=' ';
  //  i:=i+1;
  //end;
 // dim:=0;
//end;


    constructor Vector.Crear();
var
 f,c:integer;
begin
  nfils:=0;
  ncols:=0;
  cant:=nfils*ncols;
  for f:=1 to MAX_F-1 do
    begin
      for c:=1 to MAX_C-1 do
          begin
            elem[f,c]:=' ';
          end;
    end;
end;






//procedure Vector.setDim(num:integer);
//begin
 // if(num>=0) AND (num<=MAX_E)then
  //  dim:=num
 // else
  // ShowMessage('Vector::setDim:Fuera de Rango');
//end;
//function  Vector.getDim():integer;
//begin
//  result := dim;
//end;
//procedure Vector.setElem(pos:integer;ele:string);
//begin
 // if(pos>0) AND (pos<=dim)then
  //  elem[pos]:=ele
 // else
  //  ShowMessage('Vector::SetElem:Fuera de Rango...');
//end;
//function  Vector.getElem(pos:integer):string;
//begin
//  if(pos>0) AND (pos<=dim)then
 //    result:=elem[pos]
 // else
 //    result:=' ';
//end;












        procedure Vector.set_ele(f, c:integer; ele: string);
begin
  if ((f>0) and (f<=nfils))then
    begin
      if (c>0) and (c<=ncols) then
          begin
            elem[f,c]:=' ';
          end
          else
          begin
            showmessage('Col fuera de rango');
          end;
    end
    else
      showmessage('fila fuera de rango');
end;

function Vector.get_ele(f, c: integer): string;
begin
  if (f>0)and(f<=nfils)then
    begin
      if (c>0)and(c<=ncols)then
        begin
          result:=elem[f,c];
        end
        else
        begin
          result:='fuera de rango ';
        end;
    end
    else
    begin
      result:='fuera de rango ';
    end;
end;
procedure Vector.set_fila(fils:integer);
begin
  if ((fils>=0)and(fils<=MAX_F))then
    begin
      nfils:=fils;
    end
    else
    begin
      showmessage('fuera de rango');
    end;
end;

function Vector.get_fila():integer;
begin
  result:=nfils;
end;
procedure Vector.set_col(cols: integer);
begin
  if (cols>=0)and(cols<=MAX_C)then
      ncols:=cols
else
  showmessage('fuera de rango');
end;

function Vector.get_col():integer;
begin
    result:=ncols;
end;





end.

se los agradezco de antemano :)

Casimiro Notevi 31-10-2015 19:05:17

¿Cual es el problema?
Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)

diego21x 31-10-2015 19:09:12

gracias bro, quiero crear una funcion que me busque una palabra cualquiera dentro de esa matriz que he creado, ya estan las palabras en la matriz

Casimiro Notevi 31-10-2015 19:38:42

Bien, ¿cómo tienes pensado hacerlo? ¿qué duda tienes? ¿qué código estás usando para ello?

diego21x 31-10-2015 20:20:22

no bro, tengo muy poco conocimiento y lo tengo que presentar en estos dias ayudamee :(, me falta solo ese algoritmo, tengo que buscar la palabra "enero" por ejemplo de izquiera a derecha arriba abajo, y de costado

BDWONG 31-10-2015 22:34:27

No revise tu codigo detenidamente pero segun tu primera pregunta "'me podrian ayudar a buscar una palabra en una matriz ya echa"
estoy suponiendo que es una matriz de dos dimensiones

asi que arme un pequeno codigo donde busco una palabra dentro dentro de un array dinamico de dos dimensiones, espero sea lo que buscas o sirva para resolver tu duda


Código Delphi [-]
type
  TMatriz=array of array of string;

procedure buscarPalabraEnMatriz(palabra:string; matriz:TMatriz);
var
  i,j:Integer;
begin
   for i:=0 to High(matriz) do
   begin
     for j:=0 to High(matriz) do
     begin
       if matriz[i,j]=palabra then
       begin
         Writeln('Palabrada encontra en la fila ',i,' columna ',j);
         Exit;
       end;
     end;
   end;
   Writeln('Palabra no encontrada');
end;

var
  matriz:TMatriz;
begin
  SetLength(matriz,2,2);
  matriz[0,0]:='Enero';
  matriz[0,1]:='Marzo';
  matriz[1,0]:='Abril';
  matriz[1,1]:='Mayo';

  buscarPalabraEnMatriz('Abril',matriz);
  buscarPalabraEnMatriz('Diciembre',matriz);
  Readln;
end.

Casimiro Notevi 31-10-2015 22:37:54

Bueno, si todavía tienes varios días de plazo entonces estás a tiempo, eso es algo que lo haces en un rato.
Aquí estamos para ayudarnos entre todos, pero no hacemos el trabajo de los demás, y mucho menos porque no aprenderás.
Piensa un poco y haz una propuesta de cómo se puede hacer, nosotros te iremos corrigiendo y ayudando a solucionarlo.

mamcx 01-11-2015 00:16:25

Cita:

Empezado por diego21x (Mensaje 498686)
no bro, tengo muy poco conocimiento y lo tengo que presentar en estos dias ayudamee :(, me falta solo ese algoritmo, tengo que buscar la palabra "enero" por ejemplo de izquiera a derecha arriba abajo, y de costado

Y la forma de aumentar el conocimiento no es que te demos todo en bandeja de plata.

Ahora bien, como se resuelve esto (y todo lo demas)?

1- Hasta que llegue el dia en que tengas la fluidez de hacerlo en tu cabeza de forma natural: Coje lapiz y papel (o una hoja de excel), haz un dibujo de los datos y haz un paso a paso de como es el proceso de encontrar el datos. Cuando tengas claro eso:

2- Pasa a codigo lo que hiciste. Cada vez que encuentres un bloqueo (ej: Y como dimensiono esta matriz?) Busca eso en google. Es contra-producente que copies-pegues el codigo de otro.... eso solo funciona cuando alcanzas la habilidad de, en tu mente, saber exactamente que hace cada linea de codigo y porque. Hasta que llegue ese dia, es MIL VECES MEJOR que siempre escribas cada linea, de tu propio esfuerzo, a conciencia de lo que haces. Ej: "Ok, ya tengo los datos en la matriz, ahora debo recorrerla. Para eso, arranco colocando un FOR. MMM... hasta que posicion debo ir? A, hasta la ultima... Cual es la ultima?" osea = esto hazlo en tu mente, como si conversaras contigo mismo. O usa un peluche pa hablarle. O coje a un amigo, un familiar y le vas contando.

No creas que digo lo anterior como broma: MUY EN SERIO. Cuando uno esta pegado, de lo mejor que se puede hacer es empezar a hablar con otro peluche/amigo/conocido/la mente...

Si solo copias y no conversas, sera un esfuerzo inutil y eternamente quedaras con la impresion de "y esto porque fue asi"?

3- Luego da un paso a paso del codigo con el depurador de Delphi y confirma si concuerda lo que escribiste con lo que quisiste escribir.

4- Una vez que hayas echo esto, comparte lo que lograste (o fallaste!) y de forma concreta, pregunta en donde quedaste bloqueado.

AgustinOrtu 01-11-2015 05:19:28

Vaya decepcion, creia que era el unico trastornado que habla consigo mismo :D


La franja horaria es GMT +2. Ahora son las 22:39:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi