Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: 🚀 **Depurando Blocos de Código (xBase)** 🚀

🚀 **Depurando Blocos de Código (xBase)** 🚀 Interessante a abordagem de **Blocos de Código** no **Harbour**! Eles funcionam literalmente como "cidadãos de primeira classe", permitindo até mesmo depuração passo a passo. 🔍 **Exemplo Prático:** ```xBase Eval( {|aFunTst as array| LOCAL lValid AS LOGICAL LOCAL i AS NUMERIC FOR i := 1 TO Len(aFunTst) // Verifica resultado esperado lValid := aFunTst[i][3] IF lValid SetColor("g+/n") QOut("(" + aFunTst[i][2] + "): passed") SetColor("") ELSE SetColor("r+/n") QOut("(" + aFunTst[i][2] + "): failed") SetColor("") ENDIF NEXT i RETURN NIL }, aFunTst ) ``` 🤔 **Pergunta aos escovadores de bit de plantão:** É pos...

BlackTDN :: Técnica de Multiplicação Chinesa :: Solução em Harbour/xBase

_Créditos das imagens: ChatGPT
# Técnica de Multiplicação Chinesa :: Solução em Harbour/xBase

A multiplicação chinesa é uma técnica antiga e surpreendente para realizar multiplicações que foge do método tradicional ensinado nas escolas. Recentemente, tive a oportunidade de explorar duas implementações desta técnica na linguagem Harbour, disponíveis gratuitamente no repositório [naldodj-xbase-leetcode-solutions](https://github.com/naldodj/naldodj-xbase-leetcode-solutions). Essa implementação, que chamamos de “brinde”, destaca-se pela originalidade e pela forma elegante de resolver o problema, especialmente considerando que, até onde se sabe, nenhum desafio popular (como os do LeetCode) aborda este método.

## O Conceito da Multiplicação Chinesa

A técnica de multiplicação chinesa baseia-se na disposição dos dígitos dos números a serem multiplicados em uma espécie de grade ou matriz. Cada célula dessa grade representa o produto parcial dos dígitos correspondentes. Em seguida, esses produtos são somados seguindo diagonais que se formam na matriz, onde cada diagonal acumula os produtos que, juntos, compõem as casas decimais do resultado final. Essa abordagem permite que o “vai um” (carry) seja processado de forma ordenada, culminando no valor final da multiplicação.

## Implementação em Harbour

Nas duas versões da implementação encontradas, o autor utiliza o Harbour para manipular strings e arrays, o que facilita o trabalho com números muito grandes – algo importante para cálculos que exigem alta precisão.

### Principais Pontos das Implementações

- **Definição de Casos de Teste:** Ambas as implementações começam definindo diversos casos de teste, onde os números são passados como strings. Isso possibilita testar a função de multiplicação com números de diferentes tamanhos, garantindo robustez.
- **Construção da Matriz:** O algoritmo monta uma matriz onde cada elemento é o resultado da multiplicação entre dígitos individuais dos dois números.
- **Soma das Diagonais:** Uma vez formada a matriz, os produtos são somados diagonalmente. Essa soma leva em conta o “vai um”, o que é processado a partir da diagonal menos significativa até a mais significativa.
- **Conversão para String:** Por fim, o resultado é convertido para uma string, representando o produto final da multiplicação.

### Diferenças entre as Duas Versões

Apesar de ambas as versões seguirem a mesma lógica geral, elas apresentam diferenças sutis na organização e otimização do código. Essas variações demonstram a flexibilidade da linguagem Harbour e como diferentes abordagens podem levar ao mesmo resultado com elegância e eficiência.

## Exemplo Prático: Diagrama da Multiplicação

Para ilustrar o processo, vejamos um exemplo simples utilizando os números **23** e **45**:

### Passo 1: Calcular os Produtos Parciais

Organize os dígitos dos dois números em uma grade:

```
       2     3
     -----------
 4 |   2×4   2×5
   |   =8    =10
     -----------
 5 |   3×4   3×5
   |   =12   =15
```

### Passo 2: Agrupar os Produtos pelas Diagonais

Os produtos são somados conforme as diagonais formadas na grade:

- **Diagonal 1 (canto inferior direito):** Apenas o produto 15.
- **Diagonal 2 (centro):** Soma de 10 (superior direito) e 12 (inferior esquerdo) → **10 + 12 = 22**.
- **Diagonal 3 (canto superior esquerdo):** Apenas o produto 8.

### Passo 3: Processar os “Vai Um” (Carry)

Os valores das diagonais são processados da direita para a esquerda:

1. **Diagonal 1:** 15  
   - Dígito: 15 mod 10 = **5**  
   - Vai um: 15 div 10 = **1**

2. **Diagonal 2:** 22 + 1 (carry) = 23  
   - Dígito: 23 mod 10 = **3**  
   - Vai um: 23 div 10 = **2**

3. **Diagonal 3:** 8 + 2 (carry) = 10  
   - Dígito: 10 mod 10 = **0**  
   - Vai um: 10 div 10 = **1**

4. **Vai um Final:** O restante é **1**, que é colocado à esquerda.

### Passo 4: Montar o Resultado Final

Concatenando os dígitos (da esquerda para a direita): **1**, **0**, **3**, **5** → O resultado final é **1035**, que é o produto de 23 por 45.

## Onde Encontrar o Código

Você pode conferir os detalhes completos das implementações diretamente nos seguintes links:

- [README da Multiplicação Chinesa](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/_00/gifts/001-chinese_multiplication/README.md)  
- [Implementação 1 (.prg)](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/_00/gifts/001-chinese_multiplication/chinese_multiplication.1.prg)  
- [Implementação 2 (.prg)](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/_00/gifts/001-chinese_multiplication/chinese_multiplication.2.prg)  

## Conclusão

A técnica de multiplicação chinesa é um excelente exemplo de como métodos antigos podem ser reaproveitados em contextos modernos, especialmente em linguagens como o Harbour, que permitem manipular números grandes e complexos com facilidade. Este “brinde” no repositório naldodj-xbase-leetcode-solutions é uma verdadeira celebração da criatividade na programação, oferecendo aos entusiastas de tecnologia uma nova perspectiva sobre a resolução de problemas clássicos.

---

**Hashtags:**  
#Tecnologia, #Harbour, #MultiplicaçãoChinesa, #Programação, #XBase, #Algoritmos, #Desenvolvimento, #CódigoAberto, #Inovação, #BrindeTech

Comentários

Postagens mais visitadas