Fonte UTF-8 no CMD.EXE

Seção onde você poderá tirar suas dúvidas sobre Sistemas Operacionais. (Windows, Linux...)

Moderador: Moderadores

Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

Veja o código abaixo:

https://iatagancursos.github.io/Megusta ... do/prg.zip

O CMD.EXE não está acentuando as palavras direito!
Queria saber como insiro a fonte UTF-8 no CMD.EXE do Windows 64 bits?
Por exemplo:

Á fica ├í

é fica ├®

E assim por diante?
Editado pela última vez por Itamar M. Lins Jr. em 19 Ago 2026 22:34, em um total de 1 vez.
Razão: O presente tópico foi movido da seção [x]Harbour, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com o [x]Harbour.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8221
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 6 vezes
Curtiram: 1 vez

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Itamar M. Lins Jr. »

Olá!
Dentro do CMD.

Código: Selecionar todos

chcp 65001
Se desejar, ativar geral no painel de controle... Mas infelizmente ainda é BETA! no Windows 10
2026-08-19_22-23-37.png
2026-08-19_22-23-37.png (86.08 KiB) Exibido 96 vezes
Saudações,
Itamar M. Lins Jr.
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

Olá?
Tentei todas as etapas no Windows 11 e não consegui!
Gera uma acentuação horrível!
No C/C++ eu consigo alterar, mas no Harbour fica horrível!
Não sei o que faço?
Observação: Uso o VSCode.
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

Resultado:

N├║mero original: 7.8
N├║mero arredondado para baixo: 7
N├║mero original: 7.2
N├║mero arredondado para cima: 8
N├║mero original: 7.5
N├║mero arredondado: 8
123.457
Brasil: 1234567,89
N├║mero aleat├│rio: 0.23
Valor absoluto de -5 := 5
Valor absoluto de -123456789 := 123456789
Valor absoluto de -3.14 := 3.14
Valor absoluto de -2.71828 := 2.71828
Máximo entre 15.5 e 12.3 := 15.5
Mínimo entre 15.5 e 12.3 := 12.3
Máximo entre 15.5, 12.3, 10.8, 14.6 := 15.5
Mínimo entre 15.5, 12.3, 10.8, 14.6 := 10.8
Resultado: 8.00
Raiz quadrada de 25.0 := 5.00
Raiz quadrada de 1/2: 0.71
Raiz quadrada de 2: 1.41
Raiz c├║bica de 27.0 := 3.00
Sinal de -5.5 := -1

O valor de pi é:
A área de um círculo com raio 5.0 é: 78.53981633974483000
45.0 graus é equivalente a 0.785 radianos
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

CMD é o COMMAND do Windows
Tipo Terminal no Linux

Eu estou usando o Harbour

Não deleta
Kapiaba
Colaborador
Colaborador
Mensagens: 1924
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Kapiaba »

Olá, tente assim, no seu .bat:

Código: Selecionar todos


>nul 2>&1 chcp 1252

>nul 2>&1 chcp 65001
Se é que eu entendi...

Regards, saludos.
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

:D :D :D :D :D :D :D :D :D :D :D :D :D
O código fonte está logo abaixo
:D :D :D :D :D :D :D :D :D :D :D :D :D
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

ouka/Megusta.prg

Código: Selecionar todos

#include "hbclass.ch"

CLASS Megusta
   METHOD New() CONSTRUCTOR

   METHOD rPrint( cMessage )
   METHOD rPrintln( cMessage )
   METHOD rInput( cPrompt )
   METHOD rSaveFile( cArquivo, cConteudo )
   METHOD rOpenFile( cArquivo )
   METHOD rOpenProgram( cPrograma )
   METHOD rOpenFileWeb( cArquivo )
   METHOD strReplace( cOriginal, cVar1, cVar2 )
   METHOD strLength( cString )
   METHOD strSubstring( cString, nInicio, nFim )
   METHOD strCharAt( cString, nPos )
   METHOD strIndexOf(cadeia, subcadeia)
   METHOD strLastIndexOf(cadeia, subcadeia)
   METHOD strToLowerCase( cString )
   METHOD strToUpperCase( cString )
   METHOD strEquals( c1, c2 )
   METHOD strEqualsIgnoreCase( c1, c2 )
   METHOD strCompareTo(cadeia1, cadeia2)
   METHOD strCompareToIgnoreCase(cadeia1, cadeia2)
   METHOD strConcat( ... )
   METHOD strStartsWith( cString, cPrefix )
   METHOD strEndsWith( cString, cSuffix )
   METHOD strIncludes( cString, cSub )
   METHOD strSplit( cString, cDelimiter )
   METHOD strPadStart( cString, nLen, cPad )
   METHOD strPadEnd( cString, nLen, cPad )
   METHOD strRepeat( cString, nTimes )
   METHOD strSearch( cString, cSub )
   METHOD strTrim( cString )
   METHOD strTrimStart( cString )
   METHOD strTrimEnd( cString )
   METHOD strSlice( cString, nStart, nEnd )
   METHOD dateDay()
   METHOD dateWeekDay()
   METHOD dateMonth()
   METHOD dateYear()
   METHOD dateSetWeekDay( nAno, nMes, nDia )
   METHOD dateHour24()
   METHOD dateMinute()
   METHOD dateSecond()
   METHOD xArrLength( aLista )
   METHOD arrAddAll( aLista, ... )
   METHOD arrAdd( aLista, xValor )
   METHOD arrAddPos( aLista, nPos, xValor )
   METHOD arrSet( aLista, nPos, xValor )
   METHOD arrGet( aLista, nPos )
   METHOD arrSize( aLista )
   METHOD arrRemove( aLista, nPos )
   METHOD arrClear( aLista )
   METHOD arrContains( aLista, xValor )
   METHOD arrIndexOf( aLista, xValor )
   METHOD arrLastIndexOf( aLista, xValor )
   METHOD mathInt( cNumero )
   METHOD mathNum( cNumero )
   METHOD mathBool( cValor )
   METHOD mathFloor( n )
   METHOD mathCeil( n )
   METHOD mathRound( n )
   METHOD mathDecimalFormat( nNumero, cMascara )
   METHOD mathNumberFormat( nNumero, cLocale, cCountry )
   METHOD mathRandom()
   METHOD mathAbs( n )
   METHOD mathMax( n1, n2 )
   METHOD mathMin( n1, n2 )
   METHOD mathPow( base, expo )
   METHOD mathSqrt( n )
   METHOD mathCbrt( n )
   METHOD mathSignum( n )
   METHOD mathPI()
   METHOD mathConvertToRadians( graus )
   METHOD normalizeAngle(x)
   METHOD mathSin(x)
   METHOD mathCos(x)
   METHOD mathTan(x)
   METHOD mathAsin(x)
   METHOD mathAcos(x)
   METHOD mathAtan(x)
   METHOD mathSinh(x)
   METHOD mathCosh(x)
   METHOD mathTanh(x)
   METHOD mathAsinh(x)
   METHOD mathAcosh(x)
   METHOD mathAtanh(x)
   METHOD mathLog( nNumero )
   METHOD mathLog10( nNumero )
   METHOD mathLog2( nNumero )
   METHOD mathExp( nExpoente )
   METHOD mathLog1p( n )
   METHOD mathE()
   METHOD mathLN2()
   METHOD mathLOG2E()
   METHOD mathLN10()
   METHOD mathLOG10E()
   METHOD mathSQRT1_2()
   METHOD mathSQRT2()
   METHOD mathMaxArr( ... )
   METHOD mathMinArr( ... )
ENDCLASS


METHOD New() CLASS Megusta
return Self
/*
PROCEDURE Main

LOCAL x := 1.2

? "sin:", mathSin(x)
? "cos:", mathCos(x)
? "tan:", mathTan(x)

? "log:", mathLog(10)
? "log2:", mathLog2(8)

? "exp:", mathExp(2)

RETURN
*/
/* Megusta.prg */


/* =========================
   PRINT / INPUT
   ========================= */

METHOD rPrint( cMessage ) CLASS Megusta
   ?? cMessage
RETURN NIL

METHOD rPrintln( cMessage ) CLASS Megusta
   IF cMessage != NIL
      ?? cMessage         // Com quebra de linha
      ? ""
   ELSE 
      ? ""
   ENDIF
RETURN NIL

METHOD rInput( cPrompt ) CLASS Megusta
   LOCAL cValue := ""
   ?? cPrompt         // Exibe o prompt sem quebra de linha
   ACCEPT TO cValue   // Lê a entrada do usuário
   ? ""
RETURN cValue

/* =========================
   FILE
   ========================= */

METHOD rSaveFile( cArquivo, cConteudo ) CLASS Megusta
   LOCAL nHandle := FCreate( cArquivo )

   IF nHandle < 0
      ? "Erro ao criar arquivo."
      RETURN NIL
   ENDIF

   FWrite( nHandle, cConteudo )
   FClose( nHandle )

   ? "Arquivo", cArquivo, "salvo com sucesso."
RETURN NIL

METHOD rOpenFile( cArquivo ) CLASS Megusta
   LOCAL cConteudo := ""
   LOCAL cLinha

   IF ! File( cArquivo )
      ? "Erro: arquivo não encontrado."
      RETURN ""
   ENDIF

   cConteudo := MemoRead( cArquivo )

RETURN cConteudo

METHOD rOpenProgram( cPrograma ) CLASS Megusta
   RUN ( cPrograma )
RETURN NIL

METHOD rOpenFileWeb( cArquivo ) CLASS Megusta
   SISTEMA_OPERACIONAL = lower(os())
      IF ::strIndexOf(SISTEMA_OPERACIONAL, "windows") >= 1
            RUN ('cmd /c powershell -Command "Invoke-WebRequest -Uri ' + cArquivo + ' -OutFile x0001.txt"')
      ELSEIF ::strIndexOf(SISTEMA_OPERACIONAL, "linux") >= 1
            RUN ("wget -O x0001.txt " + cArquivo)
      ENDIF
      arquivo := ::rOpenFile("x0001.txt")
      ERASE "x0001.txt"
RETURN arquivo
/* =========================
   STRING
   ========================= */

METHOD strReplace( cOriginal, cVar1, cVar2 ) CLASS Megusta
RETURN StrTran( cOriginal, cVar1, cVar2 )

METHOD strLength( cString ) CLASS Megusta
RETURN Len( cString )

METHOD strSubstring( cString, nInicio, nFim ) CLASS Megusta
RETURN SubStr( cString, nInicio + 1, nFim - nInicio )

METHOD strCharAt( cString, nPos ) CLASS Megusta
RETURN SubStr( cString, nPos + 1, 1 )

METHOD strIndexOf(cadeia, subcadeia) CLASS Megusta
LOCAL pos
LOCAL len_cadeia, len_subcadeia

len_cadeia = LEN(cadeia)
len_subcadeia = LEN(subcadeia)

FOR pos = 1 TO len_cadeia - len_subcadeia + 1
IF SUBSTR(cadeia, pos, len_subcadeia) == subcadeia
RETURN pos
ENDIF
NEXT

RETURN 0 // Retorna 0 se a subcadeia não for encontrada

METHOD strLastIndexOf(cadeia, subcadeia) CLASS Megusta
LOCAL pos
LOCAL len_cadeia, len_subcadeia

len_cadeia = LEN(cadeia)
len_subcadeia = LEN(subcadeia)

FOR pos = len_cadeia TO 1 STEP -1
IF SUBSTR(cadeia, pos, len_subcadeia) == subcadeia
RETURN pos
ENDIF
NEXT

RETURN 0 // Retorna 0 se a subcadeia não for encontrada

METHOD strToLowerCase( cString ) CLASS Megusta
RETURN Lower( cString )

METHOD strToUpperCase( cString )
RETURN Upper( cString )

METHOD strEquals( c1, c2 ) CLASS Megusta
RETURN c1 == c2

METHOD strEqualsIgnoreCase( c1, c2 ) CLASS Megusta
RETURN Upper(c1) == Upper(c2)

METHOD strCompareTo(cadeia1, cadeia2) CLASS Megusta
IF cadeia1 == cadeia2
RETURN 0 // As cadeias são iguais
ELSE
IF cadeia1 < cadeia2
RETURN -1 // cadeia1 é menor que cadeia2
ELSE
RETURN 1 // cadeia1 é maior que cadeia2
ENDIF
ENDIF

METHOD strCompareToIgnoreCase(cadeia1, cadeia2) CLASS Megusta
LOCAL lowerCadeia1, lowerCadeia2
lowerCadeia1 = LOWER(cadeia1)
lowerCadeia2 = LOWER(cadeia2)

IF lowerCadeia1 == lowerCadeia2
RETURN 0 // As cadeias são iguais sem distinção entre maiúsculas e minúsculas
ELSE
IF lowerCadeia1 < lowerCadeia2
RETURN -1 // cadeia1 é menor que cadeia2 sem distinção entre maiúsculas e minúsculas
ELSE
RETURN 1 // cadeia1 é maior que cadeia2 sem distinção entre maiúsculas e minúsculas
ENDIF
ENDIF

// =========================
// Concatenação de strings (array de strings)
METHOD strConcat( ... ) CLASS Megusta
   LOCAL cResultado := ""
   LOCAL i
   LOCAL nParams := PCount()

   FOR i := 1 TO nParams
      cResultado += HB_PValue(i)
   NEXT

   RETURN cResultado


// StartsWith
METHOD strStartsWith( cString, cPrefix ) CLASS Megusta
   RETURN Left( cString, Len( cPrefix ) ) == cPrefix


// EndsWith
METHOD strEndsWith( cString, cSuffix ) CLASS Megusta
   RETURN Right( cString, Len( cSuffix ) ) == cSuffix


// Includes (contains)
METHOD strIncludes( cString, cSub ) CLASS Megusta
   RETURN At( cSub, cString ) > 0


// Split (retorna array)
METHOD strSplit( cString, cDelimiter ) CLASS Megusta
   LOCAL aResult := {}
   LOCAL nPos
   LOCAL i

   // Se delimitador é vazio, divide em caracteres individuais
   IF Empty( cDelimiter )
      FOR i := 1 TO Len( cString )
         AAdd( aResult, SubStr( cString, i, 1 ) )
      NEXT
      RETURN aResult
   ENDIF

   DO WHILE .T.
      nPos := At( cDelimiter, cString )
      IF nPos == 0
         AAdd( aResult, cString )
         EXIT
      ENDIF

      AAdd( aResult, Left( cString, nPos - 1 ) )
      cString := SubStr( cString, nPos + Len( cDelimiter ) )
   ENDDO

   RETURN aResult


// PadStart
METHOD strPadStart( cString, nLen, cPad ) CLASS Megusta
   LOCAL cFill := Replicate( cPad, nLen )

   RETURN Right( cFill + cString, nLen )


// PadEnd
METHOD strPadEnd( cString, nLen, cPad ) CLASS Megusta
   LOCAL cFill := Replicate( cPad, nLen )

   RETURN Left( cString + cFill, nLen )


// Repeat
METHOD strRepeat( cString, nTimes ) CLASS Megusta
   RETURN Replicate( cString, nTimes )


// Search (indexOf)
METHOD strSearch( cString, cSub ) CLASS Megusta
   LOCAL nPos := At( cSub, cString )
   RETURN iif( nPos > 0, nPos - 1, -1 )  // Java é 0-based


// Trim (ambos lados)
METHOD strTrim( cString ) CLASS Megusta
   RETURN AllTrim( cString )


// TrimStart (LTrim)
METHOD strTrimStart( cString ) CLASS Megusta
   RETURN LTrim( cString )


// TrimEnd (RTrim)
METHOD strTrimEnd( cString ) CLASS Megusta
   RETURN RTrim( cString )


// Slice (substring)
METHOD strSlice( cString, nStart, nEnd ) CLASS Megusta
   // Java é 0-based; Harbour é 1-based
   RETURN SubStr( cString, nStart + 1, nEnd - nStart )
// =========================
/* =========================
   DATE / TIME
   ========================= */

METHOD dateDay() CLASS Megusta
RETURN Day( Date() )

METHOD dateWeekDay() CLASS Megusta
RETURN Dow( Date() ) + 1

METHOD dateMonth() CLASS Megusta
RETURN Month( Date() )

METHOD dateYear() CLASS Megusta
RETURN Year( Date() )

METHOD dateSetWeekDay( nAno, nMes, nDia ) CLASS Megusta
RETURN Dow( STOD( Str(nAno,4) + StrZero(nMes,2) + StrZero(nDia,2) ) )

METHOD dateHour24() CLASS Megusta
RETURN Val( SubStr( Time(),1,2 ) )

METHOD dateMinute() CLASS Megusta
RETURN Val( SubStr( Time(),4,2 ) )

METHOD dateSecond() CLASS Megusta
RETURN Val( SubStr( Time(),7,2 ) )

/* =========================
   ARRAY
   ========================= */

METHOD xArrLength( aLista ) CLASS Megusta
RETURN Len( aLista )

METHOD arrAddAll( aLista, ... ) CLASS Megusta
   FOR i := 1 TO PCount()
      AAdd( aLista, PValue( i ) )
   ENDFOR
RETURN NIL

METHOD arrAdd( aLista, xValor ) CLASS Megusta
   AAdd( aLista, xValor )
RETURN NIL

METHOD arrAddPos( aLista, nPos, xValor ) CLASS Megusta
   AIns( aLista, nPos )
   aLista[nPos] := xValor
RETURN NIL

METHOD arrSet( aLista, nPos, xValor ) CLASS Megusta
   aLista[nPos] := xValor
RETURN NIL

METHOD arrGet( aLista, nPos ) CLASS Megusta
RETURN aLista[nPos]

METHOD arrSize( aLista ) CLASS Megusta
RETURN Len( aLista )

METHOD arrRemove( aLista, nPos ) CLASS Megusta
   ADel( aLista, nPos )
   ASize( aLista, Len(aLista)-1 )
RETURN NIL

METHOD arrClear( aLista ) CLASS Megusta
   ASize( aLista,0 )
RETURN NIL

METHOD arrContains( aLista, xValor ) CLASS Megusta
RETURN ASCan( aLista, xValor ) > 0

METHOD arrIndexOf( aLista, xValor ) CLASS Megusta
RETURN ASCan( aLista, xValor )

METHOD arrLastIndexOf( aLista, xValor ) CLASS Megusta
   LOCAL i
   FOR i := Len(aLista) TO 1 STEP -1
      IF aLista[i] == xValor
         RETURN i
      ENDIF
   NEXT
RETURN 0

/* =========================
   MATH
   ========================= */

METHOD mathInt( cNumero ) CLASS Megusta
RETURN Val( cNumero )

METHOD mathNum( cNumero ) CLASS Megusta
RETURN Val( cNumero )

METHOD mathBool( cValor ) CLASS Megusta
RETURN Upper(cValor) == "TRUE"

METHOD mathFloor( n ) CLASS Megusta
RETURN Int( n )

METHOD mathCeil( n ) CLASS Megusta
RETURN Int(n) + IIF( n > Int(n), 1, 0 )

METHOD mathRound( n ) CLASS Megusta
RETURN Round( n, 0 )

METHOD mathDecimalFormat( nNumero, cMascara ) CLASS Megusta
   LOCAL nDec := 0

   IF At(".", cMascara) > 0
      nDec := Len(cMascara) - At(".", cMascara)
   ENDIF

   RETURN Str( nNumero, 0, nDec )

METHOD mathNumberFormat( nNumero, cLocale, cCountry ) CLASS Megusta
   LOCAL cForm := Str( nNumero, 15, 2 )
   cForm := Trim(cForm)
   cForm := StrTran(cForm, ".", ",")
   RETURN cForm

METHOD mathRandom() CLASS Megusta
RETURN HB_Random()

METHOD mathAbs( n ) CLASS Megusta
RETURN Abs( n )

METHOD mathMax( n1, n2 ) CLASS Megusta
RETURN Max( n1, n2 )

METHOD mathMin( n1, n2 ) CLASS Megusta
RETURN Min( n1, n2 )

METHOD mathPow( base, expo ) CLASS Megusta
RETURN base ^ expo

METHOD mathSqrt( n ) CLASS Megusta
RETURN Sqrt( n )

METHOD mathCbrt( n ) CLASS Megusta
RETURN n ^ (1/3)

METHOD mathSignum( n ) CLASS Megusta
   IF n > 0
      RETURN 1
   ELSEIF n < 0
      RETURN -1
   ENDIF
RETURN 0

/* CONSTANTES */

METHOD mathPI() CLASS Megusta
RETURN 3.141592653589793

/* TRIGONOMETRIA */

METHOD mathConvertToRadians( graus ) CLASS Megusta
RETURN graus * ( ::mathPI() / 180 )

// =========================
//   TRIGONOMETRIA
//   =========================
// Quero implementar manualmente o sin, cos, tan (Série de Taylor) 
// sem precisar de biblioteca externa. Preciso "ensinar" ao CLIPPER 
// o sin, o cos e tan usando aproximações matemáticas.
// Implementações usando séries de Taylor para precisão razoável

#define PI 3.14159265358979323846
#define TWO_PI (2 * PI)

METHOD normalizeAngle(x) CLASS Megusta
   // reduz para [-PI, PI]
   x := x % TWO_PI

   IF x > PI
      x := x - TWO_PI
   ELSEIF x < -PI
      x := x + TWO_PI
   ENDIF

RETURN x

METHOD mathSin(x) CLASS Megusta
   LOCAL term, sum, n

   x := ::normalizeAngle(x)

   term := x
   sum  := x

   FOR n := 1 TO 10
      term := -term * x * x / ((2*n) * (2*n+1))
      sum  += term
   NEXT

RETURN sum

METHOD mathCos(x) CLASS Megusta
   LOCAL term, sum, n

   x := ::normalizeAngle(x)

   term := 1
   sum  := 1

   FOR n := 1 TO 10
      term := -term * x * x / ((2*n-1) * (2*n))
      sum  += term
   NEXT

RETURN sum

METHOD mathTan(x) CLASS Megusta
   LOCAL s, c

   // normaliza para [-PI, PI]
   x := ::normalizeAngle(x)

   // redução para [-PI/2, PI/2]
   IF x > PI/2
      x := x - PI
   ELSEIF x < -PI/2
      x := x + PI
   ENDIF

   // tratamento exato da singularidade
   IF x == PI/2 .OR. x == -PI/2
      RETURN NIL
   ENDIF

   c := ::mathCos(x)
   s := ::mathSin(x)

RETURN s / c

METHOD mathAsin(x) CLASS Megusta
   LOCAL n, term, sum

   sum  := x
   term := x

   FOR n := 1 TO 20
      term := term * ( (2*n - 1)*(2*n - 1) * x * x ) / ( (2*n)*(2*n + 1) )
      sum  += term
   NEXT

RETURN sum

METHOD mathAcos(x) CLASS Megusta
   LOCAL pi
   pi := 3.141592653589793

RETURN pi/2 - ::mathAsin(x)

METHOD mathAtan(x) CLASS Megusta
   LOCAL n, term, sum, xx, sign, pi

   pi := 3.141592653589793

   // Redução de domínio
   IF ABS(x) > 1
      IF x > 0
         RETURN pi/2 - ::mathAtan(1/x)
      ELSE
         RETURN -pi/2 - ::mathAtan(1/x)
      ENDIF
   ENDIF

   sum  := 0
   term := x
   xx   := x * x
   sign := 1

   FOR n := 1 TO 25 STEP 1
      sum  += sign * term / (2*n - 1)
      term *= xx
      sign := -sign
   NEXT

RETURN sum

METHOD mathSinh(x) CLASS Megusta
   LOCAL term := x
   LOCAL sum  := x
   LOCAL n    := 1
   LOCAL maxIter := 20  // ajuste conforme precisão desejada

   DO WHILE n <= maxIter
      term := term * (x * x) / ((2*n) * (2*n + 1))
      sum  := sum + term
      n++
   ENDDO

RETURN sum

METHOD mathCosh(x) CLASS Megusta
   LOCAL term := 1
   LOCAL sum  := 1
   LOCAL n    := 1
   LOCAL maxIter := 20

   DO WHILE n <= maxIter
      term := term * (x * x) / ((2*n - 1) * (2*n))
      sum  := sum + term
      n++
   ENDDO

RETURN sum

METHOD mathTanh(x) CLASS Megusta
   LOCAL s := ::mathSinh(x)
   LOCAL c := ::mathCosh(x)

   IF c == 0
      RETURN 0
   ENDIF

RETURN s / c

METHOD mathAsinh(x) CLASS Megusta
   LOCAL ax, x2, term, sum, n

   ax := ABS(x)

   // Usa Taylor para |x| pequeno
   IF ax < 0.5
      term := x
      sum  := x
      x2   := x * x

      FOR n := 1 TO 10
         term := -term * x2 * (2*n-1) / (2*n*(2*n+1))
         sum  += term
      NEXT

      RETURN sum
   ENDIF

   // Fórmula geral
   RETURN ::mathLog(x + ::mathSqrt(x*x + 1))

METHOD mathAcosh(x) CLASS Megusta
   LOCAL t, term, sum, n

   IF x < 1
      RETURN NIL
   ENDIF

   t := x - 1

   // Série perto de 1
   IF t < 0.5
      term := 1
      sum  := 1

      FOR n := 1 TO 10
         term := term * t
         sum  += term * ( (n=1)/12 - (n=2)*3/160 ) // simplificado
      NEXT

      RETURN ::mathSqrt(2*t) * sum
   ENDIF

   // Fórmula geral
   RETURN ::mathLog(x + ::mathSqrt(x*x - 1))

METHOD mathAtanh(x) CLASS Megusta
   LOCAL term, sum, x2, n

   IF ABS(x) >= 1
      RETURN NIL // fora do domínio
   ENDIF

   // Taylor
   IF ABS(x) < 0.5
      term := x
      sum  := x
      x2   := x * x

      FOR n := 1 TO 20
         term := term * x2
         sum  += term / (2*n + 1)
      NEXT

      RETURN sum
   ENDIF

   // Fórmula log
   RETURN 0.5 * ::mathLog((1+x)/(1-x))

/* =========================
   EXPONENCIAL
   ========================= */

METHOD mathLog( nNumero ) CLASS Megusta
RETURN log( nNumero )

METHOD mathLog10( nNumero ) CLASS Megusta
RETURN ::mathLog( nNumero ) / ::mathLog( 10 )

METHOD mathLog2( nNumero ) CLASS Megusta
RETURN ::mathLog( nNumero ) / ::mathLog( 2 )

METHOD mathExp( nExpoente ) CLASS Megusta
RETURN exp( nExpoente )

METHOD mathLog1p( n ) CLASS Megusta
RETURN ::mathLog( 1 + n )

METHOD mathE() CLASS Megusta
RETURN ::mathExp(1)

METHOD mathLN2() CLASS Megusta
RETURN ::mathLog(2)

METHOD mathLOG2E() CLASS Megusta
RETURN ::mathLog(2) / ::mathLog(::mathExp(1))

METHOD mathLN10() CLASS Megusta
RETURN ::mathLog(10)

METHOD mathLOG10E() CLASS Megusta
RETURN 1 / ::mathLog(10);

METHOD mathSQRT1_2() CLASS Megusta
RETURN ::mathSqrt( 0.5 )

METHOD mathSQRT2() CLASS Megusta
RETURN ::mathSqrt( 2 )

METHOD mathMaxArr( ... ) CLASS Megusta
   LOCAL nMax := -999999999
   LOCAL i
   FOR i := 1 TO PCount()
      IF PValue(i) > nMax
         nMax := PValue(i)
      ENDIF
   NEXT
RETURN nMax

METHOD mathMinArr( ... ) CLASS Megusta
   LOCAL nMin := 999999999
   LOCAL i
   FOR i := 1 TO PCount()
      IF PValue(i) < nMin
         nMin := PValue(i)
      ENDIF
   NEXT
RETURN nMin
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

xMain.prg

Código: Selecionar todos

#include "ouka/Megusta.prg"

PROCEDURE Main()
      LOCAL r
 REQUEST HB_CodePage_UTF8
HB_CdpSelect("UTF8")

      r := Megusta():New()


        CLS
        r:rPrint("Esta eh uma mensagem de exemplo.")

        r:rPrintln("Esta eh uma mensagem de exemplo.")

        r:rPrintln()

        nome := r:rInput("Qual eh o seu nome? ")
        r:rPrintln("Olah, ", nome, "!")

        r:rPrintln()

        conteudo := "Este eh o conteudo que serah salvo no arquivo."
        nomeArquivo := "meu_arquivo.txt"
        r:rSaveFile(nomeArquivo, conteudo)

        r:rPrintln()

        r:rPrintln(r:rOpenFile(nomeArquivo))

        r:rPrintln()
        r:rOpenProgram("c:/java/jdk-23/bin/java.exe -jar /MeuApp/WindowJAR.jar")

        // rOpenFileWeb salva em x0001.txt via PowerShell retorna conteúdo diretamente
        r:rPrintln(r:rOpenFileWeb("https://www.ouka.com.br/meu_arquivo.txt"))


        // strReplace
        original := "Hoje é um lindo dia!"
        substituida := r:strReplace(original, "lindo", "maravilhoso")
        r:rPrintln(substituida) // Saída: "Hoje é um maravilhoso dia!"

        // strLength
        minhaString := "Olá, mundo!"
        tamanho := r:strLength(minhaString)
        r:rPrintln("O tamanho da string é: "+ STR(tamanho)) // Saída: "O tamanho da string é: 12"

        // strSubstring
        original2 := "Isso é uma de exemplo."
        sub := r:strSubstring(original2, 8, 13)
        r:rPrintln(sub) // Saída esperada: "uma d"

        // strCharAt
        minhaString2 := "Olá, mundo!"
        primeiroCaractere := r:strCharAt(minhaString2,0) // Obtém o primeiro caractere 'O'
        quartoCaractere := r:strCharAt(minhaString2, 3) // Obtém o quarto caractere ','

        r:rPrintln("Primeiro caractere: " + primeiroCaractere)
        r:rPrintln("Quarto caractere: " + quartoCaractere)

        // strIndexOf
        minhaString3 := "Isso é um exemplo de indexOf em Java."
        indice := r:strIndexOf(minhaString3, "exemplo")
        r:rPrintln("A substring 'exemplo' começa no índice: " + STR(indice)) // Saída: "A substring 'exemplo' começa no índice: 13"

        // strLastIndexOf
        minhaString4 := "Isso é um exemplo de lastIndexOf em Java. lastIndexOf é útil para encontrar a última ocorrência de uma substring."
        indice2 := r:strLastIndexOf(minhaString4,"lastIndexOf")
        r:rPrintln("A última ocorrência de 'lastIndexOf' começa no índice: " + STR(indice2)) // Saída: "A última ocorrência de 'lastIndexOf' começa no índice: 38"

        // strToLowerCase
        minhaString5 := "Isso É Uma De Exemplo."
        emMinusculas := r:strToLowerCase(minhaString5)
        r:rPrintln(emMinusculas) // Saída: "isso é uma de exemplo."

        // strToUpperCase
        minhaString6 := "Isso É Uma De Exemplo."
        emMaiusculas := r:strToUpperCase(minhaString6)
        r:rPrintln(emMaiusculas) // Saída: "ISSO É UMA DE EXEMPLO."

        // strCompareTo
        string1 := "abacate"
        string2 := "banana"

        resultado := r:strCompareTo(string1, string2)

        IF resultado < 0
                r:rPrintln("string1 é menor que string2")
        ELSEIF resultado == 0
                r:rPrintln("string1 é igual a string2")
        ELSE
                r:rPrintln("string1 é maior que string2")
        ENDIF

        // strCompareToIgnoreCase
        string1_1 := "maçã"
        string2_1 := "MaÇÃ"

        resultado2 := r:strCompareToIgnoreCase(string1_1, string2_1)

        IF resultado2 < 0
                r:rPrintln("string1 é menor que string2 (ignorando a diferença entre maiúsculas e minúsculas)")
        ELSEIF resultado2 == 0
                r:rPrintln("string1 é igual a string2 (ignorando a diferença entre maiúsculas e minúsculas)")
        ELSE
                r:rPrintln("string1 é maior que string2 (ignorando a diferença entre maiúsculas e minúsculas)")
        ENDIF

        // strEquals
        string1_2 := "Olá, mundo!"
        string2_2 := "Olá, mundo!"
        string3_2 := "olá, Mundo!"

        saoIguais1 := r:strEquals(string1_2, string2_2) // Retorna true
        saoIguais2 := r:strEquals(string1_2, string3_2) // Retorna false

        r:rPrintln(saoIguais1)
        r:rPrintln(saoIguais2)
 
        // strEqualsIgnoreCase
        string1_3 := "Olá, mundo!"
        string2_3 := "olá, Mundo!"

        saoIguais := r:strEqualsIgnoreCase(string1_3, string2_3) // Retorna true

        r:rPrintln(saoIguais)

        r:rPrintln()

        WAIT "Press. qualquer tecla para continuar"
        CLS

r:rPrintln(r:strCharAt("Hello", 4))           // o
r:rPrintln(r:strConcat("Hello", " ", "world")) // Hello world
r:rPrintln(r:strStartsWith("Hello", "H"))     // true
r:rPrintln(r:strEndsWith("Hello", "o"))       // true
r:rPrintln(r:strIncludes("Hello", "x"))       // false
r:rPrintln(r:strIndexOf("Hello", "l"))        // 2
r:rPrintln(r:strLastIndexOf("Hello", "l"))    // 3
r:rPrintln(r:strPadStart("Hello", 6, "?"))    // ?Hello
r:rPrintln(r:strPadEnd("Hello", 6, "?"))      // Hello?
r:rPrintln(r:strRepeat("Hello", 3))           // HelloHelloHello
r:rPrintln(r:strReplace("Hello", "llo", "y")) // Hey
r:rPrintln(r:strSearch("Hello", "e"))         // 1
r:rPrintln(r:strSlice("Hello", 1, 3))         // el

v := r:strSplit("Hello", "")          // ['H','e','l','l','o']

FOR i := 1 TO Len(v)
    r:rPrintln(v[i])
NEXT

r:rPrintln(r:strSubstring("Hello", 2, 4))     // ll
r:rPrintln(r:strToLowerCase("Hello"))       // hello
r:rPrintln(r:strToUpperCase("Hello"))       // HELLO
r:rPrintln(r:strTrim(" Hello "))            // Hello
r:rPrintln(r:strTrimStart(" Hello "))       // "Hello "
r:rPrintln(r:strTrimEnd(" Hello "))         // " Hello"

        WAIT "Press. qualquer tecla para continuar"
        CLS

        r:rPrintln()

        Texto := ""

        Dia_do_mes := r:dateDay()
        Dia_da_semana := r:dateWeekDay()
        Mes := r:dateMonth()
        Ano := r:dateYear()

        // ---------------------------------------
        Horas := r:dateHour24()
        Minutos := r:dateMinute()
        Segundos := r:dateSecond()
        // ---------------------------------------
        semana := {"", "Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sabado"}
        Semana_atual := semana[Dia_da_semana]

        Mes2 := {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"}
        Mes_atual := Mes2[Mes]

        Texto += Semana_atual + ", " + str(Dia_do_mes) + " de " + Mes_atual + " de " + str(Ano)
        Texto += "\n"
        Texto += "São: " + str(Horas) + " horas, " + str(Minutos) + " minutos e " + str(Segundos) + " segundos."

        r:rPrintln(Texto)

        Texto := ""

        x_dia := 28
        x_mes := 4
        x_ano := 1997
        
        // ---------------------------------------
        Dia_do_mes := x_dia
        Dia_da_semana := r:dateSetWeekDay(x_ano, x_mes, x_dia)
        Mes := x_mes
        Ano := x_ano

        semana := {"", "Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sabado"}
        Semana_atual := semana[Dia_da_semana]

        Mes2 := {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"}
        Mes_atual := Mes2[Mes]

        Texto += Semana_atual + ", " + str(Dia_do_mes) + " de " + Mes_atual + " de " + str(Ano)

        r:rPrintln(Texto)

        WAIT "Press. qualquer tecla para continuar"
        CLS

        r:rPrintln()

        // Array usando funções Harbour (arrAdd/arrGet/arrSize)

        frutasx := {}
        r:arrAddAll(frutasx, "Banana", "Melão", "Goiaba", "Morango")

        for i := 1 to r:arrSize(frutasx)
                r:rPrintln(r:arrGet(frutasx, i))
        next

        r:rPrintln()

        frutas1 := {}
        r:arrAdd(frutas1, "Banana")
        r:arrAdd(frutas1, "Melão")
        r:arrAdd(frutas1, "Goiaba")
        r:arrAdd(frutas1, "Morango")

        for i := 1 to r:arrSize(frutas1)
                r:rPrintln(r:arrGet(frutas1, i))
        next

        WAIT "Press. qualquer tecla para continuar"
        CLS

        r:rPrintln()

        frutas2 := {}
        r:arrAdd(frutas2, "Banana")
        r:arrAdd(frutas2, "Melão")
        r:arrAdd(frutas2, "Goiaba")
        r:arrAdd(frutas2, "Morango")
        r:arrAddPos(frutas2, 2, "======")

        for i := 1 to r:arrSize(frutas2)
                r:rPrintln(r:arrGet(frutas2, i))
        next

        r:rPrintln()


        frutas3 := {}
        r:arrAdd(frutas3, "Banana")
        r:arrAdd(frutas3, "Melão")
        r:arrAdd(frutas3, "Goiaba")
        r:arrAdd(frutas3, "Morango")
        r:arrSet(frutas3, 2, "======")

        for i := 1 to r:arrSize(frutas3)
                r:rPrintln(r:arrGet(frutas3, i))
        next

        r:rPrintln()
        WAIT "Press. qualquer tecla para continuar"
        CLS
        frutas4 := {}
        r:arrAdd(frutas4, "Banana")
        r:arrAdd(frutas4, "Melão")
        r:arrAdd(frutas4, "Goiaba")
        r:arrAdd(frutas4, "Morango")
        r:arrRemove(frutas4, 2)

        for i := 1 to r:arrSize(frutas4)
                r:rPrintln(r:arrGet(frutas4, i))
        next

        r:rPrintln()

        frutas5 := {}
        r:arrAdd(frutas5, "Banana")
        r:arrAdd(frutas5, "Melão")
        r:arrAdd(frutas5, "Goiaba")
        r:arrAdd(frutas5, "Morango")
        r:arrClear(frutas5)

        for i := 1 to r:arrSize(frutas5)
                r:rPrintln(r:arrGet(frutas5, i))
        next
        WAIT "Press. qualquer tecla para continuar"
        CLS
        r:rPrintln()

        lista1 := {}
        r:arrAdd(lista1, "Jose")
        r:arrAdd(lista1, "Maria")
        r:rPrintln(r:arrContains(lista1, "Jose"))

        r:rPrintln()

        lista2 := {}
        r:arrAdd(lista2, "Jose")
        r:arrAdd(lista2, "Maria")
        r:arrAdd(lista2, "Joao")

        for i := 1 to r:arrSize(lista2)
                r:rPrintln(r:arrGet(lista2, i))
        next

        r:rPrintln()

        //int indexOf (Object o): retorna a posição de um objeto.

        lista3 := {}
        r:arrAdd(lista3, "Jose")
        r:arrAdd(lista3, "Maria")
        r:arrAdd(lista3, "João")
        r:rPrintln(r:arrIndexOf(lista3, "Maria"))

        r:rPrintln()

        //int lastIndexOf (Object o): retorna o último índice de um objeto.

        lista4 := {}
        r:arrAdd(lista4, "Jose")
        r:arrAdd(lista4, "Maria")
        r:arrAdd(lista4, "João")
        r:arrAdd(lista4, "Maria")
        r:rPrintln(r:arrLastIndexOf(lista4, "Maria"))

        r:rPrintln()

        WAIT "Press. qualquer tecla para continuar"
        CLS
//Funções Matemáticas

//Convertendo para Numérica
//Números Inteiros
//mathint

        // Exemplo simples
        numeroString := "123456"
        numeroLong := r:mathInt(numeroString)
        r:rPrintln("Número convertido: " + str(numeroLong))

        // Tratamento de entrada inválida
        entradaInvalida := "abc"
        resultadoL := r:mathInt(entradaInvalida)
        IF resultadoL == 0 .AND. entradaInvalida != "0"
            r:rPrintln("Erro: A não é um número válido.")
        ELSE
            r:rPrintln("Número convertido: " + str(resultadoL))
        ENDIF

//Números Reais
//mathnum

        // Exemplo simples
        numeroString := "123.456"
        numeroDoubleD := r:mathNum(numeroString)
        r:rPrintln("Número convertido: " + str(numeroDoubleD))

        // Tratamento de entrada inválida
        entradaInvalida := "abc"
        resultadoD := r:mathNum(entradaInvalida)
        IF resultadoD == 0 .AND. entradaInvalida != "0"
            r:rPrintln("Erro: A não é um número válido.")
        ELSE
            r:rPrintln("Número convertido: " + str(resultadoD))
        ENDIF

//Boleanos
//mathbool

        // Exemplos simples
        trueString := "true"
        booleanTrue := r:mathBool(trueString)
        r:rPrint("Valor booleano: ")
        r:rPrintln((booleanTrue))

        falseString := "false"
        booleanFalse := r:mathBool(falseString)
        r:rPrint("Valor booleano: ")
        r:rPrintln((booleanFalse))

        // Tratamento de entrada inválida
        entradaInvalida := "abc"
        resultadoB := r:mathBool(entradaInvalida)
        r:rPrint("Valor booleano: ")
        r:rPrintln((resultadoB))
        // Como "abc" não é "true", o resultado será false

        WAIT "Press. qualquer tecla para continuar"
        CLS

//Arredondando valores
//Math.floor
        numeroOriginal := 0.0
        numeroArredondado := 0.0

        numeroOriginal := 7.8
        numeroArredondado := r:mathFloor(numeroOriginal)

        r:rPrintln("Número original: " + str(numeroOriginal))
        r:rPrintln("Número arredondado para baixo: " + str(numeroArredondado))

//Math.ceil
        numeroOriginal := 7.2
        numeroArredondado := r:mathCeil(numeroOriginal)

        r:rPrintln("Número original: " + str(numeroOriginal))
        r:rPrintln("Número arredondado para cima: " + str(numeroArredondado))
//Math.round
        numeroOriginal := 7.5
        numeroArredondado := r:mathRound(numeroOriginal)

        r:rPrintln("Número original: " + str(numeroOriginal))
        r:rPrintln("Número arredondado: " + str(numeroArredondado))

//Digite um número com 3 casas decimais
//mathDecimalFormat
        numero := 0.0
        numero := 123.456789

        numeroFormatado := r:mathDecimalFormat(numero, "#.###")

        r:rPrintln(numeroFormatado)

//Formatar moeda
//mathNumberFormat
        numero := 1234567.89

        // Formatar o número de acordo com a localidade do Brasil
        numeroFormatadoBrasil := r:mathNumberFormat(numero, "pt","BR")
       
        r:rPrint("Brasil: ")
        r:rPrintln(numeroFormatadoBrasil)

//Funções matemáticas comuns
//Math.random

        // Gerar um número aleatório no intervalo [0.0, 1.0)
        numeroAleatorio := r:mathRandom()

        r:rPrintln("Número aleatório: " + str(numeroAleatorio))

        //double numeroAleatorioNoIntervalo := Math.random() * (max - min), min
        //double numeroAleatorioIntervalo := Math.random() * (10.0 - 5.0), 5.0
        //r:rPrintln("Número aleatório no intervalo: ", numeroAleatorioIntervalo)
//Math.abs

        numeroInteiro := -5
        numeroLongo := -123456789
        numeroFloat := -3.14
        numeroDouble := -2.71828

        // Calcular o valor absoluto para diferentes tipos de números
        absInt :=  r:mathAbs(numeroInteiro)
        absLong :=  r:mathAbs(numeroLongo)
        absFloat :=  r:mathAbs(numeroFloat)
        absDouble := r:mathAbs(numeroDouble)

        r:rPrintln("Valor absoluto de " + str(numeroInteiro) + " := " + str(absInt))
        r:rPrintln("Valor absoluto de " + str(numeroLongo) + " := " + str(absLong))
        r:rPrintln("Valor absoluto de " + str(numeroFloat) + " := " + str(absFloat))
        r:rPrintln("Valor absoluto de " + str(numeroDouble) + " := " + str(absDouble))

//Math.max

        numero3 := 15.5
        numero4 := 12.3

        // Encontrar o máximo entre dois números de ponto flutuante
        maximoDouble := r:mathMax(numero3, numero4)
        r:rPrintln("Máximo entre " + str(numero3) + " e " + str(numero4) + " := " + str(maximoDouble))

        // maximoEntreTres := Math.max(Math.max(numero1, numero2), numero3)
//Math.min

        numero3 := 15.5
        numero4 := 12.3

        // Encontrar o mínimo entre dois números de ponto flutuante
        minimoDouble := r:mathMin(numero3, numero4)
        r:rPrintln("Mínimo entre " + str(numero3) + " e " + str(numero4) + " := " + str(minimoDouble))

       //int minimoEntreTres := Math.min(Math.min(numero1, numero2), numero3)

//Math.max



        // Encontrar o máximo entre dois números de ponto flutuante
        maximoDouble := r:mathMaxArr(15.5, 12.3, 10.8, 14.6)
        r:rPrintln("Máximo entre 15.5, 12.3, 10.8, 14.6 := " + str(maximoDouble))

//Math.min

        // Encontrar o mínimo entre dois números de ponto flutuante
        minimoDouble := r:mathMinArr(15.5, 12.3, 10.8, 14.6)
        r:rPrintln("Mínimo entre 15.5, 12.3, 10.8, 14.6 := " + str(minimoDouble))

//Math.pow
        base := 2.0
        expoente := 3.0

        // Calcular 2^3
        resultado :=  r:mathPow(base, expoente)
        r:rPrintln("Resultado: " + str(resultado))

//Math.sqrt
        numero := 25.0

        // Calcular a raiz quadrada de 25
        raizQuadrada := r:mathSqrt(numero)

        r:rPrintln("Raiz quadrada de " + str(numero) + " := " + str(raizQuadrada))

//Math.SQRT1_2
        // Utilizando a constante Math.SQRT1_2

        //double mathSQRT1_2 := 0.7071067811865476

        raizQuadradaDeUmMeio := r:mathSQRT1_2()

        r:rPrintln("Raiz quadrada de 1/2: " + str(raizQuadradaDeUmMeio))

//Math.SQRT2
        // Utilizando a constante Math.SQRT2

        //double mathSQRT2 := 1.4142135623730951

        raizQuadradaDeDois := r:mathSQRT2()

        r:rPrintln("Raiz quadrada de 2: " + str(raizQuadradaDeDois))


//Math.cbrt
        numero := 27.0

        // Calcular a raiz cúbica de 27
        raizCubica := r:mathCbrt(numero)

        r:rPrintln("Raiz cúbica de " + str(numero) + " := " + str(raizCubica))

//Math.sign
        numero := -5.5

        // Obtendo o sinal do número
        sinal :=  r:mathSignum(numero)

        r:rPrintln("Sinal de " + str(numero) + " := " + str(sinal))

        r:rPrintln()


//Funções trigonométricas
//Math.PI
        // Acesso à constante Math.PI
        pi := r:mathPI()

        // Exibindo o valor de pi
        r:rPrintln("O valor de pi é: ", pi)

        // Exemplo de cálculo usando pi
        raio := 5.0
        area := pi * raio * raio
        r:rPrintln("A área de um círculo com raio " + str(raio) + " é: " + str(area))
/*
function radianos(){
return Math.PI/180
}
*/

        graus := 45.0
        radianos := r:mathConvertToRadians(graus)

        r:rPrintln(str(graus) + " graus é equivalente a " + str(radianos) + " radianos")
 
        // Ângulo em radianos
        anguloEmRadianos := r:mathPI() / 4.0

        WAIT "Press. qualquer tecla para continuar"
        CLS

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        // Exibindo o resultado em radianos
        r:rPrintln("O arco tangente de " + str(valor) + " é: " + str(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 := r:mathSinh(valor)

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

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

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

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

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

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

        // Exibindo o resultado
        r:rPrintln("A tangente hiperbólica de " + str(valor) + " é: " + str(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 := r:mathAsinh(valor)

        // Exibindo o resultado
        r:rPrintln("O arco seno hiperbólico de " + str(valor) + " é: " + str(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 := r:mathAcosh(valor)

        // Exibindo o resultado
        r:rPrintln("O arco cosseno hiperbólico de " + str(valor) + " é: " + str(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 := r:mathAtanh(valor)

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

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

        WAIT "Press. qualquer tecla para continuar"
        CLS

        r:rPrintln()

//Logarítmos

//Math.log
        // Número para o qual queremos calcular o logaritmo natural
        numero := 10.0

        // Calculando o logaritmo natural do número
        logaritmoNatural := r:mathLog(numero)

        // Exibindo o resultado
        r:rPrintln("O logaritmo natural de " + str(numero) + " é: " + str(logaritmoNatural))

//Math.log10
        // Número para o qual queremos calcular o logaritmo na base 10
        numero := 1000.0

        // Calculando o logaritmo na base 10 do número
        logaritmoBase10 := r:mathLog10(numero)

        // Exibindo o resultado
        r:rPrintln("O logaritmo na base 10 de " + str(numero) + " é: " + str(logaritmoBase10))
 
//Math.E
        // Acesso à constante Math.E
        constanteE := r:mathE()

        // Exibindo o valor da constante E
        r:rPrintln("O valor da constante E é: " + str(constanteE))
//Math.LN2
        // Acesso à constante Math.LN2
        LN2 := r:mathLN2()

        // Exibindo o valor do logaritmo natural de 2
        r:rPrintln("O valor do logaritmo natural de 2 é: " + str(LN2))

//Math.LOG2E
        // Acesso à constante Math.LOG2E
        LOG2E := r:mathLOG2E()

        // Exibindo o valor do logaritmo natural de base 2 de e
        r:rPrintln("O valor do logaritmo natural de base 2 de e é: " + str(LOG2E))

//Math.LN10
        // Acesso à constante Math.LN10
        LN10 := r:mathLN10()

        // Exibindo o valor do logaritmo natural de 10
        r:rPrintln("O valor do logaritmo natural de 10 é: " + str(LN10))

//Math.LOG10E
        // Acesso à constante Math.LOG10E
        LOG10E := r:mathLOG10E()

        // Exibindo o valor do logaritmo natural de base 10 de e
        r:rPrintln("O valor do logaritmo natural de base 10 de e é: " + str(LOG10E))
 
//Math.exp
        // Expoente para o qual queremos calcular a exponenciação
        expoente := 2.0

        // Calculando a exponenciação de e elevado ao expoente
        resultado3 := r:mathExp(expoente)

        // Exibindo o resultado
        r:rPrintln("O resultado de e elevado a " + str(expoente) + " é: " + str(resultado3))

//Math.log2
        // Número para o qual queremos calcular o logaritmo de base 2
        numero2 := 8.0

        // Calculando o logaritmo de base 2 do número
        LOG2 := r:mathLog2(numero2)

        // Exibindo o resultado
        r:rPrintln("O logaritmo de base 2 de " + str(numero2) + " é: " + str(LOG2))

        //log2(x) := ln(x) / ln(2)

//Math.log1p
        // Valor para o qual queremos calcular o logaritmo natural de 1 mais um
        valor := 0.5

        // Calculando o logaritmo natural de 1 mais um
        resultado4 := r:mathLog1p(valor)

        // Exibindo o resultado
        r:rPrintln("O logaritmo natural de 1 mais " + str(valor) + " é: " + str(resultado4))

        r:rPrintln("================================")
        r:rPrintln("===============FIM==============")
        r:rPrintln("================================")

RETURN NIL
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

Não estou conseguindo acentuar direito a fonte!
Por favor? Me ajuda?
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

Observação: Salvar no VSCode e Windows '11 64 bits!
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Fonte UTF-8 no CMD.EXE

Mensagem por Jorge Luiz »

:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
Consegui!
Era a versão do Harbour
Em vez de 32, usei a versão 30
Responder