{"id":544,"date":"2015-01-12T16:48:22","date_gmt":"2015-01-12T16:48:22","guid":{"rendered":"http:\/\/linguagemprisma.net\/?page_id=544"},"modified":"2017-05-01T13:48:21","modified_gmt":"2017-05-01T17:48:21","slug":"manual-basico","status":"publish","type":"page","link":"https:\/\/linguagemprisma.br4.biz\/blog\/manual-basico\/","title":{"rendered":"Manual b\u00e1sico"},"content":{"rendered":"<h1 style=\"text-align: center;\"><strong>INTRODU\u00c7\u00c3O \u00c0 LINGUAGEM PRISMA BR<\/strong><\/h1>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2014\/12\/cropped-prisma.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-6 aligncenter\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2014\/12\/cropped-prisma-300x194.png\" alt=\"cropped-prisma.png\" width=\"201\" height=\"130\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: right;\">Por Adalberto Amorim Felipe<\/h2>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1><\/h1>\n<h1><\/h1>\n<h1 style=\"text-align: center;\"><strong>fevereiro\/2016<\/strong><\/h1>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 style=\"text-align: center;\"><\/h1>\n<h1 style=\"text-align: center;\"><\/h1>\n<h1 style=\"text-align: center;\"><\/h1>\n<h1 style=\"text-align: center;\"><\/h1>\n<h1 style=\"text-align: center;\"><strong> Introdu\u00e7\u00e3o<\/strong><\/h1>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Este material \u00e9 para iniciantes, ou para quem tem dificuldades em adentrar nos conceitos t\u00e9cnicos da linguagem Prisma. Portanto, \u00e9 para ser lido com paci\u00eancia percorrendo em detalhes a linguagem, ou para ser consultado na parte que mais interessa. Ele come\u00e7a bem do b\u00e1sico mesmo e a tend\u00eancia \u00e9 ir ao avan\u00e7ado, espero que seja \u00fatil.<\/p>\n<p>&nbsp;<\/p>\n<h3>Em primeiro lugar voc\u00ea deve conhecer alguns aspectos sobre a linguagem Prisma:<\/h3>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">O que \u00e9 Prisma?<\/h3>\n<p>&nbsp;<\/p>\n<p>\u00c9 um conjunto que inclui:<\/p>\n<p>1 &#8211; linguagem de programa\u00e7\u00e3o e suas regras de comandos;<\/p>\n<p>2 &#8211; interpretador;<\/p>\n<p>3 &#8211; bibliotecas e arquivos externos.<\/p>\n<p><strong>Vejamos cada item anterior:<\/strong><\/p>\n<p style=\"text-align: center;\"><strong>linguagem de programa\u00e7\u00e3o e suas regras de comandos:<\/strong><\/p>\n<p style=\"text-align: justify;\">Digamos que qualquer linguagem possa ser inventada, basta voc\u00ea determinar as regras, as palavras reservadas fun\u00e7\u00f5es da biblioteca padr\u00e3o, enfim, o modo como escrev\u00ea-la, os s\u00edmbolos permitidos e para que servem, o que pode e o que n\u00e3o pode.<\/p>\n<p style=\"text-align: justify;\">\u00c9 exatamente as regras e mecanismos de funcionamento da linguagem que voc\u00ea deve dominar para fazer os programas, os aspectos da linguagem. Esses aspectos s\u00e3o a ess\u00eancia da linguagem e Prisma tem isso, podemos citar uma caracter\u00edstica importante dela que possui comandos em portugu\u00eas ao inv\u00e9s do ingl\u00eas que \u00e9 de costume.<\/p>\n<p style=\"text-align: justify;\">Definidos teoricamente os aspectos da linguagem, basta criar um meio de faz\u00ea-la funcionar, afinal, n\u00e3o queremos algo na teoria somente mas na pr\u00e1tica tamb\u00e9m.<\/p>\n<p style=\"text-align: center;\"><strong>Interpretador:<\/strong><\/p>\n<p style=\"text-align: justify;\">Diversas linguagens possuem como mecanismo de execu\u00e7\u00e3o a compila\u00e7\u00e3o do c\u00f3digo-fonte para c\u00f3digo nativo do processador.<\/p>\n<p style=\"text-align: justify;\">Prisma \u00e9 diferente, ela possui um mecanismo de interpreta\u00e7\u00e3o, isto \u00e9, h\u00e1 o programa feito em C que interpreta os comandos do c\u00f3digo-fonte ou c\u00f3digo-byte. O interpretador pode ser chamado da seguinte forma por linha de comando:<\/p>\n<p style=\"text-align: justify;\"><em><strong>prisma.exe programa_prisma.prisma<\/strong><\/em>, na sequ\u00eancia temos o carregamento do arquivo fonte chamado &#8216;programa_prisma.prisma&#8217; que \u00e9 convertido internamente para byte-codes (c\u00f3digos em bytes) e ap\u00f3s isso \u00e9 executado. Pode-se, ainda, compilar o c\u00f3digo-fonte do programa prisma para byte-codes usando o prismac, seu modo de chamar \u00e9:<\/p>\n<p style=\"text-align: justify;\"><strong>prismac -o programa_compilado.pbrexe programa_fonte.prisma<\/strong>, ser\u00e1 gerado um arquivo bin\u00e1rio chamado<\/p>\n<p style=\"text-align: justify;\">programa_compilado.pbrexe.<\/p>\n<p style=\"text-align: justify;\"><em>Mas o que \u00e9 programa fonte, ou c\u00f3digo-fonte? Simples, todo programa em linguagem de alto-n\u00edvel \u00e9 escrito, isto \u00e9, o<\/em><\/p>\n<p style=\"text-align: justify;\"><em>programa \u00e9 feito em frases, geralmente frases no imperativo, por exemplo, escreva &#8216;ola&#8217;, x = leia ( ); ig.feche ( );<\/em><\/p>\n<p style=\"text-align: justify;\"><em>estas frases devem seguir as regras da linguagem. Portanto o c\u00f3digo fonte \u00e9 o arquivo texto que cont\u00e9m as frases dos comandos <\/em><em>do programa que se quer fazer. O prismac.exe converte esse texto para c\u00f3digo byte, isto \u00e9, as instru\u00e7\u00f5es (frases) s\u00e3o traduzidas <\/em><em>para zeros e uns (bytes) cuja organiza\u00e7\u00e3o pode ser compreendida e interpretada pelo prisma.exe ( o interpretador );<\/em><\/p>\n<p style=\"text-align: justify;\">Enfim, o interpretador \u00e9 o que torna a execu\u00e7\u00e3o de um programa prisma poss\u00edvel, sem ele n\u00e3o h\u00e1 como executar os programas feitos nesta linguagem. V\u00e1rias outras linguagens s\u00e3o assim, podemos citar Python, C#, Java, Ruby, Lua, Lisp, Php entre outras. O fato de uma linguagem ser interpretada garante algumas vantagens e perde outras, perde principalmente no uso da mem\u00f3ria e velocidade, mas ganha em portabilidade e simplicidade na cria\u00e7\u00e3o dos softwares.<\/p>\n<p style=\"text-align: justify;\">Prisma \u00e9, na verdade, uma modifica\u00e7\u00e3o dos fontes de Lua, uma linguagem brasileira de fama internacional muito usadas em jogos, pois \u00e9 das linguagens de scripts a mais veloz e leve. Como Prisma tem nela sua origem herda esses tra\u00e7os, sendo mais leve que Java, por exemplo, mais simples de se aprender que Python. Prisma tem um enorme potencial que se encontra no fato de quase tudo feito em C pode ser estendido a Prisma. Por exemplo, \u00e9 simples implementar fun\u00e7\u00f5es do gtk em Prisma, assim como em Lua.<\/p>\n<p style=\"text-align: center;\"><strong>Bibliotecas e arquivos externos<\/strong><\/p>\n<p style=\"text-align: justify;\">Nem todo recurso necess\u00e1rio ser\u00e1 encontrado no interpretador Prisma diretamente. Por exemplo, se voc\u00ea quiser fazer um programa com janelas e bot\u00f5es, n\u00e3o conseguir\u00e1 fazer isso somente em prisma, dever\u00e1 usar fun\u00e7\u00f5es gr\u00e1ficas que est\u00e3o em outro programa chamado <strong>igbr, <\/strong>que \u00e9 uma biblioteca em prisma.<\/p>\n<p style=\"text-align: justify;\">Bibliotecas servem para isso, criar fun\u00e7\u00f5es que ainda n\u00e3o existem em prisma estendendo novas funcionalidades. Inclusive, voc\u00ea pode criar novas bibliotecas, seja na pr\u00f3pria linguagem Prisma ou em C. As bibliotecas chamadas tamb\u00e9m de m\u00f3dulos podem ter as seguintes extens\u00f5es: .pris para m\u00f3dulo em prisma (ou _pris.dll ) , e .dll para m\u00f3dulos nativos em C. (para m\u00f3dulos em C \u00e9 necess\u00e1rio saber programar em C e compilar dlls);<\/p>\n<p style=\"text-align: justify;\">( Em linux essas extens\u00f5es podem alterar para _pris.so e .so );<\/p>\n<p style=\"text-align: justify;\">Adiante veremos com detalhe como fazer suas pr\u00f3prias bibliotecas.<\/p>\n<p style=\"text-align: justify;\">Por fim, voc\u00ea precisa saber que para programar em Prisma deve estudar a linguagem &#8211; a parte do manual que trata da linguagem em si. J\u00e1 para programar com um tipo espec\u00edfico de biblioteca precisa estudar sobre a biblioteca a ser usada, seja ela um m\u00f3dulo de fun\u00e7\u00f5es gr\u00e1ficas, base de dados, ou network, etc.<\/p>\n<h3 style=\"text-align: center;\">Aqui, mais especificamente, veremos sobre a linguagem em si!<\/h3>\n<h3><\/h3>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 style=\"text-align: center;\"><strong>Unidade I &#8211; Introdu\u00e7\u00e3o \u00e0 linguagem<\/strong><\/h1>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: justify;\"><strong>Cap. 1 &#8211; Primeiro programa: fun\u00e7\u00e3o imprima() e leia() , strings, n\u00fameros e coment\u00e1rios &#8211;<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>Caso n\u00e3o tenha instalado prisma v\u00e1 para a p\u00e1gina de downloads e primeiros passos.<\/p>\n<p>&nbsp;<\/p>\n<p>Vamos programar ent\u00e3o:<\/p>\n<p><strong>C<\/strong>om o editor aberto, crie um arquivo, salve-o com o nome de ola.prisma em uma pasta de sua escolha e digite o seguinte comando dentro dele :<\/p>\n<pre class=\"lang:default decode:true \">imprima  \"Ola mundo em prisma!\";<\/pre>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2014\/12\/botaoexecutar.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-111\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2014\/12\/botaoexecutar.png\" alt=\"botaoexecutar\" width=\"63\" height=\"53\" \/><\/a> Execute-o pressionando o bot\u00e3o executar que se encontra na barra de ferramentas do prismacod ou no menu ferramentas-&gt;executar.<\/p>\n<p style=\"text-align: justify;\">Sim, uma \u00fanica linha aqui j\u00e1 \u00e9 um programa, que exibe a mensagem Ola mundo em prisma! na janela de comandos.<\/p>\n<p style=\"text-align: justify;\">Vejamos, voc\u00ea aprendeu aqui uma fun\u00e7\u00e3o <em>imprima<\/em> (que imprime &#8220;frases na tela&#8221;), esse texto entre aspas \u00e9 chamado<\/p>\n<p style=\"text-align: justify;\">em programa\u00e7\u00e3o de string, que em ingl\u00eas significa corda ou cadeia, ou seja, no sentido de sequ\u00eancia de caracteres.<\/p>\n<p style=\"text-align: justify;\">O interpretador n\u00e3o interpreta nada do que est\u00e1 dentro de uma string, ela \u00e9 tratada como um objeto que se pode<\/p>\n<p style=\"text-align: justify;\">manipular e ser exibido na tela.<\/p>\n<p>&nbsp;<\/p>\n<p>A fun\u00e7\u00e3o imprima dispensa o uso do par\u00eanteses, assim como qualquer outra fun\u00e7\u00e3o, na condi\u00e7\u00e3o de que tenha um \u00fanico par\u00e2metro e seja uma string (Tabelas como par\u00e2metro \u00fanico tamb\u00e9m dispensam o uso de par\u00eanteses ).<\/p>\n<p>&nbsp;<\/p>\n<h3>reescreva o comando anterior da seguinte forma:<\/h3>\n<pre class=\"lang:default decode:true \">imprima (\"Ola mundo em Prisma!\"); \/\/ execute e veja que o resultado ser\u00e1 o mesmo.<\/pre>\n<p>&nbsp;<\/p>\n<p>tente agora:<\/p>\n<pre class=\"lang:default decode:true \">imprima ( \"Ola mundo \\n em \\n Prisma\" ); \/\/execute<\/pre>\n<p>&nbsp;<\/p>\n<p>Deve ter notado uma grande diferen\u00e7a, cada trecho saiu em uma linha diferente, isso foi devido ao <strong>\\n <\/strong>que \u00e9 chamado de caractere de escape nova linha, quando h\u00e1 um desses dentro de uma string ele n\u00e3o \u00e9 impresso, ao inv\u00e9s disso o texto vai para linha seguinte. H\u00e1 diversos caracteres de escape, vejamos quais s\u00e3o eles:<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p><strong>Sequ\u00eancias\u00a0de escape em Prisma:<\/strong><\/p>\n<p><strong>\\a &#8211; campainha (d\u00e1 certo s\u00f3 no Windows):<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">para i = 1, 10 inicio\r\n  es.escreva('\\a\\a\\a\\a pressione enter\\n');\u00a0\r\nfim<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\\n &#8211; nova linha:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva('exemplo\\nde\\nescape de\\nnova linha: \\\\n\\n\\n');<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0\\b &#8211; backspace (apaga um caractere anterior):<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva('exemplo de escape backspace apagando o n 3: 123\\b45');<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0\\f &#8211; avan\u00e7o de p\u00e1gina:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva('\\n\\nexemplo de\\fescape\\favan\u00e7o de\\fp\u00e1gina\\n\\n');<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0\\r &#8211; Retorno do carro (volta para o inicio da linha):<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva('------------------------------- Carro!!!\\rExemplo de escape retorno do ');<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0\\t &#8211; tabula\u00e7\u00e3o horizontal:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva('\\n\\n Exemplo de \\t tabula\u00e7\u00e3o \\t horizontal\\n em Prisma \\t usando \\t a fun\u00e7\u00e3o es.escreva!!!\\n\\n');<\/pre>\n<p><strong>\u00a0\\v &#8211; tabula\u00e7\u00e3o vertical:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva'\\nEste \u00e9 um exemplo\\vde\\vtabula\u00e7\u00e3o\\vvertical\\n\\n';<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0\\&#8217; &#8211; aspas simples:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva('Entre aspas simples: \\'ola mundo!!!\\'\\n\\n');<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0\\&#8221; &#8211; aspas duplas:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva'\\\"aspas duplas\\\"\\n\\n';<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0\\\\ &#8211; barra invertida:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva(\"usando barras: \\\\ entre barras \\\\ \\n\\n\");<\/pre>\n<p><strong>\u00a0Usando tabela ASCII: \\nnn \u00a0(preencha com zero \u00e0 esquerda)<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva\"Usando tabela ASCII: \\065\\066\\067\\n\\n\";<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Tabela ASCII em hexa decimal: \\xhh<\/strong><\/p>\n<pre class=\"lang:prisma decode:true \">es.escreva\"Usando tabela ASCII em hexa: \\x41\\x42\\x43\\n\\n\";<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p><strong>Alguns detalhes:<\/strong><\/p>\n<p>Note que na frente do comando escrevemos duas barras obl\u00edquas <strong>\/\/ e em seguida uma frase. <\/strong>Essas barras indicam que o que estiver depois delas at\u00e9 o fim da linha n\u00e3o deve ser interpretado, logo, o interpretador ignora esta parte do programa, isto \u00e9 chamado de coment\u00e1rio, eles s\u00e3o muito \u00fateis em programas de grande porte onde voc\u00ea deve lembrar para que serve cada comando criado, descrevendo explica\u00e7\u00f5es nos coment\u00e1rios.<\/p>\n<p>Outra forma de fazer coment\u00e1rios \u00e9 usando a sequ\u00eancia<strong> \/**( para abrir) e ** (para fechar),<\/strong> com isso pode-se criar coment\u00e1rios de v\u00e1rias linhas sem precisar colocar as<strong> \/\/<\/strong> em cada uma delas, ex.:<\/p>\n<pre class=\"lang:prisma decode:true \">\/**\r\n\r\neste \u00e9 um coment\u00e1rio\r\n\r\nmulti-linha! Esta parte do c\u00f3digo n\u00e3o ser\u00e1 executada\r\n\r\n**\r\n\r\n<\/pre>\n<p><span style=\"color: #800000;\"><strong>Aten\u00e7\u00e3o: a partir da vers\u00e3o Prisma-1.0.99 o coment\u00e1rio multilinha foi modificado:<\/strong><\/span><\/p>\n<p><strong>Para abrir use \/*\u00a0\u00a0\u00a0 e para fechar\u00a0 *\/<\/strong><\/p>\n<p><span style=\"font-size: 15px; line-height: 1.5;\">A fun\u00e7\u00e3o imprima pode mostrar n\u00e3o s\u00f3 textos entre aspas como tamb\u00e9m n\u00fameros diretamente, veja:<\/span><\/p>\n<pre class=\"lang:default decode:true\">imprima ( 1000000 ) ; \/\/imprime o n\u00famero um milh\u00e3o na tela de comandos<\/pre>\n<p>&nbsp;<\/p>\n<p>Tente este outro comando:<\/p>\n<pre class=\"lang:default decode:true\">imprima ( 444 - 100 ); \/\/imprime o n\u00famero 344, que \u00e9 o resultado de 444 menos 100<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"rg_i\" src=\"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcS6bO6qm3EZ5Kp3WKFxl--YLB5j78JsaxNNHSNVwyhVEtDrhl10OQ\" alt=\"\" width=\"55\" height=\"75\" name=\"_QtgizyPI7mDtM:\" data-src=\"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcS6bO6qm3EZ5Kp3WKFxl--YLB5j78JsaxNNHSNVwyhVEtDrhl10OQ\" data-sz=\"f\" \/><\/p>\n<p><em>obs. tente mudar os n\u00fameros e a opera\u00e7\u00e3o, os sinais b\u00e1sicos de matem\u00e1tica s\u00e3o: \/ divis\u00e3o, * mutilplica\u00e7\u00e3o, + soma, &#8211; subtra\u00e7\u00e3o.<\/em><\/p>\n<p>Note que prisma primeiro executa a opera\u00e7\u00e3o entre par\u00eanteses at\u00e9 obter um \u00fanico resultado para depois imprimir na tela.<\/p>\n<p><em><img loading=\"lazy\" decoding=\"async\" class=\"rg_i\" src=\"https:\/\/encrypted-tbn3.gstatic.com\/images?q=tbn:ANd9GcQ3yHANSXqiMjCX3NuGnW6nUFdp67GbmR9Xme1de0QEuFNUT2WL\" alt=\"\" width=\"57\" height=\"57\" name=\"C0K3dc56no_twM:\" data-src=\"https:\/\/encrypted-tbn3.gstatic.com\/images?q=tbn:ANd9GcQ3yHANSXqiMjCX3NuGnW6nUFdp67GbmR9Xme1de0QEuFNUT2WL\" data-sz=\"f\" \/>Dica: no final de cada comando coloque um ponte-e-v\u00edrgula para separar uns dos outros, veja:<\/em><\/p>\n<pre class=\"lang:default decode:true \">imprima( 5 ) ; imprima ( 6 ) ; imprima( \"Numeros 5 e 6\");<\/pre>\n<p>&nbsp;<\/p>\n<p>Sem os pontos-e-v\u00edrgulas, a execu\u00e7\u00e3o quase sempre acontecer\u00e1 sem erros, mas \u00e9 bem mais organizado com o uso do ponto-e-v\u00edrgula.<\/p>\n<p>&nbsp;<\/p>\n<p>At\u00e9 agora aprendemos a mostrar textos e n\u00fameros na janela de comandos (tela preta);<\/p>\n<p>Vejamos uma fun\u00e7\u00e3o diferente do<strong> imprima ()<\/strong>, a fun\u00e7\u00e3o <strong>leia(), <\/strong>veja:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:default decode:true\">\/\/exemplo do uso da fun\u00e7\u00e3o leia(), salve este exemplo como: leia.prisma\r\n\r\n  x = leia( );\r\n\/\/ aguarda o usu\u00e1rio digitar algo e armazena o resultado em x \r\n\/\/ depois da tecla enter ser pressionada ;\r\n\r\nimprima ( \"Voce digitou : \" , x );\r\n\r\n\/\/fim do programa<\/pre>\n<p>&nbsp;<\/p>\n<p>Note que ao executar, o cursor ficou piscando dentro da tela de comandos do windows ou terminal do linux, esperando voc\u00ea digitar algo. Ao digitar e apertar a tecla Enter o resultado ficou gravado na palavra <strong>x<\/strong>, e depois \u00e9 impresso com a fun\u00e7\u00e3o imprima.<\/p>\n<p><em>Esse efeito de gravar um resultado em um nome \u00e9 chamado de atribuir uma vari\u00e1vel (no caso o <strong>x, <\/strong>mas poderia ser qualquer outro nome ), veremos sobre vari\u00e1veis mais adiante.<\/em><\/p>\n<p>Talvez voc\u00ea tenha notado que usamos uma v\u00edrgula dentro da fun\u00e7\u00e3o imprima desta vez, isso \u00e9 porque temos dois argumentos colocados dentro da fun\u00e7\u00e3o, primeiro o texto : <strong>&#8220;Voce digitou : &#8220;<\/strong> e segundo a vari\u00e1vel <strong>x, <\/strong>ent\u00e3o a fun\u00e7\u00e3o mostra o texto e na sequ\u00eancia o que est\u00e1 armazenado em <strong>x; <\/strong>Veja que n\u00e3o \u00e9 impresso o x mas o valor que foi digitado, este \u00e9 o conceito de vari\u00e1vel.<\/p>\n<p><strong><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"51\" height=\"69\" \/><\/a>Obs.<\/strong> Note que vari\u00e1vel \u00e9 um nome criado sem aspas, tudo o que tiver entre aspas geralmente \u00e9 uma string.<\/p>\n<p><strong><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"51\" height=\"69\" \/><\/a>Obs.<\/strong> Strings em prisma podem ser feitas de outras duas maneiras al\u00e9m do uso de aspas duplas:<\/p>\n<p>1 &#8211; usando aspas simples :<\/p>\n<pre class=\"lang:prisma decode:true \">'isto \u00e9 uma string\\n';<\/pre>\n<p>&nbsp;<\/p>\n<p>2 &#8211; usando duplos colchetes, permitindo uma string multi-linha, n\u00e3o aceita caracteres de escape, se tiver algum ele ser\u00e1 impresso<\/p>\n<p>na tela como uma string:<\/p>\n<pre class=\"lang:prisma decode:true\">texto = [[\r\n\r\nisto \u00e9 uma string\r\n\r\nde v\u00e1rias linhas\r\n\r\no texto ser\u00e1 impresso exatamente como est\u00e1 aqui!\r\n\r\n]]\r\n\r\nimprima ( texto );<\/pre>\n<p>&nbsp;<\/p>\n<p>H\u00e1 outra forma de fazer strings multilinhas:<\/p>\n<pre class=\"lang:prisma decode:true\">texto = \"isto \u00e9 uma string\\\r\nde v\u00e1rias linhas\\\r\no texto ser\u00e1 impresso\\\r\nexatamente como est\u00e1 aqui!\"\r\n\r\nimprima( texto );<\/pre>\n<p>Para esse estilo dar certo \u00e9 necess\u00e1rio, ap\u00f3s a barra, o fim da linha. Para isso pressione enter ap\u00f3s ela, caso tenha um \u00fanico espa\u00e7o, n\u00e3o dar\u00e1 certo. Note que o mesmo sinal que abriu a string (&#8220;) no in\u00edcio, \u00e9 o que fechou no final (&#8220;).<\/p>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><\/h2>\n<p>&nbsp;<\/p>\n<h1><\/h1>\n<p>&nbsp;<\/p>\n<h1><\/h1>\n<p>&nbsp;<\/p>\n<h1><\/h1>\n<p>&nbsp;<\/p>\n<h1><\/h1>\n<h2 style=\"text-align: center;\"><strong>Cap. 2 &#8211; Palavras reservadas, operadores relacionais e l\u00f3gicos<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Anteriormente, n\u00f3s vimos que al\u00e9m de outras coisas, uma linguagem \u00e9 composta por palavras reservadas, mas o que ser\u00e1 isso?<\/p>\n<p style=\"text-align: justify;\"><strong>Palavras reservadas:<\/strong> s\u00e3o palavras comando da pr\u00f3pria linguagem, n\u00e3o podendo ser usadas com outro prop\u00f3sito:<\/p>\n<p style=\"text-align: justify;\">Portugu\u00eas \/\/ ingl\u00eas:<\/p>\n<pre class=\"lang:default decode:true\">    \"e\", \/\/and\r\n    \"quebre\", \/\/break\r\n    \"inicio\", \/\/do\r\n    \"senao\", \/\/else\r\n    \"senaose\",\/\/elseif\",\r\n    \"fim\", \/\/ \"end\",\r\n    \"falso\", \/\/ \"false\",\r\n    \"para\" , \/\/ \"for\",\r\n    \"funcao\" , \/\/ \"function\",\r\n    \"vapara\", \/\/ \"goto\",\r\n    \"se\", \/\/   \"if\",\r\n    \"em\", \/\/  \"in\",\r\n    \"local\", \/\/ \"local\",\r\n    \"nulo\", \/\/ \"nil\",\r\n    \"nao\", \/\/ \"not\",\r\n    \"ou\", \/\/ \"or\",\r\n    \"repita\", \/\/  \"repeat\",\r\n    \"retorne\", \/\/  \"return\",\r\n    \"entao\", \/\/ \"then\",\r\n    \"verdadeiro\", \/\/ \"true\",\r\n    \"ate\", \/\/ \"until\",\r\n    \"enquanto\" , \/\/ \"while\",\r\n    \"este\" \/\/ this \/ self<\/pre>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">N\u00e3o se preocupe em decor\u00e1-las, voc\u00ea aprender\u00e1 a us\u00e1-las no decorrer dos estudos, s\u00f3 est\u00e3o listadas aqui para ilustra\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\">Note que devemos usar a palavra-chave tal como ela se apresenta, ex:<\/p>\n<p style=\"text-align: justify;\">use o <strong>se <\/strong>e n\u00e3o <strong>SE ou Se ou sE, <\/strong>Prisma \u00e9 case sensitive, isto \u00e9, diferencia mai\u00fasculas de min\u00fasculas.<\/p>\n<p style=\"text-align: justify;\">Palavras reservadas e fun\u00e7\u00f5es s\u00e3o coisas diferentes, as palavras s\u00e3o fixas e imut\u00e1veis, a n\u00e3o ser,<\/p>\n<p style=\"text-align: justify;\">que se modifique a pr\u00f3pria linguagem, j\u00e1 as fun\u00e7\u00f5es podem ser criadas modificadas e atribu\u00eddas. logo:<br \/>\n&#8216;enquanto&#8217; \u00e9 de categoria diferente de &#8216;imprima&#8217; ( uma \u00e9 palavra-chave e outra fun\u00e7\u00e3o );<\/p>\n<p style=\"text-align: justify;\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p style=\"text-align: justify;\">Al\u00e9m das palavras reservadas, temos os sinais e suas fun\u00e7\u00f5es espec\u00edficas dentro da linguagem.<\/p>\n<h3 style=\"text-align: center;\"><strong>Sinais especiais e operadores relacionais:<\/strong><\/h3>\n<pre class=\"lang:default decode:true\">   ..    ...         ==          &gt;=          &lt;=            &lt;&gt;            &lt;           &gt;<\/pre>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #333399;\"><strong><br \/>\n<\/strong><\/span><\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"66\" height=\"89\" \/><\/a>obs.: Quando usar os sinais compostos jamais deixe espa\u00e7o entre eles, ex.:<\/p>\n<p style=\"text-align: justify;\">( <span style=\"color: #ff0000;\"><strong>&lt; =<\/strong><\/span> \/\/errado ) ( <span style=\"color: #ff0000;\"><strong>&lt;=<\/strong><\/span> \/\/certo )<\/p>\n<p style=\"text-align: justify;\">veja o uso deles respectivamente:<\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #333399;\">concatenar strings \/ argumentos indefinidos para fun\u00e7\u00f5es \/ testa igualdade \/ maior ou igual a \/<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #333399;\">menor ou igual a \/ diferente de \/ menor que \/ maior que<\/span><\/p>\n<p style=\"text-align: justify;\"><strong>Exemplos de como usar:<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>&#8216;..&#8217; (Dois pontos seguidos)<br \/>\n<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\"> x = \"Ola\" .. \" \" .. \"Mundo\" .. \" em Prisma!!!\"; \r\n\/\/une as strings e armazena o resultado na vari\u00e1vel x ficando assim:\r\n\r\n\/\/ x = ( \"Ola Mundo em Prisma!!!\" );<\/pre>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #008000;\"><span style=\"color: #000000;\"><strong>&#8216;&#8230;&#8217; (Retic\u00eancias)<br \/>\n<\/strong><\/span><\/span><\/p>\n<pre class=\"lang:prisma decode:true\"> funcao escreva (...) \/\/aceita n\u00famero vari\u00e1vel de par\u00e2metros\r\n\r\n       imprima( ... ); \/\/imprime os par\u00e2metros passados\r\n\r\nfim\r\n\r\nescreva ( \"ola\" , \"mundo\" , \"em\" , \"Prisma\");<\/pre>\n<p>Se n\u00e3o conseguiu entender completamente os &#8230; n\u00e3o tem problema, o veremos mais adiante, e al\u00e9m disso, n\u00e3o s\u00e3o muitas as situa\u00e7\u00f5es que voc\u00ea precisar\u00e1 usar no momento.<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/ poderia converter a sequ\u00eancia de par\u00e2metros em tabela (matriz):\r\n\/\/   args = { ... }; ex.:\r\n\r\nfuncao escreva( ... )\r\n\r\n           t = { ... };\r\n\r\n           para i = 1 , #t  inicio\r\n                     imprima( t[i] );\r\n           fim\r\n\r\nfim\r\n\r\nescreva( \"ola\" , \"mundo\" , \"em\" , \"prisma\");\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<h4>Agora os operadores relacionais:<\/h4>\n<pre class=\"lang:default decode:true \">==       &gt;      &lt;       &lt;=       &gt;=      &lt;&gt; ;<\/pre>\n<p><strong><span style=\"color: #000000;\">( s\u00e3o muito \u00fateis para testes de condi\u00e7\u00f5es, retornam verdadeiro ou falso)<\/span><\/strong><\/p>\n<p style=\"text-align: justify;\">veja:<\/p>\n<pre class=\"lang:prisma decode:true \">a = 1; b=2; \/\/ atribuindo valores \u00e0s v\u00e1riaveis\r\n\r\n\/\/n\u00e3o confunda o operador de atribui\u00e7\u00e3o '=' com o de teste de igualdade '=='\r\n\r\nse a == b entao\r\n\r\n                  imprima(\"iguais\");\r\n\r\nsenaose a &lt;&gt; b entao \r\n\r\n               imprima (\"diferentes\");\r\n\r\nsenaose a &lt; b entao\r\n\r\n              imprima( \"a menor que b\");\r\n\r\nsenaose a &gt; b entao\r\n\r\n             imprima (\"a maior que b\");\r\n\r\nsenaose a &lt;= b entao\r\n\r\n           imprima ( \"a menor ou igual a b\");\r\n\r\nsenaose a &gt;= b entao\r\n\r\n          imprima( \"a maior ou igual a b\");\r\n\r\nsenao\r\n\r\n          imprima ( \"nenhuma das alternativas\");\r\n\r\nfim<\/pre>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">Operadores l\u00f3gicos : <em>ou , e , nao <\/em><\/h3>\n<p>&nbsp;<\/p>\n<p><em>(em especial, d\u00ea uma aten\u00e7\u00e3o ao operadores l\u00f3gicos, ver\u00e1 o quanto ser\u00e1 recompensador, pois problemas complexos ser\u00e3o <\/em><em>facilmente resolvidos com o uso de um operador l\u00f3gico, ok!)<\/em><\/p>\n<h1 style=\"text-align: center;\"><strong>ou :<\/strong><\/h1>\n<p>O <strong>ou<\/strong> retorna o primeiro valor v\u00e1lido dentre v\u00e1rios, ou ent\u00e3o nulo caso nenhum seja v\u00e1lido, muito \u00fatil para testar se uma vari\u00e1vel j\u00e1 existe e atribuir ou n\u00e3o um valor a ela. Veja:<\/p>\n<pre class=\"lang:prisma decode:true\"> x = x ou 1; \r\nimprima(x);<\/pre>\n<p><em> Interprete assim:<strong> x<\/strong> \u00e9 igual ao pr\u00f3prio<strong> x<\/strong> se ele j\u00e1 tiver valor ou a 1 se ele ainda n\u00e3o tem valor, isto \u00e9, se \u00e9 igual a nulo.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p>Voc\u00ea pode colocar v\u00e1rios operadores &#8216;<strong>ou&#8217;<\/strong> em sequ\u00eancia, veja:<\/p>\n<pre class=\"lang:prisma decode:true\">x = T  ou B ou \"Eu sou valido\";\r\n\r\nimprima ( x ); \r\n\/\/caso T tivesse um valor atribu\u00eddo x seria T, mas T no caso \u00e9 nulo, ent\u00e3o\r\n\r\n\/\/o teste passa para B, que tamb\u00e9m \u00e9 nulo, logo o teste 'ou' \r\n\/\/ passa para \"Eu sou valido\" que \u00e9 uma string, isto \u00e9,\r\n\r\n\/\/v\u00e1lida, portanto x pega entre os tr\u00eas o terceiro valor \"Eu sou valido\";<\/pre>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"61\" height=\"83\" \/><\/a> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/p>\n<p>Se voc\u00ea testar v\u00e1rios valores e todos forem nulo, o retorno \u00e9 nulo.<\/p>\n<p>Se voc\u00ea testar v\u00e1rios valores e um for falso e o restante for nulo, ent\u00e3o falso \u00e9 atribu\u00eddo, veja:<\/p>\n<pre class=\"lang:prisma decode:true\">z = falso; b = nulo; t = nulo; k = nulo;\r\n\r\nx = b ou t ou k ou z;\r\n\r\nimprima( x ) ; \/\/sa\u00edda ser\u00e1 falso;<\/pre>\n<hr \/>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><em><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"61\" height=\"83\" \/><\/a> O <strong>ou<\/strong> pode ser usado em testes de condi\u00e7\u00f5es com o comando <strong>&#8216;se&#8217; <\/strong>que veremos mais adiante, veja:<\/em><\/p>\n<pre class=\"lang:prisma decode:true \">a = 1 ; b = 3;\r\n\r\nse a &gt; 0 ou 3 &gt; 0 entao\r\n\r\n       imprima(\" a ou b e maior que zero \\n\"); \r\n\r\nsenao\r\n\r\n       imprima(\"Nem a nem b e mairo que zero \\n\");\r\n\r\nfim\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h1 style=\"text-align: center;\"><strong>e :<\/strong><\/h1>\n<p>o operador &#8216;e&#8217; retorna o primeiro valor inv\u00e1lido ( falso ou nulo), caso contrario retorna o pr\u00f3ximo at\u00e9 encontrar um nulo ou falso.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">x = \"valor valido\" e TT ;  \r\n\/\/TT \u00e9 nulo j\u00e1 que n\u00e3o atribu\u00edmos ela ainda\r\n\r\nimprima (x); \/\/sa\u00edda nulo\r\n\r\na = falso; b = 2; \/\/ somente b \u00e9 valido\r\n\r\nx = b e a;\r\n\r\nimprima( x); \/\/sa\u00edda falso\r\n\r\nx = falso e nulo;\r\n\r\nimprima (x); \/\/sa\u00edda falso<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Caso n\u00e3o tenha nenhum valor inv\u00e1lido o \u00faltimo valor \u00e9 retornado, veja:<\/p>\n<pre class=\"lang:prisma decode:true \">x = 2 e 4 e 5;\r\n\r\nimprima (x) \/\/ sa\u00edda 5<\/pre>\n<p>Podemos usar o operador &#8216;e&#8217; em um teste de condi\u00e7\u00e3o, neste caso ambos os valores devem ser v\u00e1lidos para a condi\u00e7\u00e3o ser satisfeita:<\/p>\n<pre class=\"lang:prisma decode:true\">a = 1;  b = 10;\r\n\r\nse a &lt; 100 e b &lt; 100 entao\r\n     imprima\"os dois numeros sao menores que 100\\n\";\r\nsenao\r\n     imprima \"Um dos n\u00fameros nao e menor que 100\\n\";\r\nfim<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 style=\"text-align: center;\"><strong>nao :<\/strong><\/h1>\n<p>&nbsp;<\/p>\n<p>O operador l\u00f3gico &#8216;nao&#8217; \u00e9 un\u00e1rio isto \u00e9 n\u00e3o exige dois valores para a opera\u00e7\u00e3o, apenas um, antecedendo-o, veja:<\/p>\n<pre class=\"lang:prisma decode:true \">x = nao y;\r\n\r\nimprima( x );<\/pre>\n<p>&nbsp;<\/p>\n<p>Este operador retorna verdadeiro ou falso:<\/p>\n<p>Caso o valor seja v\u00e1lido, ele retorna o oposto, ou seja, falso.<\/p>\n<p>Caso o valor seja inv\u00e1lido, isto \u00e9, se o valor for nulo ou falso, ele retorna verdadeiro;<\/p>\n<p>ex.:<\/p>\n<pre class=\"lang:prisma decode:true \">imprima ( nao nulo ); \/\/sa\u00edda - verdadeiro;\r\n\r\nimprima( nao falso ); \/\/sa\u00edda - verdadeiro;\r\n\r\nimprima ( nao verdadeiro ); \/\/sa\u00edda - falso;\r\n\r\na = 1;\r\n\r\nimprima ( nao a ); \/\/sa\u00edda - falso;<\/pre>\n<p>&nbsp;<\/p>\n<p>\u00c9 muito \u00fatil em condi\u00e7\u00f5es:<\/p>\n<pre class=\"lang:prisma decode:true \">a = es.abra( 'arquivo.txt' , 'leitura' );\r\n\r\nse nao a entao imprima 'erro ao tentar abrir arquivo' fim<\/pre>\n<p>Caso haja um erro ao tentar abrir o arquivo o retorno \u00e9 nulo. Sendo nulo o operador <strong>nao<\/strong> retornar\u00e1 o contr\u00e1rio, isto \u00e9, verdadeiro. Assim a condi\u00e7\u00e3o \u00e9 satisfeita e a mensagem de erro \u00e9 impressa.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: center;\"><strong>Cap. 3 &#8211; Vari\u00e1veis, tipos e a fun\u00e7\u00e3o tipo()<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Ao se trabalhar com uma linguagem de programa\u00e7\u00e3o temos que saber quais s\u00e3o os tipos suportados, isto \u00e9, que dados podem ser usados nesta linguagem. J\u00e1 vimos dois tipos de dados nos primeiros programas, o tipo string &#8220;texto entre aspas&#8221; e o tipo n\u00famero 1000000 por exemplo.<\/p>\n<p>Dados podem ser &#8216;apelidados&#8217;, para que ao inv\u00e9s de passarmos o dado em si, passemos o apelido que \u00e9 chamado de vari\u00e1vel em programa\u00e7\u00e3o. Por exemplo, se quisermos chamar o valor 1200.00 de <em><strong>salario<\/strong><\/em>, ent\u00e3o <strong><em>salario<\/em><\/strong> ser\u00e1 a vari\u00e1vel que pode ser atribu\u00edda da seguinte forma: <strong><em>salario = 1200.00<\/em><\/strong>, o &#8216;<strong>=<\/strong>&#8216; \u00e9 o operador de atribui\u00e7\u00e3o. Podemos mudar o valor de uma vari\u00e1vel bastando reatribuir outro valor, veja: <strong>salario = 2000.00<\/strong>, desta forma onde usarmos a palavra salario, ser\u00e1 passado o valor atribu\u00eddo a ela, ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">salario = 2000;\r\nimprima(salario);\r\n\/\/reatribuindo:\r\nsalario = 3000.99\r\nimprima( salario );  \r\n\/\/ mostrar\u00e1 na tela o n\u00famero armazenado na vari\u00e1vel salario.<\/pre>\n<hr \/>\n<h4 style=\"text-align: center;\"><\/h4>\n<h4 style=\"text-align: center;\">Vari\u00e1veis<\/h4>\n<p><strong><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/entendendo.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-582\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/entendendo.jpeg\" alt=\"entendendo\" width=\"85\" height=\"89\" \/><\/a>O que s\u00e3o vari\u00e1veis afinal?<\/strong> <em>S\u00e3o nomes criados pelo programador para simbolizar um dado dentro da linguagem. G<\/em><em>eralmente a vari\u00e1vel representa o endere\u00e7o na mem\u00f3ria do valor atribu\u00eddo.<\/em><\/p>\n<p><strong><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-557\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\" alt=\"dica\" width=\"66\" height=\"66\" \/><\/a>Dica:<\/strong><\/p>\n<p><em>Uma vari\u00e1vel pode ser criada com qualquer nome que n\u00e3o seja uma palavra reservada, no entanto, devemos seguir alguns crit\u00e9rios:<\/em><\/p>\n<p><em><strong>1-<\/strong> nunca inicie o nome de uma vari\u00e1vel por n\u00famero ou d\u00edgito, gerar\u00e1 erro. Pode iniciar por Underline (sublinhado) ou letra.<\/em><\/p>\n<p><em><strong>2-<\/strong> Escolha nomes que t\u00eam algo a ver com o dado armazenado, ex.: gasto = 10.00 ; lucro = 100.00 ao inv\u00e9s <\/em><em>de n1 = 10.00; n2 = 100.00, visto que no primeiro caso ficou muito mais f\u00e1cil entender sobre o que se trata o dado.<\/em><\/p>\n<p><em><strong>3 &#8211;<\/strong> Se for um nome composto use iniciais mai\u00fasculas, ex.: NomeDoCliente = &#8220;Marcos&#8221;; ou separados por sublinhado, <\/em><em>ex.: nome_do_cliente = &#8220;Marcos&#8221;, fica muito mais leg\u00edvel do que nomedocliente ;<\/em><\/p>\n<p><em><strong>4<\/strong> &#8211; Cuidado para n\u00e3o sobrescrever um valor de uma vari\u00e1vel j\u00e1 existente, ex.: imprima = &#8220;nome do comando&#8221;; se depois disso voc\u00ea tentar usar a fun\u00e7\u00e3o imprima( ) ver\u00e1 que ela n\u00e3o funciona mais, pois voc\u00ea reatribuiu o valor da vari\u00e1vel imprima. Sim \u00e9 claro, fun\u00e7\u00f5es s\u00e3o tipos de vari\u00e1veis em Prisma.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p>Vari\u00e1veis em Prisma n\u00e3o possuem tipos fixos, s\u00e3o tipadas dinamicamente, ou seja, n\u00e3o \u00e9 necess\u00e1rio declarar qual tipo uma vari\u00e1vel ir\u00e1 armazenar ( como \u00e9 feito em C por exemplo:<strong> int x = 12;<\/strong> ), basta inicializ\u00e1-la, ex:<\/p>\n<pre class=\"lang:prisma decode:true\">x = 12; x = 3.333333 ; x = \"uma frase qualquer\" ; x = {};\r\n\r\n\/\/veja que a vari\u00e1vel x trocou de dados v\u00e1rias vezes.<\/pre>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"62\" height=\"84\" \/><\/a><\/p>\n<p><em>Note que ao atribuirmos um novo valor a uma vari\u00e1vel j\u00e1 existente, o valor antigo se perde e o novo fica em seu lugar!<\/em><\/p>\n<p><em>*Em Prisma vari\u00e1veis n\u00e3o t\u00eam um tipo fixo, mas o dado sim carrega seu pr\u00f3prio tipo, Prisma sabe que um n\u00famero \u00e9 um n\u00famero <\/em><em>e n\u00e3o uma string ou vice-versa, por exemplo.<\/em><\/p>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"63\" height=\"86\" \/><\/a><\/p>\n<p><em>Se voc\u00ea \u00e9 iniciante em programa\u00e7\u00e3o, deve ter um pouco de dificuldade em assimilar o conceito de vari\u00e1vel de in\u00edcio. N\u00e3o <\/em><em>se preocupe, voc\u00ea vai dominar o conceito conforme o tempo de estudo, o que em Prisma n\u00e3o \u00e9 t\u00e3o demorado, <\/em><em>visto a sua simplicidade.<\/em><\/p>\n<p><em>Apenas saiba que usamos o sinal de &#8216;=&#8217; para atribuir um valor que est\u00e1 \u00e0 direita do sinal a um nome \u00e0 esquerda do <\/em><em>sinal, este nome passa a carregar este valor atribu\u00eddo.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-557\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\" alt=\"dica\" width=\"86\" height=\"86\" \/><\/a><em>Em Prisma podemos atribuir diversos valores para v\u00e1rias vari\u00e1veis ao mesmo tempo, usando a v\u00edrgula, veja:<\/em><\/p>\n<pre class=\"lang:prisma decode:true\">a , b , c = 1 , 10 , 100; \r\n\/\/a recebe 1, b recebe 10 e c recebe 100;<\/pre>\n<p>&nbsp;<\/p>\n<p><em>Caso sobre uma vari\u00e1vel, o valor daquela que sobrou ser\u00e1 nulo, veja:<\/em><\/p>\n<pre class=\"lang:prisma decode:true\">a , b , c = 1 , 2; \r\n\/\/a = 1 ; b = 2 e c = nulo pois n\u00e3o tem um terceiro valor para c;<\/pre>\n<p>&nbsp;<\/p>\n<p><em>Se o n\u00famero de vari\u00e1veis for menor que o n\u00famero de valores atribu\u00eddos, os valores extras s\u00e3o perdidos, veja:<\/em><\/p>\n<pre class=\"lang:prisma decode:true\">a , b = 1 , 2 , 3; \r\n\/\/ a = 1 ; b = 2 O valor 3 se perde pois n\u00e3o h\u00e1 \r\n\/\/ uma terceira vari\u00e1vel para guardar seu valor.<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<h4 style=\"text-align: center;\"><span style=\"color: #000000;\"><strong>Tipos de dados<\/strong><\/span><\/h4>\n<p>&nbsp;<\/p>\n<p>Diferentemente de outras linguagens que t\u00eam muitos tipos de dados, em Prisma o n\u00famero deles \u00e9 bem reduzido, o que favorece a rapidez do aprendizado. Bom, vejamos os dados em Prisma:<\/p>\n<h3><span style=\"color: #003300;\"><strong> <span style=\"color: #000000;\"> n\u00famero, string , tabela, funcao , userdata, boolean, nulo;<\/span><\/strong><\/span><\/h3>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"63\" height=\"85\" \/><\/a> <em>obs.: para sabermos o tipo de um dado existe a fun\u00e7\u00e3o tipo ( ); ex.: imprima ( tipo( 5 ) ) ; \/\/sa\u00edda \u00e9 &#8216;numero&#8217;<\/em><\/p>\n<p>&nbsp;<\/p>\n<h4 style=\"text-align: justify;\">Agora analisaremos cada um deles com exemplos, se poss\u00edvel tente assimilar ao m\u00e1ximo o conceito e utilidade deles:<\/h4>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">numero<\/h3>\n<h3 style=\"text-align: center;\"><strong> <span style=\"text-decoration: underline;\"><br \/>\n<\/span><\/strong><\/h3>\n<p>\u00c9 qualquer n\u00famero, n\u00e3o diferencia entre decimal e inteiros.<\/p>\n<p>ex:<\/p>\n<pre class=\"lang:prisma decode:true\"> x = 12; y = 3.14;\r\n\r\nimprima( tipo(x) , tipo(y) ); \/\/sa\u00edda ser\u00e1 :  numero       numero\r\n\r\n\/\/a funcao tipo() retorna o tipo de vari\u00e1vel.\r\n\r\n<\/pre>\n<p><em> <a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"68\" height=\"92\" \/><\/a> Obs. n\u00e3o use virgula para separar as casas decimais, em programa\u00e7\u00e3o \u00e9 usado<strong> o ponto<\/strong> para isso, ok!<\/em><\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>string<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Qualquer sequ\u00eancia de caracteres entre aspas simples ou duplas, ou entre duplo colchetes(multilinha);<\/p>\n<p>ex:<\/p>\n<pre class=\"lang:prisma decode:true\">x = \"\\n\\n Isto e uma string\\n\" ; \r\n\/\/aceita caracteres de escape \\n = nova linha;\r\n\r\ny = '\\n\\nIsto e uma string entre aspas simples'  ; \r\n\/\/sempre feche a string como o mesmo sinal que iniciou\r\n\r\nz = [[esta\r\n\r\n\u00e9 uma\r\n\r\nstring multilinha\r\n\r\nn\u00e3o aceita caracteres de escape ela e visualizada\r\n\r\ntal como se encontra aqui!\r\n\r\n]]\r\n\r\nimprima ( tipo(x), tipo(y) , tipo (z) )\r\n\/\/ --&gt;saida = string        string        string<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>tabela<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Poderoso recurso para manipula\u00e7\u00e3o de dados em massa, nada mais \u00e9 do que uma vari\u00e1vel que armazena mais de um valor ao mesmo tempo e esses valores ficam guardados em subdivis\u00f5es dentro da tabela atrav\u00e9s de \u00edndices ou campos. N\u00e3o \u00e9 necess\u00e1rio declarar o tamanho da tabela como na maioria das linguagens.<\/p>\n<p>Obs.: Tabelas podem ser conhecidas como vetores, matrizes, arrays etc. em outras linguagens.<\/p>\n<p>ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/inicializando uma tabela vazia use chaves vazias:\r\ntab = {};\r\n\r\n\/\/inicializando uma tabela com alguns \u00edndices:\r\ntab2 = { \"um elemento string\" , 12 , 14 , \"Quinta\" , \"nome\" };\r\n\r\n\/\/ por padr\u00e3o tabelas em prisma iniciam pelo \u00edndice 1 \r\n\/\/ e n\u00e3o zero como na maioria das linguagens\r\n\r\nimprima( tab2 [1] , tab2 [2] , tab2 [3] , tab2 [4] , tab2 [5]  );\r\n\r\n\/\/ou use o comando desempacote:\r\n\r\nimprima( desempacote( tab2) );\r\n\r\n\/\/ atribuindo novos elementos a matriz\r\n\r\ntab[1] = \"primeiro elemento\";\r\n\r\ntab[2] = \"segundo elemento\";\r\n\r\n\/\/fazendo um array associativo, isto \u00e9, \r\n\/\/\u00edndices ser\u00e3o 'strings' e n\u00e3o n\u00fameros:\r\n\r\ntab3 = { [\"dia\"] = 15 , [\"mes\"] = 12 , [\"ano\"] = 2014 };\r\n\r\nimprima( tab3[ 'dia' ] .. '-' .. tab3['mes'] .. '-' tab3['ano'] ) \r\n\/\/--sa\u00edda = 15-12-2014;\r\n\r\n\/\/ logicamente existe um jeito muito \r\n\/\/ mais pr\u00e1tico de fazer isso acima, veja:\r\n\r\ntab3 = {};\r\n\r\ntab3.dia = 15; tab3.mes = 12 ; tab3.ano = 2014;\r\n\r\nimprima( tab3.dia .. '-' .. tab3.mes .. '-' .. tab3.ano ) \r\n\/\/ --&gt;sa\u00edda = 15-12-2014\r\n\r\n\/\/poderia ser tamb\u00e9m = tab3 = { dia = 15 , mes = 12 , ano = 2014 };<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-557\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\" alt=\"dica\" width=\"52\" height=\"52\" \/><\/a>\u00e9 poss\u00edvel fazer uma matriz de componentes facilmente em prisma:<\/p>\n<pre class=\"lang:prisma decode:true\">para i = 1 , 4 inicio\r\n\r\n    rotulo = \"botao\" .. i\r\n\r\n    botao[ i ] = ig.botao( rotulo );\r\n\r\nfim   \/\/fim para<\/pre>\n<p>&nbsp;<\/p>\n<p>cria quatro bot\u00f5es; ( botao[1], botao[2] &#8230; etc.)<\/p>\n<p>&nbsp;<\/p>\n<h4 style=\"text-align: center;\"><strong>Tabela \u00e9 um recurso t\u00e3o poderoso que podemos <\/strong><\/h4>\n<h4 style=\"text-align: center;\"><strong>armazenar <\/strong><strong style=\"font-size: 18px; line-height: 1.5;\">qualquer valor v\u00e1lido, inclusive fun\u00e7\u00f5es:<\/strong><\/h4>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true \">console = {};\r\nconsole.version = \"Console-1.0\";\r\n\r\nfuncao console.puts ( ... )  \r\n    \/\/lembre-se que usando os tr\u00eas pontos \r\n    \/\/passamos n\u00famero vari\u00e1vel de argumentos.\r\n\r\n   imprima( ... ); \r\n\r\n    \/\/ recebe e imprime todos os argumentos passados\r\nfim  \/\/fim funcao\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h4 style=\"text-align: center;\">Um array associativo de uma fun\u00e7\u00e3o funciona como um m\u00e9todo de console. Veja:<\/h4>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">console.puts( 'Ola Mundo ' .. console.version ); \/\/ --&gt; sa\u00edda = Ola mundo Console-1.0\r\n\r\nconsole.puts( tipo(console) ); \/\/ --&gt; sa\u00edda = tabela;\r\n\r\nconsole.puts( tipo( console.puts ) ) ; \/\/ -- &gt; sa\u00edda = funcao<\/pre>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"83\" height=\"113\" \/><\/a> <em>Obs.: lembre-se que o ponto separa o nome da tabela de seu campo.<\/em><\/p>\n<p>&nbsp;<\/p>\n<h4>Poder\u00edamos fazer uma fun\u00e7\u00e3o que passasse a pr\u00f3pria tabela como par\u00e2metro padr\u00e3o &#8220;este&#8221;:<\/h4>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/ex:\r\nconsole = {};\r\nconsole.versao = \"Console-1.0\";\r\n\r\nfuncao console:mostreVersao ( )  \r\n      imprima( este.versao );  \r\nfim \/\/fim funcao\r\n\r\nconsole:mostreVersao() ; \r\n\/\/ sa\u00edda = Console-1.0\r\n\r\n<\/pre>\n<p>Ao usar dois pontos<strong> &#8216;:&#8217;<\/strong> passamos a pr\u00f3pria tabela na vari\u00e1vel reservada<strong> &#8216;este&#8217;<\/strong>. Portanto, <strong>este.versao<\/strong> \u00e9 o mesmo que <strong>console.versao<\/strong>.<\/p>\n<p>A partir da vers\u00e3o Prisma-1.0.99 (2017) \u00e9 poss\u00edvel usar tamb\u00e9m os sinais\u00a0 <strong>-&gt; <\/strong>para acessar um m\u00e9todo veja:<\/p>\n<pre class=\"lang:prisma decode:true\">console-&gt;mostreVersao() ;<\/pre>\n<p>Fica optativo, use qual preferir: os<strong> &#8216;:&#8217; ou &#8216;-&gt;&#8217;<\/strong><\/p>\n<p><em><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"83\" height=\"113\" \/><\/a> Obs.: <strong>&#8216;este&#8217;<\/strong> \u00e9 uma vari\u00e1vel reservada, n\u00e3o podendo ser usada de outra forma.<\/em><\/p>\n<h3 style=\"text-align: center;\"><strong>fun\u00e7\u00e3o<br \/>\n<\/strong><\/h3>\n<p style=\"text-align: center;\"><strong> <span style=\"text-decoration: underline;\"><br \/>\n<\/span><\/strong><\/p>\n<p>S\u00e3o trechos automatizados de rotinas de execu\u00e7\u00e3o, fun\u00e7\u00f5es podem ou n\u00e3o receber par\u00e2metros e retornar valores, s\u00e3o muito \u00fateis para organizar o programa em sub blocos execut\u00e1veis.<\/p>\n<p>ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/declarando uma fun\u00e7\u00e3o soma use a palavra reservada funcao:\r\n\r\nfuncao soma ( a , b)\r\n\r\n  retorne a + b ; \/\/retorna o valor de a somado com b\r\n\r\nfim\r\n\r\nfuncao quadrado ( a )\r\n\r\n   retorne a * a; \/\/ retorna a multiplicado por a\r\n\r\nfim\r\n\r\nfuncao raizquadrada ( a )\r\n\r\n    retorne a^ ( 1\/2 ); \r\n\/\/retorna a elevado a 0.5 , o que \r\n\/\/equivale a raiz quadrada de \"a\";\r\n\r\nfim\r\n\r\n\/\/chamando as funcoes criadas\r\n\r\nimprima( \"soma de 2 e 5 = \" , soma( 2 , 5 )  ); \r\n\/\/ sa\u00edda = soma de 2 e 5 = 7\r\n\r\nimprima ( \"5 ao quadrado = \" , quadrado( 5 ) ); \r\n\/\/ sa\u00edda = 5 ao quadrado = 25\r\n\r\nimprima( \"raiz quadrada de 25 = \" , raizquadrada( 25 ) ); \r\n\/\/ sa\u00edda = raiz quadrada de 25 = 5\r\n\r\nimprima( tipo( raizquadrada )  ); \/\/ saida =  funcao\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Fun\u00e7\u00f5es em Prisma podem retornar mais de um valor:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">funcao duploquadrado ( a , b )\r\n\r\n     retorne a*a , b*b;\r\n\/\/cada retorno deve estar separado por v\u00edrgula e no final um ponto e v\u00edrgula;\r\n\r\nfim\r\n\r\n \/\/recebendo os retorno separados por v\u00edrgulas\r\n\r\nn1 , n2 = duploquadrado ( 2 , 4 ); \r\n\/\/ retorna o numero 2 e o numero 4 elevados ao quadrado;\r\n\r\n\/\/repare que para cada retorno deve ter \r\n\/\/uma vari\u00e1vel \u00e0 esquerda separada por v\u00edrgula.\r\n\r\nimprima( n1 , n2 );\r\n\r\nleia();\r\n\r\n<\/pre>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"72\" height=\"98\" \/><\/a> Se uma fun\u00e7\u00e3o retornar mais de um valor e voc\u00ea se esquecer de colocar mais de uma vari\u00e1vel \u00e0 esquerda do <strong>&#8216;=&#8217;<\/strong> , s\u00f3 o primeiro valor ser\u00e1 atribu\u00eddo os demais se perder\u00e3o.<\/p>\n<h3 style=\"text-align: center;\"><strong>Userdata<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">\u00c9 um tipo de dado que armazena um ponteiro para um uma vari\u00e1vel do programa compilado em C; S\u00f3 \u00e9 utilizado para acessar dados e fun\u00e7\u00f5es em Prisma da linguagem C. ex: ao usar a fun\u00e7\u00e3o jan = ig.janela( ) o retorno \u00e9 um endere\u00e7o de um ponteiro GtkWindow em C.<\/p>\n<pre class=\"lang:prisma decode:true\">inclua 'igbr'\r\n\r\njan = ig.janela();\r\nimprima(  tipo ( jan )  ); \r\nig.conecte( jan, ig.destruido, \"sis.saia(0)\");\r\nig.componente_mostre( jan );\r\nig.fimprograma();\r\n\/\/ -- sa\u00edda = userdata \r\n\/\/exibe uma janelinha \r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><strong>Boolean<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Armazena apenas dois valores: <strong>falso e verdadeiro<\/strong> ( em ingl\u00eas: false , true );<\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #008000;\">ex:<\/span><\/p>\n<pre class=\"lang:prisma decode:true\">imprima ( tipo(falso) ); \r\n\/\/ -- &gt; sa\u00edda = boolean\r\na = falso;\r\nb = verdadeiro;\r\nse a == falso entao imprima'falso' fim\r\nse b == verdadeiro entao imprima 'verdadeiro' fim\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>Nulo<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">\u00c9 qualquer valor inexistente, vazio. Ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima (   tipo( x )    );  \r\n\/\/ se x n\u00e3o foi declarada ainda ent\u00e3o n\u00e3o existe,\r\n\/\/ logo a sa\u00edda ser\u00e1 nulo.\r\n\r\n<\/pre>\n<p><em><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"83\" height=\"113\" \/><\/a> Obs.: nulo \u00e9 considerado falso em testes de condi\u00e7\u00e3o em Prisma, ex.:<\/em><\/p>\n<pre class=\"lang:prisma decode:true\">x = nulo;\r\n\r\nse x entao \r\n   imprima 'existe' \r\nsenao \r\n   imprima 'nao existe' \r\nfim \/\/fim  se\r\n\r\n<\/pre>\n<p style=\"text-align: justify;\">Para matar uma vari\u00e1vel basta atribuir a ela o valor <strong>nulo:<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">x = 20; \/\/x existe, possui um valor\r\nx = nulo; \/\/ x n\u00e3o existe mais, seu valor \u00e9 nulo;<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: center;\"><strong>Cap. 4 &#8211; Escopo das vari\u00e1veis<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><strong>O escopo pode ser: global ou local.<\/strong><\/p>\n<p style=\"text-align: justify;\">Em Prisma, qualquer vari\u00e1vel declarada \u00e9<strong> global<\/strong>, isto \u00e9, seu valor pode ser usado em qualquer parte do programa ou dos m\u00f3dulos do programa principal.<\/p>\n<p style=\"text-align: justify;\">J\u00e1 a vari\u00e1vel de escopo local ao ser declarada deve ser antecedida pela palavra reservada <strong>local<\/strong> ex.:<\/p>\n<pre class=\"lang:prisma decode:true\">local x = 1;<\/pre>\n<p style=\"text-align: justify;\">Deste modo este tipo de vari\u00e1vel n\u00e3o \u00e9 vis\u00edvel fora do bloco ao qual pertence. O bloco pode ser uma fun\u00e7\u00e3o, um la\u00e7o condicional ou de repeti\u00e7\u00e3o, um bloco simples ou um programa Prisma.<\/p>\n<p style=\"text-align: justify;\">A vantagem em se declarar uma vari\u00e1vel local \u00e9 a seguran\u00e7a para que ela n\u00e3o seja modificada por uma fun\u00e7\u00e3o externa acidentalmente, ou em caso de d\u00favidas ao atribuir vari\u00e1veis com mesmo nome.<\/p>\n<p>Para entender melhor vejamos os exemplos:<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/exemplo de vari\u00e1veis locais e globais:\r\n\r\nfuncao mostre_var ( )\r\n       imprima ( var1 , var2 );\r\nfim \/\/fim funcao mostre_var\r\n\r\nfuncao inicie_var ( )\r\n     var1 = \"Ola!\" ;\r\n     local var2 = \"Mundo!\";\r\nfim \/\/fim funcao inicie_var\r\n\r\n\r\nfuncao inicie_programa ( )\r\n      inicie_var( ); \/\/chamando inicie_var\r\n      mostre_var ( );\/\/chamando mostre_var\r\nfim \/\/fim funcao inicie_programa\r\n\r\ninicie_programa ( ) ; \r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>O resultado ser\u00e1:<strong> Ola! nulo<\/strong><\/p>\n<p>A segunda vari\u00e1vel \u00e9 local por isso n\u00e3o \u00e9 vis\u00edvel fora da fun\u00e7\u00e3o <strong>inicie_var ( )<\/strong> e seu valor fora dela \u00e9 inexistente: nulo.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-557\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\" alt=\"dica\" width=\"79\" height=\"79\" \/><\/a>Para controlar o escopo das vari\u00e1veis sem precisar fazer uma fun\u00e7\u00e3o toda vez, podemos criar um bloco de comandos com as palavras reservadas<strong> inicio fim<\/strong>, veja:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">inicio  \/\/bloco\r\n   local var1 = 1;\r\n   local var2 = 2;\r\n\r\n  imprima ( var1 , var2 ); \r\n  \/\/sa\u00edda ser\u00e1 1   2\r\nfim \/\/fim bloco\r\n\r\nimprima ( var1 , var2 ); \r\n\/\/sa\u00edda ser\u00e1 nulo   nulo pois a vari\u00e1vel\r\n\/\/ n\u00e3o \u00e9 vis\u00edvel fora do bloco\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><strong>Cap. 5 &#8211; Controle de fluxo e la\u00e7os de repeti\u00e7\u00e3o <\/strong><\/h2>\n<h2 style=\"text-align: center;\"><strong>(se, enquanto, repita, para)<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Ao escrever um programa podemos querer que ele tome decis\u00f5es, por exemplo, fechar o programa se o usu\u00e1rio digitar <strong>&#8216;S&#8217;<\/strong> ou executar repetidas vezes uma fun\u00e7\u00e3o at\u00e9 chegar ao fim de um arquivo.<\/p>\n<p style=\"text-align: justify;\">Enfim, para isso existem os la\u00e7os de controle e repeti\u00e7\u00e3o. Esses comandos s\u00e3o t\u00e3o necess\u00e1rios que qualquer linguagem os possui, e com Prisma n\u00e3o \u00e9 diferente.<\/p>\n<p>Para exemplificar tomemos o primeiro exemplo acima, fechar o programa ao digitar <strong>&#8216;S&#8217;.<\/strong><\/p>\n<h3 style=\"text-align: center;\">Usando o comando &#8216;<strong>se&#8217; :<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>A estrutura b\u00e1sica \u00e9: <strong>se<\/strong> condi\u00e7ao <strong>entao<\/strong> &#8230;c\u00f3digo&#8230;<strong> fim<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">imprima (\"Digite S para Sair do programa, ou aperte Enter para continuar\");\r\n\r\n    opcao = leia ( ); \r\n\/\/l\u00ea o que for digitado pelo usu\u00e1rio e armazena o valor em opcao\r\n\r\n  se opcao == 'S' ou opcao == 's' entao\r\n            sis.saia( )\r\n  fim \/\/fim se opcao\r\n\r\nimprima (\"Voc\u00ea escolheu continuar...\");\r\nleia ( );\r\n\r\n<\/pre>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"56\" height=\"76\" \/><\/a> N\u00e3o esque\u00e7a de fechar o comando <strong>se<\/strong> com um <strong>fim<\/strong> respectivo. N\u00e3o se esque\u00e7a de usar a palavra <strong>entao<\/strong> depois da condi\u00e7\u00e3o.<\/p>\n<p>Se o usu\u00e1rio digitar o S ou s o programa \u00e9 fechado imediatamente.<\/p>\n<p>Note que mesmo o usu\u00e1rio n\u00e3o digitando nada o programa n\u00e3o tem muito o que fazer depois, e logo fecha.<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><strong>Colocando uma exce\u00e7\u00e3o para o comando se, usando o &#8216;senao&#8217;:<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Estrutura b\u00e1sica \u00e9: <strong>se<\/strong> condi\u00e7\u00e3o <strong>entao<\/strong> &#8230;c\u00f3digo&#8230; <strong>senao<\/strong> &#8230;c\u00f3digo da exce\u00e7\u00e3o&#8230;<strong> fim<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">imprima (\"digite um n\u00famero:\");\r\n\r\nnumero = leia ( ); \r\n\/\/ l\u00ea o que \u00e9 digitado pelo usu\u00e1rio e guarda o valor em n\u00famero\r\n\r\nnumero = convnumero (numero); \r\n\/\/converte string para n\u00famero\r\n\r\nse numero &lt; 0 entao\r\n\r\n       imprima (\"Numero menor que zero\\n\");\r\n\r\nsenao\r\n\r\n      imprima( \"Numero maior ou igual a zero\\n\");\r\n\r\nfim<\/pre>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Neste caso se a verifica\u00e7\u00e3o <strong>numero &lt; 0<\/strong> retornar verdadeiro a primeira fun\u00e7\u00e3o imprima ser\u00e1 executada, caso ela retorne falso a fun\u00e7\u00e3o depois do senao ser\u00e1 executada, \u00e9 f\u00e1cil entender, interprete desta maneira: <em>se numero digitado pelo usu\u00e1rio for menor que zero realiza a primeira op\u00e7\u00e3o sen\u00e3o realize a exce\u00e7\u00e3o que \u00e9 o segundo imprima.<\/em><\/p>\n<h3 style=\"text-align: center;\"><strong> usando o &#8216;se&#8217; o &#8216;senaose&#8217; e &#8216;senao&#8217;:<\/strong><\/h3>\n<p>Estrutura b\u00e1sica:<\/p>\n<p><strong>se<\/strong> condi\u00e7\u00e3o <strong>entao<\/strong> &#8230;c\u00f3digo&#8230; <strong>senaose<\/strong> condi\u00e7\u00e3o<strong> entao<\/strong> &#8230;codigo2 &#8230; <strong>senao<\/strong> &#8230;exce\u00e7\u00e3o&#8230; <strong>fim<\/strong><\/p>\n<p>Pode-se omitir o <strong>senao<\/strong> e usar somente o fim se n\u00e3o quiser nenhuma exce\u00e7\u00e3o, ficando assim:<\/p>\n<p><strong>se<\/strong> condi\u00e7\u00e3o <strong>entao<\/strong> &#8230;c\u00f3digo&#8230; <strong>senaose<\/strong> condi\u00e7\u00e3o <strong>entao<\/strong> &#8230;codigo2 &#8230; <strong>fim<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">O<strong> senaose<\/strong> \u00e9 justamente para testar uma s\u00e9rie de condi\u00e7\u00f5es subsequentes, caso uma delas seja verdadeira, o c\u00f3digo do seu corpo \u00e9 executado e as demais ignoradas. Veja um exemplo:<\/p>\n<pre class=\"lang:prisma decode:true\">imprima( \"Digite A B  ou C\");\r\n\r\nletra = leia ( ); \r\n\/\/ l\u00ea os dados digitados pelo usu\u00e1rio e armazena em letra\r\n\r\nse letra == 'a' entao\r\n\r\n     imprima (\"digitou A\");\r\n\r\nsenaose letra == 'b' entao\r\n\r\n     imprima (\"digitou B\");\r\n\r\nsenaose letra == 'c' entao\r\n\r\n     imprima(\"digitou C\");\r\n\r\nsenao\r\n\r\n     imprima(\"nao digitou A nem B nem C\");\r\n\r\nfim\r\n\r\nleia ();<\/pre>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>Comando enquanto<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Repete um bloco enquanto o retorno da condi\u00e7\u00e3o for verdadeiro, sua estrutura b\u00e1sica \u00e9:<\/p>\n<p><strong>enquanto<\/strong> condi\u00e7\u00e3o <strong> inicio<\/strong><\/p>\n<p>&#8230;.c\u00f3digo &#8230;..<\/p>\n<p><strong>fim<\/strong><\/p>\n<p>Exemplo:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">  \r\nlocal teste = \"\"; \/\/string vazia\r\n\r\ncont =  1;\r\n\r\nenquanto teste &lt;&gt; 's' inicio \r\n\/\/enquanto teste for diferente de 's'\r\n\r\n imprima (\"Digite s para sair, ou tecle enter para continuar \" , cont  );\r\n\r\n cont = cont + 1; \r\n\/\/acrescenta 1 no valor atual de cont\r\n\r\n teste = leia ( );\r\n\/\/l\u00ea os dados digitados pelo usu\u00e1rio e armazena em teste\r\n\r\nfim<\/pre>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><strong>usando o comando quebre:<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Se preferir voc\u00ea pode fazer um la\u00e7o <strong>enquanto<\/strong> infinito e controlar a repeti\u00e7\u00e3o por dentro do la\u00e7o usando o <strong>quebre<\/strong>:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\"> teste = \"\"\r\n\r\n cont =  1;\r\n\r\n enquanto verdadeiro inicio \r\n\/\/o la\u00e7o \u00e9 infinito j\u00e1 que verdadeiro \u00e9 sempre verdadeiro\r\n\r\n   imprima (\"Digite s para sair, ou tecle enter para continuar \" , cont  );\r\n   cont = cont + 1; \/\/acrescenta 1 no valor atual de cont\r\n   teste = leia ( ); \r\n   \/\/l\u00ea os dados digitados pelo usu\u00e1rio e armazena em teste\r\n                       \r\n   se teste == 's' entao quebre fim; \r\nfim<\/pre>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"55\" height=\"75\" \/><\/a> Ao usar <strong>quebre<\/strong> o la\u00e7o \u00e9 interrompido imediatamente.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">Comando repita<\/h3>\n<p>&nbsp;<\/p>\n<p>Seu funcionamento \u00e9 semelhante ao enquanto, repete um bloco at\u00e9 que a condi\u00e7\u00e3o seja verdadeira.<\/p>\n<p>Sua estrutura b\u00e1sica \u00e9:<\/p>\n<p><strong>repita <\/strong> &#8230;. comando &#8230;<strong> ate<\/strong> condicao<\/p>\n<pre class=\"lang:prisma decode:true\">teste = \"\";\r\n\r\nx = 1;\r\n\r\nrepita\r\n\r\n    imprima( \"Digite s para sair ou aperte enter para continuar\" , x );\r\n\r\n    teste = leia ( );\r\n\r\n    x = x + 1;\r\n\r\nate teste == 's'; \r\n\/\/ quando teste for igual a 's' o la\u00e7o \u00e9 interrompido<\/pre>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-557\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\" alt=\"dica\" width=\"66\" height=\"66\" \/><\/a>Outro exemplo imprimindo de 1 a 1000:<\/p>\n<pre class=\"lang:prisma decode:true\">local n = 1;\r\nrepita\r\n    imprima ( n );\r\n    n = n + 1;\r\nate n == 1000; \/\/imprime ate 1000 e para a repeti\u00e7\u00e3o\r\n<\/pre>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><\/h2>\n<h3 style=\"text-align: center;\">Comando &#8216;para&#8217; (num\u00e9rico)<\/h3>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"51\" height=\"69\" \/><\/a> O<em>bs.: este modelo \u00e9 chamado de num\u00e9rico porque consiste na repeti\u00e7\u00e3o de um n\u00famero inicial at\u00e9 um n\u00famero final.<\/em><\/p>\n<p>Este comando tamb\u00e9m serve para repeti\u00e7\u00e3o. Ao contr\u00e1rio dos demais, nele \u00e9 preestabelecido o n\u00famero de repeti\u00e7\u00f5es no pr\u00f3prio cabe\u00e7alho do comando. Para entender melhor veja:<\/p>\n<p>Estrutura b\u00e1sica: <strong>para<\/strong> var_inicial, var_final<strong> inicio <\/strong> &#8230;.comandos &#8230;. <strong> fim<\/strong><\/p>\n<p>ex.:<\/p>\n<pre class=\"toolbar:1 scroll:true lang:prisma decode:true\" title=\"exemplo do comando para\"> para i = 1 , 1000 inicio\r\n    imprima ( i );\r\n fim<\/pre>\n<p>Veja que o comando em si \u00e9 bem simples, leia o exemplo acima da seguinte forma:<\/p>\n<p><strong>para o valor inicial de i que \u00e9 1 incremente at\u00e9 chegar ao valor 1000 ;<\/strong><\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"51\" height=\"69\" \/><\/a> Note que i \u00e9 uma vari\u00e1vel local ao bloco do comando <strong>para<\/strong>, poderia ser um nome de sua escolha (desde que v\u00e1lido, lembre-se das regras ao declarar uma vari\u00e1vel em Prisma) &#8211; ex.:<strong> para<\/strong> cont = 1 , 1000<strong> inicio<\/strong> &#8230;c\u00f3digo&#8230; <strong>fim<\/strong>;<\/p>\n<p style=\"text-align: justify;\">Este primeiro exemplo foi o modo simples, existem outros modos do comando <strong>para<\/strong>, n\u00e3o se preocupe, veremos todos eles com calma, voc\u00ea dominar\u00e1 cada um aos poucos.<\/p>\n<h3 style=\"text-align: justify;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\">Adicionando o terceiro par\u00e2metro no comando <strong>para<\/strong>, o incremento:<\/h3>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">As vezes voc\u00ea pode querer que a repeti\u00e7\u00e3o seja de 2 em 2 ao inv\u00e9s de 1 em 1, neste caso devemos usar um terceiro par\u00e2metro no comando <strong>para<\/strong>, o incremento; o qual foi omitido no primeiro exemplo. Veja:<\/p>\n<p style=\"text-align: justify;\">Estrutura b\u00e1sica &#8211; <strong> para<\/strong> var_inicial , var_final , incremento<strong> inicio<\/strong> &#8230;comandos&#8230; <strong>fim<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">para i = 1 , 100 , 2 inicio\r\n       imprima ( i );\r\nfim\r\n<\/pre>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"62\" height=\"84\" \/><\/a> O<em>bs.: o n\u00famero 2 \u00e9 o tipo de incremento que significa o acr\u00e9scimo de 2 ao valor de i a cada repeti\u00e7\u00e3o, teremos ent\u00e3o na <\/em><em>execu\u00e7\u00e3o: 1 3 5 &#8230; e assim por diante sempre somando 2 . Poderia ser outro n\u00famero de sua prefer\u00eancia, por exemplo se <\/em>quisesse contar de 10 em 10 deveria usar 10 no lugar de 2.<\/p>\n<p style=\"text-align: justify;\">N<em>ote que ao omitir o terceiro par\u00e2metro o valor padr\u00e3o \u00e9 1.<\/em><\/p>\n<p style=\"text-align: justify;\"><em><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-557\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\" alt=\"dica\" width=\"61\" height=\"61\" \/><\/a>Nunca use o sinal de mais &#8216;+&#8217; para o incremento, ou gerar\u00e1 erro! Veja que os exemplos do comando<strong> para<\/strong> aqui s\u00e3o simples, apenas <\/em><em>imprimem o valor do incremento a cada repeti\u00e7\u00e3o, mas voc\u00ea pode adaptar e colocar qualquer comando v\u00e1lido no bloco de <\/em><em>repeti\u00e7\u00e3o, visto que o comando para \u00e9 muito poderoso em determinadas tarefas, veremos mais adiante.<\/em><\/p>\n<h3 style=\"text-align: justify;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>Determinando um decremento<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Em algumas situa\u00e7\u00f5es voc\u00ea vai preferir que o comando <strong>para<\/strong> inicie em um valor alto, 100 por exemplo, e diminua at\u00e9 chegar ao valor m\u00ednimo: 1 ou 0, por exemplo.<\/p>\n<p>Veja:<\/p>\n<p>Estrutura b\u00e1sica &#8211; <strong>para<\/strong> valor_maximo, valor_minimo , decremento <strong>inicio<\/strong> &#8230; c\u00f3digo &#8230; <strong>fim<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">para i = 100 , 1 , -1 inicio\r\n      imprima ( i );\r\nfim<\/pre>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"60\" height=\"81\" \/><\/a> Note que usamos o sinal de menos para o decremento. O valor do decremento foi -1, isto \u00e9, diminui 1 de i a cada repeti\u00e7\u00e3o, mas poderia ser outro valor como -2, -3 ou -10, para diminuir 2, 3 ou 10 de i a cada repeti\u00e7\u00e3o, isso depende do prop\u00f3sito do programa e do programador.<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>Comando &#8216;para&#8217; no modo especial (gen\u00e9rico)<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Trata-se de um modo bem espec\u00edfico de uso do comando <strong>para<\/strong> em que usamos iteradores especiais (fun\u00e7\u00f5es de incrementos que percorrem algum tipo de dado em sequ\u00eancia).<\/p>\n<p style=\"text-align: justify;\">Primeiro modo, lendo os \u00edndices de uma matriz:<\/p>\n<p style=\"text-align: justify;\">Estrutura b\u00e1sica &#8211; <strong>para<\/strong> var_indice , var_valor <strong>em <\/strong> <strong>ipares( matriz )<\/strong> <strong>inicio<\/strong> &#8230; c\u00f3digo &#8230; <strong>fim<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\" title=\"para gen\u00e9rico\">\/\/declarando uma matriz, lembre-se que em prisma \r\n\/\/o primeiro elemento \u00e9 o \u00edndice 1 e n\u00e3o zero como nas outras linguagens  \r\n\r\nmatriz = { \"amarelo\", \"azul\", \"branco\",\r\n            \"cinza\" , \"marrom\" , \"verde\",\r\n           \"vermelho\" };\r\n\/\/a matriz pode ser feita em v\u00e1rias linhas!\r\n\r\npara indice, valor em ipares( matriz ) inicio\r\n\r\n      imprima (  indice ,  '=' , valor ); \r\n     \/\/imprime o \u00edndice e o valor correspondente\r\n\r\nfim<\/pre>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"70\" height=\"95\" \/><\/a> Note que<strong> indice<\/strong> e<strong> valor<\/strong> s\u00e3o vari\u00e1veis locais que receber\u00e3o valores da tabela a cada repeti\u00e7\u00e3o. A fun\u00e7\u00e3o ipares() percorre os \u00edndices e valores de uma tabela em Prisma. Note tamb\u00e9m que n\u00e3o usamos a v\u00edrgula no cabe\u00e7alho do comando para ao inv\u00e9s disso usamos a palavra reservada<strong> em<\/strong>.<\/p>\n<p style=\"text-align: justify;\"><strong>(<em>ipares vem de \u00edndice pares.)<\/em><\/strong><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Este exemplo do <strong>para<\/strong> gen\u00e9rico funciona muito bem em matrizes que possuem apenas \u00edndices num\u00e9ricos, mas n\u00e3o funciona quando o \u00edndice \u00e9 um campo, por exemplo, matriz [ &#8216;nome&#8217; ] = &#8216;Amanda&#8217;; no exemplo acima n\u00e3o imprimiria Amanda, somente as chaves num\u00e9ricas.<\/p>\n<p style=\"text-align: justify;\">N\u00e3o se preocupe! Para isso temos outra fun\u00e7\u00e3o: o<strong> pares. <\/strong>Simples, n\u00e3o \u00e9?<\/p>\n<p>veja:<\/p>\n<p>estrutura b\u00e1sica &#8211;<strong> para<\/strong> chave , valor<strong> em pares (<\/strong>tabela<strong>) inicio<\/strong> &#8230;comandos &#8230; <strong>fim<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\">\/\/exemplo do uso da fun\u00e7\u00e3o pares() no comando para gen\u00e9rico:\r\n\r\ndados = { 12, 123, 1234, nome = \"Amanda\",\r\n          idade = 23 , telefone = '65 xxxx-xxxx',\r\n          12345 };\r\ndados.novocampo = \"novocampo\";\r\n\r\npara chave, valor em pares ( dados ) inicio\r\n    imprima ( chave , valor ); \r\n\/\/imprimir\u00e1 cada campo e valor da tabela criada acima\r\nfim \/\/fim para\r\n\r\n<\/pre>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"50\" height=\"68\" \/><\/a> Note que a tabela criada no exemplo acima \u00e9 mista, ou seja, possui valores indexados de forma num\u00e9rica e pares de campo com valor, ainda inclu\u00edmos um novo campo depois da cria\u00e7\u00e3o da tabela dados.<\/p>\n<p>Veja que a atribui\u00e7\u00e3o de chave\/valor na fun\u00e7\u00e3o pares( ) vai na ordem de \u00edndices num\u00e9ricos ( na sequ\u00eancia 1-2-3 &#8230;) para depois os campos. Estes s\u00e3o impressos na sequ\u00eancia de cria\u00e7\u00e3o.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: center;\"><strong> Cap.6 Fun\u00e7\u00f5es<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Em Prisma podemos dizer que fun\u00e7\u00e3o \u00e9 uma vari\u00e1vel especial que pode executar um bloco de c\u00f3digo ao ser chamada, al\u00e9m disso, ela pode receber, manipular e devolver valores. Em outras linguagens, \u00e0s vezes, s\u00e3o chamadas de procedures ou sub-rotinas.<\/p>\n<p style=\"text-align: justify;\">Enfim, na pr\u00e1tica temos um programa bem organizado se utilizarmos fun\u00e7\u00f5es da forma correta do que um arquivo com um enorme emaranhado de comandos.<\/p>\n<p>Para fazer uma fun\u00e7\u00e3o usamos a palavra reservada <strong>funcao,<\/strong> veja:<\/p>\n<p>Estrutura b\u00e1sica &#8211; <strong> funcao <\/strong> nome ( par\u00e2metros <strong>)<\/strong> &#8230;c\u00f3digos&#8230;<strong> fim <\/strong><\/p>\n<pre class=\"lang:prisma decode:true\" title=\"exemplo de fun\u00e7\u00e3o\">\/\/exemplo de fun\u00e7\u00e3o em Prisma\r\n\r\nfuncao mostre_ola ( )\r\n      imprima( \"Ola Mundo\\n\");\r\nfim \/\/fim funcao\r\n\r\n\/\/chamando a fun\u00e7\u00e3o:\r\nmostre_ola ( );\r\n\r\nleia( ); \r\n\/\/no windows \u00e9 bom usar o comando leia para o programa\r\n\/\/ n\u00e3o fechar de repente. Se for executado no prismacod n\u00e3o \u00e9 necess\u00e1rio!\r\n\r\n<\/pre>\n<p>Note que a fun\u00e7\u00e3o \u00e9 bem simples, n\u00e3o recebe par\u00e2metro nem retorna dados, apenas imprima a frase <strong>Ola Mundo.<\/strong><\/p>\n<p>Como fun\u00e7\u00f5es em Prisma s\u00e3o vari\u00e1veis, existe um outra forma de fazer a fun\u00e7\u00e3o acima, veja:<\/p>\n<pre class=\"lang:prisma decode:true\">mostre_ola = funcao ( )\r\n    imprima (\"Ola Mundo\\n\");\r\nfim \/\/fim funcao\r\n\r\nmostre_ola( );\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">Definindo par\u00e2metros<\/h3>\n<p>&nbsp;<\/p>\n<p>Veja, o mesmo exemplo acima, mas modificado para receber um valor e imprimir esse valor:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/exemplo funcao recebendo valores\r\nfuncao escreva ( msg )\r\n    imprima ( msg );\r\nfim \/\/fim funcao\r\n\r\nescreva ( \"Ola Mundo em Prisma!\\n\");\r\n<\/pre>\n<p style=\"text-align: justify;\">No exemplo acima n\u00f3s definimos um par\u00e2metro para a fun\u00e7\u00e3o escreva, criando uma vari\u00e1vel entre os par\u00eanteses, sendo assim essa vari\u00e1vel \u00e9 local, isto \u00e9, s\u00f3 pode ser acessada no bloco da fun\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\">Dentro do corpo da fun\u00e7\u00e3o usamos a fun\u00e7\u00e3o imprima para imprimir o argumento passado para a fun\u00e7\u00e3o escreva.<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"53\" height=\"72\" \/><\/a> <em>Obs. Nunca coloque ponto e v\u00edrgula ap\u00f3s fechar o par\u00eanteses da fun\u00e7\u00e3o. ( funcao ( msg ); \/\/ errado )<\/em><\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>Devolvendo valores com o comando retorne<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Al\u00e9m de receber valores uma fun\u00e7\u00e3o pode retornar valores, veja:<\/p>\n<pre class=\"lang:prisma decode:true\">funcao soma (  n1 , n2 )\r\n  local resultado = n1 + n2 ;\r\n  retorne resultado; \r\n \/\/retornando o valor da vari\u00e1vel resultado\r\nfim \/\/fim funcao\r\n\r\na = soma ( 9 , 3 ); \r\n\/\/ a soma de 9 e 3 \u00e9 retornada para a vari\u00e1vel a;\r\n\r\nimprima ( a ); \r\n\/\/imprime o valor retornado;<\/pre>\n<p>&nbsp;<\/p>\n<p><em><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"63\" height=\"85\" \/><\/a> Observe que uma fun\u00e7\u00e3o pode receber muito mais do que dois par\u00e2metros<\/em><\/p>\n<p><em><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-557\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\" alt=\"dica\" width=\"76\" height=\"76\" \/><\/a>Dica &#8211; sempre nomeie as fun\u00e7\u00f5es de acordo com a tarefa que elas realizam, isso ajuda a ler e entender um programa futuramente.<\/em><\/p>\n<p><em>Ex.: raiz_quadrada ( ) ; le_texto ( ) ; dobro ( ) ; etc.<\/em><\/p>\n<p>&nbsp;<\/p>\n<p>Uma vantagem em Prisma \u00e9 que uma fun\u00e7\u00e3o pode retornar mais de um resultado ao mesmo tempo, isso \u00e9 feito por meio do uso de v\u00edrgulas. Veja:<\/p>\n<pre class=\"lang:prisma decode:true\">funcao maior_para_menor ( n1 , n2 )\r\n\r\n            se n1 &gt; n2 entao \r\n                 primeiro = n1 ;\r\n                 segundo = n2;\r\n           senao\r\n                 primeiro = n2;\r\n                 segundo = n1;\r\n           fim \/\/fim se\r\n\r\n    retorne primeiro , segundo; \r\n    \/\/retorna dois valores;\r\nfim \/\/fim funcao\r\n\r\n\r\nvalor1 , valor2 = maior_para_menor ( 80, 100 ); \r\n\/\/recebendo os dois valores em ordem do maior para o menor\r\n\r\nimprima( valor1, valor2 );\r\n\r\n<\/pre>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"53\" height=\"72\" \/><\/a> <em> Veja que para cada retorno deve haver uma vari\u00e1vel \u00e0 esquerda do operador de atribui\u00e7\u00e3o &#8216;=&#8217;, e cada vari\u00e1vel deve <\/em><em>estar separada por v\u00edrgula.<\/em><\/p>\n<p><strong>Caso um par\u00e2metro fosse omitido ao chamar a fun\u00e7\u00e3o, o segundo par\u00e2metro ficaria com valor nulo, veja:<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>valor1 , valor2 = maior_para_menor ( 9 ) ;<\/strong> \/\/n2 na fun\u00e7\u00e3o n\u00e3o foi passado ent\u00e3o seu valor \u00e9 nulo. E isso ocasionaria um erro interno na fun\u00e7\u00e3o, pois ao tentar concatenar nulo ou executar uma opera\u00e7\u00e3o com valor nulo, o programa falha e uma mensagem de erro \u00e9 exibida.<\/p>\n<p style=\"text-align: center;\"><strong>E se o n\u00famero de vari\u00e1vel n\u00e3o for igual ao n\u00famero de retorno?<\/strong><\/p>\n<p><strong>valor = maior_para_menor ( 1, 2 );<\/strong><\/p>\n<p>Neste caso somente o primeiro retorno foi passado para a vari\u00e1vel valor, o segundo retorno foi descartado!<\/p>\n<p style=\"text-align: justify;\">Se o n\u00famero de argumentos passados for maior do que os par\u00e2metros exigidos pela fun\u00e7\u00e3o, os argumentos extras s\u00e3o descartados.<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">Recursividade em fun\u00e7\u00f5es<\/h3>\n<p>&nbsp;<\/p>\n<p>Este efeito \u00e9 obtido quando uma fun\u00e7\u00e3o chama a si mesma. N\u00e3o \u00e9 muito recomendado usar este recurso pelo perigo de erro dif\u00edcil de ser detectado, e pelo simples fato de o mesmo poder ser feito de outra forma mais segura.<\/p>\n<p>Veja, a fun\u00e7\u00e3o chama a si mesma e soma \u00e0 vari\u00e1vel um valor que \u00e9 o retorno da pr\u00f3pria fun\u00e7\u00e3o com o par\u00e2metro igual a ela mesma menos 1 v\u00e1rias vezes at\u00e9 chegar a zero:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">\/\/exemplo de recursividade em Prisma,\r\n\/\/ quando uma fun\u00e7\u00e3o chama a si mesma:\r\n\r\nfuncao soma ( valor )\r\n       se valor == 0  entao    \r\n               imprima ( valor ) ; \r\n               retorne valor;\r\n       senao\r\n               valor = valor + soma( valor - 1 ) ;\r\n               imprima ( valor );\r\n               \r\n               retorne valor;\r\n        fim \/\/fim se\r\n\r\nfim \/\/fim funcao\r\n\r\nsoma ( 3 ) ; \r\n\/\/ o resultado \u00e9 a soma de 3 + 2 + 1 + 0 que \u00e9 6\r\n\r\n<\/pre>\n<p>Note que a sequ\u00eancia de impress\u00e3o na tela \u00e9: 0 1 3 e 6; em cada linha. Isso ocorre porque a fun\u00e7\u00e3o busca um resultado em seu retorno at\u00e9 chegar a zero, ent\u00e3o de tr\u00e1s para frente ela vai somando os resultados.<\/p>\n<p><span style=\"color: #000080;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/entendendo.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-582\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/entendendo.jpeg\" alt=\"entendendo\" width=\"117\" height=\"123\" \/><\/a><span style=\"color: #333333;\">Para entender, imagine ao passar o n\u00famero 3 todo o processo que a fun\u00e7\u00e3o faz:<\/span><\/span><\/p>\n<p><span style=\"color: #333333;\">1 &#8211; fun\u00e7\u00e3o soma \u00e9 chamada com o par\u00e2metro numero 3:<\/span><\/p>\n<p><span style=\"color: #333333;\"> compara 3 com 0 n\u00e3o \u00e9 igual, entao: valor \u00e9 igual a valor + soma ( 3 &#8211; 1 );<\/span><\/p>\n<p><span style=\"color: #333333;\">2 &#8211; fun\u00e7\u00e3o soma chamada novamente mas com o par\u00e2metro n\u00famero 2 ( que \u00e9 o resultado de 3 &#8211; 1);<\/span><\/p>\n<p><span style=\"color: #333333;\"> compara 2 com 0 n\u00e3o \u00e9 igual ent\u00e3o: valor \u00e9 igual valor + a soma ( 2 &#8211; 1 );<\/span><\/p>\n<p><span style=\"color: #333333;\">3 &#8211; soma \u00e9 chamada novamente de dentro dela mesma com o valor 1 ( resultado de 2 -1 )<\/span><\/p>\n<p><span style=\"color: #333333;\"> compara 1 com 0 n\u00e3o \u00e9 igual ent\u00e3o: valor \u00e9 igual a valor + soma( 1 &#8211; 1 );<\/span><\/p>\n<p><span style=\"color: #333333;\">4 &#8211; soma \u00e9 chamada novamente com valor 0 como par\u00e2metro ( resultado de 1 &#8211; 1 )<\/span><\/p>\n<p><span style=\"color: #333333;\"> compara 0 com 0, \u00e9 igual ent\u00e3o retorna valor que \u00e9 0;<\/span><\/p>\n<p><span style=\"color: #333333;\"> ao chegar ao resultado zero, todas as chamadas da fun\u00e7\u00e3o soma v\u00e3o retrocedendo o valor somando o \u00faltimo com o anterior, 0 + 1 + 2 + 3 chegando no resultado final 6, por isso na tela apareceu os n\u00fameros nesta ordem:<\/span><\/p>\n<pre class=\"nums:false lang:default highlight:0 decode:true\">0\r\n\r\n1\r\n\r\n2\r\n\r\n3\r\n\r\n6<\/pre>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Como dito antes n\u00e3o \u00e9 recomendado o uso da recursividade pelo fato de que as possibilidades de gerar um erro oculto s\u00e3o maiores, e porque o mesmo resultado pode ser obtido de uma outra forma mais segura. \u00c9 totalmente dispens\u00e1vel o uso da recursividade, at\u00e9 mesmo pela sua complexidade.<\/p>\n<p>Veja a fun\u00e7\u00e3o anterior de outra forma mais segura:<\/p>\n<pre class=\"lang:prisma decode:true\">funcao soma ( valor )\r\n  local temp = 0;\r\n   para i = 0 , valor  inicio \r\n   \/\/de i que \u00e9 igual a 0 at\u00e9 valor\r\n           temp = temp + i;\r\n           imprima (temp);\r\n   fim \/\/fim para\r\n\r\n  retorne temp;\r\nfim \/\/fim funcao\r\n\r\nsoma ( 3 );<\/pre>\n<p>Veja que o comando <strong>para<\/strong> torna a recursividade obsoleta, sem necessidade.<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-557\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/dica.jpeg\" alt=\"dica\" width=\"74\" height=\"74\" \/><\/a> Uma detalhe ao se falar de fun\u00e7\u00f5es \u00e9 que quando o \u00fanico argumento for uma string ou tabela, podemos dispensar o uso de par\u00eanteses, veja:<\/p>\n<pre class=\"lang:prisma decode:true\">    \r\n imprima 'ola mundo';\r\n\r\n funcao imp_tabela( tab )\r\n\r\n     para i = 1 , #tab inicio\r\n            imprima( tab[i] );\r\n     fim \/\/fim para\r\n\r\n fim \/\/fim funcao \r\n\r\nimp_tabela {\"Maria\", \"Joao\", \r\n            \"Marcos\", \"Paulo\",\r\n            \"Gabriela\"};\r\n\r\n\/\/note que funciona se a string ou tabela \r\n\/\/for passada diretamente como \u00fanico argumento.\r\n\/\/com uma vari\u00e1vel n\u00e3o daria certo.\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Al\u00e9m de tudo que vimos acima sobre fun\u00e7\u00f5es, um aspecto interessante \u00e9 que elas podem ser passadas como argumentos para outras fun\u00e7\u00f5es ou retornar fun\u00e7\u00f5es, veja:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">funcao recebe_funcao (   func , param )\r\n      retorne      func( param );\r\nfim\r\n\r\n\r\nfuncao quadrado ( num )\r\n       retorne num*num; \r\n   \/\/retorna o n\u00famero vezes ele mesmo,\r\n  \/\/ ou seja, elevado ao quadrado;\r\nfim\r\n\r\nfuncao cubo ( num )\r\n      retorne num*num*num;\r\nfim\r\n\r\na = recebe_funcao ( quadrado , 2 );\r\n\/\/passamos a fun\u00e7\u00e3o quadrado com primeiro par\u00e2metro.\r\n\r\nimprima ( a ) ; \/\/saida ser\u00e1 4;\r\n\r\nb = recebe_funcao ( cubo , 2 );\r\n\r\nimprima( b ) ; \/\/sa\u00edda ser\u00e1 8 ( 2 * 2 * 2 );\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">N\u00famero indefinido de par\u00e2metros em fun\u00e7\u00f5es<\/h3>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Lembre-se da fun\u00e7\u00e3o imprima() que pode receber um, dois, tr\u00eas, ou indefinidamente mais par\u00e2metros (claro que n\u00e3o infinito). Para fazermos isso em Prisma usamos o sinal de retic\u00eancias &#8216;&#8230;&#8217; dentro dos par\u00eanteses no cabe\u00e7alho da fun\u00e7\u00e3o. Veja:<\/p>\n<pre class=\"lang:prisma decode:true\">funcao some_todos (  ...  ) \r\n     local tabela_num = { ... };\r\n     local tmp = 0;\r\n     para i = 1 , #tabela_num inicio\r\n          tmp = tmp + tabela_num[i];\r\n     fim \/\/fim para\r\n retorne tmp;\r\nfim \/\/fim funcao\r\n\r\nimprima(  some_todos( 2 , 3 , 5 )  );\r\nimprima( some_todos( 2 , 3 , 6, 54, 32 , 556 , 7)  );\r\n\r\n\/\/n\u00e3o importa se \u00e9 um ou cem argumentos passados,\r\n\/\/a fun\u00e7\u00e3o retornar\u00e1 a soma de todos.\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Veja que os <strong>&#8216;&#8230;&#8217; <\/strong>representam o n\u00famero variado de argumentos que podemos colocar entre chaves e com isso criar uma tabela com todos os argumentos passados, n\u00e3o importa se um ou cem ou mais.<\/p>\n<p>Veja a sa\u00edda no modo prompt do interpretador:<\/p>\n<p><strong>Prisma 1.0.9 Interpretador Prisma por &lt;adalbermirom@gmail.com&gt;<\/strong><br \/>\n<strong>Seja Bem-vindo! Tente digitar algum comando como: imprima(&#8216;Ola, Mundo!&#8217;)<\/strong><\/p>\n<p><strong>&gt;&gt;&gt; funcao some_todos ( &#8230; ) <\/strong><br \/>\n<strong> &#8230; local tabela_num = { &#8230; };<\/strong><br \/>\n<strong> &#8230; local tmp = 0;<\/strong><br \/>\n<strong> &#8230; para i = 1 , #tabela_num inicio<\/strong><br \/>\n<strong> &#8230; tmp = tmp + tabela_num[i];<\/strong><br \/>\n<strong> &#8230; fim \/\/fim para<\/strong><br \/>\n<strong> &#8230; retorne tmp;<\/strong><br \/>\n<strong> &#8230; fim \/\/fim funcao<\/strong><br \/>\n<strong>&gt;&gt;&gt; <\/strong><br \/>\n<strong>&gt;&gt;&gt; imprima( some_todos( 2 , 3 , 5 ) );<\/strong><br \/>\n<strong>10<\/strong><br \/>\n<strong>&gt;&gt;&gt; imprima( some_todos( 2 , 3 , 6, 54, 32 , 556 , 7) );<\/strong><br \/>\n<strong>660<\/strong><br \/>\n<strong>&gt;&gt;&gt; <\/strong><br \/>\n<strong>&gt;&gt;&gt; \/\/n\u00e3o importa se \u00e9 um ou cem argumentos passados,<\/strong><br \/>\n<strong>&gt;&gt;&gt; \/\/a funcao retornar\u00e1 a soma de todos.<\/strong><\/p>\n<p>&nbsp;<\/p>\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;\"><\/h2>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><\/h2>\n<h2 style=\"text-align: center;\"><strong>Cap. 7 Operador de tamanho e operadores aritm\u00e9ticos<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2014\/12\/matematica.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-164 aligncenter\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2014\/12\/matematica.jpeg\" alt=\"matematica\" width=\"99\" height=\"58\" \/><\/a><\/p>\n<p style=\"text-align: left;\"><strong>S\u00e3o eles:<\/strong><\/p>\n<p><span style=\"color: #333333;\"><strong>#<\/strong> <\/span>(tamanho)<\/p>\n<p><span style=\"color: #333333;\"><strong>*<\/strong><\/span> (vezes),<span style=\"color: #333333;\"><strong> \/<\/strong> <\/span>(divis\u00e3o)<span style=\"color: #333333;\"><strong> +<\/strong><\/span> (soma) , <span style=\"color: #333333;\"><strong>&#8211;<\/strong><\/span> (subtra\u00e7\u00e3o) , <span style=\"color: #333333;\"><strong>%<\/strong><\/span> (resto) , <span style=\"color: #333333;\"><strong>^<\/strong><\/span> (elevado a);<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p><strong>Veja como usar cada um deles:<\/strong><\/p>\n<h4 style=\"text-align: center;\"><strong> # <\/strong><\/h4>\n<h4 style=\"text-align: center;\"><\/h4>\n<h4 style=\"text-align: center;\"><strong>(determina o tamanho de strings e tabelas) :<\/strong><\/h4>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">frase = \"o tamanho desta frase e = \"\r\n\r\nimprima(  frase , #frase );  \r\n\/\/ sa\u00edda - o tamanho desta frase e =    26 \r\n   \r\ntab = { \"um elemento\" , \"outro elemento\" , 3, 4, 5, 6, 7, 8, 9 };\r\n\r\nimprima( \"A tabela tab tem\" , #tab , \"elementos\\n\" ); \r\n\/\/sa\u00edda - A tabela tab tem      9     elementos\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>Operadores matem\u00e1ticos ( servem para fazer opera\u00e7\u00f5es aritm\u00e9ticas):<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<pre class=\"lang:prisma decode:true\">imprima ( \"\\na soma de 10 e 2 = \" .. 10 + 2 );  \r\n\/\/ o \\n N\u00e3o aparece na sa\u00edda, caractere de escape nova linha\r\n \r\nimprima ( \"\\na subtracao de 10 por 2 = \" .. 10 - 2 ); \r\n\/\/lembre-se que os '..' serve para unir strings\r\n\/\/ao unir um n\u00famero a uma string, \r\n\/\/o n\u00famero \u00e9 convertido automaticamente para string!\r\n \r\nimprima( \"\\n10 vezes 2 = \" .. 10 * 2 );\r\n \r\nimprima( \"\\n10 dividido por 2 = \" .. 10 \/ 2 );\r\n \r\nimprima ( \"\\no resto de 10 dividido por 3 = \" .. 10 % 3 );\r\n \r\nimprima( string.formate ( \r\n \"numero com 4 casas decimais = %.4f , formatado para 2 casas = %.2f \" ,\r\n 2.1234 , \r\n 2.1234                \r\n )   \r\n);\r\n \r\nimprima ( \"\\n10 elevado a 2 = \" .. 10^2 );\r\n \r\nimprima ( \"\\nRaiz quadrada de 100 = \" .. 100^ (1\/2)   );\r\n \r\nimprima ( \"\\nRaiz cubica de 27 = \" .. 27^(1\/3)    );\r\n \r\nimprima ( \"\\nRaiz Quadrupla de 16 = \"  .. 16^(1\/4)  );\r\n \r\nimprima( \"\\n\\n15 por cento de 39 = \" .. 15 * (39\/100)  );\r\n\r\n<\/pre>\n<p><strong>Mais adiante veremos a biblioteca &#8216;mat&#8217; com fun\u00e7\u00f5es especiais para matem\u00e1tica e trigonometria;<br \/>\n<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1 style=\"text-align: left;\"><\/h1>\n<p>&nbsp;<\/p>\n<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 style=\"text-align: justify;\">Prisma, assim como outras linguagens, possui fun\u00e7\u00f5es predefinidas, e que ficam organizadas em conjuntos chamados de biblioteca. Bibliotecas, tamb\u00e9m chamadas libs, podem ser internas ou externas.<\/p>\n<p style=\"text-align: justify;\">As internas s\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 carreg\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 mais 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>S\u00e3o as fun\u00e7\u00f5es simples tais como a imprima( ) ; tipo ( ) entre outras. Elas n\u00e3o seguem o modelo das 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;\"><strong>imprima ( &#8230; )<\/strong><\/h3>\n<p style=\"text-align: justify;\">Exibe na tela preta do cmd no Windows ou terminal no Linux texto ou n\u00fameros. Podemos passar v\u00e1rios argumentos de uma s\u00f3 vez separados por v\u00edrgulas;<\/p>\n<p style=\"text-align: justify;\">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 faz a impress\u00e3o ir para linha seguinte.<\/p>\n<hr \/>\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, podendo 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;\"><strong> 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 ser 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;\"><\/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>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><strong> * _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> * 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> * args &#8211;<\/strong> \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;\">poe ( string )<\/h3>\n<p style=\"text-align: justify;\"><span style=\"color: #000000;\"> 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, n\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> 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 <\/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>&nbsp;<\/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 desde o in\u00edcio com a fun\u00e7\u00e3o<em><strong> inclua<\/strong>. <\/em>Ficando assim: <strong>executestring &#8220;seu_comando_aqui&#8221; .<\/strong><\/p>\n<hr \/>\n<h3 style=\"text-align: center;\"><span style=\"color: #000000;\"><strong> executearquivo ( &#8220;caminho_do_arquivo.prisma&#8221; )<\/strong><\/span><\/h3>\n<p style=\"text-align: justify;\">Semelhante ao comando executestring, mas ao inv\u00e9s de executar uma string, executa um programa prisma, que pode estar compilado ou n\u00e3o.<\/p>\n<p style=\"text-align: justify;\">Muito \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, caso contr\u00e1rio sim.<\/p>\n<p style=\"text-align: justify;\">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><a href=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"68\" height=\"92\" \/><\/a> 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;\">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\"> [[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: <strong>\/<\/strong><\/p>\n<pre class=\"lang:prisma decode:true\"> \r\n'\/home\/user\/ola.prisma'<\/pre>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>carregue ( string )<\/strong><\/h3>\n<p style=\"text-align: justify;\">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;\">Se houver erros, simplesmente nenhum valor \u00e9 retornado e o valor da fun\u00e7\u00e3o ser\u00e1 nulo;<\/p>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><\/h3>\n<h3 style=\"text-align: center;\"><strong>carreguearquivo ( &#8220;programa.prisma&#8221; )<\/strong><\/h3>\n<p style=\"text-align: justify;\"><strong> 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;\">Esta 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\">execute_arquivo = carreguearquivo ( 'ola.prisma' );\r\n\r\nse execute_arquivo entao\r\n        execute_arquivo ( ) ;\r\nsenao\r\n       imprima ( \"erro no arquivo\");\r\nfim \/\/executa o programa carregado.\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\"><strong> convnumero( string )<\/strong><\/h3>\n<p style=\"text-align: justify;\">Converte uma string para numero. 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;\"><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;\"><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 v\u00e1lido.<\/p>\n<p style=\"text-align: justify;\">Sua sintaxe \u00e9 :<strong> <span style=\"color: #0000ff;\"> x = tente ( 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;\">cod ( &#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 tecla 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, \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;\">pchame ( funcao, argumentos )<\/h3>\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 principal. Ela retorna dois valores, o primeiro \u00e9 um boolean (falso ou verdadeiro) 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 a 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( funcao , funcao_erro , argumentos &#8230; )<\/h3>\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( [&#8216;#&#8217; ou inteiro] , args &#8230; )<\/h3>\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: selecione ( 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\">   funcao    tam ( ... );\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 \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: voce escolher a partir do argumento 3 56 78 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><a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/01\/biblioteca_str.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1078\" src=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/01\/biblioteca_str.jpg\" alt=\"biblioteca_str\" width=\"159\" height=\"120\" \/><\/a><\/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;\">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 representa\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 da 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 style=\"text-align: center;\"><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: <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: <\/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: string.procure( &#8220;string maior&#8221; , &#8220;chave&#8221; , n\u00famero_inicio );<\/p>\n<p><strong> string 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 duas 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 pelo 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 indispens\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 a 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;\">Sintaxe: retorno = 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\nimprima(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.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-556\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/obs.png\" alt=\"obs\" width=\"59\" height=\"80\" \/><\/a> 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: retorno1 , 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.br4.biz\/wp-content\/uploads\/2015\/01\/entendendo.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-582\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2015\/01\/entendendo.jpeg\" alt=\"entendendo\" width=\"114\" height=\"120\" \/><\/a> Voc\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; = %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: (ex.: ola 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;\"> <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 v\u00e1lida exceto n\u00fameros e sinais;<\/p>\n<p>Tente modificar o programa acima substituindo &#8220;%a+&#8221; por &#8220;%d+&#8221; 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(   string.tamanho (  'Ola Mundo em Prisma'  )   );\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: retorno(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: retorno = 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;\">string.inverta<\/h3>\n<p>Retorna uma string com ordem das letras invertidas. Sintaxe: 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;\">(ou se preferir: string.corte)<\/h3>\n<p>Retorna uma substring de uma maior. Sintaxe: 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<h1 style=\"text-align: center;\">Cap. 3 fun\u00e7\u00f5es do sistema operacional<\/h1>\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.: 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 ( 2015, 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 em 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: nome = 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 = \/tmp\/prisma_yShId3<\/p>\n<p>Windows Xp = \\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: linux = \/tmp\/prisma_yShId3.ext<\/p>\n<p>no Windows = \\s1fo..ext \/\/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( local [, tipo ] )<\/h3>\n<h3><\/h3>\n<p>Define o idioma (local) atual do programa.<\/p>\n<p>sintaxe: sis.deflocal( local [, 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 = Portuguese_Brazil.1252<\/p>\n<p>Se quis\u00e9ssemos definir o idioma seria :<\/p>\n<pre class=\"lang:default decode:true \">sis.deflocal ( \"pt_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  string_formato, numerico, moeda, tempo_formato, tudo;<\/pre>\n<h3 style=\"text-align: center;\">sis.durma( milissegundos )<\/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><a href=\"https:\/\/linguagemprisma.br4.biz\/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=\"https:\/\/linguagemprisma.br4.biz\/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=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/01\/icos2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-989\" src=\"https:\/\/linguagemprisma.br4.biz\/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=\"https:\/\/linguagemprisma.br4.biz\/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=\"https:\/\/linguagemprisma.br4.biz\/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=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/01\/icos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-990\" src=\"https:\/\/linguagemprisma.br4.biz\/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 <\/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  Prisma')<\/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<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;\">es.saida( )<\/h3>\n<p>Abre um arquivo de saida padr\u00e3o para escrita, ex.:<\/p>\n<pre class=\"lang:default decode:true \">   es.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')  inicio\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')  inicio\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<h2 style=\"text-align: center;\"><strong>Segundo modo:<\/strong><\/h2>\n<h3 style=\"text-align: center;\">es.abra( )<\/h3>\n<p>Sintaxe: objeto_arquivo = es.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> &#8212; 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> &#8212; escrita bin\u00e1ria, apaga o conte\u00fado original<\/p>\n<p><strong>&#8216;adicao&#8217;<\/strong> &#8212; 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  =  es.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  =  es.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  =  es.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<hr \/>\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><a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/01\/trigonometria.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1060\" src=\"https:\/\/linguagemprisma.br4.biz\/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;\">mat.absoluto( 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 x 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 imprima( 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 <strong>m<\/strong> e <strong>e<\/strong> tais que <strong>n = m2^e<\/strong>, <strong>e<\/strong> \u00e9 um inteiro e o valor absoluto de <strong>m<\/strong> est\u00e1 no intervalo <strong>[0.5, 1)<\/strong> (<strong>ou zero quando x \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 HUGE_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;  mat.infinito )\r\n\/\/falso\r\n\r\n<\/pre>\n<h3 style=\"text-align: center;\">mat.ldexp( m , e )<\/h3>\n<p>Retorna m2^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, retorna 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\"> x = 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    0\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 , 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 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 por 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(  \"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 ( 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>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'; \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>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 )  );\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>&nbsp;<\/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 \"> tab = {9,7,8,1,6,2,5,4,3,0}\r\n imprima( 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> a&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, o 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. Se 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 , ', ' )  );\r\n\r\n\/\/  12, 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 )    );\r\n\r\n\/\/  12     234     2345     465    213     2     44<\/pre>\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 cr\u00edtica ou d\u00favida poste nos coment\u00e1rios, <a href=\"http:\/\/linguagemprisma.br4.biz\/prisma_forum\/\" target=\"_blank\">ou no f\u00f3rum<\/a>.<\/p>\n<h1><\/h1>\n<h1>Obrigado por baixar o manual e usar Prisma, atualiza\u00e7\u00f5es em breve!<\/h1>\n<p>&nbsp;<\/p>\n<h1>Fique ligado, acesse o site Prisma <a href=\"https:\/\/linguagemprisma.br4.biz\/blog\/\" target=\"_blank\">clicando aqui.<\/a><\/h1>\n<p>&nbsp;<\/p>\n<p><a title=\"Manual b\u00e1sico\" href=\"https:\/\/linguagemprisma.br4.biz\/blog\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-6 aligncenter\" src=\"http:\/\/linguagemprisma.br4.biz\/wp-content\/uploads\/2014\/12\/cropped-prisma-300x194.png\" alt=\"cropped-prisma.png\" width=\"201\" height=\"130\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>INTRODU\u00c7\u00c3O \u00c0 LINGUAGEM PRISMA BR &nbsp; &nbsp; Por Adalberto Amorim Felipe &nbsp; &nbsp; fevereiro\/2016 &nbsp; &nbsp; Introdu\u00e7\u00e3o &nbsp; Este material \u00e9 para iniciantes, ou para quem tem dificuldades em adentrar nos conceitos t\u00e9cnicos da linguagem Prisma. Portanto, \u00e9 para ser lido com paci\u00eancia percorrendo em detalhes a linguagem, ou para ser consultado na parte que&#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-544","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages\/544","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=544"}],"version-history":[{"count":114,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages\/544\/revisions"}],"predecessor-version":[{"id":2997,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/pages\/544\/revisions\/2997"}],"wp:attachment":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/media?parent=544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}