Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: AdvPL/TLPP Estudando xBase: A Linguagem "Pátria

_Créditos da imagem: Gerada com auxílio do ChatGPT/Gemini_ **Domine AdvPL/TLPP Estudando xBase: A Linguagem "Pátria"** Você quer ser um programador proficiente em **AdvPL/TLPP**? Está em busca de cursos online, suporte via Skype ou Facebook? Que tal uma abordagem que realmente faça você **dominar** essas linguagens entendendo suas bases? Eu domino o AdvPL/TLPP porque **não estudo diretamente essa linguagen**. O segredo? Eu estudo **xBase**, a "linguagem pátria" que deu origem ao AdvPL/TLPP. Ao compreender a xBase, você adquire uma base sólida para dominar suas variações e derivados. E qual é a melhor e maior fonte de conhecimento xBase hoje? Sem dúvidas, é o projeto **(x)Harbour**. Este compilador e repositório oferece uma vasta coleção de exemplos e ferramentas que não só aprimoram suas habilidades, mas também ampliam sua compreensão do funcionamento interno da linguagem. Algumas sugestões práticas para iniciar sua jornada: - **Explore os exemplos no projet

Protheus :: Programação Básica em Advpl “Combo XL”

Classificando um Array Unidimensional e Bidimensional:

Da mesma forma que podemos passar um bloco para aScan(), também podemos passar um bloco para aSort(). A função aSort() classifica o Array passada por parâmetro, na ordem ascendente, mas, em substituição, podemos passar para ela um bloco de codificação para fazer a comparação. Quando fizermos isso, em vez de aSort() comparar os elementos internamente, ela passará para o Bloco de Codificação os dois elementos necessários para a comparação. A avaliação do Bloco, então, retornará verdadeiro se os dois elementos estiverem classificados em ordem; caso contrário, retornará falso. Quando o Bloco retornar falso, aSort() trocará os dois elementos.

É importante observar que aSort() passa o elemento com o número mais baixo do Array como primeiro parâmetro do bloco; desta forma, saberemos quem é quem! É igualmente importante notar que não teremos conhecimento dos dois elementos que estaremos comparando; só saberemos que o primeiro parâmetro é um elemento com número menor do que o segundo. aSort() assegura a classificação do Array, determina os elementos a comparar e sabe quando a classificação termina.

Para classificar um Array Unidimensional em ordem ascendente a passagem do bloco é opcional. Mas, para ordená-lo em ordem descendente, teremos passar o bloco informado a regra para a classificação:

Exemplos de classificação de Array unidimensional

Local aNomes := {;
“Vinicius”,;
“Aline”,;
“Marinaldo”,;
“Michele”,;
“Camara”,;
“Andre”,;
“Valeria”,;
“João”,;
“Adriana”;
}
Local aSvNomes := aClone( aNomes ) //Efetua a cópia do array
Local bSort

//Mostrando as informações do Array no Console
ConOut( “Lista de Nomes nao ordenados” )
ConOut( “” )
aEval( aNomes , { |cNome| ConOut( cNOme ) } )
ConOut( “” )

//Ordenando o Array Unidimensional em ordem ascendente sem
//utilizar o Bloco de Codificação:
aSort( aNomes )

//Mostrando as informações do Array no Console
ConOut( “Lista de Nomes ordenados sem Bloco” )
ConOut( “” )
aEval( aNomes , { |cNome| ConOut( cNOme ) } )
ConOut( “” )

aNomes := aClone( aSvNomes ) //Restaurando aNomes

//Mostrando as informações do Array no Console
ConOut( “Lista de Nomes nao ordenados” )
ConOut( “” )
aEval( aNomes , { |cNome| ConOut( cNOme ) } )
ConOut( “” )

//Monta Bloco para Classificação em Ordem Ascendente
bSort := { |x,y| x < y }
aSort( aNomes , NIL , NIL , bSort )

//Mostrando as informações do Array no Console
ConOut( “Lista de Nomes ordenados ( asc ) utilizando Bloco” )
ConOut( “” )
aEval( aNomes , { |cNome| ConOut( cNOme ) } )
ConOut( “” )

//Monta Bloco para Classificação em Ordem Descendente
bSort := { |x,y| x > y }
aSort( aNomes , NIL , NIL , bSort )

//Mostrando as informações do Array no Console
ConOut( “Lista de Nomes ordenados ( desc ) utilizando Bloco” )
ConOut( “” )
aEval( aNomes , { |cNome| ConOut( cNOme ) } )
ConOut( “” )

aNomes := aClone( aSvNomes ) //Restaurando a Nomes

//Mostrando as informações do Array no Console
ConOut( “Lista de Nomes nao ordenados” )
ConOut( “” )
aEval( aNomes , { |cNome| ConOut( cNOme ) } )
ConOut( “” )

//Ordenando o Array em ordem Ascendente considerando apenas //alguns elementos
aSort( aNomes , 1 , 3 , { |x,y| x < y } )
//Mostrando as informações do Array no Console
ConOut( “Lista de Nomes Ordenados. Elem 1 a 3” )
ConOut( “” )
aEval( aNomes , { |cNome| ConOut( cNOme ) } )
ConOut( “” )

Exemplos de classificação de Array Bidimensional:

Local aStru := {;
{ "SNome" , "C" , 10 , 0 },;
{ "PNome" , "C" , 10 , 0 },;
{ "Ender1" , "C" , 30 , 0 },;
{ "Ender2" , "C" , 40 , 0 } ;
}
Local aSvStru := aClone( aStru ) //Efetua a cópia do array
Local bSort

/Mostrando as informações do Array no Console
ConOut( "Lista nao ordenada" )
ConOut( “” )
aEval( aStru , { |aElem| ConOut( aElem[1] ) } )
ConOut( “’ )

//Definindo bloco para ordenacao ascendente
bSort := { |x,y| x[1] < y[1] }

//Ordenando Array
aSort( aStru , NIL , NIL , bSort )

//Mostrando as informações do Array no Console
ConOut( "Lista ordenada ascendente" )
ConOut( "" )
aEval( aStru , { |aElem| ConOut( aElem[1] ) } )
ConOut( "" )

//Definindo bloco para ordenacao descendente
bSort := { |x,y| x[1] > y[1] }

//Ordenando Array
aSort( aStru , NIL , NIL , bSort )

//Mostrando as informações do Array no Console
ConOut( "Lista ordenada descendente" )
ConOut( “” )
aEval( aStru , { |aElem| ConOut( aElem[1] ) } )
ConOut( “” )

Comentários

Postagens mais visitadas