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 22-11-2012
Coltlac Coltlac is offline
Registrado
NULL
 
Registrado: oct 2012
Posts: 1
Poder: 0
Coltlac Va por buen camino
Exclamation Histograma!

Buenas tardes, soy nuevo en el foro, y tambien soy nuevo en delphi
tengo un problema, tengo que hacer un programa que abra y lea un archivo de texto y posteriormente con esa informacion debe crear un histograma de barras con la frecuencia con la cual aparecen las letras en el archivo, y lo hice pero el histograma no muestra la informacion correcta de la letras, les anexo mi codigo, espero me puedan ayudar, gracias

Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
var
i,divs,longX,longY : Integer;
nextX,nextY : Integer;
alto,largo : Integer;
Color : TColor;
nx,ny : Integer;
begin
divs:=0;
alto:=Image1.Height;
largo:=0;
nx:=760;
ny:=Image1.Height;
{
if Limpiar then begin
    nx:=760;
    for i := 0 to cant do begin
        Canvas.TextOut(nx,ny,'');
        nx:=nx-longX;
    end;
    Limpiar:=False;
end;

for i := 0 to Length(Letras) do begin
    case Letras[i] of
        'z': inc(Minusculas[0]);
        'y': inc(Minusculas[1]);
        'x': inc(Minusculas[2]);
        'w': inc(Minusculas[3]);
        'v': inc(Minusculas[4]);
        'u': inc(Minusculas[5]);
        't': inc(Minusculas[6]);
        's': inc(Minusculas[7]);
        'r': inc(Minusculas[8]);
        'q': inc(Minusculas[9]);
        'p': inc(Minusculas[10]);
        'o': inc(Minusculas[11]);
        'ñ': inc(Minusculas[12]);
        'n': inc(Minusculas[13]);
        'm': inc(Minusculas[14]);
        'l': inc(Minusculas[15]);
        'k': inc(Minusculas[16]);
        'j': inc(Minusculas[17]);
        'i': inc(Minusculas[18]);
        'h': inc(Minusculas[19]);
        'g': inc(Minusculas[20]);
        'f': inc(Minusculas[21]);
        'e': inc(Minusculas[22]);
        'd': inc(Minusculas[23]);
        'c': inc(Minusculas[24]);
        'b': inc(Minusculas[25]);
        'a': inc(Minusculas[26]);
        'Z': inc(Mayusculas[0]);
        'Y': inc(Mayusculas[1]);
        'X': inc(Mayusculas[2]);
        'W': inc(Mayusculas[3]);
        'V': inc(Mayusculas[4]);
        'U': inc(Mayusculas[5]);
        'T': inc(Mayusculas[6]);
        'S': inc(Mayusculas[7]);
        'R': inc(Mayusculas[8]);
        'Q': inc(Mayusculas[9]);
        'P': inc(Mayusculas[10]);
        'O': inc(Mayusculas[11]);
        'Ñ': inc(Mayusculas[12]);
        'N': inc(Mayusculas[13]);
        'M': inc(Mayusculas[14]);
        'L': inc(Mayusculas[15]);
        'K': inc(Mayusculas[16]);
        'J': inc(Mayusculas[17]);
        'I': inc(Mayusculas[18]);
        'H': inc(Mayusculas[19]);
        'G': inc(Mayusculas[20]);
        'F': inc(Mayusculas[21]);
        'E': inc(Mayusculas[22]);
        'D': inc(Mayusculas[23]);
        'C': inc(Mayusculas[24]);
        'B': inc(Mayusculas[25]);
        'A': inc(Mayusculas[26]);
    end;      //end case
end; //end for
for i := 0 to 26 do begin
    Total[i]:=Mayusculas[i]+Minusculas[i];
    if Total[i]<>0 then
       inc(divs);
end;
longX:=round(Image1.Width/divs);
for i := 0 to 26 do begin
    if Total[i]<>0 then begin
         nextX:=longX+largo;
         nextY:=Total[i]*5;
         Color:=RGB(Random(255),Random(255),Random(255));
         Image1.Canvas.Brush.Color:=Color;
         Image1.Canvas.Rectangle(largo,Image1.Height,nextX,nextY);
         Font.Color:=clBlack;
         Brush.Style:=bsClear;
         Font.Size:=8;
         Canvas.TextOut(nx,ny,Let[i]);
         nx:=nx-longX;
         largo:=nextX;
         alto:=nextY;
         inc(cant);
    end;
end;
Limpiar:=True;
end;  //end evento

procedure TForm2.FormCreate(Sender: TObject);
begin
Memo1.Text:='';
Image1.Canvas.Pen.Color:=Clblack;
Image1.Canvas.Brush.Color:=ClWhite;
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
end;

end.

Última edición por ecfisa fecha: 22-11-2012 a las 05:51:52. Razón: Etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #2  
Antiguo 22-11-2012
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Hola... bienvenido, veo que es tu primera vez en el club, te recomiendo leer la guía de estilo y utilizar las etiquetas debidas para mostrar el código, ojalá algún moderador nos haga favor de ponerlas... deja ver que puedo hacer por ti...

Lo copié y lo pegué, pero me hace falta más info para poder ayudarte como las variables que en tu código no están declaradas... ¿qué versión de delphi usas? Si tu versión tiene en la paleta de componentes TeeChart Std puedes usar el TChart para crear la gráfica.

Saludos
__________________
Herr Heins Faust

Última edición por Faust fecha: 22-11-2012 a las 02:17:55.
Responder Con Cita
  #3  
Antiguo 22-11-2012
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 Coltlac, bienvenido a Club Delphi.

Como ya te comentó el amigo Faust, las etiquetas le dan mas legibilidad al código y de ese modo, vas a obtener mas respuestas (ya las agregué en tu mensaje).

Te pongo una imágen que explica el uso:




Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 24-11-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Coltlac,

Cita:
Empezado por Coltlac Ver Mensaje
tengo que hacer un programa que abra y lea un archivo de texto y posteriormente con esa informacion debe crear un histograma de barras con la frecuencia con la cual aparecen las letras en el archivo
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, TeeProcs, TeEngine, Chart, Series, TypInfo;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Series1: TBarSeries;
    BitBtn3: TBitBtn;
    ComboBox1: TComboBox;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    CheckBox1: TCheckBox;
    Label1: TLabel;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TNameSeries = (Bar,HorizBar,Line,Area,Point,Pie);

const
   LMin : String = 'abcdefghijklmnñopqrstuvwxyz';
   LMay : String = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ';

var
  Form1: TForm1;
  F : TStringList;
  CountLMin : Array[1..27] of Integer;
  CountLMay : Array[1..27] of Integer;
  FileProcess : Boolean;

implementation

{$R *.dfm}

// Reset de Gráfico
procedure Reset;
begin
   FileProcess := False;
   FillChar(CountLMin,SizeOf(CountLMin),0);
   FillChar(CountLMay,SizeOf(CountLMin),0);
   with form1 do
   begin
      Series1.Clear;
      ComboBox1.Text := ComboBox1.Items.Strings[0];
   end;
end;

// Procesa Archivo TXT (Instancia, Lee y Sumariza por Letras el Archivo de Texto Seleccionado)
Procedure ReadTextFile(FileName : String);
var
  i,j : Integer;
  P : Integer;
  C : String;
begin
   FileProcess := False;
   Reset;
   F := TStringList.Create;
   try
      F.LoadFromFile(FileName);
   except
      MessageDlg('Error de I/O', mtinformation, [mbok], 0);
      F.Free;
      Exit;
   end;
   for i := 0 to F.Count-1 do
   begin
     for j := 1 to Length(F.Strings[i]) do
     begin
        C := Copy(F.Strings[i],j,1);
        P := Pos(C,LMin);
        if (P > 0) then
          Inc(CountLMin[P]);
        P := Pos(C,LMay);
        if (P > 0) then
          Inc(CountLMay[P]);
     end;
   end ;
   FileProcess := True;
   F.Free;
end;

// Selección de Archivo a Graficar
procedure TForm1.BitBtn2Click(Sender: TObject);
var
  openDialog : TOpenDialog;
begin

  openDialog := TOpenDialog.Create(self);
  openDialog.InitialDir := GetCurrentDir;
  openDialog.Options := [ofFileMustExist];
  openDialog.Filter := 'Archivo de Texto a Graficar|*.txt';
  openDialog.FilterIndex := 1;

  if openDialog.Execute then
     ReadTextFile(openDialog.FileName)
  else
     MessageDlg('No Se Proceso Ningún Archivo de Texto',mtinformation,[mbok],0);

  openDialog.Free;

end;

// Histograma de Letras Minúsculas
procedure TForm1.BitBtn1Click(Sender: TObject);
var
   C : String;
   i : Integer;
begin

   if not FileProcess then
   begin
      MessageDlg('Seleccione un Archivo de Texto',mtinformation,[mbok],0);
      Exit;
   end;

   with Series1 do
   begin
      Clear;
      for i := 1 to High(CountLMin) do
      begin
         C := Copy(LMin,i,1);
         Add(CountLMin[i], C, clBlue);
      end
   end;
end;

// Histograma de Letras Mayúsculas
procedure TForm1.BitBtn3Click(Sender: TObject);
var
   C : String;
   i : Integer;
begin

   if not FileProcess then
   begin
      MessageDlg('Seleccione un Archivo de Texto',mtinformation,[mbok],0);
      Exit;
   end;

   with Series1 do
   begin
      Clear;
      for i := 1 to High(CountLMay) do
      begin
         C := Copy(LMay,i,1);
         Add(CountLMay[i], C, clRed);
      end
   end;
end;

// Histograma de Letras Mayúsculas y Minúsculas
procedure TForm1.BitBtn4Click(Sender: TObject);
var
   C : String;
   i : Integer;
begin

   if not FileProcess then
   begin
      MessageDlg('Seleccione un Archivo de Texto',mtinformation,[mbok],0);
      Exit;
   end;

   with Series1 do
   begin
      Clear;
      for i := 1 to High(CountLMay) do
      begin
         C := Copy(LMay,i,1);
         Add(CountLMay[i]+CountLMin[i], C, clGreen);
      end
   end;
end;

// Carga el ComboBox con los tipos de Gráficos
procedure TForm1.FormCreate(Sender: TObject);
var
   NameSeries : String;
   CountSeries : TNameSeries;
begin
   for CountSeries := Low(TNameSeries) to High(TNameSeries) do
   begin
      NameSeries := GetEnumName(TypeInfo(TNameSeries),Integer(CountSeries));
      ComboBox1.Items.Add(NameSeries);
   end;
   ComboBox1.Text := ComboBox1.Items.Strings[0];
   CheckBox1.State := cbChecked;
end;

// Cambia el tipo de Gráfico
procedure TForm1.ComboBox1Change(Sender: TObject);
var
   NameSeries : TNameSeries;
begin

   NameSeries := TNameSeries(GetEnumValue(TypeInfo(TNameSeries),ComboBox1.Text));

   Case NameSeries of
      Bar : ChangeSeriesType(TChartSeries(Series1),TBarSeries);
      HorizBar : ChangeSeriesType(TChartSeries(Series1),THorizBarSeries);
      Line : ChangeSeriesType(TChartSeries(Series1),TLineSeries);
      Area : ChangeSeriesType(TChartSeries(Series1),TAreaSeries);
      Point : ChangeSeriesType(TChartSeries(Series1),TPointSeries);
      Pie : ChangeSeriesType(TChartSeries(Series1),TPieSeries);
   end;

end;

// Reset Gráfico
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
   Reset;
end;

// Cambia el Modo Gráfico 2D <-> 3D
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
   Chart1.View3D:=CheckBox1.Checked;
end;

end.
El código anterior hace un Histograma de las Letras contenidas en un archivo de texto con algunas opciones gráficas adicionales por medio del Componente TeeChart.

La aplicación esta en el link: http://terawiki.clubdelphi.com/Delph...n+TeeChart.rar

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 24-11-2012 a las 22:28:59.
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
Histograma en Delphi Cesar Junior Gráficos 10 05-07-2012 12:36:42
Histograma!! chinnamasta Gráficos 2 28-06-2012 23:02:47
Histograma madiazg Gráficos 4 06-07-2008 05:58:43
Histograma javikanin Varios 16 02-01-2006 23:40:17
Graph Meter (histograma) cadena Gráficos 0 01-12-2004 19:29:23


La franja horaria es GMT +2. Ahora son las 12:41:10.


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