Seno, Coseno, Tangente em CLIPPER

1. Seno, Coseno, Tangente em CLIPPER

Jorge Luiz Gouveia Sousa
JorgeLuizGS

(usa Ubuntu)

Enviado em 07/04/2026 - 13:56h

Olá?
Estou tentando inserir Seno, Coseno e Tangente em CLIPPER!
Quando compilo, gera erro. Veja:


FUNCTION mathPI()
RETURN 3.141592653589793

FUNCTION mathE()
RETURN 2.718281828459045

/* TRIGONOMETRIA */

FUNCTION mathConvertToRadians( graus )
RETURN graus * ( mathPI() / 180 )

// =========================
// TRIGONOMETRIA
// =========================

FUNCTION mathSin( nAngulo )
RETURN Sin( nAngulo )

FUNCTION mathCos( nAngulo )
RETURN Cos( nAngulo )

FUNCTION mathTan( nAngulo )
RETURN Tan( nAngulo )

FUNCTION mathAsin( nValor )
RETURN ASin( nValor )

FUNCTION mathAcos( nValor )
RETURN ACos( nValor )

FUNCTION mathAtan( nValor )
RETURN ATan( nValor )

FUNCTION mathSinh( nValor )
RETURN Sinh( nValor )

FUNCTION mathCosh( nValor )
RETURN Cosh( nValor )

FUNCTION mathTanh( nValor )
RETURN Tanh( nValor )


FUNCTION mathAsinh( x )
RETURN Log( x + Sqrt( x*x + 1 ) )

FUNCTION mathAcosh( x )
RETURN Log( x + Sqrt( x*x - 1 ) )

FUNCTION mathAtanh( x )
RETURN 0.5 * Log( (1 + x) / (1 - x) )


Código de execulção:


graus := 45.0
radianos := mathConvertToRadians(graus)

rPrintln(graus, " graus é equivalente a ", radianos, " radianos.")

// Ângulo em radianos
anguloEmRadianos := mathPI() / 4.0

// Calculando o seno do ângulo
senoDoAngulo := mathSin(anguloEmRadianos)

// Exibindo o resultado
rPrintln("O seno de ", anguloEmRadianos, " radianos é: ", senoDoAngulo)

//Math.cos
// Ângulo em radianos
anguloEmRadianos := mathPI() / 3.0

// Calculando o cosseno do ângulo
cossenoDoAngulo := mathCos(anguloEmRadianos)

// Exibindo o resultado
rPrintln("O cosseno de ", anguloEmRadianos, " radianos é: ", cossenoDoAngulo)

//Math.tan
// Ângulo em radianos
anguloEmRadianos := mathPI() / 6.0

// Calculando a tangente do ângulo
tangenteDoAngulo := mathTan(anguloEmRadianos)

// Exibindo o resultado
rPrintln("A tangente de ", anguloEmRadianos, " radianos é: ", tangenteDoAngulo)

//Math.asin
// Valor para o qual queremos calcular o arco seno
valor := 0.5

// Calculando o arco seno do valor
arcoSeno := mathAsin(valor)

// Exibindo o resultado em radianos
rPrintln("O arco seno de ", valor, " é: ", arcoSeno, " radianos.")

//Math.acos
// Valor para o qual queremos calcular o arco cosseno
valor := 0.5

// Calculando o arco cosseno do valor
arcoCosseno := mathAcos(valor)

// Exibindo o resultado em radianos
rPrintln("O arco cosseno de ", valor, " é: ", arcoCosseno, " radianos.")

//Math.atan
// Valor para o qual queremos calcular o arco tangente
valor := 0.5

// Calculando o arco tangente do valor
arcoTangente := mathAtan(valor)

// Exibindo o resultado em radianos
rPrintln("O arco tangente de ", valor, " é: ", arcoTangente, " radianos.")

//Math.sinh
// Valor para o qual queremos calcular o seno hiperbólico
valor := 2.0

// Calculando o seno hiperbólico do valor
senoHiperbolico := mathSinh(valor)

// Exibindo o resultado
rPrintln("O seno hiperbólico de ", valor, " é: ", senoHiperbolico)

//Math.cosh
// Valor para o qual queremos calcular o cosseno hiperbólico
valor := 2.0

// Calculando o cosseno hiperbólico do valor
cossenoHiperbolico := mathCosh(valor)

// Exibindo o resultado
rPrintln("O cosseno hiperbólico de ", valor, " é: ", cossenoHiperbolico)

//Math.tanh
// Valor para o qual queremos calcular a tangente hiperbólica
valor := 2.0

// Calculando a tangente hiperbólica do valor
tangenteHiperbolica := mathTanh(valor)

// Exibindo o resultado
rPrintln("A tangente hiperbólica de ", valor, " é: ", tangenteHiperbolica)

//Math.asinh
// Valor para o qual queremos calcular o arco seno hiperbólico
valor := 2.0

// Calculando o arco seno hiperbólico do valor
arcoSenoHiperbolico := mathAsinh(valor)

// Exibindo o resultado
rPrintln("O arco seno hiperbólico de ", valor, " é: ", arcoSenoHiperbolico)

//asinh(x) := ln(x, sqrt(x^2, 1))
//Math.acosh
// Valor para o qual queremos calcular o arco cosseno hiperbólico
valor := 2.0

// Calculando o arco cosseno hiperbólico do valor
arcoCossenoHiperbolico := mathAcosh(valor)

// Exibindo o resultado
rPrintln("O arco cosseno hiperbólico de ", valor, " é: ", arcoCossenoHiperbolico)

//acosh(x) := ln(x, sqrt(x^2 - 1))
//Math.atanh
// Valor para o qual queremos calcular o arco tangente hiperbólico
valor := 0.5

// Calculando o arco tangente hiperbólico do valor
arcoTangenteHiperbolico := mathAtanh(valor)

// Exibindo o resultado
rPrintln("O arco tangente hiperbólico de ", valor, " é: ", arcoTangenteHiperbolico)

//atanh(x) := 0.5 * ln((1, x) / (1 - x))




  


2. Re: Seno, Coseno, Tangente em CLIPPER

ncppp lq
ncppplq

(usa Outra)

Enviado em 08/04/2026 - 08:40h

A IA respondeu isso

O problema que o autor daquele tópico está enfrentando é um erro clássico de quem tenta usar funções matemáticas modernas em um compilador antigo.

Por que o código dele dá erro?
No Clipper (versões 5.0, 5.2, 5.3), funções como Sin(), Cos() e Tan() não são nativas. No código que ele postou:

Snippet de código

FUNCTION mathSin( nAngulo )
RETURN Sin( nAngulo ) // <--- O ERRO ESTÁ AQUI
O compilador gera um erro porque ele não encontra a função Sin(). O Clipper puro só possui funções matemáticas básicas como raiz quadrada (SQRT()), logaritmo (LOG()) e exponencial (EXP()).
=====================
Como resolver (3 opções):

1. Usar a biblioteca Nanfor (A mais comum na época)
A maioria dos programadores Clipper usava a biblioteca Nanfor.lib (The Nanforum Toolkit). Se você tiver essa biblioteca, as funções são:

FT_SIN()

FT_COS()

FT_TAN()
===================================
2. Implementar manualmente (Série de Taylor)
Se você não quer depender de bibliotecas externas, precisa "ensinar" o Clipper a calcular o seno e o cosseno usando aproximações matemáticas. O ângulo deve estar sempre em Radianos.

Snippet de código

// Converte Graus para Radianos
FUNCTION DegToRad( nGraus )
RETURN nGraus * (3.14159265 / 180)

// Aproximação do Seno
FUNCTION MySin( x )
RETURN x - (x^3/6) + (x^5/120) - (x^7/5040)

// Aproximação do Cosseno
FUNCTION MyCos( x )
RETURN 1 - (x^2/2) + (x^4/24) - (x^6/720)

// Tangente
FUNCTION MyTan( x )
LOCAL nC := MyCos(x)
RETURN if( nC == 0, 0, MySin(x) / nC )
===================================
3. Usar a CA-Tools (CT.LIB)
Se o seu ambiente de desenvolvimento tiver a biblioteca CA-Tools, basta adicionar a CT.LIB no seu script de linkedição (RTLINK ou BLINKER). Ela libera as funções:

SIN()

COS()

TAN()

COT() (Cotangente)

Resumo para o seu caso:
Se você está apenas tentando rodar aquele código do link, ele não vai funcionar "puro". Você terá que:

Substituir os RETURN Sin(nAngulo) por uma fórmula matemática (como a que passei acima).

Ou encontrar o arquivo NANFOR.LIB na internet e incluir na hora de linkar o executável.
===================================
Dica Extra: Se você estiver usando Harbour ou xHarbour (que são os sucessores modernos do Clipper), essas funções funcionam nativamente sem precisar fazer nada disso. O problema do post no Viva o Linux é especificamente para o compilador Clipper 16 bits antigo.
===================================
para programar tenha sempre acesso a IA, ela ajuda bastante






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts