Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

BlackTDN :: IPCGo e IPCWaitEx

 

Um pequeno exemplo:

1 #DEFINE N_9REPLICATE 0100
2 #DEFINE N_IPCSLEEP 0500
3 #DEFINE N_IPCTHREADS 5
4 #DEFINE N_GLBLOCK 0
5
6 Static __c9Replicate := Replicate("9",N_9REPLICATE)
7 Static __c0Replicate := Replicate("0",N_9REPLICATE)
8
9 /*
10 Progama: uIPCMain.prg
11 Funcao: U_IPCMain
12 Autor: Marinaldo de Jesus [http://www.blacktdn.com.br]
13 Data: 21/11/2013
14 Descricao: Exemplo de uso das funcoes IPCGo e IPCWaitEx
15 */
16 Function U_IPCMain()
17 Local aParameters := Array(N_9REPLICATE)
18 Local nThreads := N_IPCTHREADS
19 Local cGlbValue
20 aFill(aParameters,9)
21 PutGlbValue("U_IPCExec",__c9Replicate)
22 StartTIPC(nThreads)
23 While ( .NOT.( KillApp() ) .and. .NOT.( AllZeros() ) )
24 IF ( N_GLBLOCK == 1 )
25 While .NOT.( GlbLock() )
26 Sleep(N_IPCSLEEP)
27 End While
28 EndIF
29 cGlbValue := GetGlbValue("U_IPCExec")
30 IF ( N_GLBLOCK == 1 )
31 GlbUnLock()
32 EndIF
33 ConOut(cGlbValue)
34 aEval(aParameters,{|n,y|aParameters[y]:=Val(SubStr(cGlbValue,y,1))})
35 IF ( IPCGo("U_IPCExec",@aParameters) )
36 Sleep(N_IPCSLEEP)
37 IF ( AllZeros() )
38 EXIT
39 EndIF
40 EndIF
41 Sleep(N_IPCSLEEP)
42 End While
43 ConOut("Final")
44 ConOut("ThreadID: "+Str(ThreadID()))
45 IF ( N_GLBLOCK == 1 )
46 While .NOT.( GlbLock() )
47 Sleep(N_IPCSLEEP)
48 End While
49 EndIF
50 cGlbValue := GetGlbValue("U_IPCExec")
51 IF ( N_GLBLOCK == 1 )
52 GlbUnLock()
53 EndIF
54 aEval(aParameters,{|n,y|aParameters[y]:=Val(SubStr(cGlbValue,y,1))})
55 ConOut(cGlbValue)
56 Return( NIL )
57
58 /*
59 Progama: uIPCMain.prg
60 Funcao: StartTIPC
61 Autor: Marinaldo de Jesus [http://www.blacktdn.com.br]
62 Data: 21/11/2013
63 Descricao: Carrega as Threads que ficarao aguardando alguma requisocao via IPCGO
64 */
65 Static Function StartTIPC(nThreads)
66 Local nTh
67 For nTh := 1 To nThreads
68 StartJob("U_IPCExec",GetEnvServer(),.F.)
69 Next nTh
70 Return( NIL )
71
72 /*
73 Progama: uIPCMain.prg
74 Funcao: U_IPCExec
75 Autor: Marinaldo de Jesus [http://www.blacktdn.com.br]
76 Data: 21/11/2013
77 Descricao: Utiliza IPCWaitEx que fica escutando e repondendo as requisicoes de IPCGo
78 */
79 Function U_IPCExec()
80 Local aParameters := Array(0)
81 Local bError := ErrorBlock( {|e| ErrorIPC(e) } )
82 Local cGlbValue
83 Local nBL
84 Local nEL
85 BEGIN SEQUENCE
86 While ( .NOT.( KillApp() ) .and. .NOT.( AllZeros() ) )
87 IF IPCWaitEx("U_IPCExec",N_IPCSLEEP,@aParameters)
88 IF .NOT.( AllZeros() )
89 ConOut("ThreadID: "+Str(ThreadID()))
90 nEL := Len(aParameters)
91 IF .NOT.( AllZeros() )
92 For nBL := 1 To nEL
93 aParameters[nBL]--
94 Next nBL
95 cGlbValue := ""
96 aEval(aParameters,{|n|cGlbValue+=AllTrim(Str(n))})
97 IF ( N_GLBLOCK == 1 )
98 While .NOT.( GlbLock() )
99 Sleep(N_IPCSLEEP)
100 End While
101 EndIF
102 PutGlbValue("U_IPCExec",cGlbValue)
103 IF ( N_GLBLOCK == 1 )
104 GlbUnLock()
105 EndIF
106 EndIF
107 EndIF
108 EndIF
109 End While
110 END SEQUENCE
111 ErrorBlock(bError)
112 Return(NIL)
113
114 /*
115 Progama: uIPCMain.prg
116 Funcao: AllZeros
117 Autor: Marinaldo de Jesus [http://www.blacktdn.com.br]
118 Data: 21/11/2013
119 Descricao: Utiliza variavel Global para o Controle de Processamento
120 */
121 Static Function AllZeros()
122 Local cGlbValue
123 IF ( N_GLBLOCK == 1 )
124 While .NOT.( GlbLock() )
125 Sleep(N_IPCSLEEP)
126 End While
127 EndIF
128 cGlbValue := GetGlbValue("U_IPCExec")
129 IF ( N_GLBLOCK == 1 )
130 GlbUnLock()
131 EndIF
132 Return((cGlbValue==__c0Replicate))
133
134 /*
135 Progama: uIPCMain.prg
136 Funcao: ErrorIPC
137 Autor: Marinaldo de Jesus [http://www.blacktdn.com.br]
138 Data: 21/11/2013
139 Descricao: Tratamento de erro customizado
140 */
141 Static Function ErrorIPC(e)
142 ConOut(e:Description)
143 BREAK
144 Return( NIL )

O código de exemplo poderá ser obitido aqui.


426.426


[]s
иαldσ dj

Comentários

  1. Naldo blz,
    Não consegui encontrar teu e-mail e nem o local para novas duvidas / Sugestões, queria ver com vc se alguém já pediu para vc alguma coisa sobre aquele e-mail que é disparado apos transmitir e assinar a NFe, aquele e-mail que vai automático para o cliente, eu abri chamado para totvs mas eles disseram que aquele e-mail é padrão e não tem como mudar, será que vc consegue alguma coisa para nós ?

    Vlw e desculpe se postei uma pergunta neste post.

    Carlos

    ResponderExcluir

Postar um comentário

Postagens mais visitadas