OT: ChatGPT sabe programar em Clipper muito bem!

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

OT: ChatGPT sabe programar em Clipper muito bem!

Mensagem por vailton »

Quero compartilhar uma brincadeira que me veio aqui a mente com base numa necessidade real que me surgiu hoje, saca só que legal:

User
Voce sabe programar em clipper?
ChatGPT
Sim, eu tenho conhecimento sobre programação em Clipper. Clipper é uma linguagem de programação que foi muito popular nos anos 80 e início dos anos 90 para o desenvolvimento de aplicações de negócios, especialmente em sistemas de banco de dados. Ela evoluiu a partir do dBase, um sistema de gerenciamento de banco de dados, e foi conhecida por sua velocidade e eficiência em manipular grandes volumes de dados.
Se você tiver alguma dúvida específica sobre programação em Clipper ou precisar de ajuda com um código Clipper, fique à vontade para perguntar!

User
Preciso de uma funcao em clipper pra validar se um parametro passado é um código de barras gtin válido.
ChatGPT
Para validar um código de barras GTIN (Global Trade Item Number) em Clipper, você pode criar uma função que verifica se o código é válido com base em seu dígito verificador. O dígito verificador é o último número do código e é calculado a partir dos números anteriores. A validação pode ser feita usando o algoritmo de Luhn, um método comum para validar números de identificação.

Segue um exemplo de como você pode implementar essa função em Clipper:

Código: Selecionar todos

FUNCTION IsValidGTIN(cGTIN)
    LOCAL nSum := 0, i, nDigit, nCheckDigit, nLength

    // Remove os espaços e verifica se o código é numérico
    cGTIN := AllTrim(cGTIN)
    IF !ValType(cGTIN) == "C" .OR. !Empty(cGTIN)
        RETURN .F.
    ENDIF

    nLength := Len(cGTIN)
    nCheckDigit := Val(SubStr(cGTIN, nLength))

    // Percorre cada dígito, da direita para a esquerda
    FOR i := nLength - 1 TO 1 STEP -1
        nDigit := Val(SubStr(cGTIN, i, 1))

        // Multiplica os dígitos nas posições ímpares por 3
        IF (nLength - i) % 2 == 0
            nSum += nDigit * 3
        ELSE
            nSum += nDigit
        ENDIF
    ENDFOR

    // Calcula o dígito verificador
    nDigit := 10 - (nSum % 10)
    IF nDigit == 10
        nDigit := 0
    ENDIF

    // Retorna verdadeiro se o dígito verificador corresponder
    RETURN nDigit == nCheckDigit
ENDFUNC
Essa função IsValidGTIN recebe uma string cGTIN, que é o código de barras GTIN a ser verificado. Ela primeiro remove espaços em branco, verifica se o código é não vazio e numérico, e então aplica o algoritmo de Luhn para calcular e verificar o dígito verificador.

Lembre-se de que esta é uma implementação básica e pode precisar de ajustes conforme as especificações exatas do seu uso de códigos GTIN. Por exemplo, códigos GTIN podem ter diferentes comprimentos (GTIN-8, GTIN-12, GTIN-13, GTIN-14), e você pode querer adicionar verificações adicionais para lidar com esses casos.

User
Preciso de uma única funcao em clipper que trate todas estas variantes.
ChatGPT
Criar uma função em Clipper que valide todas as variantes de códigos GTIN (GTIN-8, GTIN-12, GTIN-13, GTIN-14) envolve um pouco mais de complexidade, mas ainda é possível. O algoritmo de Luhn é utilizado para verificar o dígito de controle em todos esses formatos. A função precisa considerar o comprimento do GTIN fornecido e calcular o dígito verificador adequadamente.

Aqui está um exemplo de como você pode implementar essa função:

Código: Selecionar todos

FUNCTION IsValidGTIN(cGTIN)
    LOCAL nSum := 0, i, nDigit, nCheckDigit, nLength

    // Remove os espaços e verifica se o código é numérico
    cGTIN := AllTrim(cGTIN)
    IF !ValType(cGTIN) == "C" .OR. !Empty(cGTIN)
        RETURN .F.
    ENDIF

    // Verifica o comprimento do GTIN (deve ser 8, 12, 13 ou 14)
    nLength := Len(cGTIN)
    IF !(nLength == 8 .OR. nLength == 12 .OR. nLength == 13 .OR. nLength == 14)
        RETURN .F.
    ENDIF

    nCheckDigit := Val(SubStr(cGTIN, nLength))

    // Percorre cada dígito, da direita para a esquerda
    FOR i := nLength - 1 TO 1 STEP -1
        nDigit := Val(SubStr(cGTIN, i, 1))

        // Multiplica os dígitos nas posições ímpares por 3 (considerando o comprimento total)
        IF (nLength - i) % 2 == 0
            nSum += nDigit * 3
        ELSE
            nSum += nDigit
        ENDIF
    ENDFOR

    // Calcula o dígito verificador
    nDigit := 10 - (nSum % 10)
    IF nDigit == 10
        nDigit := 0
    ENDIF

    // Retorna verdadeiro se o dígito verificador corresponder
    RETURN nDigit == nCheckDigit
ENDFUNC
Essa função agora também verifica se o comprimento do GTIN é válido (8, 12, 13 ou 14 caracteres) antes de proceder com o cálculo do dígito verificador. A lógica de cálculo é a mesma, mas agora a função pode lidar com qualquer uma das variantes do GTIN.

Como sempre, é importante testar a função com uma variedade de dados de entrada para garantir que ela funcione corretamente em todos os casos esperados.

User
Obrigado, por favor, me de exemplos de como usar esta nova funcao.
ChatGPT
Claro! Aqui estão alguns exemplos de como você pode usar a função IsValidGTIN que discutimos para validar diferentes variantes de códigos GTIN em Clipper:

Validar um GTIN-8:

Código: Selecionar todos

LOCAL cGTIN8 := "12345670"
IF IsValidGTIN(cGTIN8)
    ? "GTIN-8 válido:", cGTIN8
ELSE
    ? "GTIN-8 inválido:", cGTIN8
ENDIF
Validar um GTIN-12:

Código: Selecionar todos

LOCAL cGTIN12 := "123456789012"
IF IsValidGTIN(cGTIN12)
    ? "GTIN-12 válido:", cGTIN12
ELSE
    ? "GTIN-12 inválido:", cGTIN12
ENDIF
Validar um GTIN-13:

Código: Selecionar todos

LOCAL cGTIN13 := "1234567890128"
IF IsValidGTIN(cGTIN13)
    ? "GTIN-13 válido:", cGTIN13
ELSE
    ? "GTIN-13 inválido:", cGTIN13
ENDIF
Validar um GTIN-14:

Código: Selecionar todos

LOCAL cGTIN14 := "12345678901231"
IF IsValidGTIN(cGTIN14)
    ? "GTIN-14 válido:", cGTIN14
ELSE
    ? "GTIN-14 inválido:", cGTIN14
ENDIF
Em cada um desses exemplos, você substituiria os códigos GTIN de exemplo ("12345670", "123456789012", etc.) pelos códigos GTIN reais que deseja validar. A função IsValidGTIN retorna .T. (verdadeiro) se o código GTIN for válido de acordo com o algoritmo de Luhn, e .F. (falso) se não for.

Lembre-se de que estes são apenas códigos de exemplo. Na prática, você precisará usar códigos GTIN reais que deseja validar. Também é importante notar que, embora a função valide a estrutura do código GTIN, ela não verifica se o código GTIN corresponde a um produto real no sistema de banco de dados de códigos GTIN globais.

Bacana,né?
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Eduardo Pinho
Colaborador
Colaborador
Mensagens: 72
Registrado em: 13 Jun 2014 19:30
Localização: Niteroi

OT: ChatGPT sabe programar em Clipper muito bem!

Mensagem por Eduardo Pinho »

Sério??!! Não creio!! Tinha um programador lá respondendo, só pode.. huahuhauahuaha
Avatar do usuário
vailton
Colaborador
Colaborador
Mensagens: 390
Registrado em: 17 Nov 2005 19:08
Localização: Brasil
Contato:

OT: ChatGPT sabe programar em Clipper muito bem!

Mensagem por vailton »

Retiro o elogio, embora o resultado ainda seja surprendente. Testei ele gerando códigos em várias outras linguagens, esta aqui especificamente é a que ele mais come bola na sintaxe. Talvez devido à forma como o Clipper evoluiu no decorrer do tempo, mas mesmo assim é sempre surpreendente.
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"

E-mail/MSN: contato@vailton.com.br
Skype: vailtom
Eduardo Pinho
Colaborador
Colaborador
Mensagens: 72
Registrado em: 13 Jun 2014 19:30
Localização: Niteroi

OT: ChatGPT sabe programar em Clipper muito bem!

Mensagem por Eduardo Pinho »

Sim, é surpreendente a forma informal como ele conversa e conduz a conversação. Mas na boa, por mais que a IA esteja avançando, ela AINDA não vai desenvolver códigos de programação que dependem de um raciocínio lógico, e ainda incluir comentários na linha. É óbvio que ele pega esses códigos na internet e monta a conversação.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

OT: ChatGPT sabe programar em Clipper muito bem!

Mensagem por rochinha »

Amiguinhos,

Uma vez fiz um teste para criar um pequeno crud em PHP salvando em uma tabela MySQL com 3 campos(caracter, numérico e data) e me surpreendi.

Lógico que ainda precisei fazer uns ajustes mas foi significante.

Com certeza a IA vai aprendendo com nossas correções e logo teremos um HAL2000 querendo nos exterminar.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

OT: ChatGPT sabe programar em Clipper muito bem!

Mensagem por alxsts »

Olá!

Olhando apenas esta linha ...

Código: Selecionar todos

IF !ValType(cGTIN) == "C" .OR. !Empty(cGTIN)
... dá pra ver que ele não é muito bom em lógica de programação Clipper. Qualquer código GTIN passado para a função vai fazer com que !Empty(cGTIN) falhe e a função retorne False... o correto é

Código: Selecionar todos

IF !ValType(cGTIN) == "C" .OR. Empty(cGTIN)
[]´s
Alexandre Santos (AlxSts)
Responder