Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2011
chelo_lpa chelo_lpa is offline
Registrado
NULL
 
Registrado: abr 2011
Posts: 4
Poder: 0
chelo_lpa Va por buen camino
error violation addres 004bb40, read addres FFFFFFE

tengo que en un programa hacer lo siguiente.
Desarrollar un analizador de textos que dado un texto permita obtener información referida a las palabras, caracteres y números que contiene.
Se utilizará la interfaz de la Figura 5 formada por un MainMenu, un ToolBar y un Memo.
El menú se detalla en la Figura 6. El texto a analizar puede ingresarse directamente en el Memo desde teclado o cargarse desde un archivo existente a través de la opción „Archivo\Abrir’ del menú principal.
La opción „Archivo\Guardar como…’ permite ingresar un nombre de archivo para guardar el texto del Memo. Si se selecciona „Archivo\Guardar’ se salvará con el último nombre de archivo ingresado; si no existe ninguno deberá realizar las mismas acciones que
Seminario de Lenguajes – Opción Delphi – Curso 2011
4
‘Archivo\Guardar como …’. Los botones del ToolBar que aparecen debajo del menú comparten los eventos con las opciones correspondientes.
El análisis a realizar corresponde a la opción ‘Estadística’ del menú principal cuyo detalle se observa en la figura 7.
Figura 5
Figura 6
Figura 7
Algunos detalles a tener en cuenta:
- Las imágenes que aparecen en el menú y en los botones están caragdas en un componente TImageList.
- Sobre el Memo, a la derecha, aparece el último nombre de archivo ingresado. Este nombre será el que se utilice para guardar si se selecciona ‘Archivo\Guardar’.
- Las opciones para guardar el texto permanecen deshabilitadas mientras el Memo esté vacío.
- Se asume que los números enteros no utilizan signos de puntuación (ej: coma o punto para separar los miles).

Mi codigo esta dividido en 3 forms,
Código Delphi [-]
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ImgList, StdCtrls, ToolWin, ComCtrls, ExtDlgs;

type
  TCuatro = class(TForm)
    MainMenu1: TMainMenu;
    Archivo1: TMenuItem;
    Abrir1: TMenuItem;
    Guardar1: TMenuItem;
    Guardarcomo1: TMenuItem;
    N1: TMenuItem;
    Salir1: TMenuItem;
    Estadisticas1: TMenuItem;
    LetrasNmeros1: TMenuItem;
    Palabras1: TMenuItem;
    ToolBar1: TToolBar;
    Button1: TButton;
    Button2: TButton;
    ImageList1: TImageList;
    Memo: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure LetrasNmeros1Click(Sender: TObject);
    procedure Palabras1Click(Sender: TObject);
    procedure MemoChange(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Cuatro: TCuatro;

implementation

uses Unit4, Unit3;
{$R *.dfm}

procedure TCuatro.Button1Click(Sender: TObject);
{ Proceso Abrir }
begin
  if (OpenDialog1.Execute) then
  begin
    Guardar1.Enabled := true;
    Memo.lines.loadfromfile(OpenDialog1.filename);
  end;
end;

procedure TCuatro.Button2Click(Sender: TObject);
{ Proceso Guardar }
begin
  if (SaveDialog1.Execute) then
  begin
    Memo.lines.savetofile(SaveDialog1.filename);
  end;
end;

procedure TCuatro.LetrasNmeros1Click(Sender: TObject);
{ envia a procesar al "form3" }
begin
  form3.ShowModal;
end;

procedure TCuatro.Palabras1Click(Sender: TObject);
{ envia a procesar al "form4 }
begin
  Form4.ShowModal;
end;

procedure TCuatro.MemoChange(Sender: TObject);
{ habilita o desabilita los botones segun sea necesario }
begin
  Button2.Enabled := false;
  Guardar1.Enabled := false;
  Guardarcomo1.Enabled := false;
  if Memo.lines.Count <> 0 then
  begin
    Button2.Enabled := true;
    Guardar1.Enabled := true;
    Guardarcomo1.Enabled := true;
  end;
end;
end.

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2;

type
  TForm3 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Cletras: TLabel;
    CDLetras: TLabel;
    CVocales: TLabel;
    CConsonantes: TLabel;
    Centeros: TLabel;
    CFlotantes: TLabel;
    procedure FormActivate3(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  setnum = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
  voc = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'U', 'á', 'é', 'í', 'ó', 'ú',
    'Á', 'É', 'Í', 'Ó', 'Ú'];
  cons = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'ñ', 'p', 'q',
    'r', 's', 't', 'v', 'w', 'x', 'y', 'z', 'B', 'C', 'D', 'F', 'G', 'H', 'J',
    'K', 'L', 'M', 'N', 'Ñ', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'X'];
var
  Form3: TForm3;

implementation

procedure TForm3.FormActivate3(Sender: TObject);
var
  letras: set of char;
  num, mem: string;
  cletdist, ccons, cvoc, cent, clet, cflot, i, a, b: integer;
  ok1, ok2: boolean;
begin
  letras := voc + cons;
  cletdist := 0;
  ccons := 0;
  cvoc := 0;
  cent := 0;
  clet := 0;
  cflot := 0;
  i := 0;
  { Inicializo Las variables }
  CDLetras.caption := inttostr(cletdist);
  CConsonantes.caption := inttostr(ccons);
  CVocales.caption := inttostr(cvoc);
  Centeros.caption := inttostr(cent);
  Cletras.caption := inttostr(clet);
  CFlotantes.caption := inttostr(cflot);
  mem := cuatro.memo.lines.text;
  { en el caso de que el usuario no haya escrito nada, pongo todos los resultados
    en cero, ya que no hubo cambios en las variables }
  while (length(mem) >= i) do
  begin
    if (mem[i] in voc) then
      cvoc := cvoc + 1
    else if (mem[i] in cons) then
      ccons := ccons + 1;
    clet := clet + 1;
    if (mem[i] in letras) then
    begin
      {letras := letras -  mem[i] ;} { COMO SE HACEEEE!!!! se le saca la letra leida al set
        LA IDEA ES, AL CONJUNTO QUE TENGO BORRARLE UN DATO }
      cletdist := cletdist + 1
    end;
    i := i + 1;
  end;
  i := 0;
  { primer recorrido, solo cuenta letras distinguiendo vocales de consonantes }
  while (length(mem) >= i) do
  begin
    a := 0;
    while (length(mem) >= i) and (mem[i] <> ' ') do
    begin
      if (mem[i] in setnum) or (mem[i] = ',') then
      begin
        num[a] := mem[i];
        a := a + 1;
      end;
      i := i + 1;
    end;
    b := 0;
    ok1:=false; ok2:=false;
    while (length(num) <= a) do
    begin
      if (num[b] in setnum) then
      begin
        ok1 := true;
        b := b + 1
      end
      else if (num[b] = ',') then
      begin
        b := b + 1;
        if (num[b] in setnum) and (b <= length(num)) then
          ok2 := true;
      end;
    end;
    if (ok1) and (ok2) then
      cflot := cflot + 1
    else if (ok1) then
      cent := cent + 1;
    i := i + 1;
  end;
  { segundo recorrido, se encarga de los numeros flotantes y enteros }
  CDLetras.caption := inttostr(cletdist);
  CConsonantes.caption := inttostr(ccons);
  CVocales.caption := inttostr(cvoc);
  Centeros.caption := inttostr(cent);
  Cletras.caption := inttostr(clet);
  CFlotantes.caption := inttostr(cflot);
  { imprimo Resultados }
end;
{$R *.dfm}

end.



unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, unit2;

type
  TForm4 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Cpalablras: TLabel;
    Cdistpalabras: TLabel;
    Pmaslarga: TLabel;
    Cantmaslarga: TLabel;
    procedure FormActivate4(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  setnum = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
  voc = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'U', 'á', 'é', 'í', 'ó', 'ú',
    'Á', 'É', 'Í', 'Ó', 'Ú'];
  cons = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'ñ', 'p', 'q',
    'r', 's', 't', 'v', 'w', 'x', 'y', 'z', 'B', 'C', 'D', 'F', 'G', 'H', 'J',
    'K', 'L', 'M', 'N', 'Ñ', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'X'];
var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.FormActivate4(Sender: TObject);
const
  finvector=99999;
type
  arreglo = array [1 ..finvector] of string;
var
  ok:boolean;
  vector:arreglo;
  comp,mem, max:string;
  i, dl,n, cp, cmpal:integer;
begin
  for i := 1 to finvector do
   vector[i]:='';
  {VACIO EL VECTOR}
  dl:=0;
  max:='';
  cp:=0;
  i:=0;
  mem:=cuatro.memo.lines.text;
  while(length(mem)<=i)do
   begin
    comp:='';
    ok:=(length(mem)<=i)and(mem[i]<>' ')and(mem[i]<>',')and(mem[i]<>'.')and
                                                         not(mem[i] in cons);
    while(ok)do
     begin
       if(mem[i] in voc)or (mem[i] in cons)then
        begin
         comp:=comp+mem[i];
        end;
       i:=i+1;
      end;
    ok:=(length(mem)<=i)and(mem[i]<>' ')and(mem[i]<>',')and(mem[i]<>'.')and
                                                         not(mem[i] in cons);
    while not(ok)do
     i:=i+1;
    ok:=true;
    n:=0;
    while(nand(ok)do
     begin
       n:=n+1;
       if(vector[n]='')then   {si el vector esta vacio, añado la nueva palabra}
        begin
         ok:=false;
         vector[n]:=comp;
         dl:=dl+1;
        end
       else                   {si no, sumo +1 a cp(cantidad de palabras)}
        begin
          if(vector[n]<>comp)then
            cp:=cp+1;
        end;
     end;
    if(length(comp)>length(max))then
     begin
       max:=comp;
       cmpal:=1;
     end
    else
     if(length(comp)=length(max))and(comp=max)then
      cmpal:=cmpal+1;
   end;
  Cdistpalabras.Caption:=inttostr(dl);
  pmaslarga.Caption:=max;
  cantmaslarga.Caption:=inttostr(cmpal);
  cpalablras.caption:=inttostr(cp);
end;


end.


espero que se entienda... es mi primer pregunta. gracias de antemano, quien quiera me dice y lo cargo en una pagina dentro de un rar, para qe puedan ejecutarlo o algo... pero no logro solucionarlo.

Ahi esta el ejercicio: descarga

Última edición por ecfisa fecha: 18-04-2011 a las 19:28:36. Razón: Agregar enlace de descarga
Responder Con Cita
  #2  
Antiguo 18-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola chelo_lpa y bienvenido a los foros de Club Delphi.

Ya agregué un enlace a la página de descargas donde está tu código y cambié las etiquetas [quote] [/quote] por [delphi] [/delphi] para que sea más legible.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 18-04-2011 a las 19:30:27.
Responder Con Cita
  #3  
Antiguo 19-04-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Te aconsejaria realizar los siguientes cambios:

Código Delphi [-]
{ primer recorrido, solo cuenta letras distinguiendo vocales de consonantes }
  while (length(mem) >= i) do
  begin
    a := 0;
    while (length(mem) >= i) and (mem[i] <> ' ') do
    begin
      if (mem[i] in setnum) or (mem[i] = ',') then
      begin
        //num[a]:=mem[i];
        num := Num+mem[i];
        a := a + 1;
      end;
      i := i + 1;
    end;
    b := 1; //B:=0;
    ok1:=false; ok2:=false;
    while ((length(num) <= a) and (b<=length(num))) do

Un abrazo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error DataSet is read Only mightydragonlor Lazarus, FreePascal, Kylix, etc. 10 08-11-2008 21:43:16
Obtener MAC ADDRES Yusk333 PHP 0 26-11-2007 21:54:50
Stream read error felipep Varios 0 23-09-2007 02:31:07
Error while trying to read from file Osorio Firebird e Interbase 2 13-07-2006 16:38:56
Como obtengo la mac addres con delphi Johnny DelphiPACK 4 20-12-2004 18:58:56


La franja horaria es GMT +2. Ahora son las 19:24:50.


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
Copyright 1996-2007 Club Delphi