Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda con simulacion de colas en Delphi.

Estas en el tema de Ayuda con simulacion de colas en Delphi. en el foro de Programación General en Foros del Web. Bueno, resulta que me he partido el craneo haciendo este codigo, pero he llegado a un punto en el que me he bloqueado: El programilla ...
  #1 (permalink)  
Antiguo 08/12/2010, 18:09
Avatar de titow  
Fecha de Ingreso: diciembre-2010
Mensajes: 1
Antigüedad: 13 años, 4 meses
Puntos: 0
Ayuda con simulacion de colas en Delphi.

Bueno, resulta que me he partido el craneo haciendo este codigo, pero he llegado a un punto en el que me he bloqueado:

El programilla no es mas que una cola de impresión, la condición para que funcione es que el documento a imprimir debe tener no mas de 5 paginas, en caso de que tuviera mas de 5 paginas el numero que identifica al documento ocuparía dos puestos en la cola, el primero con las primeras 5 paginas a imprimir, y el segundo puesto con el numero de paginas restantes quedando algo asi en la cola, donde el documento numero 5 tiene 7 paginas:

(*1 -3pag; *2 -4pag; *3 -5pag; *4 -1pag; *5 -5pag; *5 -2pag;...*N -Mpag)

(disculpen el ejemplo chapucero de la cola :eolo:)

la cuestión es que he programado ya todo, sin embargo no se me ocurre, o no encuentro ni el modo ni la manera de que segun una condicion "if strtoint (nombrevariable.text) > 5 then" el programa me discrimine los documentos de mas de 5 paginas y los ponga en dos puestos sucesivos en la cola (como en el ejemplo grafico).

aquí el código, si alguien me ayuda le estaría agradecido, esto es solo un ejercicio de practica, no crean que estoy pidiendo la tarea en el foro :chavo:

Cita:
const
max=10;
type
ta=array[1..max] of integer;
TForm1 = class(TForm)
colimp: TListBox;
colaimpr: TLabel;
ndoc: TLabel;
num: TEdit;
agregar: TButton;
imprimir: TButton;
impri: TLabel;
limpiar: TButton;
salir: TButton;
impr: TLabel;
npag: TLabel;
numpag: TEdit;
procedure FormActivate(Sender: TObject);
procedure limpiarClick(Sender: TObject);
procedure salirClick(Sender: TObject);
procedure agregarClick(Sender: TObject);
procedure llego (var cola:ta; var nfrente, nfinal:integer; valor:integer);
procedure mostrar(cola:ta; nfrente, nfinal:integer);
procedure imprimirClick(Sender: TObject);
procedure salio(var cola:ta; var nfrente, nfinal, valor2:integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
cola:ta;
Form1: TForm1;
nfrente, nfinal:integer;

implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);
begin
num.SetFocus;
nfrente:=0;
nfinal:=0;

end;

procedure TForm1.limpiarClick(Sender: TObject);
begin
colimp.Items.Clear;
num.Text:='';
nfrente:=0;
nfinal:=0;
impri.caption:='';
num.SetFocus;
end;

procedure TForm1.salirClick(Sender: TObject);
begin
close;
end;

procedure TForm1.llego (var cola:ta; var nfrente, nfinal:integer; valor:integer);

begin
if nfinal=0 then begin
nfinal:=1;
nfrente:=1;
end
else
inc(nfinal);
cola[nfinal]:=valor;
end;


procedure TForm1.mostrar(cola:ta; nfrente, nfinal:integer);
var
i:integer;
begin
colimp.items.clear;
for i:=1 to nfinal do
colimp.items.add(inttostr(Cola[i]));

end;


procedure TForm1.agregarClick(Sender: TObject);
begin
if nfinal=max then showmessage('Cola de impresion llena')
else
if num.text='' then showmessage('numero invalido')
else

es aqui donde se me ocurriria meter la condicion "if strtoint (nombrevariable.text) > 5 then" para empezar el proceso de discriminacion de documentos con mas de 5 paginas, para luego continuar con:

begin
llego(cola, nfrente, nfinal, strtoint(num.text));
mostrar(cola, nfrente, nfinal);
end;
num.clear;
num.setfocus;
end;

procedure tform1.salio(var cola:ta; var nfrente, nfinal, valor2:integer);
var
i:integer;
begin
valor2:=cola[nfrente];
for i:=2 to nfinal do
cola[i-1]:=cola[i];
cola[nfinal]:=0;
if nfinal=1 then nfrente:=0;
dec(nfinal);

end;

procedure TForm1.imprimirClick(Sender: TObject);
var
valor2:integer;
begin
if nfrente=0 then showmessage('No hay documentos en la cola de impresion')
else
begin
salio(cola, nfrente, nfinal, valor2);
impri.caption:=inttostr(valor2);
mostrar(cola, nfrente, nfinal);
end;
num.setfocus;
end;

end.
Les estaría muy agradecido, ya que este ejemplo m serviría muchísimo para futuras estructuras un poco mas complejas :metal:

Etiquetas: delphi, simulacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:25.