Ir al contenido



Foto

Help =( Pilas y Colas

Pilas Colas Delphi Lazarus

  • Por favor identifícate para responder
1 respuesta en este tema

#1 Nelsonguzmans

Nelsonguzmans

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 22 junio 2019 - 06:51

Buenas Noches amigos necesito de su ayuda en respecto a pilas y colas 
necesito hacer un programa de menor o mayor que
ejm
del StringGrid "SG_NUMEROS" seleccionar los numeros mayores o menos de un umbral "5" y esos numero clasificarlos en un StringGrid para menores de 5 "SG_MENUMBRAL" y en otro StringGrid para mayores de 5"SG_MAYUMBRAL"
 
aca les dejo mi código de como voy 
 
sin mas a que hacer referencia les deseo buenas noches
 
hXvr6pX
 
 

delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, Grids;
  8.  
  9. type
  10. TipoPila = Record
  11. Dato: Array[1..4] of integer;
  12. Tope: 0..4;
  13. end;
  14. TipoPilaMen=Record
  15. Dato:Array [1..4] of integer;
  16. topemen:0..4;
  17. end;
  18. TipoPilaMay=Record
  19. Dato:Array [1..4] of integer;
  20. topemay:0..4;
  21. end;
  22.  
  23. TForm1 = class(TForm)
  24. E_INGRESAR: TEdit;
  25. B_SALIR: TButton;
  26. B_AGREGAR: TButton;
  27. B_MOSTRAR: TButton;
  28. B_REINICIAR: TButton;
  29. Label1: TLabel;
  30. Label2: TLabel;
  31. Label3: TLabel;
  32. Label4: TLabel;
  33. Label5: TLabel;
  34. Label6: TLabel;
  35. Label7: TLabel;
  36. Label8: TLabel;
  37. SG_NUMEROS: TStringGrid;
  38. SG_MENUMBRAL: TStringGrid;
  39. SG_MAYUMBRAL: TStringGrid;
  40. E_UMBRAL: TEdit;
  41. B_UMBRAL: TButton;
  42. procedure B_REINICIARClick(Sender: TObject);
  43. procedure B_SALIRClick(Sender: TObject);
  44. procedure FormCreate(Sender: TObject);
  45. procedure B_AGREGARClick(Sender: TObject);
  46. procedure B_MOSTRARClick(Sender: TObject);
  47. private
  48. { Private declarations }
  49. public
  50. { Public declarations }
  51. end;
  52.  
  53. var
  54. Pila:TipoPila;
  55. Pilamenor:TipoPilaMen;
  56. Pilamayor:TipoPilaMay;
  57. fila:integer;
  58. filamay:integer;
  59. filamen:integer;
  60. Form1: TForm1;
  61.  
  62. implementation
  63.  
  64. {$R *.dfm}
  65.  
  66. procedure TForm1.B_REINICIARClick(Sender: TObject);
  67. begin
  68. begin
  69. Application.MainForm.Hide;
  70. WinExec(PChar(ParamStr(0)), SW_NORMAL);
  71. TerminateProcess(GetCurrentProcess, 0);
  72. end;
  73. end;
  74.  
  75. procedure TForm1.B_SALIRClick(Sender: TObject);
  76. begin
  77. Close;
  78. end;
  79.  
  80. procedure TForm1.FormCreate(Sender: TObject);
  81. begin
  82. Pila.Tope:=0;
  83. fila:=4;
  84. filamen:=4;
  85. filamay:=4;
  86. end;
  87.  
  88. procedure TForm1.B_AGREGARClick(Sender: TObject);
  89. begin
  90. If Pila.Tope<4 Then
  91. Begin
  92. E_INGRESAR.SetFocus;
  93. Pila.Tope:= Pila.Tope+1;
  94. Pila.dato[Pila.Tope]:=StrToInt(E_INGRESAR.text);
  95. SG_NUMEROS.Cells [0,fila-1]:= IntToStr(Pila.dato[Pila.Tope]);
  96. fila:=fila-1;
  97. E_INGRESAR.Clear;E_INGRESAR.SetFocus;
  98. end;
  99.  
  100. end;
  101.  
  102.  
  103.  
  104. procedure TForm1.B_MOSTRARClick(Sender: TObject);
  105. Begin
  106. If Pila.Tope<=4 Then
  107. Begin
  108. Pilamenor.topemen:= Pilamenor.topemen+1;
  109. Pilamenor.Dato[Pilamenor.topemen]:=Pila.dato[Pila.Tope];
  110. SG_MENUMBRAL.Cells [0,filamen-1]:= IntToStr(Pilamenor.Dato[Pilamenor.topemen]);
  111. filamen:=filamen-1;
  112. Pila.Tope:=Pila.Tope-1;
  113. end;
  114. If Pilamenor.topemen=4 then
  115. Begin
  116. Showmessage('Pila LLena');
  117. End;
  118. end;
  119.  
  120. end.[/code]

 

 


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.259 mensajes
  • LocationArgentina

Escrito 27 junio 2019 - 09:07

Hola Nelsonguzmans,

Bienvenido a DelphiAccess.

 

¿Podrías explicarte mejor? No termino de entender lo que pretendes hacer. Dedica minutos a reordenar y pensar bien tus palabras. Esto no está bien escrito:

 

 

necesito hacer un programa de menor o mayor que
ejm
del StringGrid "SG_NUMEROS"

 

'Menor a qué? ¿Mayor a qué?

¿Qué debemos entender por Clasificar? Hay dos acepciones a ese término: agrupar, u ordenar. Por que no es lo mismo pretender separar una pila en 2, que ordenar.

Entiendo que tienes una Pila original, y pareciera que la idea es de ésta pasar los items a 2 pilas. Pero insisto: no es lo mismo simplemente pasar, que los mismos estén ordenados.

 

Si es lo primero lo que necesitas es ir leyendo la pila, y pasarlo hacia una u otra dependiendo del valor.

Si es lo 2do, es algo ya mucho más elaborado, y deberías pensar en un algoritmo de ordenamiento y empleando pilas. Vas a necesitar al menos una pila auxiliar o temporal en la vayas poniendo y sacando items para ir ordenando a medida que lees desde la original.

 

Recuerda: Lo importante del concepto de PILA, o más en genera una estructura Lista LIFO es justamente que el ULTIMO ELEMENTO en ENTRAR sea el PRIMERO en SALIR. De allí su nombre en Inglés: Last In, Firt Out. Para hacerlo gráfico, piénsalo como una pila de platos que vas a poner a lavar. El primero a lavar será el que esté por encima de todo, y el último en lavar el que estaba debajo de todo.

 

Cuando uno saca de una pila y pone en otra, los elementos quedan exactamente en el orden inverso.

 

Tu código va bien.

Pero puntualicemos, ¿concretamente, en que tienes dudas? ¿En que parte te sientes trabajo? ¿Que código además de este estuviste probando? ¿Te salieron errores, cuáles?

En DelphiAccess no hacemos la tarea a nadie. Es parte de nuestras normas y reglas, en su lugar ayudamos y brindamos guías y propuestas para que cada quien pueda llegar a su solución. Además, brindarte código asi como sin más, no te beneficia. Lo importante es que hagas el ejercicio craneal.

 

Saludos,


  • 0





Etiquetado también con una o más de estas palabras: Pilas, Colas, Delphi, Lazarus