Array multi dimensão.

Delphi

27/03/2007

Pessoal estou dúvida, é possível fazer um array de 3 dimensão?
Por exemplo:

Array1.array2.array3 := ´texto´;

sendo array1 e array2 com valores constantes.

const array1 : : array [0..4] of String = (´2000´, ´2001´, ´2002´....);
const array2 : : array [0..4] of String = (´jan´, ´fev´, ´mar´....);

e o array3 seria um valor variável.

Consigo montar está estrutura:?:


Obrigado pessoal.


Andersonfernando

Andersonfernando

Curtidas 0

Respostas

Acacio

Acacio

27/03/2007

Cara não entendi direito o que tu queres mas se quiser um array
multidimensional ai vai um exemplo

const
wArray :array [1..3,1..2] of string = ((´1´,´111´),(´2´,´222´),(´3´,´53453´));


GOSTEI 0
Andersonfernando

Andersonfernando

27/03/2007

Vou tentar explicar melhor.

Tenho várias empresas são 7, e cada empresa tem seus cargos, e cada cargo tem seus funcionários.
Eu quero as informações do funcionário.

Preciso recuperar as informações da seguinte forma:

empresa : são constante; (Matrix, Rouver, Sig, Tend,)
cago : são constante; (Encarregado, Chefe, Administrador, Analista)
funcionário : vária de empresa e cargos.


Estou pensando em fazer algo assim:

empresa.cargo.funcionario.Nome;

Ele iria me retornar o nome do funcionário da empresa Matrix com cargo de chefe.

Como conseguiria buscar isso.


GOSTEI 0
Rjun

Rjun

27/03/2007

Por que você não usa Listas e Coleções em vez de array?


GOSTEI 0
Andersonfernando

Andersonfernando

27/03/2007

Por que você não usa Listas e Coleções em vez de array?


E como ficaria a estrutura e como fazer?


GOSTEI 0
Marco Salles

Marco Salles

27/03/2007

e porque voce não usa POO

defina uma classe com esta estrutura e crie os objetos e salve-os numa lista de objetos ????


GOSTEI 0
Andersonfernando

Andersonfernando

27/03/2007

[quote:d2499139c5=´Marco Salles´]e porque voce não usa POO

defina uma classe com esta estrutura e crie os objetos e salve-os numa lista de objetos ????[/quote:d2499139c5]


Achei muito boa a idéia e vou fazer isso.


Obrigado.


GOSTEI 0
Marco Salles

Marco Salles

27/03/2007

Pode ser assim:

TipoEmpresa = (a,b,c);

TipoCargo = (gerente,vendedor,analista,balconista,faxineiro);

TMinhaClasse = Class
private
 Fcargo:TipoCargo;
 FEmpresa:TipoEmpresa;
 Fnome:String;
    function GetFNome: String;
    function GetFTipocargo: String;
    function GetFTipoEmpresa: String;
    procedure SetFNome(const Value: String);
    procedure SetFTipocargo(const Value: String);
    procedure SetFTipoEmpresa(const Value: String);

public
  class procedure RetornarTodosFuncionariosEmpresa(const vEmpresa:String;
                                             const ListaDeObjetos:Tlist;
                                             ltbNomeItems:Tstrings);

  class procedure RetornarTodosFuncionariosEmpresaCargos(const vEmpresa:String;
                                             const ListaDeObjetos:Tlist;
                                             listaNegra:Tlist);



  property cargo:String read GetFTipocargo Write SetFTipocargo;
  property Empresa:String read GetFTipoEmpresa Write SetFTipoEmpresa;
  property nome:String read GetFNome Write SetFNome;

 Constructor Create(vEmpresa,Vcargo,vNome:String);overload;


implementação das funçoes:

implementation

{$R *.dfm}

{ TMinhaClasse }

class procedure TMinhaClasse.RetornarTodosFuncionariosEmpresa(
  const vEmpresa: String; const ListaDeObjetos: Tlist;
  ltbNomeItems: Tstrings);
var
i:integer;
begin
  for i:=0 to ListaDeObjetos.Count - 1 do
    if TMinhaClasse(ListaDeObjetos[i]).Empresa = vEmpresa Then
      ltbNomeItems.Add(TMinhaClasse(ListaDeObjetos[i]).nome);
end;



class procedure TMinhaClasse.RetornarTodosFuncionariosEmpresaCargos(
  const vEmpresa: String; const ListaDeObjetos: Tlist; listaNegra: Tlist);
var
i:integer;
begin
  for i:=0 to ListaDeObjetos.Count - 1 do
    if TMinhaClasse(ListaDeObjetos[i]).Empresa = vEmpresa Then
      listaNegra.Add(TMinhaClasse(ListaDeObjetos[i]));
end;


[b:3fb15d501d]{ TMinhaClasse }[/b:3fb15d501d]

constructor TMinhaClasse.Create(vEmpresa,Vcargo,vNome:String);
begin
  nome:=vNome;
  empresa:=vEmpresa;
  cargo:=vCargo;
end;

function TMinhaClasse.GetFNome: String;
begin
  result:=Fnome
end;

function TMinhaClasse.GetFTipocargo: String;
  function RetornarCargo(const value:TipoCargo):String;
   begin
     case Fcargo of
      gerente:result:=´gerente´;
      vendedor:result:=´vendedor´;
      analista:result:=´analista´;
      balconista:result:=´balconista´;
      faxineiro:result:=´Faxineiro´;
     end;
   end;
begin
  result:=RetornarCargo(Fcargo);
end;

function TMinhaClasse.GetFTipoEmpresa: String;
 function RetornarEmpresa(const value:TipoEmpresa):String;
   begin
     case Fempresa of
      a:result:=´a´;
      b:result:=´b´;
      c:result:=´c´;
     end;
   end;
begin
  result:= RetornarEmpresa(FEmpresa);
end;



procedure TMinhaClasse.SetFNome(const Value: String);
begin
  Fnome:=Value;
end;

procedure TMinhaClasse.SetFTipocargo(const Value: String);
 function RetornarTipoCargo(const Value:String):TipoCargo;
   begin
     if value = ´gerente´ then
       result:=gerente
     else
       if value = ´vendedor´ then
         result := vendedor
       else
         if value = ´analista´ then
           result:= analista
         else
           if value = ´balconista´ then
             result := balconista
           else
             result := faxineiro;
   end;
begin
   Fcargo:=RetornarTipoCargo(value);
end;

procedure TMinhaClasse.SetFTipoEmpresa(const Value: String);
function RetornarTipoEmpresa(const Value:String):TipoEmpresa;
   begin
     if value = ´a´ then
       result:=a
     else
       if value = ´b´ then
         result := b
       else
         if value = ´c´ then
           result:= c
   end;
begin
   FEmpresa:=RetornarTipoEmpresa(value);
end;
end.


procedure TMinhaClasse.SetFNome(const Value: String);
begin
 Fnome:=value;
end;


exemplo de utilização:

coloque nun form um Botão e dois listBox com os nomes respectivamentes: ltbNome e ltbNomeCargo


No evento onclick de um Botão , pode-se fazer a vontade :

var
 listaDeObjetos:Tlist;
 umObjeto:TMinhaClasse;
 listaAux:Tlist;
 i:integer;
begin
  listaDeObjetos:=Tlist.Create;
  umObjeto:=TMinhaClasse.Create(´a´,´analista´,´Marco´);
  listaDeObjetos.Add(umObjeto);
  showmessage(´Nome Do Funcinário : ´+TMinhaClasse(listaDeObjetos[0]).nome+13+
              ´Nome da Empresa ´+TMinhaClasse(listaDeObjetos[0]).Empresa+13+
              ´Nome do Cargo : ´+TMinhaClasse(listaDeObjetos[0]).cargo);

  //Acrescentar Items
   umObjeto:=TMinhaClasse.Create(´a´,´faxineiro´,´Joao´);
   listaDeObjetos.Add(umObjeto);

   umObjeto:=TMinhaClasse.Create(´c´,´gerente´,´Carmem´);
   listaDeObjetos.Add(umObjeto);

   umObjeto:=TMinhaClasse.Create(´b´,´vendedor´,´maria´);
   listaDeObjetos.Add(umObjeto);

   umObjeto:=TMinhaClasse.Create(´a´,´balconista´,´Telma´);
   listaDeObjetos.Add(umObjeto);

  ltbNome.Items.Add(´*************************´);
  ltbNome.Items.Add(´Empresa : "a" seus Funcionários são : ´);
  umObjeto.RetornarTodosFuncionariosEmpresa(´a´,listaDeObjetos,ltbNome.Items);


  ltbNome.Items.Add(´´);
  ltbNome.Items.Add(´*************************´);
  ltbNome.Items.Add(´Empresa : "b" seus Funcionários são :´);
  umObjeto.RetornarTodosFuncionariosEmpresa(´b´,listaDeObjetos,ltbNome.Items);

  ltbNome.Items.Add(´´);
  ltbNome.Items.Add(´*************************´);
  ltbNome.Items.Add(´Empresa : "b" seus Funcionários são :´);
  umObjeto.RetornarTodosFuncionariosEmpresa(´c´,listaDeObjetos,ltbNome.Items);


   ListaAux:=Tlist.Create;
  umObjeto.RetornarTodosFuncionariosEmpresaCargos(´a´,listaDeObjetos,listaAux);
  ltbNomeCargo.Items.Add(´´);
  ltbNomeCargo.Items.Add(´*************************´);
  ltbNomeCargo.Items.Add(´Empresa : "a"´);
    for i:=0 to ListaAux.Count -1 do
      begin
        ltbNomeCargo.Items.Add(´Nome : ´+TminhaClasse(listaAux[i]).nome+
                     ´----->> Cargo : ´+TminhaClasse(listaAux[i]).cargo);
      end;
  listaDeObjetos.Free;
end;


[color=darkblue:3fb15d501d][b:3fb15d501d]é so colar , copiar , estudar os métodos e melhorar a seu gosto[/b:3fb15d501d][/color:3fb15d501d]



GOSTEI 0
POSTAR