Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pilas y Colas (https://www.clubdelphi.com/foros/showthread.php?t=93989)

nelsonjguzmans 10-06-2019 15:11:21

Pilas y Colas
 
Buenos Días mis estimados amigos, espero estén muy bien. necesito de su ayuda en realizar un programa en delphi que resuelva el siguiente planteamiento:

Dada una pila y un valor entero que llamaremos umbral dado por el usuario , genere otras dos pilas, en una de las cuales muestre los valores menores que el umbral y en la otra los valores mayores o iguales que el umbral.

Mi formato consta de 1 edit, 3 StringGrid para las lista (1 con todos los datos, y los otros para cargas mayores o menores del umbral), también tengo 2 botones uno para cargar el StringGrid1 con los datos dado por el usuario y otro botón de mostrar (se ocupa de mostrar los dato en los stringgrid mayores y menos del umbral)

mi duda es la siguiente como hago para que del StringGrind1 me separe los mayores y menores y los ubique en sus correspondientes StringGrid?

de Antemano muchas gracias a la atención que le puedan dar a la presente me despido de ustedes deseándole un magnifico día

Casimiro Notevi 10-06-2019 16:55:58

Veamos, pon tu código que lo veamos.

ecfisa 10-06-2019 18:44:04

Hola.

Te va a resultar mas simple si en lugar de StringGrid usas ListBox. El ListBox1 almacenará todos los datos, el ListBox2 los menores y el ListBox3 los demás.
  • Carga los valores en ListBox1.
  • Pide al usuario que ingrese el valor de referencia 'N'.
  • Usa un ciclo con una variable de control(i) para recorrer los items de ListBox1, de cero a ListBox1.Items.Count - 1.
  • Convierte el valor de ListBox1.Items[i] a entero y almacénalo en una variable 'X'.
  • Mediante una estructura de decisión evalua el valor de 'X' si es menor que 'N' lo agregas a ListBox2 de otro modo a ListBox3 (ListBox.Items.Add).
  • Si deseas presentar los resultados ordenados, asigna el valor True a la propiedad Sorted de los ListBox.
Saludos :)

roman 11-06-2019 17:22:37

Código:

P: PILA
MENORES, MAYORES: PILA
UMBRAL: SORTABLE

WHILE P NOT EMPTY
        X = P.POP
        IF X < UMBRAL THEN
                MENORES.PUSH(X)
        ELSE
                MAYORES.PUSH(X)
END WHILE

:cool:

// Saludos

nelsonjguzmans 12-06-2019 14:40:09

Buenos dias mi estimado; disculpe la tardanza aca le dejo el codigo;

* Me falta un edit en el cual el usuario coloque el umbral, Ejm: 5 (menores de 5 al dar click en B_MOSTRAR aparezca en SG_MENUMBRAL y los mayores en SG_MAYUMBRAL)

* y saber con que condición me imagino que IF en el B_MOSTRAR me separe los numero ingresados

Código Delphi [-]
unit Unit1;

interface

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

type
  TipoPila = Record
              Dato: Array[1..4] of integer;
              Tope: 0..4;
             end;
  TipoPilaInv=Record
              Dato:Array [1..4] of integer;
              topei:0..4;
              end;
              
  TForm1 = class(TForm)
    E_INGRESAR: TEdit;
    B_SALIR: TButton;
    B_AGREGAR: TButton;
    B_MOSTRAR: TButton;
    B_REINICIAR: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    SG_NUMEROS: TStringGrid;
    SG_MENUMBRAL: TStringGrid;
    SG_MAYUMBRAL: TStringGrid;
    E_UMBRAL: TEdit;
    procedure B_REINICIARClick(Sender: TObject);
    procedure B_SALIRClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure B_AGREGARClick(Sender: TObject);
    procedure B_MOSTRARClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Pila:TipoPila;
  Pilainversa:TipoPilaInv;
  fila,filai:integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.B_REINICIARClick(Sender: TObject);
begin
begin
 Application.MainForm.Hide;
 WinExec(PChar(ParamStr(0)), SW_NORMAL);
 TerminateProcess(GetCurrentProcess, 0);
end;
end;

procedure TForm1.B_SALIRClick(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Pila.Tope:=0;
  fila:=4;
  filai:=4
end;

procedure TForm1.B_AGREGARClick(Sender: TObject);
begin
    If Pila.Tope<4 Then
   Begin
     E_INGRESAR.SetFocus;
     Pila.Tope:= Pila.Tope+1;
     Pila.dato[Pila.Tope]:=StrToInt(E_INGRESAR.text);
     SG_NUMEROS.Cells [0,fila-1]:= IntToStr(Pila.dato[Pila.Tope]);
     fila:=fila-1;
     E_INGRESAR.Clear;E_INGRESAR.SetFocus;
  end;
  If Pila.Tope=4 then
   Begin
    Showmessage('Pila LLena');
    fila:=0;
    pilainversa.topei:=0;
   End;
end;

procedure TForm1.B_MOSTRARClick(Sender: TObject);
begin
  If Pila.Tope<=4 Then
   Begin
     PilaInversa.Topei:= PilaInversa.Topei+1;
     PilaInversa.Dato[Pilainversa.Topei]:=Pila.dato[Pila.Tope];
     SG_MENUMBRAL.Cells [0,filai-1]:= IntToStr(PilaInversa.dato[PilaInversa.Topei]);
     SG_MAYUMBRAL.Cells [0,filai-1]:= IntToStr(PilaInversa.dato[PilaInversa.Topei]);
     filai:=filai-1;
     Pila.Tope:=Pila.Tope-1;
   end;
  If Pilainversa.Topei=4 then
   Begin
    Showmessage('Pila LLena');
    End;
end;


end.

Casimiro Notevi 12-06-2019 16:35:29

Y para la próxima no olvides poner las etiquetas al código fuente ;)



movorack 12-06-2019 16:58:23

Esta es la respuesta!

Cita:

Empezado por roman (Mensaje 532372)
Código:

P: PILA
MENORES, MAYORES: PILA
UMBRAL: SORTABLE

WHILE P NOT EMPTY
        X = P.POP
        IF X < UMBRAL THEN
                MENORES.PUSH(X)
        ELSE
                MAYORES.PUSH(X)
END WHILE

:cool:

// Saludos


nelsonjguzmans 18-06-2019 02:45:18

asi voy
 
Buenas noches mis estimados disculpen las tardanza, pues he tenido complicaciones familiares y para conectarme, les quería comentar como va mi progreso y tambien que no soy muy diestro con la computadora :confused: sin mas preámbulo acá les dejo mi desastre


aca les muestro mi plan, la idea es que el usuario coloque un umbral digamos 5, luego pase a ingresar numeros que al agregar lo mandara al primer StringGrind "lista con todos los numeros". Paso seguido el usuario al hacer click en "Mostrar" les arroje el resultado mayor o menor que al Umbral


he aqui el detalle no se como mostrar el ultimo paso y el umbral.

si me podrian ayudar y explicar con manzanitas les estare muy agradecido

Código Delphi [-]
unit Unit1;

interface

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

type
  TipoPila = Record
              Dato: Array[1..4] of integer;
              Tope: 0..4;
             end;
  TipoPilaInv=Record
              Dato:Array [1..4] of integer;
              topei:0..4;
              end;
              
  TForm1 = class(TForm)
    E_INGRESAR: TEdit;
    B_SALIR: TButton;
    B_AGREGAR: TButton;
    B_MOSTRAR: TButton;
    B_REINICIAR: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    SG_NUMEROS: TStringGrid;
    SG_MENUMBRAL: TStringGrid;
    SG_MAYUMBRAL: TStringGrid;
    E_UMBRAL: TEdit;
    B_UMBRAL: TButton;
    procedure B_REINICIARClick(Sender: TObject);
    procedure B_SALIRClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure B_AGREGARClick(Sender: TObject);
    procedure B_MOSTRARClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Pila:TipoPila;
  Pilainversa:TipoPilaInv;
  fila,umb,filai:integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.B_REINICIARClick(Sender: TObject);
begin
begin
 Application.MainForm.Hide;
 WinExec(PChar(ParamStr(0)), SW_NORMAL);
 TerminateProcess(GetCurrentProcess, 0);
end;
end;

procedure TForm1.B_SALIRClick(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Pila.Tope:=0;
  fila:=4;
  filai:=4
end;

procedure TForm1.B_AGREGARClick(Sender: TObject);
begin
    If Pila.Tope<4 Then
   Begin
     E_INGRESAR.SetFocus;
     Pila.Tope:= Pila.Tope+1;
     Pila.dato[Pila.Tope]:=StrToInt(E_INGRESAR.text);
     SG_NUMEROS.Cells [0,fila-1]:= IntToStr(Pila.dato[Pila.Tope]);
     fila:=fila-1;
     E_INGRESAR.Clear;E_INGRESAR.SetFocus;
  end;
  If Pila.Tope=4 then
   Begin
    Showmessage('Pila LLena');
    fila:=0;
    pilainversa.topei:=0;
   End;
end;

procedure TForm1.B_MOSTRARClick(Sender: TObject);

begin
  If Pila.Tope<=4 Then
   Begin
     PilaInversa.Topei:= PilaInversa.Topei+1;
     PilaInversa.Dato[Pilainversa.Topei]:=Pila.dato[Pila.Tope];
     SG_MENUMBRAL.Cells [0,filai-1]:= IntToStr(PilaInversa.dato[PilaInversa.Topei]);
     SG_MAYUMBRAL.Cells [0,filai-1]:= IntToStr(PilaInversa.dato[PilaInversa.Topei]);
     filai:=filai-1;
     Pila.Tope:=Pila.Tope-1;
   end;
  If Pilainversa.Topei=4 then
   Begin
    Showmessage('Pila LLena');
    End;

end;


La franja horaria es GMT +2. Ahora son las 05:11:15.

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