{"id":1309,"date":"2015-09-11T12:38:58","date_gmt":"2015-09-11T16:38:58","guid":{"rendered":"http:\/\/linguagemprisma.net\/blog\/?page_id=1309"},"modified":"2017-02-21T10:30:00","modified_gmt":"2017-02-21T14:30:00","slug":"tutorial-principais-funcoes-prisma","status":"publish","type":"page","link":"https:\/\/linguagemprisma.br4.biz\/blog\/tutorial-principais-funcoes-prisma\/","title":{"rendered":"Tutorial &#8211; Principais fun\u00e7\u00f5es Prisma"},"content":{"rendered":"<h1 style=\"text-align: center;\"><strong>Unidade II &#8211; Biblioteca padr\u00e3o<\/strong><\/h1>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/prisma_library.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-618 aligncenter\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/prisma_library-252x300.png\" alt=\"prisma_library\" width=\"227\" height=\"270\" \/><\/a><\/p>\n<h2 style=\"text-align: center;\"><strong>Introdu\u00e7\u00e3o<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Prisma, assim como outras linguagens, possui fun\u00e7\u00f5es predefinidas, e que ficam organizadas em conjuntos chamados\u00a0de biblioteca.\u00a0Bibliotecas, tamb\u00e9m chamadas libs, podem ser internas ou\u00a0externas.<\/p>\n<p style=\"text-align: justify;\">As internas\u00a0s\u00e3o as embutidas no interpretador Prisma, e por isso n\u00e3o precisam ser importadas com o comando &#8216;inclua&#8217;.<\/p>\n<p style=\"text-align: justify;\">Todas as outras bibliotecas externas que precisam ser inclu\u00eddas n\u00e3o s\u00e3o predefinidas, portanto \u00e9 necess\u00e1rio\u00a0carreg\u00e1-las na execu\u00e7\u00e3o do programa prisma.<\/p>\n<p style=\"text-align: justify;\">Bibliotecas s\u00e3o importantes pois potencializam o poder da linguagem, \u00e9 com suas fun\u00e7\u00f5es que \u00e9 poss\u00edvel escrever programas\u00a0mais complexos.<\/p>\n<p>Aqui ser\u00e3o tratadas o conjunto de biblioteca padr\u00e3o, isto \u00e9, somente as internas, s\u00e3o elas:<\/p>\n<p><strong>base, string, mat, sis, es, tabela<\/strong><\/p>\n<p>A biblioteca &#8220;win&#8221; com fun\u00e7\u00f5es da api do Windows fica em um tutorial separado, <a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/especial-biblioteca-win-algumas-funcoes-do-windows-h\/\" target=\"_blank\">clique aqui para acessar.<\/a><\/p>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><\/h2>\n<hr \/>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><strong>Cap. 1 &#8211; Fun\u00e7\u00f5es da biblioteca base<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>S\u00e3o as fun\u00e7\u00f5es simples tais como a imprima( ) ; tipo ( ) entre outras. Elas n\u00e3o seguem o modelo\u00a0das demais que usam o nome da biblioteca e o ponto separando o m\u00e9todo.<\/p>\n<p>Veja as fun\u00e7\u00f5es e seus exemplos de uso:<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">\u00a0<strong>imprima ( &#8230; )<\/strong><\/h3>\n<p style=\"text-align: justify;\">Exibe na tela preta do cmd no Windows ou terminal no Linux \u00a0texto ou n\u00fameros. Podemos passar v\u00e1rios argumentos de uma s\u00f3 vez separados por v\u00edrgulas;<\/p>\n<p style=\"text-align: justify;\">\u00a0 ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima(\"Ola Mundo!\");\r\nimprima(\"Ola \" , \"Mundo \" , \"Em Prisma!\" );\r\nimprima(\"Ola\\nMundo\\nEm\\nPrisma\");\r\n\r\nimprima('\\97\\98\\99') \/\/sa\u00edda: abc\r\n<\/pre>\n<p style=\"text-align: left;\">Note que com a barra invertida &#8216;\\&#8217; \u00e9 poss\u00edvel passar o c\u00f3digo e a sa\u00edda ser\u00e1 o caractere correspondente ao c\u00f3digo num\u00e9rico<\/p>\n<p style=\"text-align: left;\">Note tamb\u00e9m que \\n \u00a0faz a impress\u00e3o ir para linha seguinte.<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>leia ( )<\/strong><\/h3>\n<p style=\"text-align: justify;\">Uma vers\u00e3o simples do<strong> es.leia( )<\/strong> (que trataremos adiante), a fun\u00e7\u00e3o leia aguarda o usu\u00e1rio digitar algo e retorna o que foi digitado,\u00a0podendo ser armazenado em uma vari\u00e1vel do seguinte modo:<\/p>\n<pre class=\"lang:prisma decode:true\">poe \"Digite algo: \";\r\n\r\nalgo = leia ( );\r\n\r\npoe ( algo ); \r\n\/\/sa\u00edda ser\u00e1 aquilo que o usu\u00e1rio digitar;\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\">\u00a0\u00a0\u00a0\u00a0\u00a0<strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tipo ( valor )<br \/>\n<\/strong><\/h3>\n<p style=\"text-align: justify;\">Esta fun\u00e7\u00e3o retorna uma string descrevendo o tipo de valor. Muito \u00fatil para sabermos qual tipo de vari\u00e1vel \u00e9 um dado. <strong>V<em>alor<\/em><\/strong> pode\u00a0ser uma vari\u00e1vel ou diretamente um valor. Exemplos de uso:<\/p>\n<pre class=\"lang:prisma decode:true \">  \r\ns = \"ol\u00e1 mundo\";\r\nn = 12;\r\nf = 2.4;\r\ng = {};\r\nbol = falso;\r\nfuncao ola () \r\n  imprima'ola';\r\nfim\r\n\r\nimprima( tipo(s) , tipo(n) , tipo(f) , tipo(g) , tipo(bol) , tipo(ola), 1250 );\r\n\r\n\/\/sa\u00edda: string numero numero tabela boolean funcao numero\r\n\r\nse tipo(9) == \"numero\" entao\r\n   imprima'\u00e9 um n\u00famero');\r\nsenao\r\n   imprima'n\u00e3o \u00e9 um n\u00famero';\r\nfim\r\n\r\n<\/pre>\n<h2 style=\"text-align: center;\"><strong><span style=\"color: #008000;\"><span style=\"color: #000000;\">\u00a0<\/span><\/span><\/strong><\/h2>\n<hr \/>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><strong><span style=\"color: #008000;\"><span style=\"color: #000000;\">Aproveitando aqui veja algumas vari\u00e1veis predefinidas importantes:<\/span><br \/>\n<\/span><\/strong><\/h2>\n<p><strong>\u00a0<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>\u00a0* _versao &#8211;<\/strong> vari\u00e1vel que guarda a vers\u00e3o de prisma, tente executar:<strong> imprima( _versao );<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>\u00a0* prismadir<\/strong> &#8211; vari\u00e1vel que guarda o diret\u00f3rio do execut\u00e1vel prisma:<strong> imprima ( prismadir );<\/strong><\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #800000;\"><em>OBS &#8211; prismadir n\u00e3o funciona no Linux se o interpretador estiver no diret\u00f3rio bin.<\/em><\/span><\/p>\n<p style=\"text-align: justify;\"><strong>\u00a0* args &#8211;<\/strong>\u00a0 \u00e9 uma<em><strong> tabela<\/strong><\/em> dos argumentos externos passados como par\u00e2metros em linha de comando:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima (  args [ 0 ] ); \r\n\/\/ imprime o nome do programa prisma sendo executado.\r\n\r\nimprima ( args [-1] );\r\n\/\/imprime o nome do interpretador, \r\n\/\/que pode ser o prisma.exe ou o igprisma.exe;\r\n\/\/ no linux prisma\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<hr \/>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><span style=\"color: #000000;\">Voltando para as fun\u00e7\u00f5es da biblioteca base<\/span><\/h3>\n<h3 style=\"text-align: center;\"><strong>\u00a0<\/strong> poe ( string )<\/h3>\n<p style=\"text-align: justify;\"><span style=\"color: #000000;\">\u00a0\u00a0 V\u00eam do verbo p\u00f4r (poe, ingl\u00eas = put ), coloca na tela preta o resultado, \u00e9 o mesmo que a fun\u00e7\u00e3o imprima, mas com limita\u00e7\u00f5es,\u00a0n\u00e3o aceita por exemplo mais de um argumento, \u00e9 bom para strings apenas. Ex.:<\/span><\/p>\n<pre class=\"lang:prisma decode:true\">poe(\"Ola mundo em Prisma!\");<\/pre>\n<h3 style=\"text-align: center;\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 executestring( string )<\/strong><span style=\"color: #000000;\"><br \/>\n<\/span><\/h3>\n<p><span style=\"color: #000000;\">Executa um trecho de comando em uma string em tempo de execu\u00e7\u00e3o, retorna zero caso tenha sucesso ou 1 caso falhe.<br \/>\n<\/span><\/p>\n<p>Muito \u00fatil quando voc\u00ea quer que seu programa leia e interprete comandos. Exemplo:<\/p>\n<pre class=\"lang:prisma decode:true\"> \r\n x = executestring ( \"imprima ( 'Ola Mundo' ) ; \" ); \r\n\/\/imprime na tela Ola Mundo\r\n\r\n   se x == 0 entao\r\n        imprima 'string executada com sucesso'\r\n   senaose x == 1 entao\r\n        imprima 'a string nao foi executada por algum erro'; \r\n   fim\r\n\r\n<\/pre>\n<p style=\"text-align: justify;\"><em><strong>Dica: cuidado com as aspas, se a string a ser executada possui apas internamente voc\u00ea tem\u00a0<\/strong><\/em><em><strong>algumas op\u00e7\u00f5es:<\/strong><\/em><\/p>\n<p style=\"text-align: justify;\"><strong><em><span style=\"color: #0000ff;\">1 &#8211; Usar aspas simples internamente, e duplas externamente ou o inverso, como no exemplo acima;<\/span><\/em><\/strong><\/p>\n<pre class=\"lang:prisma decode:true\"> \r\nx = executestring ( \"imprima ( 'Ola Mundo' ) ; \" );<\/pre>\n<p style=\"text-align: justify;\"><strong><em><span style=\"color: #0000ff;\">2 &#8211; Usar o mesmo tipo de aspas. Mas as internas devem ser antecedidas por barra obl\u00edqua:<span style=\"color: #000000;\"> \\&#8221;<\/span> ou<span style=\"color: #000000;\"> \\&#8217; <\/span>ex.:<\/span><\/em><\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">executestring ( 'imprima(\\'ola mundo\\') ' );<\/pre>\n<p><strong><em>\u00a0<\/em><\/strong><\/p>\n<p style=\"text-align: justify;\"><strong><em><span style=\"color: #0000ff;\">Ou<\/span><\/em><\/strong><\/p>\n<p style=\"text-align: justify;\"><strong><em><span style=\"color: #0000ff;\">3 &#8211; Usar duplos colchetes:<\/span><\/em><\/strong><\/p>\n<pre class=\"lang:prisma decode:true\"> executestring( [[ imprima (\"ola mundo\" ) ]] );<\/pre>\n<p style=\"text-align: justify;\">Como o argumento \u00e9 uma \u00fanica string podemos omitir o par\u00eanteses da fun\u00e7\u00e3o como fazemos\u00a0desde o in\u00edcio com a fun\u00e7\u00e3o<em><strong> inclua<\/strong>. <\/em>Ficando assim:\u00a0 <strong>executestring &#8220;seu_comando_aqui&#8221; .<\/strong><\/p>\n<hr \/>\n<h3 style=\"text-align: center;\">\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #000000;\"><strong> executearquivo ( &#8220;caminho_do_arquivo.prisma&#8221; )<\/strong><\/span><\/h3>\n<p style=\"text-align: justify;\"><strong>\u00a0\u00a0 <\/strong>Semelhante ao comando executestring, mas ao inv\u00e9s de executar uma string, executa um programa prisma, que pode estar\u00a0compilado ou n\u00e3o.<\/p>\n<p style=\"text-align: justify;\">\u00a0Muito \u00fatil quando seu programa tem v\u00e1rios subprogramas separados, sendo chamados pelo programa principal.<\/p>\n<p style=\"text-align: justify;\">Esta fun\u00e7\u00e3o, <em>executearquivo<\/em>, em caso de haver erro no programa executado, simplesmente trava a execu\u00e7\u00e3o do programa principal, fechando-o e imprimindo mensagem de erro na tela cmd (no Linux terminal).<\/p>\n<p style=\"text-align: justify;\">Se o programa prisma a ser executado estiver na mesma pasta que o programa principal, n\u00e3o \u00e9 necess\u00e1rio usar o caminho completo,\u00a0caso contr\u00e1rio sim.<\/p>\n<p style=\"text-align: justify;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ex.:<\/p>\n<pre class=\"lang:prisma decode:true\"> \r\nexecutearquivo( 'ola.prisma'); \r\n\/\/--&gt; executa um programa prisma chamado ola.prisma;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2610\" src=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/09\/obs.png\" alt=\"obs\" width=\"77\" height=\"104\" \/>\u00a0\u00a0 Obs. Lembre-se que o nome do arquivo a ser executado deve ser escrito com a extens\u00e3o.<\/p>\n<p style=\"text-align: justify;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Lembre-se de que no Windows as barras devem ser duplas, ex:<\/p>\n<pre class=\"lang:prisma decode:true\">\"C:\\\\Users\\\\Admin\\\\ola.prisma\";<\/pre>\n<p>Ou use duplos colchetes:<\/p>\n<pre class=\"lang:prisma decode:true\">\u00a0[[C:\\Users\\Admin\\ola.prisma]];<\/pre>\n<p>J\u00e1 no L\u00ednux n\u00e3o \u00e9 necess\u00e1rio, pois as barras de endere\u00e7o s\u00e3o assim: \u00a0<strong>\/<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">\u00a0\r\n'\/home\/user\/ola.prisma'<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">\u00a0\u00a0 <strong>carregue ( string )<\/strong><\/h3>\n<p style=\"text-align: justify;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Semelhante a fun\u00e7\u00e3o<strong><em> executestring<\/em><\/strong> com a diferen\u00e7a de que esta carrega a string e retorna uma fun\u00e7\u00e3o dela para uma vari\u00e1vel.<strong> Ex:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\"> \r\nimprima_ola = carregue ( \"imprima 'ola mundo' \" ); \r\n\/\/primeiro carrega a string em uma fun\u00e7\u00e3o\r\n\r\n imprima_ola() ; \r\n\/\/executa a string carregada nesta funcao;\r\n\r\n<\/pre>\n<p style=\"text-align: justify;\">\u00a0\u00a0\u00a0\u00a0\u00a0 Se houver erros o primeiro retorno \u00e9 nulo e o segundo \u00e9 uma string descrevendo o erro.<\/p>\n<p style=\"text-align: justify;\">Ex.:<\/p>\n<pre class=\"lang:prisma decode:true \">local s = 'imprima(a+2)';\r\nlocal f, msg_erro = carregue(s);\r\nse f entao\r\n  f();\/\/executa fun\u00e7\u00e3o f se for v\u00e1lido\r\nsenao\r\n  erro(msg_erro);\/\/imprime a mensagem de erro se f for nulo.\r\nfim<\/pre>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">\u00a0<strong>carreguearquivo ( &#8220;programa.prisma&#8221; )<\/strong><\/h3>\n<p style=\"text-align: justify;\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 S<\/strong>imilar \u00e0 fun\u00e7\u00e3o carregue, no entanto, esta carrega um arquivo fonte prisma ou programa compilado prisma em uma fun\u00e7\u00e3o que ao ser executada executa o programa carregado. Exemplo:<\/p>\n<pre class=\"lang:prisma decode:true\">execute_arquivo = carreguearquivo ( 'ola.prisma' );\r\n\r\nexecute_arquivo () ; \/\/executa o programa carregado.\r\n\r\n<\/pre>\n<p style=\"text-align: justify;\">\u00a0Esta fun\u00e7\u00e3o, ao contr\u00e1rio da executearquivo, d\u00e1 a possibilidade de fazer um tratamento de erro:<\/p>\n<pre class=\"lang:prisma decode:true\">f, msg_erro = carreguearquivo ( 'ola.prisma' );\r\n\r\nse f entao\r\n        f() ;\/\/executa o programa carregado.\r\nsenao\r\n       imprima (msg_erro);\r\nfim \r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\">\u00a0<strong> convnumero( string )<\/strong><\/h3>\n<p style=\"text-align: justify;\">\u00a0 Converte uma string para n\u00famero. Exemplo:<\/p>\n<pre class=\"lang:prisma decode:true\">  x = \"12\";\r\n\/\/ x = x + x -- errado!\r\n\r\n  x = convnumero( x ); \/\/correto!\r\n\r\n  x = x + x; \r\nimprima(x);\r\n\/\/depois de convertermos para n\u00famero\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">\u00a0\u00a0\u00a0\u00a0<strong> convstring ( numero )<\/strong><\/h3>\n<p style=\"text-align: justify;\">Faz o contr\u00e1rio da fun\u00e7\u00e3o anterior, converte um n\u00famero para string.<\/p>\n<pre class=\"lang:prisma decode:true\"> \r\nx = \"1 + 1 = \" .. 2 ; \r\n\/\/ao concatenar a convers\u00e3o \u00e9 autom\u00e1tica,\r\n\/\/mas \u00e9 recomend\u00e1vel que se converta antes:\r\n\r\nx = \"1 + 1 = \" .. convstring ( 2 );\r\nimprima(x);\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">\u00a0\u00a0\u00a0<strong> tente ( comando , &#8216;mensagem erro&#8217;);<br \/>\n<\/strong><\/h3>\n<p style=\"text-align: justify;\">Esta fun\u00e7\u00e3o verifica um valor e retorna um mensagem de erro caso esse valor seja falso ou nulo, ou o pr\u00f3prio valor caso ele seja\u00a0v\u00e1lido.<\/p>\n<p style=\"text-align: justify;\">\u00a0Sua sintaxe \u00e9 :<strong>\u00a0\u00a0\u00a0<span style=\"color: #0000ff;\"> x\u00a0 = tente (\u00a0\u00a0\u00a0 valor , String_erro );<\/span><\/strong><\/p>\n<p style=\"text-align: justify;\">Esta fun\u00e7\u00e3o \u00e9 \u00f3tima para testar abertura de arquivos. Veja seu uso:<\/p>\n<pre class=\"lang:prisma decode:true\">x = tente ( falso , \"erro - valor invalido\" ); \r\n\r\n\/**\r\nretorna o valor se for v\u00e1lido ou a mensagem \r\nde erro se valor for inv\u00e1lido, isto \u00e9, se for \r\nfalso ou nulo\r\n**\r\n\r\n<\/pre>\n<p style=\"text-align: justify;\">Outro exemplo de uso com a fun\u00e7\u00e3o que abre arquivo em Prisma:<\/p>\n<pre class=\"lang:prisma decode:true\">x = tente( \r\n    es.abra ( \"teste.txt\" , \"escrita\" ), \r\n   \"erro - arquivo nao pode ser aberto\"\r\n); \/\/tente\r\n\r\n\/** \r\nse a fun\u00e7\u00e3o conseguir abrir o arquivo retorna o \r\narquivo para x sen\u00e3o fecha o programa e retorna\r\na mensagem de erro, que \u00e9 a string definida no \r\nsegundo par\u00e2metro.\r\n**\r\n\r\nse x entao \r\n\/\/ se x tiver algum valor v\u00e1lido entao:\r\n   x:escreva (\"uma linha escrita no arquivo\"); \r\n\/\/escreve no arquivo aberto\r\n\r\n   x:feche ( ); \r\n\/\/ depois \u00e9 necess\u00e1rio fechar o arquivo aberto.\r\n\r\nfim \/\/fim se\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">\u00a0cod ( &#8216;Car&#8217; )<\/h3>\n<p>Esta fun\u00e7\u00e3o converte um caractere para sua representa\u00e7\u00e3o em bytes (n\u00famero), h\u00e1 uma certa correspond\u00eancia ao n\u00famero de cada\u00a0tecla do teclado.<\/p>\n<p>Exemplo:<\/p>\n<pre class=\"lang:prisma decode:true\">  \r\nimprima ( cod ('A')  ) ; \/\/ sa\u00edda --&gt; 65\r\na = \"tangerina\";\r\nimprima( cod(a ,1, #a) ) \/\/ desde o caractere 1 at\u00e9 o tamanho de a\r\n\/\/sa\u00edda--&gt; 116 97 110 103 101 114 105 110 97\r\n\r\n<\/pre>\n<p>No exemplo, podemos observar que esta fun\u00e7\u00e3o converte a letra &#8216;A&#8217; para o n\u00famero 65.<\/p>\n<p>E todos os caracteres de &#8220;tangerina&#8221; na vari\u00e1vel a.<\/p>\n<p>Obs.: O nome da fun\u00e7\u00e3o &#8216;cod&#8217; faz refer\u00eancia a c\u00f3digo (&#8216;codifique&#8217;);<\/p>\n<h3 style=\"text-align: center;\">car ( cod )<\/h3>\n<p>Esta fun\u00e7\u00e3o converte de codigo para caractere, ou seja, o par\u00e2metro \u00e9 um n\u00famero que ser\u00e1 convertido para caractere.<\/p>\n<p>Ex.:<\/p>\n<pre class=\"lang:prisma decode:true\"> \r\nimprima ( car ( 65 )   ); \/\/ sa\u00edda -- &gt; A\r\n\r\nimprima( car(65,66,67) ); \/\/ sa\u00edda --&gt; ABC\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">compile( fun\u00e7\u00e3o )<\/h3>\n<p style=\"text-align: justify;\">Esta fun\u00e7\u00e3o converte uma fun\u00e7\u00e3o prisma em byte-code em tempo de execu\u00e7\u00e3o retornando em forma de string codificada,\u00a0\u00e9 poss\u00edvel gravar em arquivo o resultado e cham\u00e1-lo posteriormente com os comandos inclua, carreguearquivo ou executearquivo.<\/p>\n<p>ex.:<\/p>\n<pre class=\"lang:prisma decode:true \">\/\/ex. compile\r\nfuncao soma ( a , b ) \r\n\/\/criando uma fun\u00e7\u00e3o para ser compilada\r\n\r\n  imprima ( a + b);\r\nfim\r\n\r\n xsoma = compile( soma ); \r\n\/\/compilando a fun\u00e7ao, o retorno \u00e9 uma string compilada\r\n\r\n   x = carregue( xsoma ); \r\n\/\/para usar basta carregar a string compilad\r\n\/\/e depois chamar como uma funcao qualquer:\r\n\r\n   x( 3 , 4 ) ; \/\/saida --&gt;      7\r\n\r\n<\/pre>\n<p>N\u00e3o precisa necessariamente declarar a fun\u00e7\u00e3o antes, pode passar a fun\u00e7\u00e3o sem nome\u00e1-la, isto \u00e9 chamado de fun\u00e7\u00e3o an\u00f4nima:<\/p>\n<p>ex.2:<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/ex. compile()\r\nx = compile ( funcao( ) imprima( 'Ola Mundo') fim   ); \r\n\/\/a fun\u00e7\u00e3o \u00e9 passada como argumento, mas sem nome;\r\n\r\ng = carregue ( x ); \/\/carregando a string compilada\r\n\r\ng ( ); \r\n\/\/executando como uma fun\u00e7\u00e3o, sa\u00edda -- &gt; Ola Mundo\r\n\r\n<\/pre>\n<p>No pr\u00f3ximo exemplo vou demonstrar como gravar em um arquivo e depois executar o arquivo:<\/p>\n<p>ex.3:<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/ex. compile()\r\nx = compile(  \r\n\/\/o argumento pode ocupar normalmente mais que uma linha:\r\n\r\nfuncao (  ) \r\n\r\n         para i = 1 , 100       inicio  imprima ( i )       fim   \r\n\r\nfim \r\n\r\n\r\n);\r\n\r\narquivo = es.abra ( 'teste.prisma' , 'escritabin' ); \r\n\/\/abre um arquivo em modo escrita bin\u00e1ria\r\n\r\n     arquivo:escreva ( x ) ; \r\n\/\/ escrevendo no arquivo a string compilada 'x'\r\n\r\narquivo:feche( ); \/\/pronto, arquivo fechado\r\n\r\n\/\/executando o arquivo, pode ser de v\u00e1rias \r\n\/\/maneiras, mas aqui vou usar o 'executearquivo'\r\n\r\nexecutearquivo \"teste.prisma\" ; \r\n\/\/deve ser o mesmo nome criado acima, ok!\r\n\r\n\/\/sa\u00edda -- &gt;  de 1 a 100 na tela do cmd.\r\n\r\n<\/pre>\n<p>Voc\u00ea pode usar em combina\u00e7\u00e3o com a fun\u00e7\u00e3o carreguearquivo e compilar um arquivo, veja:<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/ex. carreguearquivo\r\n\r\nx = carreguearquivo( 'teste.prisma') ;\r\n \/\/carrega um arquivo prisma em uma fun\u00e7\u00e3o\r\n\r\ng = compile ( x ) ; \r\n\/\/podemos compilar x j\u00e1 que \u00e9 uma fun\u00e7\u00e3o\r\n\/\/ retornando a string compilada para g;\r\n\r\na = es.abra( 'out.prisma' , 'escritabin'); \r\n\/\/abrindo um arquivo em modo escrita bin\u00e1ria\r\n\r\na:escreva( g ) ; \r\n\/\/escrevendo a string compilada para o arquivo\r\n\r\na:feche( );\r\n\r\n\/\/pronto o arquivo foi compilado para byte-code \r\n\/\/a partir de um programa feito em prisma!\r\n\r\n<\/pre>\n<hr \/>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">\u00a0pchame ( funcao, argumentos )<\/h3>\n<p>&nbsp;<\/p>\n<p>Chama (executa) uma fun\u00e7\u00e3o em modo protegido, isto \u00e9, se a fun\u00e7\u00e3o contiver erros a mesma n\u00e3o interfere na execu\u00e7\u00e3o do programa\u00a0principal. Ela retorna dois valores, o primeiro \u00e9 um boolean (falso ou verdadeiro)\u00a0 e o segundo \u00e9 a mensagem de erro caso tenha.<\/p>\n<p>Caso haja um erro a fun\u00e7\u00e3o n\u00e3o \u00e9 executada e o primeiro retorno \u00e9 um falso seguido pela mensagem de erro se n\u00e3o tiver erro\u00a0a fun\u00e7\u00e3o \u00e9 executada, o primeiro retorno \u00e9 verdadeiro e o segundo \u00e9 o valor de retorno da fun\u00e7\u00e3o se houver, veja:<\/p>\n<p>O primeiro par\u00e2metro \u00e9 a fun\u00e7\u00e3o a ser chamada e do segundo em diante s\u00e3o seus argumentos se tiver.<\/p>\n<pre class=\"lang:prisma decode:true\">funcao soma ( a , b )\r\n   imprima( a + b );\r\nfim\r\n\r\nx , msg = pchame ( soma , 'a' , 3 ); \r\n\/\/isto gerar\u00e1 um devido a soma de uma letra com um n\u00famero\r\n\r\nse x == falso entao\r\n\r\n          imprima( msg ) \r\n\/\/imprimindo a mensagem de erro\r\n\r\nsenao\r\n\r\n         imprima 'Fun\u00e7\u00e3o executada com \u00eaxito' ;\r\n\r\nfim<\/pre>\n<hr \/>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">xpchame(\u00a0 funcao , funcao_erro , argumentos &#8230; )<\/h3>\n<p>&nbsp;<\/p>\n<p>Muito semelhante a de cima, mas com uma fun\u00e7\u00e3o de erro customizada, veja:<\/p>\n<pre class=\"lang:prisma decode:true\">funcao soma( a , b )\r\n\r\n     imprima( a  + b );\r\n\r\nfim\r\n\r\nfuncao imprima_erro ( msg_erro )\r\n\r\n    imprima ( \"ocorreu um erro, veja: \" , msg_erro );\r\n\r\nfim\r\n\r\na , b = xpchame ( soma , imprima_erro , 2 , 'a' ) ; \r\n\/\/ o 'a' gerar\u00e1 um erro, pois \u00e9 uma opera\u00e7\u00e3o aritm\u00e9tica com string\r\n\r\nimprima ( a , b );\r\n\r\nleia( );\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">selecione( \u00a0[&#8216;#&#8217; ou inteiro] \u00a0, \u00a0args &#8230; \u00a0)<\/h3>\n<p>&nbsp;<\/p>\n<p>Essa fun\u00e7\u00e3o realiza uma sele\u00e7\u00e3o entre v\u00e1rios argumentos passados como par\u00e2metro, ou se usar o &#8216;#&#8217; retorna o n\u00famero de argumentos.<\/p>\n<p>sintaxe: \u00a0 \u00a0selecione ( \u00a0 tipo , args ); \/\/onde tipo pode ser &#8216;#&#8217; ou um n\u00famero inteiro.<\/p>\n<p>ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">\u00a0 \u00a0funcao \u00a0 \u00a0tam ( ... );\r\n       imprima(  'voce passou ' , selecione('#' , ... ) , 'argumentos');\r\n   fim\r\n tam( 1 , 2 , 3, 4 , 5 ); \/\/saida = voce passou    5   argumentos\r\n\u00a0\r\n<\/pre>\n<p style=\"text-align: justify;\">No exemplo acima retorna o n\u00famero de argumentos variados, pois usamos o tipo &#8216;#&#8217; como primeiro par\u00e2metro para selecione;<\/p>\n<p>Podemos usar um n\u00famero inteiro e definir o retorno a partir dessa posi\u00e7\u00e3o para frente dos argumentos passados:<\/p>\n<pre class=\"lang:prisma decode:true\">funcao selec ( num , ... )\r\n    imprima('voce escolheu a partir do argumento' , num , selecione( num , ... )  )\r\nfim\r\nselec( 3 , 12 , 34 , 56 , 78 , 90 ); \r\n\r\n<\/pre>\n<p>Sa\u00edda ser\u00e1: \u00a0 voce escolher a partir do argumento \u00a0 \u00a0 \u00a0 3 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 56 \u00a0 \u00a0 78 \u00a0 90<\/p>\n<p style=\"text-align: justify;\">Perceba que ao usar o 3 como primeiro par\u00e2metro da fun\u00e7\u00e3o selecione, ela retorna os elementos a partir do terceiro, se us\u00e1ssemos o 4 seria a partir do quarto, se 5 a partir do quinto, se 2 a partir do segundo e assim por diante.<\/p>\n<h2><\/h2>\n<hr \/>\n<h2><\/h2>\n<h2><\/h2>\n<h2 style=\"text-align: center;\"><strong>Cap. 2 &#8211; Fun\u00e7\u00f5es da biblioteca string<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>Muito importante para o processamento de strings como procurar, recortar, substituir trecho de string por outra, etc.<\/p>\n<h3 style=\"text-align: center;\">string.cod \/ string.byte<\/h3>\n<p style=\"text-align: center;\"><em>A mesma fun\u00e7\u00e3o com nomes diferentes, use a forma que preferir.<\/em><\/p>\n<p style=\"text-align: justify;\">\u00a0\u00a0\u00a0 Relembre a fun\u00e7\u00e3o <strong>cod,<\/strong> \u00e9 exatamente a mesma fun\u00e7\u00e3o empacotada na biblioteca string. Ela converte um caractere para sua\u00a0representa\u00e7\u00e3o em bytes, veja:<\/p>\n<p style=\"text-align: justify;\">Aceita dois par\u00e2metros, o primeiro \u00e9 o caractere ou string, o segundo \u00e9 o n\u00famero que indica na sequ\u00eancia qual caractere\u00a0da string a ser convertido. Quando o segundo par\u00e2metro \u00e9 omitido, o primeiro caractere da string \u00e9 o padr\u00e3o.<\/p>\n<pre class=\"lang:prisma decode:true\">imprima (string.byte (\"ABC\")) \/\/ sa\u00edda --&gt; 65 *(A \u00e9 65 in ASCII) \r\n\/\/converte o primeiro car, o 'A' pois o segundo par\u00e2metro foi omitido\r\nimprima (string.cod (\"ABC\", 1 ,  3 ) )\r\n\/\/ ( 'string' , ponto_inicial , ponto_final )  \r\n\/\/retorna 3 valores a primeira, segunda e terceira letra.\r\n\/\/sa\u00edda -- &gt; 65   66    67\r\n\/\/ se quis\u00e9ssemos salvar os valores em vari\u00e1veis, fica assim:\r\na , b , c = string.byte( \"ABC\" , 1  , 3 ) ; \r\n\/\/ ( 'string' ,  ponto_inicial , ponto_final )\r\nimprima( a , b , c ) ; \/\/sa\u00edda --&gt;  65    66    67\r\n\r\n\/\/ou em uma tabela:\r\ntab = tabela.empacote(   string.cod ( \"ABCDE\" , 1 , 5 )    );  \r\n\/\/empacota os resultados em uma tabela.\r\nimprima( tabela.desempacote( tab )   );\r\n<\/pre>\n<hr \/>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">string.car<\/h3>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<em> exatamente a mesma fun\u00e7\u00e3o car vista na biblioteca base, use qual preferir<\/em><\/p>\n<p>Converte o c\u00f3digo num\u00e9rico (ASCII) em caractere;<\/p>\n<p>Aceita n\u00famero variado de par\u00e2metros separados por v\u00edrgula e retorna a string formada por eles, ou caractere se for \u00fanico.<\/p>\n<p>sintaxe:\u00a0 \u00a0<code class=\"\" data-line=\"\">&lt;span style=&quot;font-size: small;&quot;&gt;s = string.car (n1, n2, n3, ...)&lt;\/span&gt;<\/code><\/p>\n<hr \/>\n<p><b>Descri\u00e7\u00e3o:<\/b><\/p>\n<p>Recebe 0 ou mais n\u00fameros e converte todos em caracteres correspondentes. \u00c9 o oposto da fun\u00e7\u00e3o string.byte \/ string.cod<\/p>\n<pre class=\"lang:prisma decode:true \">imprima ( string.car (65, 66 , 67 ) ) \/\/sa\u00edda --&gt; ABC<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>string.compile<\/strong><\/h3>\n<p style=\"text-align: center;\"><em>Exatamente a mesma fun\u00e7\u00e3o que vimos na base: compile, use o modo que preferir.<\/em><\/p>\n<p>Converte uma fun\u00e7\u00e3o em bin\u00e1rio (byte-codes);<\/p>\n<p><b>Sintaxe:\u00a0 \u00a0 <\/b><code class=\"\" data-line=\"\">&lt;span style=&quot;font-size: small;&quot;&gt;s = string.compile ( f )&lt;\/span&gt;<\/code><\/p>\n<hr \/>\n<p><b>Descri\u00e7\u00e3o:<\/b><\/p>\n<p>Converte uma fun\u00e7\u00e3o f em sua representa\u00e7\u00e3o bin\u00e1ria, que pode ser posteriormente processada com a fun\u00e7\u00e3o carregue( ).<\/p>\n<p>Como a fun\u00e7\u00e3o compile foi bem tratada na biblioteca base, aqui s\u00f3 vou demonstrar um simples exemplo.<\/p>\n<p>Ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">funcao f () imprima \"Alo, Mundo\" fim\r\n    s = string.compile (f)\r\ntente (carregue (s) ) () \/\/--&gt; Alo, Mundo\r\n\r\n\/\/n\u00e3o estranhe ao colocar os () na frente da fun\u00e7\u00e3o tente,\r\n\/\/ o retorno, que \u00e9 uma fun\u00e7\u00e3o \u00e9 executado logo ap\u00f3s tente ( carregue(s) );\r\n\/\/\u00e9 o mesmo que g = tente ( carregue (s) ) ;    g ( ); mas sem o g.<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>string.procure<\/strong><\/h3>\n<p>Procura uma &#8216;string&#8217; chave em uma string maior retornado sua posi\u00e7\u00e3o:<\/p>\n<p>sintaxe:\u00a0\u00a0\u00a0 string.procure( &#8220;string maior&#8221; , &#8220;chave&#8221; , n\u00famero_inicio );<\/p>\n<p><strong>\u00a0string maior<\/strong> \u00e9 a string onde queremos procurar a string chave;<\/p>\n<p><strong>chave <\/strong>\u00e9 a string a ser encontrada na maior;<\/p>\n<p><strong>n\u00famero_inicio<\/strong> \u00e9 a posi\u00e7\u00e3o inicial para come\u00e7ar a procurar na string maior, se omitido, seu valor padr\u00e3o \u00e9 1;<\/p>\n<p>Ex.:<\/p>\n<pre class=\"lang:prisma decode:true\"> s = \"esta \u00e9 uma string onde iremos procurar por uma string menor\";\r\n\r\n         pos_inic , pos_fim = string.procure( s , 'menor' ); \r\n\/\/localiza a string 'menor' dentro de s;\r\n\r\n        imprima ( pos_inic , pos_fim ); \r\n\/\/sa\u00edda --&gt; 56   60<\/pre>\n<p style=\"text-align: justify;\">H\u00e1 dois retornos, o primeiro \u00e9 a posi\u00e7\u00e3o inicial da string localizada, o segundo \u00e9 a posi\u00e7\u00e3o final, portanto precisamos usar\u00a0duas vari\u00e1veis para receber os valores.<\/p>\n<p style=\"text-align: justify;\">Como dito antes o terceiro par\u00e2metro, \u00edndice de posi\u00e7\u00e3o inicial de busca, \u00e9 opcional, e por padr\u00e3o \u00e9 1, isto \u00e9 a busca inicia\u00a0pelo primeiro caractere da string.<\/p>\n<p style=\"text-align: justify;\">Mas, as vezes voc\u00ea pode querer procurar por mais resultados da mesma chave de busca, e para isso o terceiro par\u00e2metro \u00e9\u00a0indispens\u00e1vel. A estrat\u00e9gia \u00e9 guardar a posi\u00e7\u00e3o do primeiro resultado de busca e por meio de um la\u00e7o de repeti\u00e7\u00e3o reiniciar\u00a0a busca do ponto posterior ao \u00faltimo resultado, veja:<\/p>\n<pre class=\"lang:prisma decode:true \">s = \" alo mundo, alo mundo , alo , mundo, alo\";\r\n\r\npi = {}; \r\n\/\/vamos criar duas tabelas (matrizes)\r\n\/\/ uma posi\u00e7\u00e3o inicial (pi) e outra posi\u00e7\u00e3o final (pf)\r\n\r\npf = {};\r\n\r\nx = 1;\r\n\r\npos_busca = 1; \/\/ponto inicial da busca\r\n\r\nenquanto 1 inicio \/\/cria um la\u00e7o infinito\r\n\r\n \r\n    pi[ x ] , pf [ x ] = string.procure ( s , 'alo' , pos_busca ); \r\n\/\/como pf[1] = 0 entao 0+1 = 1 , inicia do primeiro caractere a busca\r\n    \r\n    \r\n \r\n    se pi[x] == nulo entao  \r\n\/\/se o retorno de pi for nulo entao interrompe o la\u00e7o\r\n               quebre\r\n    senao                             \/\/senao salva uma nova posicao de busca\r\n                pos_busca = pf [ x ] + 1;\r\n    fim;\r\n   \r\n\r\nx = x + 1; \r\n\/\/fazendo o incremento de x\r\n\r\nfim\r\n\r\n\/\/imprimindo todos os resultados:\r\n\r\npara i = 1 , #pi  inicio\r\n\r\n      imprima( 'Busca numero ' .. i .. ' : ' .. pi[ i ]  .. ' - ' .. pf [ i ] );\r\n\r\n\/\/imprime todos os resultados para a busca 'alo' \r\n\/\/ a posi\u00e7\u00e3o inicial e final dentro da string s\r\n\r\nfim<\/pre>\n<p>\u00c9 poss\u00edvel usar patterns de busca ( caracteres especiais de busca).<\/p>\n<p><strong>Localizando uma string entre aspas, parenteses e chaves:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\"> s = \" x = 'entre_aspas' ; imprima(entre_parenteses) ; tab = {entre_chaves} {asdf} \";\r\n imprima( string.procure( s , \"'.*'\" , 1 ); \/\/--&gt; 6  18\r\n imprima( string.procure( s , \"'(.*)'\" , 1 ) ) ; \r\n\/\/--&gt; 6 18 entre_aspas\r\n \r\n imprima( string.procure( s , '%((.*)%)' , 1 ) ) ; \r\n\/\/como ( j\u00e1 \u00e9 um sinal interno, usamos %( e %)\r\n  \/\/--&gt; 29 46 entre_parenteses\r\n\r\n imprima( string.procure( s , '{(.+)}' , 1 ) ); \r\n\/\/-&gt; 56 76 entre_chaves} {asdf\r\n imprima( string.procure( s , '{(.-)}' , 1 ) );\r\n\/\/o menos obt\u00e9m somente a 1\u00aa ocorr\u00eacia\r\n\/\/-&gt; 56 69 entre_chaves\r\n \r\n<\/pre>\n<p style=\"text-align: center;\"><strong>string.formate<\/strong><\/p>\n<p style=\"text-align: left;\">Esta fun\u00e7\u00e3o serve para formatar strings por meio de caracteres de formata\u00e7\u00e3o, muito semelhante ao sprintf do C.<\/p>\n<p style=\"text-align: left;\">\u00a0 \u00a0Sintaxe: \u00a0retorno = string.formate( &#8220;String_formatacao&#8221; , args , &#8230; );<\/p>\n<p style=\"text-align: left;\">Exemplo b\u00e1sico:<\/p>\n<pre class=\"lang:prisma decode:true\">s = string.formate( \"Ola %s!\" , \"Mundo\");\r\nimprims(s); \/\/ -&gt; Ola Mundo!<\/pre>\n<p>Perceba que a sa\u00edda \u00e9 a primeira string mas no lugar do %s \u00e9 posto o segundo argumento &#8220;Mundo&#8221;.<\/p>\n<p>O %s \u00e9 um exemplo de caractere de formata\u00e7\u00e3o para strings.<\/p>\n<p><strong>N\u00famero variado de argumentos<\/strong><\/p>\n<pre class=\"lang:default decode:true\">s = string.formate ( 'Ola %s em %s!' , 'Mundo' , 'Prisma');\r\n\r\nimprima(s); \/\/ -&gt; Ola Mundo em Prisma!\r\n\r\n<\/pre>\n<p>Note que poder\u00e1 ser muito mais do que dois argumentos de formata\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\"><span style=\"line-height: 1.5;\"><a href=\"http:\/\/linguagemprisma.net\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.net\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"59\" height=\"80\" \/><\/a>\u00a0 Obs.: para cada argumento de formata\u00e7\u00e3o deve haver um caractere de formata\u00e7\u00e3o respectivo(na mesma sequ\u00eancia).<\/span><\/p>\n<p><strong>Outros caracteres de formata\u00e7\u00e3o e exemplos:<\/strong><\/p>\n<ul>\n<li>\n<pre class=\"lang:prisma highlight:0 decode:true\">%c, %d, %E, %e, %f, %g, %G, %i, %o, %u, %X, e %x s\u00e3o usados para n\u00fameros.\r\n%q e %s para string.\r\n<\/pre>\n<p>&nbsp;<\/li>\n<\/ul>\n<p>Veja os exemplos de uso a seguir:<\/p>\n<dl>\n<dt><\/dt>\n<dd>\n<pre class=\"lang:prisma decode:true\">s = string.format(\"%s %q\", \"Ola\", \"Programador Prisma!\")   \r\n\/\/ string normal e string com aspas\r\nimprima(s); \/\/-&gt; Ola \"Programador Prisma!\"\r\n\r\ns = string.formate(\"%c%c%c\", 79,108,97) \/\/ caracteres\r\nimprima(s); \/\/-&gt; Ola\r\n\r\ns = string.formate(\"%e, %E\", mat.pi,mat.pi) \r\n\/\/ exponencia\u00e7\u00e3o(elevado)\r\nimprima(s); \/\/-&gt; 3.141593e+000, 3.141593E+000\r\n\r\ns = string.formate(\"%f, %g\", mat.pi,mat.pi)       \r\n\/\/ float(real) e compacto float\r\nimprima(s); \/\/-&gt; 3.141593, 3.14159\r\n\r\ns = string.formate(\"%d, %i, %u\", -100,-100,-100)    \r\n\/\/ signed, signed, unsigned (todos inteiros)\r\nimprima(s); \/\/-&gt; -100, -100, 4294967196\r\n\r\ns = string.formate(\"%o, %x, %X\", -100,-100,-100)    \r\n\/\/ n\u00fameros: octal, hexadecimal, hexadecimal\r\nimprima(s); \/\/-&gt; 37777777634, ffffff9c, FFFFFF9C\r\n\r\n s = string.formate(\"%03d, %02d , %07d\" , 1 , 1 , 10 );\r\n imprima(s); \/\/ --&gt; 001, 01 , 0000010\r\n\r\n\r\n<\/pre>\n<\/dd>\n<\/dl>\n<h3 style=\"text-align: center;\"><strong>string.troque<\/strong><\/h3>\n<p style=\"text-align: center;\">Sintaxe: \u00a0retorno1 , retorno2 = string.troque( &#8220;stringOriginal&#8221; , &#8220;string_pesquisada&#8221; , &#8220;troca&#8221; [ , numero_trocas])<\/p>\n<p style=\"text-align: left;\">Um recurso muito \u00fatil quando voc\u00ea quer trocar uma string por outra dentro de uma maior. Um quarto par\u00e2metro opcional limita a quantidade de substitui\u00e7\u00f5es. Veja que retorno 1 \u00e9 a string original j\u00e1 trocada, e retorno2 \u00e9 o numero de trocas feitas.<\/p>\n<p style=\"text-align: left;\">Ex.:<\/p>\n<pre class=\"lang:default decode:true\">imprima( string.troque( \"Ola Mundo!\" , \"Mundo\" , \"Prisma\" ) ); \/\/-&gt; Ola Prisma!<\/pre>\n<p style=\"text-align: left;\">Observe que a fun\u00e7\u00e3o procura a string &#8216;Mundo&#8217; dentro da primeira string, caso a localize, a substitui\u00e7\u00e3o \u00e9 feita por &#8220;Prisma&#8221;.<\/p>\n<p style=\"text-align: left;\"><strong>Outros exemplos:<\/strong><\/p>\n<p style=\"text-align: left;\">Podemos usar caracteres especias para troca:<\/p>\n<dl>\n<dd>\n<pre class=\"lang:prisma decode:true\"> s , n = string.troque(\"banana\", \"(an)\", \"%1-\")  \r\n\/\/ captura toda ocorr\u00eancia an e substitui por an-\r\nimprima(s,n); \/\/ ban-an-a        2 \r\n\r\ns , n = string.troque(\"banana\", \"a(n)\", \"a(%1)\")  \r\n\/\/ parenteses em torno dos 'n' depois de 'a'\r\nimprima(s , n ) ; \/\/ ba(n)a(n)a      2\r\n\r\ns , n = string.troque(\"banana\", \"(a)(n)\", \"%2%1\") \r\n\/\/ em toda ocorr\u00eancia 'an' \u00e9 trocado por 'na'\r\nimrpima( s , n ); \/\/   bnanaa       2\r\n<\/pre>\n<\/dd>\n<\/dl>\n<p style=\"text-align: left;\"><a href=\"http:\/\/linguagemprisma.net\/wp-content\/uploads\/2015\/01\/entendendo.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-582\" src=\"http:\/\/linguagemprisma.net\/wp-content\/uploads\/2015\/01\/entendendo.jpeg\" alt=\"entendendo\" width=\"114\" height=\"120\" \/><\/a>\u00a0Voc\u00ea pode estar um pouco confuso sobre os &#8216;patterns&#8217; (caracteres especiais para troca),<\/p>\n<p style=\"text-align: left;\">lembre-se de que o segundo argumento \u00e9 para pesquisa e o terceiro para troca:<\/p>\n<p style=\"text-align: left;\">&#8220;(an)&#8221; = onde encontrar &#8216;an&#8217; na string original ocorrer\u00e1 a troca;<\/p>\n<p style=\"text-align: left;\">&#8216;%1-&#8216; = \u00a0%1 simboliza o argumento de pesquisa, o primeiro entre par\u00eanteses seguido pelo &#8211; ; logo a troca ser\u00e1 an-<\/p>\n<p style=\"text-align: left;\">&#8216;a(n)&#8217; = todo &#8216;an&#8217; para pesquisa sendo o &#8216;n&#8217; capturado para usar como %1 na troca;<\/p>\n<p style=\"text-align: left;\">&#8216;a(%1)&#8217; = a troca ser\u00e1 por a + &#8216;n&#8217; simbolizado por %1<\/p>\n<p style=\"text-align: left;\">&#8216;(a)(n)&#8217; = an para pesquisa, na troca o a ser\u00e1 = %1 e o n = %2<\/p>\n<p><strong>Trocando toda palavra v\u00e1lida por ela mesma entre sinais: \u00a0(ex.: \u00a0ola por &lt;ola&gt; ou &#8220;ola&#8221;)<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">s = \"ola mundo em Prisma\";\r\nimprima( string.troque (  s , '(%w+)' , '&lt;%1&gt;' )   );\r\n\/\/ &lt;ola&gt; &lt;mundo&gt; &lt;em&gt; &lt;Prisma&gt; 4\r\n\r\nimprima( string.troque( s , '(%w+)' , '\"%1\"' )  ); \r\n\/\/ \"ola\" \"mundo\" \"em\" \"Prisma\" 4\r\nimprima( string.troque ( \"dia 15 de abril\" , '(%w+)' , '\/%1\/' ) ); \r\n\/\/= \/dia\/ \/15\/ \/de\/ \/abril\/\r\n\r\n<\/pre>\n<h2><\/h2>\n<h3 style=\"text-align: center;\"><strong>string.capte<\/strong><\/h3>\n<p><span style=\"color: #000000;\">\u00a0<strong>sintaxe<\/strong>: iterador = string.capte( string , &#8216;chave&#8217; )<\/span><\/p>\n<p><span style=\"color: #000000;\">Esta fun\u00e7\u00e3o retorna um iterador de busca por chave. O iterador procurar\u00e1 atrav\u00e9s da string passada buscas por resultados da chave passada. Observe que \u00e9 passado um iterador que pode ser usado com a fun\u00e7\u00e3o &#8216;para&#8217;, ex. :<\/span><\/p>\n<dl>\n<dd>\n<pre class=\"lang:prisma decode:true \">para palavra em string.capte( 'ola mundo em &lt;prisma&gt;; 2015 ', \"%a+\") inicio \r\n    imprima( palavra ) \r\nfim\r\n\/**sa\u00edda:\r\nola\r\nmundo\r\nem \r\nprisma\r\n**<\/pre>\n<\/dd>\n<\/dl>\n<p>o pattern (a chave) %a+ representa qualquer sequ\u00eancia de letra\u00a0v\u00e1lida exceto n\u00fameros e sinais;<\/p>\n<p>Tente modificar o programa acima substituindo &#8220;%a+&#8221; \u00a0por \u00a0&#8220;%d+&#8221; \u00a0 ou &#8220;%w+&#8221; e veja os resultados.<\/p>\n<h3 style=\"text-align: center;\">string.tamanho<\/h3>\n<p>Retorna o tamanho de uma string, sintaxe: retorno(n\u00famero) = string.tamanho( &#8216;string&#8217;).<\/p>\n<p>Ex.:<\/p>\n<pre class=\"\">imprima( \u00a0 string.tamanho ( \u00a0'Ola Mundo em Prisma' \u00a0) \u00a0 );\r\n\/\/ 19<\/pre>\n<h3 style=\"text-align: center;\">string.maiuscula<\/h3>\n<p>Retorna uma string que est\u00e1 em min\u00fascula no formato mai\u00fascula.<\/p>\n<p>Sintaxe: \u00a0 \u00a0retorno(STRING) = string.maiuscula(&#8216;string&#8217;)<\/p>\n<p>Ex.:<\/p>\n<pre class=\"lang:prisma decode:true\"> s = string.maiuscula( 'ola mundo');\r\n    imprima(s); \/\/-&gt; OLA MUNDO<\/pre>\n<p>Obs.: caso j\u00e1 tenha alguma letra em mai\u00fascula, nada \u00e9 feito.<\/p>\n<h3 style=\"text-align: center;\">string.minuscula<\/h3>\n<p>Retorna uma string que est\u00e1 em mai\u00fascula para min\u00fascula.<\/p>\n<p>Ex.:<\/p>\n<pre class=\"lang:prisma decode:true \">s = string.minuscula('OLA MUNDO');\r\nimprima(s); \/\/--&gt; ola mundo\r\n\r\n<\/pre>\n<p>Obs.: caso j\u00e1 tenha alguma letra em min\u00fascula, nada \u00e9 feito.<\/p>\n<h3 style=\"text-align: center;\">string.nconcat<\/h3>\n<p>Retorna uma string concatenada n vezes. Sintaxe: \u00a0 \u00a0retorno = string.nconcat( &#8220;string&#8221; , numero_concat ).<\/p>\n<p>Ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">s = string.nconcat( 'Ola' , 3 );\r\nimprima( s ); \/\/-&gt; OlaOlaOla<\/pre>\n<h2><\/h2>\n<h3 style=\"text-align: center;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 string.inverta<\/h3>\n<p>Retorna uma string com ordem das letras invertidas. Sintaxe: \u00a0 retorno = string.inverta(&#8220;string&#8221;);<\/p>\n<p>Ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">s = string.inverta('ABC');\r\nimprima(s); \/\/-&gt; CBA<\/pre>\n<h2><\/h2>\n<h3 style=\"text-align: center;\">string.sub<\/h3>\n<h3 style=\"text-align: center;\">\u00a0(ou se preferir: string.corte)<\/h3>\n<p>Retorna uma substring de uma maior. \u00a0Sintaxe: \u00a0 retorno = string.sub( &#8220;string_origial&#8221; , inicio , fim );<\/p>\n<p>Onde inicio e fim s\u00e3o n\u00fameros, sendo 1 o in\u00edcio da string.<\/p>\n<p>N\u00fameros negativos representam do fim para o in\u00edcio, -1 \u00e9 o \u00faltimo caractere.<\/p>\n<p>Ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">s = 'ola mundo';\r\nimprima( string.sub( s , 1 , 2)  ); \/\/-&gt;; ol\r\nimprima( string.sub( s , 1 , 3 ) ); \/\/-&gt; ola\r\nimprima( string.sub( s , 1 , -1 )  ); \/\/-&gt; ola mundo\r\nimprima( string.sub( s , -2 , -1)  ); \/\/-&gt; do\r\n\r\n<\/pre>\n<p>Caso o segundo argumento seja omitido, ent\u00e3o o valor padr\u00e3o \u00e9 o \u00faltimo caractere da string.<\/p>\n<pre class=\"lang:prisma decode:true\">s = 'ola mundo';\r\nimprima( string.sub( s , 2 ); \/\/-&gt; la mundo   \/\/\u00e9 contado do 2 caractere at\u00e9 o final.<\/pre>\n<h1><\/h1>\n<hr \/>\n<p>&nbsp;<\/p>\n<h1 style=\"text-align: center;\">Cap. 3 fun\u00e7\u00f5es do sistema operacional<\/h1>\n<p>&nbsp;<\/p>\n<p>Esta biblioteca permite a comunica\u00e7\u00e3o com algumas fun\u00e7\u00f5es do sistema operacional, tais como data, hor\u00e1rio, execute, etc.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" aligncenter\" src=\"https:\/\/encrypted-tbn1.gstatic.com\/images?q=tbn:ANd9GcTkP4O54b2Y1b_8BC88kRw5ajgDrvokLFyTp8c7xk405DukNdNSBA\" alt=\"Resultado de imagem para operating system images\" width=\"199\" height=\"215\" \/><\/p>\n<p>Todos os m\u00e9todos ficam guardados na tabela &#8216;sis&#8217;:<\/p>\n<h3 style=\"text-align: center;\">sis.relogio()<\/h3>\n<p>Retorna o tempo da CPU desde o in\u00edcio da execu\u00e7\u00e3o de Prisma, em segundos.<\/p>\n<dl>\n<dt><\/dt>\n<dd>\n<pre class=\"lang:prisma decode:true\">t = sis.relogio();\r\nimprima(t) \/\/ saida: 11056.989\r\n<\/pre>\n<\/dd>\n<\/dl>\n<h3 style=\"text-align: center;\">sis.data()<\/h3>\n<p>Retorna informa\u00e7\u00f5es sobre data e hor\u00e1rios. Sintaxe: sis.data(formatacao\/op\u00e7\u00f5es);<\/p>\n<p>ex.: \u00a0 imprimindo a data sem formata\u00e7\u00e3o, o resultado depende do sistema operacional:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( sis.data() ); \/\/saida: Wed Apr 22 20:46:23 2015\r\n<\/pre>\n<p>exemplo formatado: ( %d = dia, %m = m\u00eas, %Y = ano)<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( sis.data(\"%d.%m.%Y\")  ); \/\/   22.04.2015<\/pre>\n<p>Retornando uma tabela (&#8216;*t&#8217;)<\/p>\n<pre class=\"lang:prisma decode:true\">T = sis.data(\"*t\");\r\nimprima( T.hora , T.minuto , T.segundo );<\/pre>\n<p>No exemplo logo acima, o argumento &#8220;*t&#8221; for\u00e7a o retorno de uma tabela.<\/p>\n<p>Qualquer nome que escolher como retorno conter\u00e1 os campos:<\/p>\n<pre class=\"lang:prisma decode:true\">.diaano \/\/ dia corrido de 1 a 365\r\n\r\n.dia \/\/ dia do m\u00eas 1 - 31 ou 1-30;\r\n\r\n.mes \/\/ o m\u00eas em forma num\u00e9rica. (1-12)\r\n\r\n.hora \/\/ hora(1-23\/ 24=00 dependendo do idioma do sistema)\r\n\r\n.minuto \/\/ minuto (1-59)\r\n\r\n.segundo \/\/ segundo( 1-59)\r\n\r\n.horariodeverao \/\/ se \u00e9 hor\u00e1rio de ver\u00e3o (falso ou verdadeiro)\r\n\r\n.diasemana \/\/ dia da semana em n\u00famero(1=domingo, 2 = segunda ...);\r\n\r\n.ano \/\/ ano em forma num\u00e9rica (\u00a02015, por exemplo)<\/pre>\n<h3 style=\"text-align: center;\">sis.diftempo()<\/h3>\n<p>Retorna a diferen\u00e7a de tempo entre t2 e t1<\/p>\n<p>ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">t1 = sis.tempo();\r\n imprima( sis.diftempo(  sis.tempo( ) , t1 ) );  \/\/ 43<\/pre>\n<h3 style=\"text-align: center;\">sis.execute()<\/h3>\n<p>Execute um comando de terminal do sistema operacional, semelhante ao system() do C:<\/p>\n<pre class=\"lang:prisma decode:true\">sis.execute('clear'); \/\/linux limpa tela.<\/pre>\n<pre class=\"lang:prisma decode:true\">sis.execute('cls') ; \/\/Windows limpa tela.<\/pre>\n<p>\u00c9 poss\u00edvel chamar programas externos:<\/p>\n<pre class=\"lang:prisma decode:true\">sis.execute('firefox www.google.com.br');<\/pre>\n<p>retorna verdadeiro exit 0 \u00a0em caso de sucesso ou nulo exit: cod_erro em caso de falha<\/p>\n<h3 style=\"text-align: center;\">sis.saia()<\/h3>\n<p>Fecha a execu\u00e7\u00e3o do programa e devolve um n\u00famero de retorno para o sistema operacional:<\/p>\n<pre class=\"lang:prisma decode:true\">sis.saia( 0 ); \/\/fecha o programa e retorna zero ao sistema operacional<\/pre>\n<h3 class=\"\" style=\"text-align: center;\">sis.obtvarambiente()<\/h3>\n<p>Retorna o valor de uma vari\u00e1vel de ambiente se ela estiver definida:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( sis.obtvarambiente( \"USER\")  ); \/\/no Linux\r\nimprima( sis.obtvarambiente( \"TEMP\" ) ); \/\/no Windows<\/pre>\n<h3 style=\"text-align: center;\">sis.remova()<\/h3>\n<p>Remove um arquivo, retorna verdadeiro caso tenha sucesso ou nulo msg_erro em caso de falha:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima (  sis.remova( \"teste.txt\" )  );<\/pre>\n<p style=\"text-align: left;\">Cuidado, o arquivo \u00e9 apagado definitivamente, n\u00e3o vai para a lixeira.<\/p>\n<h3 style=\"text-align: center;\">sis.renomeie()<\/h3>\n<p>Renomeia um arquivo, retorna verdadeiro ou falso + msg_erro;<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( sis.renomeie ( \"teste.txt\" , \"novo_nome.txt\" )  );<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">sis.nometmp( );<\/h3>\n<p>Sintaxe: \u00a0 \u00a0 \u00a0nome = sis.nometmp();<\/p>\n<p>Retorna um nome aleat\u00f3rio para ser usado como arquivo tempor\u00e1rio. O retorno depende do sistema:<\/p>\n<pre class=\"lang:default decode:true\">nome_arq = sis.nometmp(); imprima (nome_arq)<\/pre>\n<p>Sa\u00edda no Linux Ubuntu 14.04 =\u00a0\/tmp\/prisma_yShId3<\/p>\n<p>Windows Xp = \u00a0 \\s1fo.<\/p>\n<p>Voc\u00ea pode acrescentar extens\u00f5es se quiser usando o operador de concatenar strings o &#8220;..&#8221;:<\/p>\n<pre class=\"lang:default decode:true\">imprima( nome_arq .. \".ext\" )<\/pre>\n<p>sa\u00edda prov\u00e1vel: \u00a0 linux = \u00a0 \u00a0\u00a0\/tmp\/prisma_yShId3.ext<\/p>\n<p>no Windows = \u00a0\u00a0\\s1fo..ext \u00a0 \/\/no windows basta usar &#8216;ext&#8217; ao inv\u00e9s de &#8216;.ext&#8217; para n\u00e3o duplicar o ponto<\/p>\n<p>OBS.: Note que esse comando apenas gera uma string n\u00e3o um arquivo, voc\u00ea teria que usar a fun\u00e7\u00e3o es.abra e passar o nome tempor\u00e1rio gerado para ela.<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">sis.deflocal( \u00a0local [, tipo ] )<\/h3>\n<h3><\/h3>\n<p>Define o idioma (local) atual do programa.<\/p>\n<p>sintaxe: \u00a0 \u00a0sis.deflocal( \u00a0local [, tipo ] )<\/p>\n<p>Em que local \u00e9 o idioma a ser aplicado, a string idioma depende do sistema operacional;<\/p>\n<p>Se o primeiro e segundo par\u00e2metros forem omitidos, ent\u00e3o o retorno \u00e9 o idioma j\u00e1 definido:<\/p>\n<pre class=\"lang:default decode:true\">imprima ( sis.deflocal() ) \/\/-- sa\u00edda em Ubuntu 14.04 = pt_BR.UTF-8<\/pre>\n<p>\/\/sa\u00edda no Windows XP \u00a0 \u00a0= \u00a0Portuguese_Brazil.1252<\/p>\n<p>Se quis\u00e9ssemos definir o idioma seria :<\/p>\n<pre class=\"lang:default decode:true\">sis.deflocal ( \"pr_BR.UTF-8\" );<\/pre>\n<p>no Win :<\/p>\n<pre class=\"lang:default decode:true\">sis.deflocal('Portuguese_Brazil.1252' );<\/pre>\n<p>Note que se o segundo par\u00e2metro for evitado a defini\u00e7\u00e3o do idioma \u00e9 geral, mas podemos escolher o que mudar, por exemplo, se quis\u00e9ssemos mudar somente os caracteres:<\/p>\n<pre class=\"lang:prisma decode:true \">sis.deflocal( \"pt_BR.UTF-8\" , \"ctype\" ); \r\n\/\/s\u00f3 mudaria o teclado e os caracteres de sa\u00edda<\/pre>\n<p>Eis abaixo as op\u00e7\u00f5es dispon\u00edveis.<\/p>\n<pre class=\"lang:prisma decode:true \">\"collate\" \/\/ controla a ordem alfab\u00e9tica das strings;\r\n\r\n\"ctype\" \/\/ codifica\u00e7\u00e3o dos caracteres\r\n\r\n\"monetary\" \/\/ n\u00e3o influencia nada em prisma;\r\n\r\n\"numeric\"\/\/ formata\u00e7\u00e3o de n\u00fameros, \r\n\/\/ex. no ingl\u00eas separa-se casas decimais por ponto, no portugu\u00eas por v\u00edrgula\r\n\r\n\"time\" \/\/ formata\u00e7\u00e3o de datas e hor\u00e1rios\r\n\r\n\"all\" \/\/ativa todas as anteriores<\/pre>\n<p>OBS.: eu deixei em ingl\u00eas mesmo para n\u00e3o haver confus\u00e3o, visto que \u00e9 f\u00e1cil. No entanto, caso n\u00e3o se acostume copie o c\u00f3digo abaixo em seu programa e use as vari\u00e1veis personalizadas a seu gosto:<\/p>\n<pre class=\"lang:prisma decode:true \">string_formato = \"collate\";\r\n\r\ncaracteres = \"ctype\"\r\n\r\nmoeda = \"monetary\"\r\n\r\nnumerico = \"numeric\"\r\n\r\ntempo_formato = 'time' ;\r\n\r\ntudo = 'all'\r\n\r\n<\/pre>\n<p><span style=\"font-size: 15px; line-height: 1.5;\">use assim:<\/span><\/p>\n<pre class=\"lang:default decode:true \">sis.deflocal(\"pt_BR.UTF-8\" , caracteres ) ; \/\/ou \u00a0string_formato, numerico, moeda, tempo_formato, tudo;<\/pre>\n<h3 style=\"text-align: center;\">sis.durma( \u00a0milissegundos )<\/h3>\n<p>(Dispon\u00edvel em prisma a partir de prisma-1.0.91x &#8211; data 01-06-2015 )<\/p>\n<p>Pausa a execu\u00e7\u00e3o do programa por um tempo determinado em milissegundos<\/p>\n<p>ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">poe( \"Depois de 3 segundos o programa fechara \");\r\nsis.durma( 3000 ); \r\n\/\/aguarda 3 segundos antes do proximo comando\r\nsis.saia(0);<\/pre>\n<h2><\/h2>\n<h2><\/h2>\n<h2 style=\"text-align: center;\"><strong>Cap. 4 fun\u00e7\u00f5es de entrada e sa\u00edda padr\u00e3o &#8216;es&#8217;<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/Hopstarter-Sleek-Xp-Basic-Files.ico\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-988\" src=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/Hopstarter-Sleek-Xp-Basic-Files.ico\" alt=\"Hopstarter-Sleek-Xp-Basic-Files\" width=\"1\" height=\"1\" \/><\/a><a href=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/icos2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-989\" src=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/icos2.jpg\" alt=\"icos2\" width=\"151\" height=\"151\" srcset=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/01\/icos2.jpg 204w, https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/01\/icos2-150x150.jpg 150w\" sizes=\"auto, (max-width: 151px) 100vw, 151px\" \/><\/a><a href=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/Hopstarter-Sleek-Xp-Basic-Files.ico\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-988\" src=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/Hopstarter-Sleek-Xp-Basic-Files.ico\" alt=\"Hopstarter-Sleek-Xp-Basic-Files\" width=\"1\" height=\"1\" \/><\/a><a href=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/icos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-990\" src=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/icos.png\" alt=\"icos\" width=\"165\" height=\"165\" srcset=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/01\/icos.png 225w, https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/01\/icos-150x150.png 150w\" sizes=\"auto, (max-width: 165px) 100vw, 165px\" \/><\/a><\/p>\n<p>Essa biblioteca providencia fun\u00e7\u00f5es para abrir e manipular arquivos, escrever, ler;<\/p>\n<h3 style=\"text-align: center;\">es.escreva(&#8216;strings&#8217; , &#8230; );<\/h3>\n<p>Esta fun\u00e7\u00e3o escreve na tela preta do terminal no Linux ou cmd no Windows. Semelhante ao comando imprima() com a diferen\u00e7a de que este n\u00e3o pula linhas. Ex:<\/p>\n<pre class=\"lang:default decode:true\">es.escreva( 'Ola Mundo');\r\nes.escreva(\" Em Prisma\");<\/pre>\n<p><strong>Sa\u00edda = Ola Mundo Em Prisma<\/strong><\/p>\n<p>Se tiv\u00e9ssemos usado o imprima, sairia assim:<\/p>\n<p><strong>Ola Mundo<\/strong><\/p>\n<p><strong>Em Prisma\u00a0<\/strong><\/p>\n<p>Obs.: es.escreva aceita v\u00e1rios argumentos, ex.:<\/p>\n<pre class=\"lang:default decode:true \">es.escreva ( 'ola' , ' Mundo ' , ' em \u00a0Prisma')<\/pre>\n<h3 style=\"text-align: center;\">es.leia ( );<\/h3>\n<h3 style=\"text-align: center;\">\u00e9 o mesmo que leia()<\/h3>\n<p>Esta fun\u00e7\u00e3o \u00e9 usada para ler dados digitados pelo usu\u00e1rio, ou os dados de um arquivo;<\/p>\n<p>O segundo uso veremos adiante, agora veja como ler do teclado:<\/p>\n<pre class=\"lang:default decode:true\">es.escreva('Digite seu nome: ');\r\nnome = es.leia();\/\/o que o usu\u00e1rio digitar ser\u00e1 armazenado na vari\u00e1vel nome\r\nimprima('Seu nome \u00e9' , nome );\r\n\r\n<\/pre>\n<h2 style=\"text-align: center;\"><strong>LENDO E ESCREVENDO EM ARQUIVOS<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<hr \/>\n<h2 style=\"text-align: center;\"><strong>Primeiro modo:<\/strong><\/h2>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">\u00a0es.saida( )<\/h3>\n<p>Abre um arquivo de saida padr\u00e3o para escrita, ex.:<\/p>\n<pre class=\"lang:default decode:true\">\u00a0 \u00a0es.saida( \"C:\\nomearquivo.txt\" ); \/\/abre o arquivo\r\n   es.escreva(\"primeira linha do arquivo\\n\" ; \/\/escreve uma linha\r\n   es.escreva(\"\\npulou uma linha\"); \/\/o escape \\n pula linhas na escrita\r\n   es.feche();\r\n\r\n<\/pre>\n<p>\/\/v\u00e1 at\u00e9 a pasta disco C:\\ e abra o arquivo criado &#8216;nomearquivo.txt&#8217; em um editor de sua prefer\u00eancia e veja as linhas gravadas.<\/p>\n<h3 style=\"text-align: center;\">es.entrada( )<\/h3>\n<p>Esta fun\u00e7\u00e3o abre um arquivo de entrada padr\u00e3o para leitura:<\/p>\n<pre class=\"lang:default decode:true\">es.entrada(\"C:\\nomearquivo.txt\");\r\nx = es.leia(\"*t\"); \/\/colocando o \"*t\" o arquivo \u00e9 lido inteiro\r\nes.feche();\r\nimprima(x); \/\/imprime o conte\u00fado do arquivo.<\/pre>\n<h3 style=\"text-align: center;\">es.linhas( )<\/h3>\n<p>Essa fun\u00e7\u00e3o retorna um iterador para usar com o comando &#8216;para&#8217;, percorrendo todas as linhas de um arquivo:<\/p>\n<p>ex.:<\/p>\n<pre class=\"lang:default decode:true\">para lin em es.linhas('C:\\nomearquivo.txt') \u00a0inicio\r\n   imprima( lin );\r\nfim\r\n<\/pre>\n<p>No exemplo acima, ser\u00e1 impressa cada linha do arquivo. Se preferir pode armazenar em uma vari\u00e1vel string ou tabela.:<\/p>\n<pre class=\"lang:default decode:true\">tab = {};\r\ni = 1;\r\npara lin em es.linhas('C:\\nomearquivo.txt') \u00a0inicio\r\n   tab[i] = lin;\r\ni = i + 1;\r\nfim<\/pre>\n<h3 style=\"text-align: center;\">es.feche( )<\/h3>\n<p>Fecha um arquivo padr\u00e3o aberto:<\/p>\n<pre class=\"lang:default decode:true\">es.entrada('C:\\nomearquivo.txt');\/\/abre o arquivo para leitura\r\n x = es.leia\"*t\"; \/\/le todo o arquivo\r\nes.feche(); \/\/fecha o arquivo para disponibilizar o conteudo\r\nimprima(x); \/\/imprime o conteudo de x (que \u00e9 o arquivo lido);<\/pre>\n<hr \/>\n<h2 style=\"text-align: center;\"><strong>LENDO E ESCREVENDO EM ARQUIVOS<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: center;\"><strong>Segundo modo:<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">es.abra( )<\/h3>\n<p>&nbsp;<\/p>\n<p>Sintaxe: \u00a0objeto_arquivo = \u00a0es.abra( &#8216;nomearquivo&#8217; , &#8216;modo&#8217;) ;<\/p>\n<p>em que nome arquivo \u00e9 o caminho absoluto ou o relativo do arquivo, e modo pode ser:<\/p>\n<p><strong>&#8216;leitura&#8217;<\/strong> \u00a0 &#8212; \u00a0 para ler um arquivo<\/p>\n<p><strong>&#8216;escrita&#8217;<\/strong> &#8212; para escrever no arquivo, apagando o conte\u00fado original<\/p>\n<p><strong>&#8216;leiturabin&#8217;<\/strong> &#8212; leitura bin\u00e1ria<\/p>\n<p><strong>&#8216;escritabin&#8217;<\/strong> \u00a0&#8212; escrita bin\u00e1ria, apaga o conte\u00fado original<\/p>\n<p><strong>&#8216;adicao&#8217;<\/strong> \u00a0&#8212; \u00a0 escreve no final do arquivo, n\u00e3o apaga o conte\u00fado original<\/p>\n<p>ex.:<\/p>\n<h3 style=\"text-align: center;\">Escrevendo<\/h3>\n<pre class=\"lang:default decode:true\">arq \u00a0= \u00a0es.abra('C:\\nomearquivo' , 'escrita');\r\n     arq:escreva(\"ola mundo\" , \" em Prisma\\n\"); \/\/ o escape \\n pula para outra linha\r\narq:feche();<\/pre>\n<p><strong>Note<\/strong> que neste caso criamos uma vari\u00e1vel que herda os m\u00e9todos escreva e feche;<\/p>\n<p><strong>OBS.:<\/strong> n\u00e3o esque\u00e7a de usar os dois pontos para acessar os m\u00e9todos do objeto aberto.<\/p>\n<h3 style=\"text-align: center;\">Lendo<\/h3>\n<p>&#8216;<\/p>\n<pre class=\"lang:default decode:true\">arq \u00a0= \u00a0es.abra('C:\\nomearquivo' , 'leitura');\r\n     var_conteudo = arq:leia(\"*t\"); \/\/com o \"*t\" todo o arquivo \u00e9 lido de uma vez\r\narq:feche();\r\n\r\nimprima( var_conteudo );  \/\/imprime o conte\u00fado lido do arquivo.<\/pre>\n<h3 style=\"text-align: center;\">Adicionando<\/h3>\n<pre class=\"lang:default decode:true\">arq \u00a0= \u00a0es.abra('C:\\nomearquivo' , 'adicao');\r\n     arq:escreva(\"ola mundo\" , \" em Prisma\\n\"); \/\/ o escape \\n pula para outra linha\r\narq:feche();<\/pre>\n<p>Semelhante ao modo &#8216;escrita&#8217; com a diferen\u00e7a que esse adiciona no fim do arquivo a grava\u00e7\u00e3o, e n\u00e3o apaga o conte\u00fado original.<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: center;\"><strong>Cap. 5 fun\u00e7\u00f5es da biblioteca mat &#8211; trigonometria e aritm\u00e9tica<br \/>\n<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/trigonometria.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1060\" src=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/01\/trigonometria.png\" alt=\"trigonometria\" width=\"230\" height=\"168\" \/><\/a><\/p>\n<p>Suas fun\u00e7\u00f5es ficam na tabela &#8216;mat&#8217;<\/p>\n<p>Muito importante para realizar opera\u00e7\u00f5es trigonom\u00e9tricas e aritm\u00e9ticas, como obter o arco tangente, o co-seno, exponencia\u00e7\u00e3o, absoluto, m\u00f3dulo(resto), raiz quadrada etc.<\/p>\n<p>Vamos come\u00e7ar ent\u00e3o!<\/p>\n<h3 style=\"text-align: center;\">\u00a0mat.absoluto(\u00a0 n );<\/h3>\n<p>Retorna o valor absoluto de n. Veja:<\/p>\n<pre class=\"lang:prisma decode:true\"> imprima( mat.absoluto(5) , mat.absoluto(-5) );\r\n\/\/sa\u00edda =   5<\/pre>\n<p>N\u00e3o quero aprofundar em matem\u00e1tica, portanto somente farei a descri\u00e7\u00e3o da sintaxe e retorno das fun\u00e7\u00f5es, ok!<\/p>\n<h3 style=\"text-align: justify;\"><\/h3>\n<h3 style=\"text-align: center;\">mat.arcocosseno( n )<\/h3>\n<p>Retorna o arco cosseno de n (em radianos);<\/p>\n<p>ex.:<\/p>\n<pre class=\"lang:prisma decode:true\"> imprima( mat.arcocosseno(0.3) )\r\n\/\/ saida: 1,2661036727795\r\n imprima( mat.arcocosseno(1) )\r\n\/\/sa\u00edda: 0\r\n imprima( mat.arcocosseno(2) )\r\n\/\/sa\u00edda: nan\r\n imprima( mat.arcocosseno(-1) )\r\n\/\/sa\u00edda: 3,1415926535898<\/pre>\n<h3 style=\"text-align: center;\">mat.arcoseno( n )<\/h3>\n<p>Retorna o arco seno de n (em radianos);<\/p>\n<p>Ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( mat.arcoseno(1) )\r\n\/\/sa\u00edda: 1,5707963267949\r\nimprima( mat.arcoseno(2) )\r\n\/\/sa\u00edda: nan\r\nimprima( mat.arcoseno(0) )\r\n\/\/sa\u00edda: 0\r\nimprima( mat.arcoseno(-1) )\r\n\/\/sa\u00edda: -1,5707963267949\r\nimprima( mat.arcoseno(0.3) )\r\n\/\/sa\u00edda: 0,3046926540154\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\">mat.arcotangente( n )<\/h3>\n<p>Retorna o arco tangente de n (em radianos);<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( mat.arcotangente(9) )\r\n\/\/sa\u00edda: 1,460139105621\r\nimprima( mat.arcotangente(1) )\r\n\/\/sa\u00edda: 0,78539816339745\r\nimprima( mat.arcotangente(3) )\r\n\/\/sa\u00edda: 1,2490457723983<\/pre>\n<h3 style=\"text-align: center;\">mat.arcotangente2( n1 , n2 )<\/h3>\n<p>Retorna o arco tangente de n1\/n2 (em radianos), no entanto, utiliza o sinal dos dois par\u00e2metros para achar o quadrante do resultado. (Tamb\u00e9m trata corretamente o caso de\u00a0x ser zero.)<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( mat.arcotangente2( 2 , 4) )\r\n\/\/sa\u00edda: 0,46364760900081\r\nimprima( mat.arcotangente2( 1 , 5) )\r\n\/\/sa\u00edda: 0,19739555984988\r\nimprima( mat.arcotangente2( 4 , 8) )\r\n\/\/sa\u00edda: 0,46364760900081<\/pre>\n<h3 style=\"text-align: center;\">mat.arredonde ( n )<\/h3>\n<p>Retorna o n caso seja inteiro, ou arredonda para mais caso seja fracion\u00e1rio. Veja:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( mat.arredonde( 9.2 )  )\r\n\/\/10\r\nimprima( mat.arredonde( 1.4 ) )\r\n\/\/2\r\n\u00a0imprima( mat.arredonde( 4 ) )\r\n\/\/4<\/pre>\n<h3 style=\"text-align: center;\">mat.cosseno ( n )<\/h3>\n<p>Retorna o cosseno de n ( n deve estar em radianos).<\/p>\n<pre class=\"lang:prisma decode:true \">imprima( mat.cosseno(0.5) )\r\n\/\/0,87758256189037\r\nimprima( mat.cosseno(0.9) )\r\n\/\/0,62160996827066\r\nimprima( mat.cosseno(1) )\r\n\/\/0,54030230586814\r\nimprima( mat.cosseno(2) )\r\n\/\/ -0,41614683654714<\/pre>\n<h3 style=\"text-align: center;\">mat.cossenoh ( n )<\/h3>\n<p>Retorna o cosseno hiperb\u00f3lico de n.<\/p>\n<pre class=\"lang:prisma decode:true\"> imprima( mat.cossenoh(9) )\r\n\/\/4051,5420254926\r\nimprima( mat.cossenoh(1) )\r\n\/\/1,5430806348152\r\nimprima( mat.cossenoh(-2) )\r\n\/\/3,7621956910836<\/pre>\n<h3 style=\"text-align: center;\">mat.emGrau ( r )<\/h3>\n<p>Converte r que est\u00e1 em radianos para graus.<\/p>\n<pre class=\"lang:prisma decode:true \"> x = mat.arcocosseno(0.9)\r\nimprima( x , mat.emGrau(x) )\r\n\/\/0,45102681179626    25,841932763167<\/pre>\n<h3 style=\"text-align: center;\">mat.exp ( n )<\/h3>\n<p style=\"text-align: justify;\">Retorna o n\u00famero de euler elevado a n (e^n). Euler e um n\u00famero irracional, aproximadamente \u00e9 2,718281828459045, ou, \u00e0s vezes apenas 2,718281828459).<br \/>\nO n\u00famero de Euler \u00e9 comum ser chamado de <strong class=\"bbc\">e.<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">imprima(\r\n  \"o numero 2,718281828459045 elevado a 3 = \" ,\r\n  mat.exp(3)\r\n\r\n)\r\n\/\/o numero 2,718281828459045 elevado a 3 =     20,085536923188<\/pre>\n<h3 style=\"text-align: center;\">mat.corte ( n )<\/h3>\n<p>Arredonta por baixo, se 2.5, por exemplo, ser\u00e1 2, ou quando o n\u00famero for inteiro retorna o pr\u00f3prio n\u00famero.<\/p>\n<pre class=\"lang:prisma decode:true\">imprima(  mat.corte(1.3) , mat.corte( 2.9 ) , mat.corte(5)   );\r\n\/\/1        2         5<\/pre>\n<h3 style=\"text-align: center;\">mat.cmodulo ( n1 , n2 )<\/h3>\n<p>Retorna o resto da divis\u00e3o de n1 por n2 que arredonda o quociente em dire\u00e7\u00e3o a zero.<\/p>\n<pre class=\"lang:prisma decode:true \">imprima( mat.cmodulo ( 5 , 3) , 5%3)\r\n \/\/2    2\r\nimprima( mat.cmodulo ( 10 , 3) , 10%3)\r\n\/\/1    1<\/pre>\n<h3 style=\"text-align: center;\">mat.frexp ( n )<\/h3>\n<p>Retorna\u00a0<strong>m<\/strong> e\u00a0<strong>e<\/strong> tais que <strong>n = m2^e<\/strong>,\u00a0<strong>e<\/strong> \u00e9 um inteiro e o valor absoluto de\u00a0<strong>m<\/strong> est\u00e1 no intervalo\u00a0<strong>[0.5, 1)<\/strong> (<strong>ou zero quando\u00a0x \u00e9 zero<\/strong>).<\/p>\n<pre class=\"lang:prisma decode:true \">_M , _E = mat.frexp(9)\r\n imprima(  _M , _E , _M*2^_E )\r\n\/\/  0,5625      4      9<\/pre>\n<h3 style=\"text-align: center;\">mat.infinito<\/h3>\n<p>Na verdade n\u00e3o \u00e9 uma fun\u00e7\u00e3o \u00e9 um dado que representa o valor de\u00a0HUGE_VAL, um valor maior ou igual a qualquer outro valor num\u00e9rico.<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( mat.infinito)\r\n\/\/  inf\r\nimprima( 10 &lt; mat.infinito )\r\n\/\/ verdadeiro\r\nimprima( mat.infinito &gt; 1000000000 );\r\n\/\/verdadeiro\r\nimprima( mat.infinito &gt; mat.infinito )\r\n\/\/falso\r\nimprima( mat.infinito &lt;\u00a0 mat.infinito )\r\n\/\/falso\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\">mat.ldexp( m , e )<\/h3>\n<p>Retorna\u00a0m2^e (<strong>m<\/strong> vezes 2 evevado a <strong>e. e<\/strong> deve ser um inteiro).<\/p>\n<p>O inverso de <strong>mat.frexp(n).<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">x = 8\r\nimprima( mat.frexp( 8 )  )\r\n\/\/ 0,5    4\r\nimprima( mat.ldexp( 0.5 , 4 ) )\r\n\/\/8<\/pre>\n<h3 style=\"text-align: center;\">mat.log( n )<\/h3>\n<p>Retorna o logaritmo natural de n. Isto \u00e9,\u00a0retorna a pot\u00eancia em que o n\u00famero de Euler (<strong class=\"bbc\">2,718281828459045<\/strong>) precisa estar elevado para que resulte no seu logaritmo.<\/p>\n<pre class=\"lang:prisma decode:true\">\u00a0x = 2.718281828459045\r\n r = x^3 \/\/x elevado a 3\r\n imprima( r )\r\n\/\/ 20,085536923188\r\nimprima( mat.log(r) )\r\n\/\/ 3\r\n\/\/retornou 3 pois \u00e9 preciso o n\u00famero\r\n\/\/de Euler ( x ) se elevar a 3 para dar\r\n\/\/ r.\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">mat.log10( n )<\/h3>\n<p>Retorna o logaritmo base-10 de n. Ou seja, retorna o valor que dez precisa ser elevado para dar <strong>n.<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">imprima( mat.log10(100 ) )\r\n\/\/ 2     dez elevado a 2 \u00e9 100\r\n\r\nimprima( mat.log10( 900 ) )\r\n\/\/ 2.9542425094393    \r\n\/\/dez elevado a 2.954245094393 \u00e9 900\r\n\r\nimprima( mat.log10(1000 ) )\r\n\/\/ 3\r\n\/\/ 10 elevado a 3 \u00e9 1000<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">mat.maximo( &#8230; )<\/h3>\n<p>Retorna o valor m\u00e1ximo entre os seus argumentos.<\/p>\n<pre class=\"lang:prisma decode:true\">imprima ( mat.maximo( 1 , 3 , 5 , 6 , 100 , -1 , -1000 , 500 )  )\r\n\r\n\/\/ 500<\/pre>\n<h3 style=\"text-align: center;\">mat.minimo( &#8230; )<\/h3>\n<p>Retorna o valor m\u00ednimo entre os seus argumentos.<\/p>\n<pre class=\"lang:prisma decode:true\">imprima ( mat.minimo( 1 , 3 , 5 , 6 , 100 , -1 , -1000 , 500 )  )\r\n\r\n\/\/ -1000<\/pre>\n<h3 style=\"text-align: center;\">mat.separe( n )<\/h3>\n<p style=\"text-align: justify;\">O retorno \u00e9 duplo, considerando <strong>n<\/strong> um n\u00famero fracion\u00e1rio (1.5 por exemplo), ser\u00e3o retornadas a parte integral de n (1) e a parte fracion\u00e1ria de n (0.5).<\/p>\n<pre class=\"lang:prisma decode:true\">int , frac = mat.separe( 2.9999 )\r\nimprima( int , frac )\r\n\/\/ 2    0,9999\r\n\r\n\/\/quando o n\u00famero \u00e9 inteiro\r\nimprima( mat.separe( 2 ) )\r\n2\u00a0\u00a0 \u00a00\r\n\/\/ a parte fracion\u00e1ria \u00e9 zero<\/pre>\n<h3 style=\"text-align: center;\">mat.pi<\/h3>\n<p>N\u00e3o \u00e9 fun\u00e7\u00e3o, representa o valor de pi:<\/p>\n<pre class=\"lang:prisma decode:true\"> imprima ( mat.pi );\r\n \/\/ 3,1415926535898\r\n\r\nimprima( mat.separe( mat.pi ) )\r\n\/\/ 3    0,14159265358979\r\n\/\/acontece a aproxima\u00e7\u00e3o ao \r\n\/\/usar a fun\u00e7\u00e3o mat.separe<\/pre>\n<h3 style=\"text-align: center;\">mat.elevado( n1 , n2 )<\/h3>\n<p>Retorna n1^n2 (n1 elevado a n2 ). Esta opera\u00e7\u00e3o \u00e9 poss\u00edvel com o sinal de ^ assim como se pode somar n1+n2 direto em prisma, pode-se usar n1^n2 diretamente.<\/p>\n<pre class=\"lang:prisma decode:true \"> imprima( mat.elevado(10 , 2 ) , 10^2   );\r\n\/\/ 100    100\r\n\/\/ 10^\u00b2 = 100<\/pre>\n<h3 style=\"text-align: center;\">rad = mat.emRadianos( graus )<\/h3>\n<p>Converte de graus para radianos:<\/p>\n<pre class=\"lang:prisma decode:true\"> rad = mat.arcocosseno(0.9) \r\n imprima(rad)\/\/radianos\r\n\/\/ 0,45102681179626\r\ngrau = mat.emGrau( rad );\/\/graus\r\nimprima( grau ) \r\n\/\/ 25,841932763167\r\nrad2 = mat.emRadianos( grau )\r\nimprima( rad2 ) \/\/radianos novamente\r\n\/\/ 0,45102681179626<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">mat.randonico( inicial ,\u00a0 final )<\/h3>\n<p>Retorna um inteiro pseudo-aleat\u00f3rio no intervalo inicial e final.<\/p>\n<pre class=\"lang:prisma decode:true\"> imprima( mat.randonico( 1 , 5 ) )\r\n\/\/5\r\n imprima( mat.randonico( 1 , 5 ) )\r\n\/\/2\r\nimprima( mat.randonico( 1 , 5 ) )\r\n\/\/4\r\nimprima( mat.randonico( 1 , 5 ) )\r\n\/\/4\r\nimprima( mat.randonico( 1 , 5 ) )\r\n\/\/5\r\nimprima( mat.randonico( 1 , 5 ) )\r\n\/\/1\r\nimprima( mat.randonico( 1 , 5 ) )\r\n\/\/2\r\nimprima( mat.randonico( 1 , 5 ) )\r\n\/\/4<\/pre>\n<p>Se omitido os par\u00e2metros inicial e final, o retorno \u00e9 um aleat\u00f3rio entre 0 e 1;<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/imprima( mat.randonico() )\r\n\/\/0,84018771715471\r\nimprima( mat.randonico() )\r\n\/\/ 0,39438292681909\r\nimprima( mat.randonico() )\r\n\/\/ 0,78309922375861\r\nimprima( mat.randonico() )\r\n\/\/0,79844003347607\r\nimprima( mat.randonico() )\r\n\/\/ 0,91164735793678\r\nimprima( mat.randonico() )\r\n\/\/ 0,19755136929338<\/pre>\n<p>Se passarmos apenas um argumento, o retorno ser\u00e1 um aleat\u00f3rio entre 1 at\u00e9 o argumento passado.<\/p>\n<pre class=\"lang:prisma decode:true \">imprima( mat.randonico(9) )\r\n\/\/ 8\r\nimprima( mat.randonico(9) )\r\n\/\/4\r\nimprima( mat.randonico(9) )\r\n\/\/8\r\nimprima( mat.randonico(9) )\r\n\/\/ 8\r\nimprima( mat.randonico(9) )\r\n\/\/ 9\r\nimprima( mat.randonico(9) )\r\n\/\/ 2<\/pre>\n<h3 style=\"text-align: center;\">mat.xrandonico( n )<\/h3>\n<p>Define um n\u00famero gerador pseudo-rand\u00f4nico. Gerador igual produz sequ\u00eancias iguais:<\/p>\n<dl>\n<dt><\/dt>\n<dd>\n<pre class=\"lang:prisma decode:true\">mat.xrandonico(1234) \r\nimprima(  mat.randonico(), mat.randonico(), mat.randonico()   )\r\n\/\/ 0.12414929654836        0.0065004425183874      0.3894466994232\r\nmat.xrandonico(1234)\r\nimprima( mat.randonico(), mat.randonico(), mat.randonico()\r\n\/\/ 0.12414929654836        0.0065004425183874      0.3894466994232\r\n<\/pre>\n<\/dd>\n<\/dl>\n<p>Um \u00f3timo recurso para criar um gerador \u00e9 a fun\u00e7\u00e3o sis.tempo():<\/p>\n<dl>\n<dd>\n<pre class=\"\">mat.xrandonico( sis.tempo() )<\/pre>\n<\/dd>\n<\/dl>\n<h3 style=\"text-align: center;\">mat.seno( n )<\/h3>\n<p>Retorna o seno de n <em>( n\u00a0 deve estar em radianos).<\/em><\/p>\n<pre class=\"lang:prisma decode:true\">rad = mat.arcotangente( 9 )\r\nimprima( rad )\r\n\/\/ 1,460139105621\r\nseno = mat.seno( rad )\r\nimprima( seno )\r\n\/\/ 0,99388373467362<\/pre>\n<h3 style=\"text-align: center;\">mat.senoh( n )<\/h3>\n<p>Retorna o seno hiperb\u00f3lico de n.<\/p>\n<pre class=\"lang:prisma decode:true \">imprima( mat.senoh( 1 ) )\r\n\/\/ 1,1752011936438<\/pre>\n<h3 style=\"text-align: center;\">mat.raizquad ( n )<\/h3>\n<p>Retorna a raiz quadrada de n.<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( mat.raizquad( 100 )  );\r\n\/\/ 10<\/pre>\n<p>A mesma opera\u00e7\u00e3o pode ser feita com o ^(1\/2)<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( 100^(1\/2) );\r\n\/\/ 10<\/pre>\n<p>Raiz c\u00fabica:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( 1000^(1\/3) );\r\n\/\/ 10<\/pre>\n<p>Raiz qu\u00e1rtica, e assim \u00a0por diante:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( 16^(1\/4) );\r\n\/\/ 2\r\nimprima( 32^(1\/5)  );\r\n\/\/2\r\n\r\n x = 3 ^ 9 \/\/3 elevado a 9\r\n imprima(x)\r\n \/\/  19683\r\n imprima( x^(1\/9) )\r\n \/\/ 3\r\n x = 2^1000 \/\/2 vezes 2 1000 vezes)\r\n imprima(x)\r\n\/\/ 1,0715086071863e+301\r\n imprima( x^(1\/1000) ) \/\/raiz mil\u00e9sima de x:\r\n\/\/ 2<\/pre>\n<h3 style=\"text-align: center;\">mat.raiz ( n , z )<\/h3>\n<p>Retorna a raiz de \u00edndice &#8216;z&#8217; de n:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( \u00a0\"raiz c\u00fabica de 8 = \" , mat.raiz( 8 , 3 ) )\r\n\/\/ 2\r\nimprima( \"raiz de indice 10 de 1024 = \" , mat.raiz(1024,10) );\r\n\/\/2      \r\n\/\/ 2 vezes 2, 10 vezes \u00e9 1024<\/pre>\n<h3 style=\"text-align: center;\">mat.tangente ( n )<\/h3>\n<p>Retorna a tangente de n \u00a0( n deve estar em radianos).<\/p>\n<pre class=\"lang:prisma decode:true\">rad = mat.arcocosseno(0.6)\r\nimprima(rad) \r\n\/\/ 0,92729521800161\r\ntan = mat.tangente(rad)\r\nimprima(tan)\r\n\/\/1,3333333333333\r\n<\/pre>\n<h3 style=\"text-align: center;\">mat.tangenteh ( n )<\/h3>\n<p>Retorna a tangente hiperb\u00f3lica de n.<\/p>\n<pre class=\"lang:prisma decode:true \">imprima( mat.tangenteh(1) )\r\n\/\/ 0,76159415595576<\/pre>\n<h2 style=\"text-align: center;\"><\/h2>\n<hr \/>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><strong>Cap. 6 Fun\u00e7\u00f5es da biblioteca tabela<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>Tabela \u00e9 um poderoso recurso de manipula\u00e7\u00e3o e descri\u00e7\u00e3o de dados em Prisma. Com ela \u00e9 poss\u00edvel fazer uma simples matriz como em C, ou at\u00e9 mesmo algo mais complexo e de forma simples como um registro.<\/p>\n<p>Tabelas em Prisma n\u00e3o precisam ser declaradas com tamanho fixo, s\u00e3o din\u00e2micas e flex\u00edveis sempre aceitando mais um elemento. Ex:<\/p>\n<pre class=\"lang:prisma decode:true\">tab = {}; \/\/iniciando uma tabela vazia;\r\n\r\n\/\/adicionando elementos na tabela:\r\n\r\ntab [1] = 'segunda';\r\ntab[2] = 'ter\u00e7a';\r\ntab.ano = 2015;\r\ntab.mes = 'maio';\u00a0\r\n\r\n\/\/iniciando uma tabela j\u00e1 com elementos definidos:\r\ntab2 = { 'segunda' , 'terca' , ano = 2015 , mes = 'maio' };\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>A biblioteca tabela oferece facilidades para manipular esse tipo de dado. Seus m\u00e9todos est\u00e3o contidos no nome &#8220;tabela.&#8221;<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">tabela.concat( tabela [,sep [ , inicial [ , final ]]] )<\/h3>\n<p>Concatena ( une ) os elementos da tabela.<\/p>\n<p>Omitindo os demais par\u00e2metros:<\/p>\n<pre class=\"lang:prisma decode:true\">tab = { \"Ola \" , \"Mundo \" , 2015 };\r\n\r\nimprima( tabela.concat( tab ) \u00a0);\r\n\r\n\/\/Ola Mundo 2015\r\n\r\n<\/pre>\n<p>Usando os demais par\u00e2metros:<\/p>\n<pre class=\"\">tabela.concat({ 1, 2, \"tres\", 4, \"cinco\" }, \", \")\r\n\/\/separador (v\u00edrgula)\r\n\/\/ 1, 2, tres, 4, cinco\r\ntabela.concat({ 1, 2, \"tres\", 4, \"cinco\" }, \", \", 2)\r\n\/\/separador mais ponto inicial a partir do segundo \u00edndice da tabela.\r\n\/\/ 2, tres, 4, cinco\r\ntabela.concat({ 1, 2, \"tres\", 4, \"cinco\" }, \", \", 2, 4);\r\n\/\/separador, delimitador inicial e final(do 2 ao 4 \u00edndice);\r\n\/\/2, tres, 4<\/pre>\n<p><span style=\"font-size: 15px; line-height: 1.5;\">\u00a0<\/span><\/p>\n<h3 style=\"text-align: center;\">tabela.ordene( tabela );<\/h3>\n<p>Coloca os \u00edndices em ordem crescente:<\/p>\n<pre class=\"lang:prisma decode:true \">\u00a0tab = {9,7,8,1,6,2,5,4,3,0}\r\n\u00a0imprima( tabela.concat( tab , ', ' ) )\r\n\/\/ 9, 7, 8, 1, 6, 2, 5, 4, 3, 0\r\ntabela.ordene( tab );\r\nimprima( tabela.concat( tab , ', ' ) );\r\n\/\/ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\r\n\r\n\r\n t = {'x' , 'a' , 'd' , 'c' , 'b'}\r\ntabela.ordene( t )\r\nimprima( tabela.concat( t , ', ') )\r\n\/\/ a, b, c, d, x\r\n<\/pre>\n<p>A ordena\u00e7\u00e3o da tabela pode ser customizada por uma fun\u00e7\u00e3o como segundo par\u00e2metro, esta fun\u00e7\u00e3o deve retornar um valor boolean ( verdadeiro ou falso ). O retorno padr\u00e3o \u00e9 <strong>a&lt;b<\/strong>, veja:<\/p>\n<dl>\n<dt><\/dt>\n<dd>\n<pre class=\"lang:prisma decode:true\"> t = { 3,2,5,1,4 }\r\ntabela.ordene(t, funcao(a,b) retorne a &lt; b fim)\r\nimprima(  tabela.concat(t, \", \")  );\r\n\/\/ 1, 2, 3, 4, 5        \r\n<\/pre>\n<\/dd>\n<\/dl>\n<p>ou defina <strong>\u00a0a&gt;b<\/strong> para ordenar em decrescente:<\/p>\n<dl>\n<dt><\/dt>\n<dd>\n<pre class=\"lang:prisma decode:true \">t = { 3,2,5,1,4 };\r\ntabela.ordene(t, funcao(a,b) retorne a &gt; b fim );\r\nimprima( table.concat(t, \", \")  );\r\n\/\/ 5, 4, 3, 2, 1\r\n<\/pre>\n<\/dd>\n<\/dl>\n<h3 style=\"text-align: center;\">tabela.insira (tabela , [pos,] valor );<\/h3>\n<p>Insere um valor em uma tabela. Se uma posi\u00e7\u00e3o for dada, \u00a0o valor \u00e9 inserido no lugar do valor atual que sobe uma posi\u00e7\u00e3o no \u00edndice:<\/p>\n<dl>\n<dt><\/dt>\n<dd>\n<pre class=\"\">t = { 1,3,\"quatro\" }\r\ntabela.insira(t, 2, \"dois\");\r\n\/\/insere \"dois\" na posicao antes do segundo elemento\r\nimprima( tabela.concat(t, \", \") );\r\n\/\/1, dois, 3, quatro\r\n<\/pre>\n<\/dd>\n<\/dl>\n<p>Se a posi\u00e7\u00e3o n\u00e3o for especificada, o novo valor \u00e9 inserido no fim da tabela<\/p>\n<dl>\n<dt><\/dt>\n<dd>\n<pre class=\"\">t = { 1,\"dois\" , 3 , \"quatro\" };\r\ntabela.insira(t, 5);\r\nimprima(  table.concat(t, \", \")  );\r\n1, dois, 3, quatro, 5\r\n<\/pre>\n<\/dd>\n<\/dl>\n<p>Quando um novo valor \u00e9 inserido em uma tabela, ela atualiza o tamanho e a sequ\u00eancia dos elementos:<\/p>\n<dl>\n<dt><\/dt>\n<dd>\n<pre class=\"\">t = { 1,\"dois\",3 }; \/\/criando a tabela\r\nimprima( #t ); \/\/imprimido o tamanho da tabela\r\n\/\/ 3\r\n\/\/percorrendo em imprimindo os indices:\r\npara indice , valor em ipares( t ) inicio\r\n   imprima( indice , valor );\r\nfim\r\n\/**\r\n1       1\r\n2       dois\r\n3       3\r\n**\/\/\r\n\r\ntabela.insira(t, 1, \"novo_valor\");\r\n\/\/novo_valor inserido no indice 1;\r\n\r\nimprima( tabela.concat(t, \", \") );\r\n\r\nimprima( # t  );\/\/tamanho atual da tabela\r\n\/\/4\r\npara indice, valor em ipares( t ) inicio\r\n   imprima( indice , valor );\r\nfim\r\n\/**\r\n1       novo_valor\r\n2       1\r\n3       dois\r\n4       3\r\n\r\n**\/\/\r\n\/\/valores foram deslocados para um \u00edndice acima\r\n\/\/para dar espa\u00e7o ao novo_valor<\/pre>\n<\/dd>\n<\/dl>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">tabela.remova(tabela [, pos])<\/h3>\n<p>Remove um elemento da tabela na posi\u00e7\u00e3o definida e retorna o elemento removido. \u00a0Se a posi\u00e7\u00e3o n\u00e3o for definida o padr\u00e3o \u00e9 o \u00faltimo elemento:<\/p>\n<dl>\n<dt><\/dt>\n<dd>\n<pre class=\"lang:prisma decode:true\">t = { 1,\"dois\",3,\"quatro\" };\/\/cria a tabela\r\nimprima( #t ); \/\/tamanho da tabela\r\n\/\/ 4\r\npara i , v em ipares( t ) inicio\r\n   imprima( i , v );\r\nfim\r\n\/**\r\n1       1\r\n2       dois\r\n3       3\r\n4       quatro\r\n**\/\/\r\nremovido = tabela.remova(t,2); \r\n\/\/remove o \u00edndice 2 e o retorna:\r\n\/\/ dois\r\n\r\npara i , v em ipares ( t )  inicio\r\n  imprima( i , v );\r\nfim\r\n\/**\r\n1       1\r\n2       3\r\n3       quatro\r\n**\/\/\r\nimprima( #t ); \/\/tamanho atualizado\r\n\/\/ 3<\/pre>\n<\/dd>\n<\/dl>\n<h1><\/h1>\n<h1><\/h1>\n<h3 style=\"text-align: center;\">tabela.maxn( tabela );<\/h3>\n<p>Retorna o n\u00famero de elementos da tabela:<\/p>\n<pre class=\"lang:prisma decode:true\">t = {123,23,3,2,3,3,4,5,5,5,6,4,4,2,43,0}\r\nimprima( tabela.maxn(t) )\r\n\/\/ 16<\/pre>\n<p>ou use #t<\/p>\n<h3 style=\"text-align: center;\">tabela.empacote( &#8230; );<\/h3>\n<p>Transforma o n\u00famero vari\u00e1vel de argumentos &#8216;&#8230;&#8217; em tabela, passando o retorno a uma vari\u00e1vel.<\/p>\n<pre class=\"lang:prisma decode:true\">tab = tabela.empacote( 12, 234, 2345, 465, 213, 2, 44);\r\n\r\nimprima( tabela.concat( tab , ', ' ) \u00a0);\r\n\r\n\/\/ \u00a012, 234, 2345, 465, 213, 2, 44\r\n\r\n\/\/o mesmo pode ser feito da seguinte forma:\r\nfuncao Empacote ( ... )\r\n   retorne {...};\r\nfim\r\n\r\ntab2 = Empacote( 1 , 2 , 3 , 4 , 5 , 6 , 99 , 100 );\r\nimprima( tabela.concat( tab2 , ', ' )  );\r\n\/\/ 1,  2,  3,  4,  5,  6,  99,   100\r\n\r\n<\/pre>\n<h1><\/h1>\n<h3 style=\"text-align: center;\">tabela.desempacote( tabela );<\/h3>\n<p>O inverso da fun\u00e7\u00e3o anterior, transforma uma tabela em argumentos variados<\/p>\n<pre class=\"lang:prisma decode:true\">tab = { 12, 234, 2345, 465, 213, 2, 44 };\r\n\r\nimprima( tabela.desempacote( tab )   \u00a0);\r\n\r\n\/\/ \u00a012     234     2345     465    213     2     44<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 style=\"text-align: center;\"><span style=\"color: #800000;\">FIM<\/span><\/h1>\n<p>&nbsp;<\/p>\n<p>Bom, espero que tenha sido \u00fatil. Qualquer d\u00favida poste nos coment\u00e1rios, <a href=\"http:\/\/linguagemprisma.net\/prisma_forum\/\" target=\"_blank\">ou no f\u00f3rum<\/a>.<\/p>\n<p>Valeu, at\u00e9 logo.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unidade II &#8211; Biblioteca padr\u00e3o Introdu\u00e7\u00e3o &nbsp; Prisma, assim como outras linguagens, possui fun\u00e7\u00f5es predefinidas, e que ficam organizadas em conjuntos chamados\u00a0de biblioteca.\u00a0Bibliotecas, tamb\u00e9m chamadas libs, podem ser internas ou\u00a0externas. As internas\u00a0s\u00e3o as embutidas no interpretador Prisma, e por isso n\u00e3o precisam ser importadas com o comando &#8216;inclua&#8217;. Todas as outras bibliotecas externas que precisam&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"open","template":"tpl-full-width.php","meta":{"footnotes":""},"class_list":["post-1309","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages\/1309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/comments?post=1309"}],"version-history":[{"count":16,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages\/1309\/revisions"}],"predecessor-version":[{"id":2613,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages\/1309\/revisions\/2613"}],"wp:attachment":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/media?parent=1309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}