Recent

Author Topic: Ajuda com loop (for)  (Read 9658 times)

meulinux

  • Guest
Ajuda com loop (for)
« on: September 04, 2011, 03:07:02 am »
Companheiros de profissão, saudações.

Estou um pouco enrolado com a lógica.
Estou criando um programa para Linux, uma Bíblia (dentre muitas existentes). Vou direto ao que interessa:

Tenho 3 TListBox:
lbxLivros (com os livros da Bíblia);
lbxCapitulos (com os capítulos de cada livro da bíblia);
lbxVersiculos (com os versículos de cada capítulo).


lbxLivros: Gênesis, Êxodo, Levítico, Números, Deuteronômio, ...

Se eu selecionar o item "Gênesis", eu preencho o lbxCapítulos com a quantidade de capítulos existentes neste livro, que são 50 capítulos:

Code: [Select]
for n := 1 to 50 do
    lbxCapitulos.Items.Add(IntToStr(n));

Até neste ponto não complica em nada, estou usando um laço bem bolado com um case.
Tenho o laço até o livro Apocalipse, cada um inserindo a quantidade de capítulo existente em cada livro.
Agora, para cada item selecionado do capítulo, tenho de inserir no lbxVersiculos, a quantidade de versículos existente em cada capítulo de cada livro. Complicou!!!
Bom, a rotina é a mesma, mas preciso me basear em algo e é aí que complica.

Eu sei em que livro eu estou (usando o case), digamos que seja o livro de Gênesis.

Foi selecionado o capítulo, digamos... capítulo 1, sei disso com o for abaixo:

Code: [Select]
for cap := 0 to lbxCapitulos.Items.Count -1 do
         begin
           if lbxCapitulos.GetSelectedText = lbxCapitulos.Items.Strings[cap] then
           begin
             //LabelCapitulos.Caption := lbxCapitulos.GetSelectedText;

{
Eu fiz o teste com um TLabel acima, cada capítulo selecionado, me mostra num TLabel o número do capítulo.
Só que eu quero inserir em lbxVersiculo a quantidade de cada versículo correspondente ao capítulo selecionado. Alguém tem uma dica que possa ajudar a sair disso?
}
// Encontrou? então sai com o break abaixo
             Break;
             Exit;
           end;
         end;

O primeiro capítulo do livro de Gênesis contém 31 versículos, portanto, se o primeiro item da listbox (lbxCapitulos) for selecionado, seria inserido em lbxVersiculos os números 1 ao 31.

Sou agradecido, qualquer ajuda é bem-vinda.

Se você sabe traduzir bem para o idioma inglês, creio que se essa pergunta fosse traduzida, muita gente poderia ajudar.
« Last Edit: September 04, 2011, 03:10:03 am by meulinux »

felipemdc

  • Administrator
  • Hero Member
  • *
  • Posts: 3538
Re: Ajuda com loop (for)
« Reply #1 on: September 04, 2011, 07:18:27 am »
Olá, o programa vai ser gratuíto? Se sim, eu acho que seria legal desenvolver ele no subversion do Lazarus-CCR, você pode abrir um diretorio em lazarus-ccr/applications/ e trabalhar lá, daí com todo código visível fica mais fácil ajudar. Qual o nome do projeto?

Quanto ao seu problema em questão, me parece que você está utilizando uma estrutura de dados inadequada. Pense em suportar várias traduções desde já, depois fica muito difícil mudar mais pra frente. Crie estruturas de dados flexíveis. Você está lendo os textos da Bíblia da onde?

Eu faria assim:

1> Uma unidade que declara as estruturas de dados contendo a biblia, por exemplo bibledata.pas

type
  TChapter = class
    Text: TStringList;
  end;

  TBook = class
    Chapters: TFPList; // TChapter
    ChapterNames: TStringList;
    constructor Create;
    destructor Destroy; override;
    procedure AddChapter(AVersible: TChapter; AChapterName: string);
  end;

  TBookCollection = class
    Books: TFPList; // TBook
    BookNames: TStringList;
    constructor Create;
    destructor Destroy; override;
    procedure AddBook(ABook: TBook; ABookName: string);
  end;

var
  Bible: TBookCollection;

implementation

initialization

  Bible := TBookCollection.Create;

finalization

  Bible.Free;

end.

2> Uma unidade separada para ler o conteúdo da Bíblia de um arquivo

3> Depois crie uma rotina para converter os dados dessa estrutura para a GUI. Esse é o jeito correto de programar, tudo separado em módulos reutilizaveis, pense que alguém pode criar uma GUI Web usando as suas classes base.

Para escrever esses dados para o form é fácil. Por exemplo, dado um livro selecionado, escrever os capítulos:

lbxCapitulos.Items.Clear;
myBook := Bible.Books.Items[SelectedBook];
for i := 0 to myBook.Chapters.Count - 1 do
  lbxCapitulos.Items.Add(myBook.ChapterNames.Strings);

meulinux

  • Guest
Re: Ajuda com loop (for)
« Reply #2 on: September 04, 2011, 09:45:11 am »
Não estou fazendo um projeto para distribuição, foi solicitado por uma igreja, eles usam o Linux e no Linux não conheço nenhum que seja free, e, o mesmo deve ter umas funcionalidades interna para o uso da igreja. Não pensei nisso que você disse. Posso até desenvolver outra mais tarde e disponibilizar, mas só quando tiver pelo menos 60% pronta.

ezlage

  • Guest
Re: Ajuda com loop (for)
« Reply #3 on: September 04, 2011, 03:03:40 pm »
Meu amigo, tudo bem?

Não seria mais fácil você ter uma tabela pra Livro, outra pra Capítulo e Outra pra Versículo não? mesmo que em DBF, por exemplo...

Assim você não precisa de FOR nem CASE para fazer os laços, cria apenas um campo LOOKUP em cada tabela que associa cada versículo ao seu capítulo e cada capítulo ao seu livro.

Espero ter ajudado.

Abraço.

meulinux

  • Guest
Re: Ajuda com loop (for)
« Reply #4 on: September 04, 2011, 05:05:07 pm »
Meu amigo, tudo bem?

Não seria mais fácil você ter uma tabela pra Livro, outra pra Capítulo e Outra pra Versículo não? mesmo que em DBF, por exemplo...

Assim você não precisa de FOR nem CASE para fazer os laços, cria apenas um campo LOOKUP em cada tabela que associa cada versículo ao seu capítulo e cada capítulo ao seu livro.

Espero ter ajudado.

Abraço.


Olá Ezlage.

Eu vou usar Sqlite3 neste projeto, mas só vou incluir os versículos da Bíblia. O controle eu vou fazer manualmente mesmo. Eu já encontrei a resposta, criei outro case e removi o for que estava tentando solucionar.
Agradeço sua dica.

ezlage

  • Guest
Re: Ajuda com loop (for)
« Reply #5 on: September 05, 2011, 01:55:41 am »
Tranquiloo!

É bom saber que há conterrâneos se aventurando com o Lazarus e o Linux também.

Caso tenha interesse, podemos trocar idéias, segue meu contato:
E se não for pedir muito, veja meu tópico "DCPCRYPT no Linux" logo abaixo do seu, talvez tenha alguma dica... obrigado!

E-mail: ezlage@univez.com.br
MSN: ezlage@live.com

Abraçoo!

meulinux

  • Guest
Re: Ajuda com loop (for)
« Reply #6 on: September 05, 2011, 07:20:09 pm »

É bom saber que há conterrâneos se aventurando com o Lazarus e o Linux também.


Saiba que existem muitos conterrâneos aqui no fórum, mas 99% se aproximam diretamente no idioma inglês, não se achegam aqui. Eu só coloco uma mensagem aqui quando tenho de me expressar melhor quando o texto é grande. Quando é um texto pequeno eu traduzo o texto no Google Tradutor e posto a mensagem em inglês mesmo, diretamente nos tópicos acima. A chance de resposta é maior.

 

TinyPortal © 2005-2018