Ver Mensaje Individual
  #14  
Antiguo 17-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Reputación: 0
coso Va por buen camino
Hola, te dejo un ejemplo de rotacion de arrays. Trata el tema de manera general, para que veas la idea. Las excepciones (ej, menos choferes que sitios o descansos extras) no se contemplan.

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    chofers : array of string;
    sitios : array of string;
    desfase : integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
        i : integer;
        df : integer;
        ls : integer;
begin
        setlength(chofers,27);

        for i := 0 to length(chofers) - 1 do
        chofers[i] := 'chofer ' + inttostr(i);

        setlength(sitios,15);
        for i := 0 to length(sitios) - 1 do
        sitios[i] := 'sitio ' + inttostr(i);

        df := length(chofers) - length(sitios);
        ls := length(sitios);
        if df > 0 then
        begin
                setlength(sitios,length(chofers));
                for i := ls to length(sitios) - 1 do
                begin
                        sitios[i] := 'descanso por falta de sitios';
                end;
        end;
        desfase := 0;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
        i : integer;
begin
        Memo1.Lines.Clear;
        for i := 0 to Length(sitios) - 1 do
        Memo1.Lines.Add(chofers[i] + ' ' + sitios[(i + desfase) mod Length(sitios)]);

        inc(desfase);
end;

lo que hace es : crea tantos descansos como choferes que se quedan sin sitio (matriz cuadrada, que decias), asigna a cada chofer un sitio, rotando este segun un desfase (cada semana, por ejemplo, en el ejemplo es a cada click). Un saludo y a ver si te sirve.

NOTA : al finalizar el programa, se tendria q liberar chofers y sitios.

Última edición por coso fecha: 17-09-2008 a las 15:48:24.
Responder Con Cita