Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

programando - hp, Notas de estudo de Engenharia Civil

Excelente material para quem quer se aventurar em programação da HP 50g.

Tipologia: Notas de estudo

2010

Compartilhado em 18/10/2010

fabio-melo-49
fabio-melo-49 🇧🇷

3

(2)

6 documentos

Pré-visualização parcial do texto

Baixe programando - hp e outras Notas de estudo em PDF para Engenharia Civil, somente na Docsity! PROGRAMANDO A HP − 50g (Uma Introdução ao Fascinante Universo da Programação ) a ij = (−1 ) j i−1 2 j−1 k a ij = (−1 )( i−1 2 j−1 ) a ij = (−1 ) µi−1 2j−1 ≪ → L r ≪ {} p LC p STO L SIZE p N p STO 1 2 N ∧ FOR I 1 N FOR J IF p(−1) ∧ FLOOR((I − 1)/2 ∧ (J − 1)) == 1p THEN J END NEXT DEPTH DUP p C p STO IF p C==r p THEN ROW→ pV p STO 1 r FOR K L pV(K) p EVAL GET NEXT r →LIST 1 →LIST LC + pLC p STO ELSE CLEAR END NEXT LC ≫ ≫ Gentil Lopes da Silva www.dmat.ufrr.br/gentil Programando a HP − 50g Eng o Gentil Lopes da Silva 24 de maio de 2009 TESOUROS NO CÉU − Não ajunteis tesouros na terra, onde a traça e a ferrugem tudo consomem, e onde os ladrões minam e roubam. Mas ajuntai tesouros no céu, onde nem a traça nem a ferrugem consomem, e onde os ladrões não minam nem roubam. (Mt. 6 : 19 − 20) − Exegese: Daqui podemos inferir que tudo o que se deteriora com o tempo, ou que é pasśıvel de furto, não pode ser tesouro no céu. Ao contrário, o que é atemporal e à prova de furtos, tem chances de ser um tesouro no céu. Como por exemplo, cada uma das pérolas a seguir: a nm = (−1 ) j n−1 2 m−1 k a nm = (−1 )( n−1 2 m−1 ) a nm = (−1 ) µn−1 2m−1 1m + 2m + 3m + · · ·+ nm = m ∑ j=0 ( n j + 1 ) a (m−j) a (m−j) = j ∑ k=0 (−1)k ( j k ) (1− k + j)m (x, y, z) ≡ (X, Y ) = ( y − x · sen θ, z − x · cos θ) a nm = m ∏ j=0 a (n−1j ) 1(m−j) a nm = m ∑ j=0 ( n− 1 j ) a 1(m−j) { i = ⌊n−1N ⌋+ 1 j = n−N⌊n−1N ⌋ 0, 999 . . . = 9 10 + 9 100 + 9 1000 + · · · = 0 n = f(i, j) = N(i− 1) + j 0 1 (0, 23 ) 1 (1, 1) s λ ⇒ λ(t) =    2 3 + 1 3 t, 0 ≤ t < 1; 0, t = 1. n 2j−1 ∈ N ⇐⇒ (n−1 2j−1 ) e ( n 2j−1 ) têm paridades distintas. Topologia Quântica O Milagre!:conexo por caminhos r G e n t i l / f e v − 2 0 0 9 4 Caṕıtulo 1 Introdução à Programação “Mas a atividade mais feliz e mais bem-aventurada é aquela que produz. Ler é delicioso, mas ler é uma ativi- dade passiva, enquanto criar coisas dignas de serem lidas é ainda mais precioso.” (Ludwig Feuerbach) 1.1 Introdução Programar a calculadora significa introduzir em sua memória (RAM− Ran- dom Access Memory − memória de acesso aleatório) uma série de instruções e comandos para que ela os execute seqüêncialmente, cumprindo alguma tarefa espećıfica. Por exemlo, resolver uma equação quadrática, multiplicar ou dividir polinômios, imprimir textos, elaborar um gráfico, tocar música, etc. Para tanto é necessário que as instruções e os comandos sejam digitados no padrão sintático da linguagem da calculadora e dispostos seqüêncialmente na ordem em que devem ser executados. A fim de que a execução seja perfeita e apresente os resultados objetivados com precisão, não basta atender estes requisitos. É preciso que o programa não contenha erros de lógica, cuja detecção não é feita pela calculadora, que está preparada para apontar somente erros de sintaxe. Os recursos de programação postos à nossa disposição pela calculadora HP− 50g são excepcionalmente valiosos e variados e a melhor forma de conhecê-los, entender sua finalidade e alcance e fixá-los em nossa memória é através da prática. Embora mencionada como uma calculadora por causa de seu formato com- pacto similar aos dispositivos de cálculo manuais t́ıpicos, a HP − 50g deve ser vista como um computador programável/gráfico. Programação estruturada A HP−50g encoraja o uso de programação estruturada. Cada programa possui apenas um ponto de entrada: seu ińıcio. Também possui apenas um ponto de sáıda: seu final. Não existem rótulos dentro de um programa para desvios e, portanto, não existem comandos GOTO (ir para). Já neste momento vamos apresentar duas importantes tabelas que serão extensamente utilizadas em nosso curso. Sugerimos que todos os exemplos sejam executados para serem devidamente assimilados. 5 6 1.1.1 Funções para números reais ( MTH REAL ) A tabela a seguir mostra os comandos, sua descrição e exemplos. Comando/Descrição Exemplos Antes Depois ABS. Valor absoluto CEIL. Menor inteiro maior ou igual ao argumento. FLOOR. Maior inteiro menor ou igual ao argumento. FP. Parte fracionária do argumento. IP. Parte inteira do argumento. MANT. Mantissa do argumento. MAX. O maior valor entre dois números. MIN. O menor valor entre dois números. MOD. Resto da divisão entre dois nú- meros. RND. Arredonda o número de acordo com o valor do argumento: n = 0 até 11. SIGN. Retorna +1 para argumentos po- sitivos, −1 para argumentos negativos e 0 para argumentos nulos. TRNC. Trunca o número de acordo com o valor do argumento: n = 0 até 11. 1 : −12 1 : 12 1 : −3.5 1 : −3 1 : 3.5 1 : 4 1 : 6.9 1 : 6 1 : −6.9 1 : −7 1 : 5.234 1 : .234 1 : −5.234 1 : −.234 1 : 5.234 1 : 5 1 : −5.234 1 : −5 1 : 1.23E12 1 : 1.23 2 : 5 1 : −6 1 : 5 2 : 5 1 : −6 1 : −6 2 : 6 1 : 4 1 : 2 2 : 1.2345678 1 : 5 1 : 1.23457 1 : −2.7 1 : −1 2 : 1.2345678 1 : 5 1 : 1.23456 • Nota: Caso você não consiga acessar os comandos acima através das teclas MTH REAL , então o sinalizador 117 da sua calculadora deve ser ativado. − Para ativar o sinalizador 117 (dizemos: escolher os menus SOFT) pressione: MODE H FLAGS e com o aux́ılio da tecla △“desça” até 117 (marcar: X). • Nota: Após digitar MTH REAL pressione, se necessário, a tecla NXTL para mover para a próxima página (do menu); a combinação PREV move para a página anterior (do menu). Para mais informações sobre sinalizadores ver subseção 1.1.3 na pág. 8. Gentil 9 1.2 Programação de fórmulas (equações) Para a HP−50 g um programa é um objeto delimitado pelos śımbolos≪ ≫, isto é, todos os programas devem ser digitados entre estes śımbolos∗. Variáveis Variáveis são como arquivos em um disco ŕıgido de computador. Uma variável pode armazenar um objeto (valores numéricos, expressões algébricas, listas, ve- tores, matrizes, programas, etc). As variáveis são reconhecidas pelos seus nomes, que podem ser qualquer combinação de caracteres alfabéticos ou numéricos, iniciando com uma letra. Aguns caracteres não alfabéticos, tais como a seta (→) podem ser usados em um nome de variável, se combinados com um caractere alfabético. Assim, p→ Ap é um nome válido de variável, mas p→ p não é. Exemplos válidos de nomes de variáveis são: pAp, pB p, pa p, pb p, pα p, pβ p, pA1 p, pAB12 p, p→ A12 p , pVel p, pZ0 p, pZ1 p, etc. Uma variável não pode ter o mesmo nome de uma função da calculadora. Você não pode ter uma variável SIN por exemplo, já que existe um comando SIN na calculadora. Os nomes reservados das variáveis da calculadora são os seguintes: ALRMDAT, CST, EQ, EXPR, IERR, IOPAR, MAXR, MINR, PICT, PPAR, PRTPAR, VPAR, ZPAR, der−, e, i, n1,n2, . . ., s1, s2, . . ., DAT, PAR, π, ∞. Nota: Letras maiúsculas e minúsculas não são equivalentes. Estrutura de variável local O comando†→ define nomes de variáveis locais (isto é, variáveis que somente são válidas dentro do programa em que foram definidas) − ao contrário das variáveis globais, que são definidas pelo comando STO. Antes de se iniciar a programação de determinado problema é importante que se tenha bem claro em mente quais são os dados de entrada (no programa) e quais são os dados de sáıda; por exemplo: 1o ) Resolver a equação quadrática ax2 + bx + c = 0. Temos: R.E.Q. a b r 1 c r 2 Onde: − Dados de entrada: a, b e c. − Dados de sáıda: r 1 e r 2 (são as ráızes). − R.E.Q.: Variável que irá armazenar o programa (e que será referenciada sempre que o programa for executado). Obs: o nome R.E.Q. é apenas um exemplo, o nome poderia ser um outro, a seu critério. ∗O qual encontra-se acima da tecla + , em vermelho. É acessado assim ≪ ≫ †Este comando (de atribuição) encontra-se acima da tecla 0 , em vermelho. 10 2o ) Calcular o n−ésimo termo de uma progressão aritmética: a n = a 1 + (n− 1)r Temos: P.A. a 1 r an n Onde: − Dados de entrada: O primeiro termo a1 ; a razão da P.A. r e a posição n do termo que queremos encontrar. − Dados de sáıda: O n−ésimo termo a n . − P.A.: Variável que irá armazenar o programa (e que será referenciada sempre que o programa for executado). 3o ) Cálculo da hipotenusa de um triângulo retângulo: a = √ b2 + c2. Temos: HIP. b a c ⊡ a b c Onde: − Dados de entrada: Os catetos b e c. − Dado de sáıda: A hipotenusa a. − HIP.: Variável que irá armazenar o programa. Nos três programas anteriores devemos fornecer os dados de entrada e o programa calcula e fornece os dados de sáıda. Uma estrutura de variável local possui uma das seguintes organizações dentro de um programa: ≪→ nome 1 nome 2 . . .nome n pobjeto algébricop ≫ (1.1) Ou, ≪→ nome 1 nome 2 . . .nome n ≪ programa≫ ≫ (1.2) O comando (de atribuição) → remove n objetos da pilha e os armazena nas variáveis locais, cujos nomes são listados em seguida. Gentil 11 Importante: A calculadora opera (trabalha) em dois modos: pilha (RPN) e algébrico (ALG). Neste livro optaremos pelo modo pilha. Caso sua calcula- dora esteja no modo algébrico − isto estará indicado na primeira linha do visor à direita, com o distinvo ALG − para colocá-la no modo pilha pressione a tecla MODE H para ir ao visor, CALCULATOR MODES                                                                                                               Operating Mode..Algebraic Number Format...Std FM, Angle Measure...Radians Coord System....Rectangular XBeep Key Click XLast Stack Choose calculator operating Mode FLAGS CANCL OKCHOOS CAS DISP Agora pressione a tecla virtual CHOOS (escolher) para ir à seguinte tela: CALCULATOR MODES                                                                                                               Operating Mode..Algebraic Number Format...Std FM, Angle Measure...Radians Coord System....Rectangular XBeep Key Click XLast Stack Choose calculator operating Mode Algebraic RPN FLAGS CANCL OKCHOOS CAS DISP Agora basta selecionar o modo RPN: △e pressionar OK OK (isto é, 2×). Exemplo 1: O seguinte programa toma dois números da pilha e retorna um resultado numérico (o valor absoluto da diferença entre ambos, isto é: |a− b|). ≪→ a b pABS(a - b)p ≫ (1.3) Este programa é da forma (1.1). Antes de programarmos o exemplo acima, observamos que você pode acessar os comandos, como ABS por exemplo, pelas teclas do menu∗ ou digitá-los (letra a letra). Pois bem, vamos retomar o programa anterior. observe que em, pABS(a - b)p temos aspas simples (chamadas doravante de plics). Estas aspas simples (plics) encontram-se na tecla p O . Digite o programa dado em (1.3). Observe que entre a seta e a primeira variável (no caso a) existe um espaço (mas não se preocupe pois a calculadora o coloca automaticamente; isto é, após digitar a seta − veja nota de rodapé † na pág. 9.) ∗Ver Tabela na pág. 6. 14 △ △ △ △ você posiciona o cursor em qualquer posição do programa. Exemplo 4: Como mais um exemplo de programação de fórmulas vamos resol- ver uma equação quadrática ax2 + bx + c = 0, segundo a conhecida fórmula, x = −b± √ b2 − 4ac 2 · a O programa fica assim (ver pág. 9): ≪ → a b c ≪ p (−b + (b∧2− 4 ∗ a ∗ c))/(2 ∗ a)p EVAL p (−b− (b∧2− 4 ∗ a ∗ c))/(2 ∗ a)p EVAL ≫ ≫ Notas: − O aspirante a programador deve ficar atento para a inserção correta dos parêntesis, sob pena de redundar em erro de lógica, o qual a calculadora não detecta (ela não adivinha o que você gostaria de calcular). − O “chapeuzinho” em b∧2 (isto é, b2) é acessado na tecla Y X Q . − Se, ao digitar um programa, “a tela (visor) se tornar pequena(o)” use as teclas q para iniciar em uma nova linha. Sugerimos ao leitor carregar e executar este programa. 1.4 Executando um programa passo-a-passo (DBUG) A calculadora nos oferece um recurso muito importante, principalmente para quem se inicia em programação, que é a possibilidade de se executar um pro- grama passo-a-passo. Este recurso é poderoso e deve, amiúde, ser utilizado, por duas razões: 1a ) Permite que se compreenda o funcionamento (e a lógica) de um pro- grama; 2a ) Facilita a correção de eventuais erros. Este recurso nós o chamamos de DBUG. É fácil entender como um programa trabalha (funciona) se você executá-lo passo-a-passo, observando o efeito de cada etapa (comando). Isto facilita “depurar” seus próprios programas ou entender programas escritos por outros. Gentil 15 Utilizando o DBUG 1. Coloque todos os dados requeridos pelo programa na pilha, e nos ńıveis apropriados∗; 2. Coloque o nome do programa no ńıvel 1 da pilha. Isto é, abra plics e pres- sione o nome do programa o qual é acessado− como já dissemos − pressionando- se a tecla VAR J e depois a tecla do menu que contém o nome dado ao programa. Pressione a tecla ENTER; 3. Pressione a seguinte sequência de teclas: PRG NXT L NXT L RUN DBUG Neste momento o nome do programa desaparece da pilha. Agora basta ir pressionando, sucessivamente, o menu SST . • Para continuar com a execução normal pressione o comando CONT. Este comando é acessado pressionando-se as teclas: ON . Sugerimos ao leitor executar passo-a-passo o programa para o cálculo das ráızes de uma equação quadrática. Para avançar passo-a-passo no meio do programa 1. Insira o comando HALT na linha de programa a partir da qual você deseja iniciar o avanço manual (DBUG); 2. Execute o programa normalmente. Ele pára quando o comando HALT é executado, o anúncio HALT é exibido (na tela). 3. Tome qualquer ação: • Para ver o próximo passo do programa exibido na área de mensagens e então executá-lo, pressione o menu SST . • Para ver, mas não executar o próximo (ou os próximos dois passos), pres- sione NXT L . • Para continuar com a execução normal, pressione CONT ( ON .). Quando você desejar que o programa seja executado normalmente (nova- mente) remova o comando HALT do programa. 1.5 Exibindo variáveis de entrada e sáıda A instrução PROMPT faz com que a calculadora nos mostre (exiba) a(s) variável(eis) de entrada num programa. Esta instrução é acessada com a seguinte sequência de teclas: PRG NXT L IN NXT L PROMP A instrução →TAG rotula um objeto com um nome ou texto descritivo. Esta instrução é acessada com a seguinte sequência de teclas: ∗No caso do programa da hipotenusa, a ordem em que os catetos são fornecidos não altera o resultado final. Já no caso do programa para o cálculo da ráızes de uma equação quadrática, a ordem − na qual os dados entram na pilha − é decisivo. 16 PRG TYPE →TAG Nota importante: Lembramos que todos os comandos (instruções) podem ser digitados “na mão”. Se o leitor decidir digitar a instrução →TAG alertamos que não deve haver espaço entre a seta e TAG. Esta setinha encontra-se acima da tecla 0 , em vermelho. Exemplo 5: Para exemplificar o uso destas instruções vamos acrescentá-las ao programa das ráızes de uma equação quadrática, assim: ≪ p pEntre com a, b e c p p PROMPT → a b c ≪ p (−b + (b∧2− 4 ∗ a ∗ c))/(2 ∗ a)p EVAL p pR1p p →TAG p (−b− (b∧2− 4 ∗ a ∗ c))/(2 ∗ a)p EVAL p pR2p p →TAG ≫ ≫ Nota: Acesse as aspas duplas assim: pp pp . Ao encontrar PROMPT o processamento do programa é interrompido e a calcu- ladora fica esperando os dados de entrada; coloque-os na pilha e, após, pressione CONT (continue∗).  Excluindo uma variável Para excluir (deletar) uma variável proceda assim: coloque, entre plics, o nome da variável, pressione ENTER para colocá-lo na pilha, após pressione: TOOL I PURGE . Para excluir várias variáveis ao mesmo tempo coloque-as (isto é, seus nomes) entre chaves ({ . . . . . . }) e proceda como antes. ∗Lembramos que este comando é acessado com ON . Gentil 19 seus elementos, com exceção do primeiro. 6) PRG LIST ELEM GET substitui a lista do ńıvel 2 e um número de posição (́ındice) do ńıvel pelo elemento da lista naquela posição indicada. 7) PRG LIST ELEM GETI é similar a GET, porém ela também incre- menta o número de posições (́ındice). O novo ı́ndice é colocado no ńıvel 2. A lista original estará no ńıvel 3. 8) PRG LIST ELEM PUT toma um objeto do ńıvel 1 e substitui um objeto existente dentro da lista. Você deve fornecer a posição do objeto no ńıvel 2 e a lista (ou matriz) no ńıvel 3. A lista resultante estará no ńıvel 1. 9) PRG LIST ELEM PUTI é similar a PUT, porém ela também incre- menta o ı́ndice. O novo ı́ndice é colocado no ńıvel 1 e a nova lista no ńıvel 2. 10) PRG LIST ELEM SIZE substitui a lista do ńıvel 1 pelo número de elementos que ela possui. 11) PRG LIST ELEM POS substitui a lista do ńıvel 2 e um elemento daquela lista (ńıvel 1) por um ı́ndice contendo a primeira ocorrência daquele elemento na lista. Se o elemento não for encontrado, 0 será retornado. 2.2 Matrizes A HP − 50 g possui grandes recursos para entrada e manipulação de ma- trizes. Muitas das operações descritas aqui também se aplicam a vetores (que são matrizes com apenas uma linha ou uma coluna). O nome matrizes também inclui objetos vetoriais. • Criando e Montando Matrizes Você pode introduzir uma matriz de duas maneiras: − O Editor de Matrizes (Matrix writer). Um método mais intuitivo para entrar, visualizar e editar elementos de matrizes. − Linha de comando. O método básico de entrada de objetos. Para entrar com uma matriz usando o Editor de Matrizes: 1. Pressione MTRW para acessar a tela e menu do Editor de Matrizes. 2. Para cada elemento na primeira linha execute uma das opcções abaixo:  Digite um número real ou complexo e pressione ENTER .  Calcule o elemento usando a linha de comando e pressione ENTER . Para calcular o elemento, digite os argumentos separados com SPC e pressione a função desejada para o cálculo. 3. Pressione △para marcar o final da primeira linha (a qual especifica o número de colunas para a matriz). Nota: Manipulando os quatro botões prateados, abaixo, △ △ △ △ você pode colocar o cursor em qualquer posição da matriz. 20 4. Para cada elemento do restante da matriz, digite (ou compute) seu valor e pressione ENTER . Ou, se você desejar, introduza números em mais de uma célula de uma só vez, digitando-os na linha de comando e usando SPC para separá-los. Pressione ENTER ao final para introduzi-los. 5. Após a entrada de todos os elementos na matriz, pressione ENTER para co- locá-la na pilha operacional. Para entrar com uma matriz utilizando a linha de comando: 1. Pressione [ ] duas vezes para entrar com os delimitadores para a matriz e para a primeira linha. 2. Digite os elementos da primeira linha. Pressione SPC para separar os ele- mentos. 3. Pressione △ para avançar o cursor para além do “fecha colchetes”. 4. Pressione [ ] para preencher uma nova linha (se necessário). 5. Repita os passos 3. e 4., se necessário. Ao término pressione ENTER para colocar a matriz na pilha. Para montar uma matriz por linhas a partir de uma série de vetores: 1. Introduza cada vetor na pilha, na mesma ordem que você deseja que apareçam na matriz. Entre com o vetor da linha 1 antes, depois a linha 2, e assim por diante. 2. Entre com o número de linhas para a matriz desejada. 3. Pressione MTH MATRX COL COL→ para montar os vetores numa matriz. Para criar uma matriz preenchida com uma constante dada: 1. Entre com um dos seguintes ı́tens na pilha:  Uma lista contendo as dimensões da matriz desejada na forma: {linha coluna}.  Qualquer matriz, cujos elementos você não se importa que sejam alterados. 2. Introduza a constante com a qual você deseja preencher a matriz. 3. Pressione MTH MATRX MAKE CON. Isto retorna uma matriz com as dimensões especificadas, preenchida com a constante fornecida. Para criar uma matriz identidade: 1. Entre com um dos seguintes ı́tens na pilha:  Um número real que representa o número de linhas e colunas de uma matriz identidade (quadrada).  Qualquer matriz quadrada, cujo conteúdo você não se importa que sejam alterados. 2. Pressione MTH MATRX MAKE IDN . Esta operaçã retorna uma matriz identidade com as dimensões dadas. Desmontando matrizes A HP − 50g monta e desmonta os elementos de uma matriz de duas dimensões, seguindo a ordem de preenchimento de linhas (da esquerda para a direita, e de cima para baixo). Começando com o elemento corrente (frequentemente o elemento da linha 1 e coluna 1), a ordem de preenchimento de linhas assume que o “próximo” elemento será o próximo naquela linha. Caso não existam mais Gentil 21 elementos na linha, então o próximo será o primeiro da linha seguinte. Esta convenção de preenchimento é semelhante a um processador de textos, onde uma linha é preenchida e, assim que cheia, o preenchimento prossegue no ińıcio da próxima. Para desmembrar uma matriz em seus elementos 1. Entre com a matriz na pilha. 2. Pressione PRG TYPE OBJ→ . A matriz será desmontada na ordem de preenchimento por linhas, colocando cada elemento em um ńıvel separado. O ńıvel 1 contém uma lista com as dimensões originais da matriz. Para montar uma matriz a partir de uma sequência de elementos 1. Entre com com os elementos na pilha na ordem de preenchimento por linhas. 2. Entre com uma lista contendo as dimensões da matriz desejada na forma: { linhas colunas }. 3. Pressione PRG TYPE →ARRY . Para montar a matriz. Para desmembrar uma matriz em vetores-linha 1. Entre com a matriz na pilha. 2. Pressione MTH MATRX ROW →ROW . A matriz é desmembrada em vetores (primeira linha até a última). O ńıvel 1 da pilha contém um número real representando o número de linhas da matriz original. Para desmembrar uma matriz em vetores-coluna 1. Entre com a matriz na pilha. 2. Pressione MTH MATRX COL →COL . A matriz é desmembrada em vetores (primeira coluna até a última). O ńıvel 1 da pilha contém um número real representando o número de colunas da matriz original. Inserindo linhas e colunas Para inserir uma ou mais linhas novas numa matriz: 1. Entre com a matriz alvo (aquela que você deseja modificar) na pilha opera- cional. 2. Entre com o vetor, matriz ou elemento (quando o objeto alvo é um vetor) que você deseja inserir. Uma matriz inserida deve possuir o mesmo número de linhas e colunas que a matriz alvo. 3. Entre com o número da linha sobre a qual você eseja inserir a nova matriz. Todos os elementos localizados naquela linha da matriz alvo serão movidos para baixo, acomodando a inserção. Números de linhas começam de 1 e não de 0. 4. Pressione MTH MATRX ROW ROW+ para inserir as novas linhas. Para inserir uma ou mais colunas novas numa matriz: 1. Entre com a matriz alvo (aquela que você deseja modificar) na pilha opera- cional. 2. Entre com o vetor, matriz ou elemento (quando o objeto alvo é um vetor) que você deseja inserir. Uma matriz inserida deve possuir o mesmo número de linhas e colunas que a matriz alvo. 3. Entre com o número da coluna sobre a qual você eseja inserir a nova matriz. Todos os elementos localizados naquela coluna da matriz alvo serão movidos 24 Vejamos um exemplo deste importante recurso. Coloque na pilha a seguinte matriz, [ 1 2 3 4 5 6 ] Para isto veja, por exemplo: Para entrar com uma matriz utilizando a linha de comando: na pág. 20. Após, armazene-a em uma variável. Por exemplo, para armazenar esta ma- triz na variável JOSE, proceda assim: digite JOSE e pressione ENTER para colocar este nome no ńıvel 1 da pilha, em seguida pressione STO K para arma- zenar a matriz neste nome. Este é o nome da matriz (com o qual ela será referenciada). Para se certificar disto basta pressionar VAR J JOSE , a matriz deverá retor- nar à pilha. Digite a seguinte expressão: pJOSE(1, 1)+JOSE(1, 2) p Agora pressione ENTER para colocar este objeto algébrico na pilha. Em seguida mande avaliá-lo pressionando EVAL N . O resultado deverá ser 3, preci- samente a soma dos dois primeiros elementos da primeira linha da matriz. Vamos “sofisticar” um pouco mais nosso exemplo. O seguinte objeto algébrico∗ p ∑ (k = 1, 3, JOSE(1, k)) p o qual é equivalenta a, 3 ∑ k=1 JOSE(1, k) = JOSE(1, 1) + JOSE(1, 2) + JOSE(1, 3) quando avaliado ( EVAL N ) nos fornece o resultado 6, que é a soma dos elementos da primeira linha da matriz JOSE. Agora vamos “abusar” da boa vontade da HP . O seguinte objeto algébrico p ∑ (J = 1, 3, ∑ (I = 1, 2, JOSE(I, J))) p o qual é equivalente a, 3 ∑ J=1 2 ∑ I=1 JOSE(I, J) = JOSE(1, 1) + JOSE(2, 1) + JOSE(1, 2) + JOSE(2, 2) + JOSE(1, 3) + JOSE(2, 3) quando avaliado nos fornece o resultado 21, que é a soma − por colunas − de todos os elementos da matriz JOSE. ∗Este somatório, entre plics, pode ser acessado assim: p O SIN S . Caṕıtulo 3 Estruturas de Programação “. . . que o meu pensamento quis aproxima- se dos problemas do esṕırito pela via de uma diversa experimentação de caráter abstrato, especulativo, re- sultante das conclusões de proces- sos lógicos da mais moderna f́ısico- matemática.”(Pietro Ubaldi) Introdução Uma estrutura de programaç~ao permite a um programa tomar uma de- cisão sobre como ele deve ser executado, dependendo das condições dadas ou dos valores de argumentos em particular. Um uso cuidadoso e inteligente destas estruturas tornam posśıvel a criação de programas com extraordinária flexibili- dade. Diriamos que a programação propriamente dita começa aqui com estruturas de programação, pois o que fizemos anteriormente foi a programação de fórmulas apenas. Estas estruturas que iremos estudar são comuns a várias linguagens de programação, como por exemplo, PASCAL, FORTRAN, C++, MATLAB, etc. Quero dizer: você entendendo-as neste contexto, também estará apto a executá-las em qualquer outra linguagem em que estas se façam presentes; dáı a importância de entendê-las nesta aqui, isto é, na HP . As estruturas de programação As estruturas que iremos estudar são as seguintes: • Estruturas ćıclicas :        FOR −NEXT FOR − STEP WHILE −REPEAT − END • Estruturas condicionais : { IF − THEN − END IF − THEN − ELSE − END 25 26 3.1 Estruturas ćıclicas 3.1.1 FOR - NEXT Entre com esta estrutura num programa pressionando a seguinte sequência de teclas: PRG BRCH FOR A sintaxe desta estrutura é assim: ≪ . . . ińıcio fim FOR contador cláusula-ćıclica NEXT . . . ≫ Esta estrutura executa uma porção do programa por um número definido de vezes usando o conteúdo de uma variável local como contador, a qual pode ser usada dentro do loop para cálculos ou outros propósitos. A cláusula ćıclica é executada pelo ao menos uma vez. FOR extrai dois números da pilha: ińıcio e fim e cria uma variável local (contador) para controle de incremento do ciclo. Depois disto a cláusula-ćıclica é executada, sendo que a variável contador pode aparecer dentro da cláusula. NEXT incrementa o contador em 1 (uma unidade) e testa se ele é menor ou igual ao valor fim. Se for este o caso, a cláusula-ćıclica é repetida com o novo valor do contador. Caso contrário, a execução prossegue após NEXT. Quando o ciclo (loop) terminar o contador é apagado. Vamos dar alguns exemplos de programas que utilizam esta estrutura, co- mentar alguns aspectos destes exemplos e colocar alguns problemas que devem ser programados com esta estrutura. Exemplo 6: (Somatório). Vamos construir um programa para calcular a soma dos N primeiros números Naturais. Isto é, estamos querendo o valor de: N ∑ i=1 i = 1 + 2 + 3 + · · ·+ N (3.1) Devemos fornecer ao programa o valor de N (até onde queremos que o mesmo some) e este deve nos devolver o valor da soma. O programa fica assim: ≪ → N ≪ 0 pS p STO 1 N FOR I S I + pS p STO NEXT S p pSOMAp p →TAG ≫ ≫ Neste programa fornecemos o valor de N , que será armazenado na variável local N e a execução começa inicializando uma variável (global por causa de STO) com zero. A variável S irá armazenar (acumular) o valor da soma. O Gentil 29 P.P. Sub-rotina Os dados requeridos pelo programa sub-rotina são passados pelo programa principal. Para avançar passo a passo quando o próximo passo é uma sub-rotina  Para executar a sub-rotina em uma única etapa, pressione SST (ver DBUG, pág. 15).  Para executar a sub-rotina passo a passo, pressione SST ↓ . Exemplo 10: (Combinações). Como ilustração da utilização de sub-rotinas vamos fazer um programa para o cálculo do número de combinações de m objetos tomados n a n, segundo a fórmula: ( m n ) = m! n! (m− n)! (3.2) Observe que devemos calcular três fatoriais e para isto vamos usar o pro- grama feito na pág. 27 como sub-rotina. Para os nossos propósitos aquele programa fica: ≪ → N ≪ 1 pF p STO 1 N FOR I F I ∗ pF p STO NEXT F ≫ ≫ Vamos armazenar este programa com o nome de FAT. O programa principal (para o cálculo de (3.2)) pode ser: ≪ → M N ≪ M FAT N FAT M N − FAT ∗ / p pCOMB(M, N)p p →TAG ≫ ≫ 30 Observe que o programa principal chama a sub-rotina (armazenada em FAT) três vezes. O programa principal coloca o dado (inicialmente M) na pilha e chama a sub-rotina, esta calcula o fatorial e deixa o resultado na pilha. Execute- o no DBUG. Em blocos, temos: M N ( M N ) P.P. FAT  Primeira Regra de Simpson Exemplo 11: No cálculo numérico de integrais, I = ∫ b a f(x) dx efetuamos uma partição do intervalo [ a, b ] em n subintervalos e “amostramos” a função f no pontos desta partição, assim: p p p p p p x 0 = a x 1 x 2 x 3 x 4 · · · x n−2 x n−1 xn = b y 0 y 1 y 2 y 3 y 4 y n−2 y n−1 yn Onde: y0 = f(x0), y1 = f(x1), y2 = f(x2), . . . , yn−1 = f(xn−1), yn = f(xn) A primeira regra (fórmula) de Simpson estabelece que, I = h 3 (y0 + 4y1 + 2y2 + 4y3 + 2y4 + · · ·+ 2yn−2 + 4yn−1 + yn) (3.3) com erro dado por, ε = − (b− a) 5 180n4 f (4)(ξ), a ≤ ξ ≤ b. Onde: h = (b − a)/n e n é o número de subintervalos (nos quais dividimos o intervalo [ a, b ]), devendo ser um múltiplo de 2. Gentil 31 De momento, nos interessa a sequência ( a I ) dos coeficientes que comparecem na equação (3.3), veja: I : 0 1 2 3 4 . . . n− 2 n− 1 n a I : 1 4 2 4 2 . . . 2 4 1 (3.4) Uma fórmula para o termo geral desta sequência é: a I =    1, se I = 0 ou I = n; 3− (−1)I , se 1 ≤ I ≤ n− 1 O seguinte programa recebe n e nos devolve um vetor contendo os termos da sequência ( a I ): ≪ → n ≪ 1 1 n 1 − FOR I p 3− (−1) ∧I p EVAL NEXT 1 n 1 + →ARRY ≫ ≫ Nota: Armazene este programa na variável CPRS, pois será referenciado − com este nome − por um outro programa (isto é, será uma subrotina). Não esquecer que n deve ser um múltiplo de 2. Para implementar (programar) a fórmula (3.3) necessitaremos de uma nova estrutura ćıclica: 3.1.2 FOR - STEP Entre com esta estrutura num programa pressionando a seguinte sequência de teclas: PRG BRCH FOR A sintaxe desta estrutura é assim: ≪ . . . ińıcio fim FOR contador cláusula-ćıclica incremento STEP . . . ≫ Esta estrutura executa uma porção do programa por um número definido de vezes usando o conteúdo de uma variável local como contador, da mesma forma que em FOR-NEXT. A diferença é que você pode especificar um incremento diferente de 1. FOR extrai dois números da pilha: ińıcio e fim e cria uma variável local (contador) para controle de incremento do ciclo. Depois disto a cláusula-ćıclica 34 ( i ) a1 = 4; an = (−1)n · an−1 . ( ii ) a 1 = −2; a n = (a n−1 )2. ( iii ) (U.F.CE -81) Os termos da sucessão a 1 , a 2 , . . . , a n , estão relacionados pela fórmula a n+1 = 1 + 2 · a n , onde n = 1, 2, 3, . . .. Se a 1 = 0, então a 6 é: a ) 25 b ) 27 c ) 29 d ) 31 12) (PUC-SP - 81) Na sequência (a 1 , a 2 , . . .) tem-se: a 1 = 1 e a n+1 = 2 + a2 n 2a n Qual dos números abaixo está mais próximo de a 3 ? a ) 1 b ) 2 c ) √ 2 d ) √ 3 e ) √ 5 Nota: Lembramos que nestes exerćıcios queremos que você faça um pouco mais do que o exerćıcio pede. Queremos que você faça um programa para listar os n primeiros termos das sequências dadas. 13) (U.F.BA. - 81) sejam as sequências    a 1 = 4 a n+1 = 1 + 2 an e    b 1 = 5 b n+1 = 1 1+bn Se P = a n · b n , tem-se: a )P < 0 b ) 0 ≤ P < 1 c ) 1 ≤ P < 2 d ) 2 ≤ P < 3 e )P ≥ 3 14) (U.F.PR. - 80) Seja f uma função tal que f(1) = 2 e f(x + 1) = f(x) − 1, para todo valor real de x. Então f(100) é igual a: a ) − 99 b ) − 97 c ) 96 d ) 98 e ) 100 Nota: Aqui o leitor deverá fazer um programa para fornecer f(N) onde N > 1 é um um número natural. 15) (PUC - SP - 85) Na sequência (a 0 , a 1 , a 2 , . . .) onde a 0 = 1 e a n+1 = a n +n, para todo n ∈ N, a soma dos 7 primeiros termos é a ) 41 b ) 42 c ) 43 d ) 63 e ) 64 Nota: O leitor deverá sempre resolver os problemas de forma generalizada. Por exemplo, aqui faça um programa para calculara soma dos N primeiros termos da sequência . 16) (PUC - SP - 70) Sendo f : R → R definida por f(x) = 2x + 3, então f(1) + f(2) + f(3) + · · ·+ f(25) é igual a: a ) 725 b ) 753 c ) 653 d ) 1375 e ) 400 Gentil 35 3.1.3 FOR - NEXT’s concatenados O que chamamos de concatenação de FOR - NEXT’s é o mesmo que encaixe (ou aninhamento) de FOR - NEXT’s que, dependendo do programa, pode tomar diversas configurações. Por exemplo, assim: FOR FOR NEXT NEXT a) FOR FOR FOR NEXT NEXT NEXT b) FOR FOR FOR NEXT NEXT NEXTc) A concatenação é, amiúdo, útil para se trabalhar com matrizes. Vejamos os seguintes exemplos: Exemplo 12: (U.E.LONDRINA - 84) Dada a matriz A = ( a mn )2×2 onde amn = 2n−m, a soma de todos os elementos que compõe a matriz A2 é igual a: a ) 81/4 b ) 10 c ) 9 d ) 25/4 e ) − 6 Motivados pelo desafio acima vamos fazer um programa para construir uma matriz (quadrada de ordem N) e que, em particular (N = 2) tenhamos a matriz do problema anterior. Lembramos que o FOR - NEXT é acessado com a seguinte sequência de teclas: PRG BRCH FOR O programa procurado fica assim: ≪ → N ≪ 1 N FOR m 1 N FOR n p 2 ∧(n−m) p EVAL NEXT N ROW→ NEXT N ROW→ ≫ ≫ Observe que temos uma concatenação tipo a ). O primeiro FOR (ou ainda, o primeiro laço) fixa a linha e o segundo varia as colunas, de modo que a matriz vai sendo construida linha a linha e de cima para baixo. Para maiores detalhes execute-o no DBUG. 36 Para obter a matriz A2, após a execução do programa, basta pressionar ENTER e multiplicar × . Por exemplo, fornecendo 2 ao programa, este nos devolve a matriz: [ 1 2 0.5 1 ] cujo quadrado é, [ 2 4 1 2 ] Exemplo 13: (CESCEM - 71) Define-se a distância entre duas matrizes A = ( a ij ) e B = ( b ij ) quadradas e de mesma ordem n pela fórmula: d(A, B) = max |a ij − b ij |, i, j = 1, 2, 3, . . . , n. Assim a distância entre as matrizes [ 1 2 3 4 ] e [ 5 7 6 8 ] é: a ) − 5 b ) − 3 c ) 0 d ) 3 e ) 5 Nota: Na fórmula da distância max significa máximo (maior). Antes de implementar o desafio acima em um programa, vejamos como fica esta distância para duas matrizes quadradas de ordem 2, isto é, A = [ a 11 a 12 a 21 a 22 ] e B = [ b 11 b 12 b 21 b 22 ] Primeiro, construimos a matriz diferença: A−B = [ a 11 a 12 a21 a22 ] − [ b 11 b 12 b21 b22 ] = [ a 11 − b 11 a 12 − b 12 a21 − b21 a22 − b22 ] Agora temos que: d(A, B) = max      |a 11 − b 11 | |a 12 − b 12 | |a 21 − b 21 | |a 22 − b 22 |      Para as matrizes dadas no desafio temos: d(A, B) = max      |1− 5| |2− 7| |3− 6| |4− 8|      ⇒ d(A, B) = max      4 5 3 4      = 5 Gentil 39 remove da pilha o resultado do teste e o avalia: se for verdadeiro (6= 0), a cláusula-ćıclica é executada novamente; caso contrário a execução prossegue com a instrução seguinte a END. Se o argumento do REPEAT for um objeto algébrico ou nome (de uma variável), ele é automaticamente convertido para número. Vamos ilustrar o uso desta estrutura através de alguns exemplos. Exemplo 14: (UNESP - 84) Seja S n = 121 + 1 22 + · · ·+ 12n , n um número natural diferente de zero. O menor número n tal que S n > 0, 99 é: a ) 5 b ) 6 c ) 7 d ) 8 e ) 9 A idéia aqui é variarmos n (a partir de 1) e irmos somando os termos 12n até que o resultado da soma seja maior que 0, 99. Vejamos alguns computos: n S n 1 12 = 0, 5 2 12 + 1 22 = 0, 75 3 12 + 1 22 + 1 23 = 0, 875 . . . . . . . . . . . . . . . . . . . . . . . . . . . Vamos fazer melhor: o programa vai receber como entrada um número L que, em particular, pode ser L = 0, 99. Então: ≪ → L ≪ 1 p n p STO 0 pS p STO WHILE p S ≤ L p REPEAT p 1/2∧ n p EVAL S + pS p STO p n p INCR DROP END n 1 − ≫ ≫ Para melhor compreensão de como o programa funciona, execute-o no DBUG. Exemplo 15: (F.C.M. STA. CASA - 82) Para que a soma dos termos da sequência (−81, −77, −73, . . . ) seja um número positivo, deve-se considerar no mı́nimo: a ) 35 termos b ) 39 termos c ) 41 termos d ) 42 termos e ) 43 termos Solução: A sequência dada é uma P.A. de primeiro termo a 1 = −81 e r = −77 − (−81) = 4. Logo, a n = a 1 + (n − 1)r = −81 + (n − 1) · 4. Podemos também usar a fórmula da soma dos termos de uma P.A., assim: S n = na1 + n(n− 1) 2 r = n · (−81) + n(n− 1) 2 4 = −81n + 2n(n− 1) (3.6) 40 Então, vamos calcular esta soma, incrementando n, até que a mesma seja posi- tiva. Temos, ≪ 1 pn p STO WHILE p2n(n− 1)− 81n ≤ 0 p REPEAT pn p INCR DROP END n ≫ Rodando o programa este nos devolve n = 42. Podemos confirmar em (3.6): n = 41 ⇒ S 41 = −81 · 41 + 2 · 41 · (41− 1) = −41 n = 42 ⇒ S 42 = −81 · 42 + 2 · 42 · (42− 1) = 42 Exerćıcios 20) Determine n tal que ∑n i=1 2 i = 4088. 21) Resolva o problema anterior utilizando a fórmula para a soma dos termos de uma P.G.: S n = a 1 ·qn−a 1 q−1 . 22) Resolva a questão da UNESP (pág. 39) utilizando a fórmula para a soma dos termos de uma P.G. 23) Elabore um programa onde entramos com o primeiro termo e a razão de uma P.A., e ainda com um número L (maior ou igual ao primeiro termo), e o programa saia com n, a quantidade máxima de termos que podemos somar para que a soma não ulrapasse L. 24) Qual é o primeiro termo positivo da P.A. (−81, −77, −73, . . .)? 25) Encontre o valor de k de modo que: k ∑ j=1 30 ∑ i=1 (−2i + 3j) = 300 26) Quantos termos devem ser somados na sequência , 2 − 1 2 − 1 2 − 1 2 − 1 2 − 1 . . . a partir do primeiro termo, para que a soma seja 15? Dado: S n = [ 2n− 3 · (−1)n + 3 ] · 14 . 27) Quantos termos devem ser somados na sequência , −1 3 − 1 3 − 1 3 − 1 3 − 1 3 . . . a partir do primeiro termo, para que a soma seja 13? Dado: S n = (−1)n + n− 1. Gentil 41 28) Diz-se que o número real L é limite da sequência (x n ) de números reais, e escreve-se L = lim x n ou L = lim n→∞ x n , quando para cada número real ε > 0, dado arbitrariamente, for posśıvel obtermos um inteiro n 0 ∈ N tal que |x n −L| < ε sempre que n > n0 . Em linguagem simbólica: lim n→∞ x n = L ⇔ ∀ ε > 0, ∃n 0 ∈ N; n > n 0 ⇒ |x n − L| < ε Exemplos: i ) A sequência dada por 1, 12 , 1 3 , . . . , 1 n , . . . tem 0 como limite; ii ) A sequência dada por x n = n √ n tem 1 como limite. Faça um programa no qual entramos com ε > 0 e o mesmo saia com o n 0 da definição. Obs: a fórmula do termo geral da sequência e o seu limite devem estar embutidos no programa. 29) Faça um programa que saia com os N primeiros números primos em uma lista. 3.2 Estruturas Condicionais 3.2.1 IF - THEN - END Entre com esta estrutura num programa pressionando a seguinte sequência de teclas: PRG BRCH IF A sintaxe desta estrutura é assim: ≪ . . . IF cláusula-de-teste THEN cláusula-verdadeira END . . . ≫ Esta estrutura executa uma sequência de comandos somente se o teste re- sultar verdadeiro. A cláusula de teste pode ser uma sequência de comandos − da pilha − (por exemplo A B <) ou uma expressão algébrica (por exemplo pA < B p), sendo neste último caso desnecessário executar →NUM ou EVAL. A palavra IF inicia a cláusula-de-teste, a qual deixa o resultado do teste (0 ou 1) na pilha. THEN remove este resultado. Se o valor é diferente de zero, a cláusula verdadeira é executada. Caso contrário, a execução do programa prossegue com a instrução seguinte a END. 44 Exemplo 19: . Fazer um programa para sair com os N primeiros termos da sequência a n =    n 2 , se n é par; n+1 2 , se n é ı́mpar. Então, ≪ → N ≪ 1 N FOR n IF pFP (n/2) == 0 p THEN n 2 / ELSE n 1 + 2 / END NEXT N ROW→ ≫ ≫ Interprete o programa acima e execute-o no DBUG. Exemplo 20: (U.E.CE. - 80) Considere a sequência de números reais definida por a n =    a n−1 , se n é par; n+1 2 , se n é ı́mpar. Então o produto dos seis primeiros termos é igual a: a ) 48 b ) 30 c ) 36 d ) 42 Vamos fazer um programa para sair com os N primeiros termos da sequência acima. Observe que quando n é par o nésimo termo é igual ao termo ante- rior ( a n−1 ), motivo pelo qual usaremos um vetor para guardar os termos da sequência . Então: ≪ → N ≪ [ 0 ] {N } RDM pA p STO 1 N FOR n IF pFP (n/2) 6= 0 p THEN p(n + 1)/2p EVAL pA(n) p STO ELSE pA(n− 1) p EVAL pA(n) p STO END NEXT A ≫ ≫ Gentil 45 Interprete o programa acima e execute-o no DBUG para dirimir quaisquer dúvidas. Uma fórmula alternativa para a sequência dada é: a n = [ 2n+1− (−1)n ]/4. Exemplo 21: (PUC- SP - 76) Se A é uma matriz 3 por 2 definida pela lei a ij =    1, se i = j; i2, se i 6= j. Então A se escreve: a ) [ 1 4 9 1 1 9 ] b )   1 1 4 1 9 9   c )   1 1 1 4 9 9   d ) [ 1 1 9 1 4 9 ] e )   1 1 4 1 6 6   Vamos resolver este problema para uma matriz de dimensão genérica M×N . Assim: ≪ → M N ≪ 1 M FOR I 1 N FOR J IF pI == J p THEN 1 ELSE I 2 ∧ END NEXT N ROW→ NEXT M ROW→ ≫ ≫ Exemplo 22: (Com)prove que uma matriz A cujos elementos estão dados pela relação, a ij =          (−1)j−1 ( j−1 i−1 ) , se i < j; (−1)i−1, se i = j; 0, se i > j. satisfaz a relação A2 = I. 46 Vamos fazer um programa para comprovar esta relação. Antes, observamos que ( j−1 i−1 ) significa uma combinação e que, na HP , encontra-se dispońıvel em MTH NXT L PROB COMB . O programa fica assim: ≪ → L r ≪ 1 N FOR I 1 N FOR J IF pI < J p THEN p(−1) ∧ (J − 1) ∗ COMB(J-1, I-1)p EVAL ELSE IF pI == J p THEN p(−1) ∧ (I − 1)p EVAL ELSE 0 END END NEXT N ROW→ NEXT N ROW→ ≫ ≫ O programa sai com a matriz A. Para comprovar que A2 = I (I é matriz identidade) basta dar ENTER e ×. Exemplo 23: (Limite da funç~ao quadrática) Definição (Limite): Sejam D ⊂ R um conjunto de números reais, f : D → R uma função real e a ∈ D′ um ponto de acumulação de D. Diz-se que o número real L é limite de f(x) quando x tende a a, e escreve-se lim x→a = L, quando, para todo ε > 0 dado arbitrariamente, pode-se obter δ > 0 tal que se tem |f(x)− L| < ε sempre que x ∈ X e 0 < |x− a| < δ. Em [7] provamos o seguinte, Teorema 1. Se f(x) = ax2 + bx + c então lim x→d f(x) = f(d), onde f(d) = a · d2 + b · d + c. No referido opúsculo deduzimos a seguinte fórmula, δ(ε) =        min { 1, εa (2d+ a |a| )+b } , se a (2d− 1) + b ≥ 0; min { 1, −εa (2d− a |a| )+b } , se a (2d− 1) + b < 0. (3.7) que nos dá o δ em função de ε para o limite em questão. Exemplos ( pág. 63-LEITHOLD): Prove que o limite é o número indicado, 35. lim x→1 x2 = 1. Neste caso, temos: a = 1, b = 0, d = 1. Então, sendo a (2d− 1) + b = 1 · (2 · 1− 1) + 0 = 1 > 0, temos Gentil 49 ≪ → a b n ≪ p(b− a)/n p EVAL p h p STO a b FOR x x FUNC h STEP n 1 + →ARRY n CSRS DOT 3 h * 8 / * ≫ ≫ Para a = 1, b = 4 e n = 9, resulta: I = 8, 5620.  Integração Dupla Seja o problema de calcular a integral dupla a seguir: I = ∫ D ∫ f(x, y) dx dy onde D é o retângulo delimitado por: a ≤ x ≤ b c ≤ y ≤ d Veremos que as regras apresentadas anteriormente podem ser usadas aqui. Ini- cialmente fazemos uma partição do retângulo anterior em nx subintervalos em [ a, b ] e em ny subintervalos em [ c, d ], assim: p p p p p p x 0 = a x 1 x 2 x i · · ·· · · x n−1 xn = b p p p p p y 0 = c y 1 ... ... y j y n−1 yn = d x y · · ·· · ·... ... s (x i , y j ) Na verdade o n que comparece no eixo x é nx e o n que comparece no eixo y é ny (não são necessáriamente iguais). Pois bem, temos I = ∫ D ∫ f(x, y) dx dy = ∫ b a dx ∫ d c f(x, y) dy 50 Chamando ∫ d c f(x, y) dy de G(x), isto é, G(x) = ∫ d c f(x, y) dy (3.10) podemos escrever: I = ∫ b a G(x) dx Para resolver esta integral simples aplicaremos a segunda regra de Simpson (equação (3.8), pág. 48), assim: I = 3h 8 ( G(x 0 ) + 3G(x 1 ) + 3G(x 2 ) + 2G(x 3 ) + 3G(x 4 ) + 3G(x 5 ) + 2G(x 6 ) + · · · + 3G(x n−2) + 3G(xn−1) + G(xn) ) (3.11) Da equação (3.10), temos: G(x i ) = ∫ d c f(x i , y) dy; (i = 0, 1, 2, . . . , nx) (3.12) Observe que, para cada i fixo, devemos calcular a integral da função (de uma única variável) f(x i , y) no intervalo [ c, d ] (veja partição do retângulo). Para resolver esta integral em y utilizaremos a primeira regra de Simpson (equação (3.3), pág. 30), por exemplo: G(x i ) = h 3 ( f(x i , y 0 ) + 4f(x i , y 1 ) + 2f(x i , y 2 ) + 4f(x i , y 3 ) + 2f(x i , y 4 ) + · · · + 2f(x i , y n−2 ) + 4f(x i , y n−1 ) + f(x i , y n ) ) Observe que temos nx + 1 desta equações (veja equação (3.12)). Ademais, observe que como estamos particionando o intervalo [ c, d ] em ny subintervalos a rigor temos, G(x i ) = h 3 ( f(x i , y 0 ) + 4f(x i , y 1 ) + 2f(x i , y 2 ) + 4f(x i , y 3 ) + 2f(x i , y 4 ) + · · · + 2f(x i , y ny−2 ) + 4f(x i , y ny−1 ) + f(x i , y ny ) ) (i = 0, 1, 2, . . . , nx) Pois bem, substituindo estas nx + 1 equações na equação (3.11), obtemos: Gentil 51 I= 3hx8 [ hy 3 ( F (x0 , y0)+ 4F (x0 , y1)+ 2F (x0 , y2) + 4F (x0 , y3) + ···+4F (x0 , yn−1)+ F (x0 , yn ) ) + 3·hy3 ( F (x 1 , y 0 )+ 4F (x 1 , y 1 )+ 2F (x 1 , y 2 )+ 4F (x 1 , y 3 )+ ···+4F (x 1 , y n−1 )+ F (x 1 , yn ) ) + 3·hy3 ( F (x 2 , y 0 )+ 4F (x 2 , y 1 )+ 2F (x 2 , y 2 )+ 4F (x 2 , y 3 )+···+ 4F (x 2 , y n−1 )+ F (x 2 , yn) ) + 2·hy3 ( F (x 3 , y 0 )+ 4F (x 3 , y 1 )+ 2F (x 3 , y 2 )+ 4F (x 3 , y 3 )+···+4F (x 3 , y n−1 ) + F (x 3 , yn ) ) + 3·hy3 ( F (x 4 , y 0 )+ 4F (x 4 , y 1 )+ 2F (x 4 , y 2 )+ 4F (x 4 , y 3 )+···+4F (x 4 , y n−1 ) + F (x 4 , yn ) ) + 3·hy3 ( F (x 5 , y 0 )+ 4F (x 5 , y 1 )+ 2F (x 5 , y 2 )+ 4F (x 5 , y 3 )+···+4F (x 5 , y n−1 ) + F (x 5 , yn ) ) + 2·hy3 ( F (x6 , y0 )+ 4F (x6 , y1 )+ 2F (x6 , y2)+ 4F (x6 , y3)+···+4F (x6 , yn−1) + F (x6 , yn ) ) −−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−− + 3·hy3 ( F (x n−2 , y 0 )+ 4F (x n−2 , y 1 )+ 2F (x n−2 , y 2 ) + 4F (x n−2 , y 3 )+···+ F (x n−2 , yn ) ) + 3·hy3 ( F (x n−1 , y 0 )+ 4F (x n−1 , y 1 )+ 2F (x n−1 , y 2 ) + 4F (x n−1 , y 3 )+···+ F (x n−1 , yn ) ) + hy3 ( F (xn , y0)+ 4F (xn , y1 )+ 2F (xn , y2)+ 4F (xn , y3)+···+ 4F (xn , yn−1)+ F (xn , yn ) ) ] Arrumando a casa obtemos: I= 3hx8 · hy 3 [ 1· ( F (x 0 , y 0 )+ 4F (x 0 , y 1 )+ 2F (x 0 , y 2 )+ 4F (x 0 , y 3 )+ ···+4F (x 0 , y n−1 )+ F (x 0 , yn) ) + 3· ( F (x1 , y0) + 4F (x1 , y1 )+ 2F (x1 , y2)+ 4F (x1 , y3)+ ···+4F (x1 , yn−1)+ F (x1 , yn) ) + 3· ( F (x2 , y0) + 4F (x2 , y1 )+ 2F (x2 , y2)+ 4F (x2 , y3)+···+ 4F (x2 , yn−1)+ F (x2 , yn) ) + 2· ( F (x 3 , y 0 ) + 4F (x 3 , y 1 )+ 2F (x 3 , y 2 )+ 4F (x 3 , y 3 )+···+4F (x 3 , y n−1 ) + F (x 3 , yn ) ) + 3· ( F (x 4 , y 0 ) + 4F (x 4 , y 1 )+ 2F (x 4 , y 2 )+ 4F (x 4 , y 3 )+···+4F (x 4 , y n−1 ) + F (x 4 , yn ) ) + 3· ( F (x 5 , y 0 ) + 4F (x 5 , y 1 )+ 2F (x 5 , y 2 )+ 4F (x 5 , y 3 )+···+4F (x 5 , y n−1 ) + F (x 5 , yn ) ) + 2· ( F (x 6 , y 0 ) + 4F (x 6 , y 1 )+ 2F (x 6 , y 2 )+ 4F (x 6 , y 3 )+···+4F (x 6 , y n−1 ) + F (x 6 , yn ) ) −−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−− + 3· ( F (x n−2 , y0)+ 4F (xn−2 , y1 )+ 2F (xn−2 , y2) + 4F (xn−2 , y3)+···+ F (xn−2 , yn ) ) + 3· ( F (x n−1 , y 0 )+ 4F (x n−1 , y 1 )+ 2F (x n−1 , y 2 ) + 4F (x n−1 , y 3 )+···+ F (x n−1 , yn ) ) + 1· ( F (xn , y0)+ 4F (xn , y1)+ 2F (xn , y2 )+ 4F (xn , y3)+···+4F (xn , yn−1)+ F (xn , yn ) ) ] No “quadro” acima podemos obervar, pelos ı́ndices de y j , que temos ny + 1 parcelas em cada linha e, pelos ı́ndices de x i , observamos que temos nx + 1 linhas. Para programar esta equação vamos, antes, fazer um programa que calcule uma matriz com os valores da função em todos os vértices da malha de partição, digo, ( F (x i , y j ) ) ; (i = 0, 1, 2, . . . , nx), (j = 0, 1, 2, . . . , ny) (3.13) Ou ainda, 54 Comentários: a) Os dados de entrada para este programa é o retângulo [ a, b ] × [ c, d ] e o número de subretângulos, nx× ny, da partição. b) A segunda linha do programa cria um vetor, de comprimento nx + 1, com a constante 0: [ 0 0 0 0 . . . 0 ] (comprimento deste vetor = nx + 1) Este vetor é guardado na variável VL. Observe que nx + 1 é igual ao número de linhas no “quadro”da pág. 51; c) A terceira linha do programa disponibiliza os dados da subrotina FDV que calcula a matriz ( F (x i , y j ) ) e guarda-a na variável MF; d) A quarta linha do programa disponibiliza os dados da subrotina CSRS (pág. 48) que calcula os coeficientes da segunda regra de Simpson e os guarda no vetor V x; e) A quinta linha do programa disponibiliza os dados da subrotina CPRS (pág. 31)que calcula os coeficientes da primeira regra de Simpson e os guarda no vetor V y; f) Agora o FOR-NEXT vai extrair cada uma das linhas da matriz ( F (x i , y j ) ) e fazer o produto interno, de cada linha, com o vetor dos coeficientes V y, con- forme “quadro” à pág. 51; observe que o resultado de cada um destes produtos internos vai sendo guardado no vetor V L que estava inicialmente “vazio”. Ao sair do laço o vetor V L guarda, em sua posição i, a soma da linha i do “quadro” (apenas as somas entre os dois parêntesis maiores); g) Agora calculamos o produto interno entre os vetores V L e V x e, para fina- lizar, multiplicamos o resultado por 3hx8 · hy 3 . Por exemplo, entrando no programa anterior com os seguintes dados: → 0 π/2 0 0, 4 3 4 recebemos de volta: 0.1014, como valor para a Integral dupla. Gentil 55 3.3 Operadores lógicos relacionais Um outro recurso − não menos importante − que a programação nos oferece são os operadores lógicos booleanos: OR, AND, XOR, NOT, etc., acessados com a seguinte sequência de teclas: PRG TEST NXT L Estes operadores estão definidos pelas respectivas tabelas-verdade, digo: p q p OR q V V V V F V F V V F F F p q p AND q V V V V F F F V F F F F p q p XOR q V V F V F V F V V F F F p p̄ V F F V Ou ainda, na forma em que a HP entende e opera: p q p OR q 1 1 1 1 0 1 0 1 1 0 0 0 p q p AND q 1 1 1 1 0 0 0 1 0 0 0 0 p q p XOR q 1 1 0 1 0 1 0 1 1 0 0 0 p p̄ 1 0 0 1 Vejamos um exemplo de aplicação destes operadores: Exemplo 25: (CESGRANRIO - 76) Seja H o conjunto {n ∈ N : 2 ≤ n ≤ 40 }, n múltiplo de 2, n não múltiplo de 3. O número de elementos de H é: a ) 12 b ) 14 c ) 7 d ) 13 e ) 6 Observe, na definição do conjunto em questão: n é múltiplo de 2 e n não é múltiplo de 3. Aqui temos uma tarefa para o operador lógico AND. Vamos fazer melhor, vamos fazer um programa que recebe dois números naturais M e N (N < M) e devolve todos os múltiplos de 2, e não de 3, entre N e M ; assim: ≪ → N M ≪ N M FOR n IF pFP(n/2) == 0 AND FP(n/3) 6= 0 p THEN n END NEXT DEPTH →LIST ≫ ≫ Nota: O comando DEPTH retorna o número de objetos na pilha (veja tabela de comandos da pilha, pág. 7). 56 O programa seguinte sai com os múltiplos de 2 ou 3 entre N e M (N < M). ≪ → N M ≪ N M FOR n IF pFP(n/2) == 0 OR FP(n/3) == 0 p THEN n END NEXT DEPTH →LIST ≫ ≫ Exerćıcios 30) (F. SANTANA - 83) Dadas as matrizes A = ( a ij ) 2 , tal que a ij =    1 + i, se i = j; 0, se i 6= j. e B = (B ij )2 , tal que bij = 2i− 3j, então A + B é igual a: a ) [ −1 4 −1 −2 ] b ) [ 1 −4 −1 −2 ] c ) [ −1 4 1 2 ] d ) [ 1 −4 1 2 ] e ) [ 1 4 1 2 ] 31) Fazer um programa para sair com a matriz identidade de ordem N : a ij =    1, se i = j; 0, se i 6= j. 32) (U. MACK. - 80) Dada a matriz A = ( a ij ) 2 tal que a ij =    sen π2 j, se i = j; cosπj, se i 6= j. Então A2 é a matriz: a ) [ −1 −1 1 0 ] b ) [ 0 −1 1 1 ] c ) [ −1 1 0 1 ] d ) [ 0 1 −1 1 ] e ) [ 0 1 −1 −1 ] 33) (UFRS - 83) A = ( a ij ) é uma matriz de ordem 2 × 2 com a ij = 2−i se i = j e a ij = 0 se i 6= j. A inversa de A é: a ) [ 1 2 0 0 14 ] b ) [ − 12 0 0 − 14 ] c ) [ 2 0 0 4 ] d ) [ −2 0 0 −4 ] e )   2 0 0 2 1 2   Caṕıtulo 4 Outros Tópicos de Interesse 4.1 Cálculo de Combinações “A obtenção de um resultado novo em pesquisa é, para o cientista, uma fonte de intenso prazer, ligado intimamente ao instinto de criação e eternidade, pois, independentemente da importância da contri- buição no contexto da ciência, ou de sua utilização, representa algo acrescentado ao conhecimento hu- mano que marca sua existência na terra.” (Pierre Curie) A conhecida fórmula da análise combinatória ( n r ) = n !(n−r)! r! nos fornece o número de combinações dos n elementos de um conjunto, tomados r a r. Mas esta fórmula não nos fornece as tais combinações. O nosso objetivo neste apêndice é apresentar uma fórmula que tem precisamente esta finalidade. Problema: Dado o conjunto A = {a1, a2 , a3 , a4}, obter todas as com- binações posśıveis de seus elementos. Solução: O racioćınio que será desenvolvido a seguir se estende a um con- junto com um número arbitrário de elementos. Todas as combinações podem ser obtidas da seguinte matriz: Onde convencionamos que 1 significa que o elemento en- tra na combinação e que −1 significa que o elemento não entra na combinação. 1 1 1 1 −1 1 1 1 1 −1 1 1 −1 −1 1 1 1 1 −1 1 −1 1 −1 1 1 −1 −1 1 −1 −1 −1 1 1 1 1 −1 −1 1 1 −1 1 −1 1 −1 −1 −1 1 −1 1 1 −1 −1 −1 1 −1 −1 1 −1 −1 −1 −1 −1 −1 −1 a 1 a 2 a 3 a 4 {ai} ∅ {a 1 } {a 2 } {a1 , a2} {a 3 } {a 1 , a 3 } {a 2 , a 3 } {a 1 , a 2 , a 3 } {a4} {a 1 , a 4 } {a 2 , a 4 } {a 1 , a 2 , a 4 } {a3 , a4} {a1 , a3 , a4} {a 2 , a 3 , a 4 } {a 1 , a 2 , a 3 , a 4 } 59 60 O leitor pode inferir fácilmente a lei de construção desta matriz. Só obser- vamos que o número de colunas é igual ao número n de elementos do conjunto, o número de linhas é igual ao de subconjuntos 2n. Esta matriz, apropriadamente modificada, comparece em Lógica e Eletrônica Digital. Na referência [5] deduzimos (e demonstramos) a seguinte fórmula, a ij = (−1 ) j i−1 2 j−1 k ( MC ) que gera a matriz de combinações acima. Na pág. 62 provamos que, de fato, esta matriz calcula combinações. Nota: ⌊x ⌋ é o maior inteiro que não supera x. Na HP você acessa esta função com o comando FLOOR (ver tabela dos reais, pág. 6). − Já não conto mais o número de fórmulas que deduzi (demonstrei) na matemática, confesso que, pela fórmula acima, tenho um carinho todo especial∗. O programa a seguir sai com as combinações de N objetos, tomados r a r. Devemos entrar com uma lista contendo os objetos e r (nesta ordem). ≪ → L r ≪ {} p LC p STO L SIZE p N p STO 1 2 N ∧ FOR I 1 N FOR J IF p (−1) ∧ FLOOR((I − 1)/2 ∧ (J − 1)) == 1p THEN J END NEXT DEPTH DUP p C p STO IF p C==r p THEN ROW→ pV p STO 1 r FOR K L p V(K) p EVAL GET NEXT r →LIST 1 →LIST LC + p LC p STO ELSE CLEAR END NEXT LC ≫ ≫ Por exemplo, para a seguinte entrada, { a b c d } 3 o programa nos devolve, { { a b c } { a b d } { a c d } { b c d } } Para a seguinte entrada: { a ∑ c π −1 } 3, o programa nos devolve, ∗Precisamente pelos detalhes técnicos envolvidos em sua dedução e demonstração. Gentil 61 { { a ∑ c } { a ∑ π } { a c π } { ∑ c π } { a ∑ -1 } { a c -1 } { ∑ c -1 } { a π -1 } { ∑ π -1 } { c π -1 } } Nota: Para calcular o número de combinações, ( n r ) , na HP , pressione as teclas: MTH NXT L PROB COMB Descrição do programa: Inicialmente observe que temos uma concatenação de estruturas com a se- guinte configuração: FOR FOR IF IF FOR 1. Inicialmente (segunda linha do programa) armazenamos uma lista vazia na variável LC (esta lista guardará as combinações “úteis”); 2. Depois colocamos a lista (com os objetos) na pilha e pedimos seu compri- mento (dimensão) o qual é armazenado na variável N; 3. Em seguida fixamos a variação do primeiro FOR: de 1 até 2N ; este FOR irá gerar os ı́ndices das linhas da matriz de combinações; 4. Após, fixamos a variação do segundo FOR: de 1 até N ; este FOR irá gerar os ı́ndices das colunas da matriz de combinações; 5. O primeiro IF testa se o elemento a ij da matriz é igual a 1; se for este o caso colocamos o ı́ndice da coluna deste elemento na pilha; − Resumindo até aqui: o primeiro FOR fixa uma linha (da matriz); o se- gundo FOR pesquisa todas as colunas desta linha procurando os elementos iguais a 1 e guarda os ı́ndices (posições) destes elementos. 6. Ao sair do segundo laço (FOR) perguntamos (via comando DEPTH) quantos elementos (́ındices) existem na pilha;∗ 7. Em seguida, duplicamos esta informação e guardamos uma cópia na variável C; 8. Após, temos o segundo IF que testa se o número de elementos iguais a 1, na linha pesquisada, é igual a r; se for este o caso guardamos (com ROW→) os ı́ndices em um vetor V e o armazenamos na variável V ; o FOR a seguir tem a incubência de retirar, da lista original, todos os elementos com ı́ndices no vetor V (ou seja, uma combinação válida; digo, com r elementos); ao sair do FOR colocamos os elementos da pilha em uma lista e depois novamente entre chaves (uma lista dentro da outra); em seguida colocamos na pilha a lista LC (inicialmente vazia) e colocamos (+ ) a lista com a combinação válida dentro da lista LC e armazenamos a lista “atualizada” na variável LC (nela própria). ∗Em outras palavras: estamos contabilizando o saldo de nossa “pescaria”. 64 Teorema 2 (Gentil/1997). Dado um conjunto A = {a1 , a2 , . . . , an} com n elementos, a matriz abaixo a ij = (−1 ) j i−1 2 j−1 k nos fornece todos os seus subconjuntos, para i = 1, 2, . . . , 2n e j = 1, 2, . . . , n; de acordo com a convenção feita anteriormente. Prova: Indução sobre o número n de elementos de A. (i) n = 1 ( A = {a1} ) ⇒ j = 1 e i = 1, 2. 1 −1 a1 {ai} {a 1 } ∅ ⇒ P(A) = { ∅, {a 1 } } . (ii) Suponhamos a validade da fórmula para n = p elementos. Por hipótese a matriz ( a ij ) nos fornece os 2 p subconjuntos de A = {a 1 , a 2 , . . . , a p }. (iii) Mostremos que a fórmula é válida para n = p + 1 elementos. Isto é, que a fórmula nos fornece todos os 2p+1 subconjuntos de A′ = {a 1 , a 2 , . . . , a p , a p+1 }. De fato, tendo em conta os dois lemas anteriores, é suficiente mostrar que a i(p+1) =    1, se i = 1, 2, . . . , 2 p ; −1, se i = 2p + 1, . . . , 2p+1. temos, i = 1, 2, . . . , 2p ⇔ 0 ≤ i− 1 < 2p ⇔ 0 ≤ i− 1 2p < 1⇔ ⌊ i− 1 2p ⌋ = 0 ⇒ a i(p+1) = 1. Por outro lado, i = 2p + 1, . . . , 2p+1 ⇔ 2p ≤ i− 1 < 2p+1 ⇔ 1 ≤ i− 1 2p < 2 ⇔ ⌊ i− 1 2p ⌋ = 1 ⇒ a i(p+1) = −1.  Gentil 65 Para melhor entendimento da demonstração anterior veja a figura ao lado: Hipótese de Indução Propriedade do DNA 1 1 ... 1 −1 −1 ... −1 1 2 ... 2p 2p+1 2p+2 ... 2p+1 a 1 a 2 ··· ap ap+1 Desenvolvimento Binário Uma outra utilidade para a matriz de combinações é no desenvolvimento binário de um inteiro positivo n. Com efeito, se trocarmos −1 por 0, assim: a ij =      1, se ⌊ i−1 2j−1 ⌋ é par; 0, se ⌊ i−1 2j−1 ⌋ é ı́mpar. (4.1) Obtemos, 20 21 22 23 1 1 1 1 15=1·20 +1·21 +1·22 +1·23 0 1 1 1 14=0·20 +1·21 +1·22 +1·23 1 0 1 1 13=1·20 +0·21 +1·22 +1·23 0 0 1 1 12=0·20 +0·21 +1·22 +1·23 1 1 0 1 11=1·20 +1·21 +0·22 +1·23 0 1 0 1 10=0·20 +1·21 +0·22 +1·23 1 0 0 1 9=1·20 +0·21 + 0·22 +1·23 0 0 0 1 8=0·20 +0·21 + 0·22 +1·23 1 1 1 0 7=1·20 +1·21 + 1·22 +0·23 0 1 1 0 6=0·20 +1·21 + 1·22 +0·23 1 0 1 0 5=1·20 +0·21 + 1·22 +0·23 0 0 1 0 4=0·20 +0·21 + 1·22 +0·23 1 1 0 0 3=1·20 +1·21 + 0·22 +0·23 0 1 0 0 2=0·20 +1·21 + 0·22 +0·23 1 0 0 0 1=1·20 +0·21 + 0·22 +0·23 0 0 0 0 0=0·20 +0·21 + 0·22 +0·23 Na matriz MC a contagem de linhas e colunas inicia-se em 1, na matriz acima (matriz binária ou MB) a contagem de linhas e colunas deve iniciar-se em∗ 0, o que significa que devemos fazer uma translação nos ı́ndices da matriz (4.1); tendo em conta esta observação e escrevendo a equação anterior em função do natural n, a ser desenvolvido, resulta: ∗Podemos contar as linhas debaixo para cima iniciando com zero, não há problemas. 66 a nj =    1, se ⌊ n 2 j ⌋ é par; 0, se ⌊ n 2j ⌋ é ı́mpar. (4.2) Figura 4.1: Desenvolvimento binário de n Esta equação nos fornece o j-ésimo bit do desenvolvimento binário de n. Para programar esta equação precisamos da variação de j, e isto se consegue assim: n 2j ≥ 1 ⇒ 2j ≤ n ⇒ j ≤ logn 2 Então, fazemos: j = 0, 1, 2, . . . , ⌊ logn 2 ⌋ . O programa a seguir recebe um número natural n e devolve n em base 2. ≪ → n ≪ 0 p FLOOR(LOG(n)/LOG(2)) p EVAL FOR j IF p FP(FLOOR(n/2 ∧ j)/2)==0p THEN 1 ELSE 0 END NEXT DEPTH ROW→ ≫ ≫ Um Desafio!!! Mostre que as três matrizes a seguir, a nm = (−1 ) j n−1 2 m−1 k a nm = (−1 )( n−1 2 m−1 ) a nm = (−1 ) µn−1 2m−1 são iguais. Isto é, nos fornecem o mesmo resultado para naturais m e n arbitra- riamente fixados. No expoente da matriz do meio temos uma combinação. Por exemplo, n = 5, m = 2 ⇒ ( n− 1 2m−1 ) = ( 5− 1 22−1 ) = ( 4 2 ) = 6 Para o śımbolo no expoente da matriz da direita estamos fazendo uso da seguinte convenção: µn−1 2m−1 é o bit (digito) de posição m−1 no desenvolvimento binário de n−1. Estamos contando as posições da esquerda para a direita, iniciando em zero. Por exemplo, n = 5, m = 2 ⇒ (n− 1) 2 = 4 2 = 0 0 1 0 ⇒ µ5−1 22−1 = µ4 21 = 0 Gentil 69 Para o valor mı́nimo de x digite 0 e dê ENTER . Para colocar 2π no extremo direito de H-View, pressione NXTL em seguida a tecla virtual CALC . Delete o valor anterior (isto é, 6.5) coloque na pilha os valores 2 e π multiplique-os e pressione OK . Para preencher os dois argumentos da faixa vertical, V-View, você tem duas opções: digita diretamente os valores, por exemplo, H-View : −1.0 1.0 ou digita a tecla virtual AUTO (automático). Finalmente, pressione as teclas virtuais: ERASE DRAW , para obter um gráfico similar ao seguinte: ZOOM (X,Y) TRACE FCN EDIT CANCL Nota: ERASE apaga algum eventual gráfico que tenha sido traçado anteriormente; enquanto DRAW traça o novo gráfico. Para adicionar rótulos no gráfico pressione EDIT NXTL LABEL . Pressione MENU para remover as etiquetas do menu e obter uma visão total do gráfico. Pressione NXTL para recuperar o primeiro menu gráfico atual. Adendo: Algo que sempre me incomodou∗ em gráficos tais como o acima foi o “espaçamento” nas marcas dos eixos x e y. No caso deste gráfico eu gostaria que as marcas coincidissem com os pontos de máximo e mı́nimo da função, tipo: 0 π 2 π 3π 2 2π Encontrei uma solução para este “problema”, a qual desejo compartilhar com quem interessar possa. Inicialmente vejamos como redimensionar a tela de plotagem: PDIM A função PDIM toma como entrada um dos dois pares ordenados (xmin, ymin) (xmax, ymax) ou dois números inteiros binários #h e #v. O efeito de PDIM é ∗Desde os meus primeiros tempos de HP 70 redimensionar a variável gráfica PICT∗. Quando o argumento for (xmin, ymin)- (xmax, ymax), estes valores tornam-se a faixa das coordenadas definida pelo usuário no PPAR (variável que armazena parâmetros para plotagem). Quando o argumento for #h e #v, as faixas das coordenadas definidas pelo usuário no PPAR se mantém inalteradas, porém o tamanho dos gráficos são alterados para #h×#v pixels. Por exemplo, para redimensionar a tela gráfica para 131× 80 pixels execute a seguinte sequência de teclas: MTH BASE Em seguida, 131 R→ B 80 R→ B Agora digite PDIM e pressione ENTER . Então, agora que já fixamos as di- mensões de nossa tela de plotagem, lembramos que na janela PLOT SETUP, o valor H-Tick: 10. significa que entre duas marcas consecutivas temos 10 pi- xels. Então, vamos aumentar o número de pixels entre marcas consecutivas, resolvendo para tanto a seguinte regra de três: 2π ←→ 131 π 2 ←→ x ⇒ x = 131 4 = 32.75 Portanto, basta fazer: H-Tick: 32.75 De igual modo podemos controlar as marcas no eixo y. Plotando funções definidas por mais de uma sentença Vamos plotar, por exemplo, o gráfico da função definida por: f(x) =        −x, se x ≤ −1; 1, se − 1 < x ≤ 1; x2, se x > 1. Inicialmente convertemos a função em um programa, assim: ≪ IF px ≤ −1p THEN p − x p ELSE IF px > −1 AND x ≤ −1 p THEN 1 ELSE px ∧ 2p END END ≫ Armazene este programa na variável EQ: pEQp. Agora entre no ambiente gráfico, observe que o programa a ser plotado já se encontra nesta janela. Pro- ceda como anteriormente; se necessário redimensione a janela de plotagem. ∗variável chamada PICT armazena o conteúdo atual da janela dos gráficos. Gentil 71 Plotagem de Superf́ıcies: Plotagens ‘Fast 3D’: Plotagens Fast 3D são usadas para visualizar superf́ıcies tridimensionais re- presentadas por equações da forma z = f(x, y). Por exemplo, se quiser visualizar z = f(x, y) = x2 + y2 podemos usar o seguinte: • Pressione 2D/3D simultaneamente se estiver no modo RPN para acessar a janela PLOT SETUP. •Altere TYPE para Fast3D. Isto pode ser feito com o aux́ılio das teclas CHOOS e △. • Pressione △e digite px ∧ 2 + y ∧ 2p OK . • Certifique-se de que pX p seja selecionado como Indep: e pY p como Depnd:. • Pressione NXTL OK para retornar ao visor normal da calculadora. • Pressione WIN simultaneamente se estiver no modo RPN para acessar a janela PLOT WINDOW. • Mantenha as faixas da janela de plotagem padrão para ler: X-Left:-1, XRight: 1, Y-Near:-1, Y-Far: 1, Z-Low: -1, Z-High: 1, Step Indep: 10, Depnd: 8 Nota: A etapa Indep: e Depnd: os valores representam o número de linhas de grade usadas na plotagem. Quanto maior estes números mais lento o gráfico é produzido, embora o tempo utilizado para a geração de gráfico seja relativa- mente rápido. No presente manteremos os valores padrões de 10 e 8 para data de etapa. • Pressione ERASE DRAW para desenhar a superf́ıcie tridimensional. O re- sultado é uma imagem aramada da superf́ıcie com o sistema de coordenada de referência mostrado no canto esquerdo inferior do visor. Ao usar as teclas com seta (botões prateados), △ △ △ △ você pode alterar a orientação da superf́ıcie. A orientação do sistema de co- ordenada de referência será alterada de acordo. Tente alterar a orientação da superf́ıcie sozinho. Ao terminar, pressione EXIT . • Pressione CANCL para retornar ao ambiente PLOT WINDOW. • Altere para ler: Step Indep: 20 Depnd: 16 • Pressione ERASE DRAW para ver a plotagem de superf́ıcie. Vamos agora plotar o gráfico da superf́ıcie dada por F (x, y) = (y2 + y) cosx (pág. 52). Então: • Pressione 2D/3D simultaneamente se estiver no modo RPN para acessar a janela PLOT SETUP. • Altere, se necessário, TYPE para Fast3D. • Pressione △e digite p(y ∧ 2 + y) ∗ cos(x) p OK . 74 Esta superf́ıcie foi plotada no ambiente picture do LATEX. Programamos nosso algoritmo (fórmula) em HP para nos fornecer as coordenadas dos pontos. “. . . O matemático, como o pin- tor ou o poeta, é um desenhista. Se os seus desenhos são mais duradou- ros que os deles, é porque são feitos com idéias.” (G.H. Hardy) Uma nova configuração dos eixos Para a seguinte configuração dos eixos coordenados, (X, Y )≡(x, y, z) - 6 Z Y X y z x ` θ y−X z−Y x a θ ⊡ obtemos o algoritmo, (x, y, z) ≡ (X, Y ) = ( y − x · sen θ, z − x · cos θ ) Na figura seguinte temos o gráfico da superf́ıcie dada por z(x, y) = sen x · cos y, com θ = 35o e no domı́nio 0 ≤ x ≤ 2π, 0 ≤ y ≤ 4π, para esta configuração. Gentil 75 Certa feita nos deparamos com a necessidade de esboçar a seguinte figura: Para traçar esta figura (no ambiente picture do látex) programamos o algo- ritmo anterior em uma HP para nos fornecer os dados.∗ Como mais um exemplo, o gráfico da pág. 53 foi plotado com aux́ılio deste algoritmo. Paraleleṕıpedos Agora vamos construir um comando para desenhar um paraleleṕıpedo como o da figura a seguir: (a, 0, 0) (a, 0, c) (a, b, 0) (a, b, c) (0, b, 0) (0, b, c) (0, 0, c) Inicialmente vamos calcular as coordenadas do algoritmo para cada um dos vértices da figura, assim: { X = y − x sen θ Y = z − x cos θ ∗Para ver aplicações deste algoritmo no LATEX veja nosso artigo [9]. 76 então, (a, 0, 0) : { X = 0− a · sen θ Y = 0− a · cos θ (a, 0, c) : { X = 0− a · sen θ Y = c− a · cos θ (a, b, 0) : { X = b− a · sen θ Y = 0− a · cos θ (a, b, c) : { X = b− a · sen θ Y = c− a · cos θ (0, b, 0) : { X = b− 0 · sen θ Y = 0− 0 · cos θ (0, b, c) : { X = b− 0 · sen θ Y = c− 0 · cos θ (0, 0, 0) : { X = 0− 0 · sen θ Y = 0− 0 · cos θ (0, 0, c) : { X = 0− 0 · sen θ Y = c− 0 · cos θ à esquerda temos a codificação dos vértices inferiores (do “chão”) e à direita a codificação dos vértices superiores. Inicialmente faremos uma subrotina para gerar estes oito vértices, assim: ≪ → a b c ≪ RAD p40 ∗ π/180p →NUM pθ p STO p0− a ∗ sin(θ)p EVAL p0− a ∗ cos(θ)p EVAL R→ C pV1p STO pb− a ∗ sin(θ)p EVAL p0− a ∗ cos(θ)p EVAL R→ C pV2p STO pb− 0 ∗ sin(θ)p EVAL p0− 0 ∗ cos(θ)p EVAL R→ C pV3p STO p0− 0 ∗ sin(θ)p EVAL p0− 0 ∗ cos(θ)p EVAL R→ C pV4p STO p0− a ∗ sin(θ)p EVAL pc− a ∗ cos(θ)p EVAL R→ C pV5p STO pb− a ∗ sin(θ)p EVAL pc− a ∗ cos(θ)p EVAL R→ C pV6p STO pb− 0 ∗ sin(θ)p EVAL pc− 0 ∗ cos(θ)p EVAL R→ C pV7p STO p0− 0 ∗ sin(θ)p EVAL pc− 0 ∗ cos(θ)p EVAL R→ C pV8p STO ≫ ≫ Observe, na segunda linha, que estamos fixando θ, em radianos, equivalente a 40o. Os zeros, acima, foram digitados apenas por uma questão didática e estética. O comando R→ C, acessado com MTH NXT L CMPLX R → C , converte um par de números reais em um par ordenado. Armazene esta subrotina com o nome de VPLD. Gentil 79 4.3 HOME: Variáveis e Diretórios Organizar dados na calculadora Você pode organizar dados na sua calculadora armazenando as variáveis em uma árvore de diretório. Para compreender a memória da calculadora, observe primeiro o diretório de arquivo. Pressione a combinação de teclas FILES (a função FILE ativa o nave- gador de arquivo na memória da calculadora) para obter o visor do gerenciador de arquivo da calculadora: File Manager                                                                                                                                                                             0 : IRAM 238 KB 1 : ERAM 127 KB 2 : FLASH 699 KB Home 238 KB GENTIL PROG. INTN CASDIR CHDIR CANCL OK Atenção: Este é o visor da configuração atual da minha calculadora. Vamos abrir um parentesis aqui para explicar a configuração de memória da HP − 50g e depois retornamos para os diretórios. Estrutura da memória A calculadora contém um total de 2.5 MB de memória do qual 1 MB é usada para armazenar o sistema operacional (memória do sistema) e 1.5 MB é usado para a operação da calculadora e armazenagem de dados (memória do usuário). Os usuários não têm acesso ao componente da memória do sistema. O visor acima indica a existência de três portas de memória (ou partições da memória). As portas da memória dispońıveis são: • Porta 0, chamada IRAM • Porta 1, chamada IRAM • Porta 2, chamada FLASH A seção HOME da memória funciona como um disco num computador pes- soal. Cada objeto com nome em HOME é semelhante a um arquivo num disco de computador. O diretório principal (ou raiz) para a HP −50g é chamado HOME. A porta 0 e o diretório HOME compartilham a mesma área da memória, então quanto mais dados armazenados no diretório HOME, por exemplo, menos memória estará dispońıvel para a armazenagem na Porta 0. O tamanho total da memória para a área da memória do diretório Porta 0/HOME é 241 KB. Porta 1 (ERAM) pode conter até 128 KB de dados. Porta 1, juntamente com a Porta 0 e o diretrio HOME, constitui o segmento RAM da calculadora (memória de acesso aleatório) da memória da calculadora. A Porta 2 pertence ao segmento Flash ROM da calculadora (memória apenas de leitura). A Porta 2 pode armazenar até 1085 KB de dados. 80 A quarta linha e as linhas subsequentes no visor acima mostram a árvore do diretório da calculadora. O diretório superior, como já ressaltamos, é o diretório Home e tem pré-definido em seu interior um sub-diretório chamado CASDIR. O visor File Manager possui três funõeses associadas às teclas do menu virtual: CHDIR : Seleciona o diretório (CHange DIRectory). CANCL : Cancela a ação. OK : Aprova a seleção. O subdiretório CASDIR contém um número de variáveis necessárias para a operação adequada do CAS (sistema algébrico do computador). Por exemplo, para obsevar os arquivos (variáveis) dentro do (sub)diretório CASDIR, desça com a seta para baixo, △, até destacá-lo; agora pressione a tecla virtual OK . Vamos aproveitar para explicar a função dos menus desta nova tela∗: Funções para manipular variáveis (arquivos) Este visor inclui 20 comandos associados às teclas do menu soft que podem ser usados para criar, editar e manipular variáveis. As primeiras seis funções são as seguintes: EDIT : Para editar uma variável ressaltada. COPY : Para copiar uma varivel ressaltada. MOVE : Para mover uma variável ressaltada. RCL : Para retornar o conteúdo de uma variável ressaltada (coloca no ńıvel 1 da pilha). EVAL : Para avaliar (executar) uma varivel ressaltada. TREE : Para ver a árvore do diretório onde a variável está contida. Se você pressionar a tecla NXT L , o próximo conjunto de funçẽs fica dispońıvel: PURGE : Para excluir ou apagar uma variável. RENAM : Para renomear uma variável (Arquivo, “pasta”, etc.). NEW : Para criar uma nova variável (ou “Pasta”). ORDER : Para ordenar um conjunto de variáveis no diretório. SEND : Para enviar uma variável para outra calculadora ou computador. RECV : Para receber uma variável de uma outra calculadora ou computador. Se você pressionar a tecla NXT L , o terceiro conjunto de funçẽs fica dispońıvel: HALT : Para retornar para a pilha temporariamente. VIEW : Para ver o conteúdo de uma variável. EDITB : Para editar o conteúdo de uma variável binária (similar a EDIT ) HEADE : Para mostrar o diretório contendo a variável no cabeçalho. LIST : Fornece uma lista de nomes e descrição de variáveis. SORT : Seleciona as variáveis de acordo com um critério de seleção. Se você pressionar a tecla NXT L , o último conjunto de funçẽs fica dispońıvel: XSEND : Para enviar a variável com o protocolo XModem. CHDIR : Para alterar o diretório. Criando diretórios, movendo, copiando e renomeando Arquivos Como não tenho a menor idéia da configuração da árvore de diretórios da sua calculadora, para ilustrar a utilização de algumas das funções descritas anterior- mente vamos criar, inicialmente, dois (sub)diretórios dentro do diretório HOME. Pois bem, para começar do zero retorne, se necessário, à tela principal de sua ∗Tenha paciência, daqui a pouco estaremos ensinando a criar diretórios, copiar arquivos, renomear arquivos, etc. Gentil 81 calculadora (para a “pilha”). Então: 1o ) Se você está na pilha observe na parte superior do visor (segunda linha) que existe um par de chaves: {HOME . . . } isto indica qual o (sub)diretório atual da sua calculadora. Vamos unificar a minha e a sua calculadora no diretório raiz (HOME) para isto pressione UPDIR possivelmente mais de uma vez até que tenhamos entre chaves apenas o diretório HOME: {HOME}. 2o ) Vamos entrar na árvore de diretórios: pressione: FILES ; 3o ) na sua calculadora deverá aparecer um visor similar ao seguinte: File Manager                                                                                                                                                                             0 : IRAM 237 KB 1 : ERAM 127 KB 2 : FLASH 699 KB Home 237 KB GENTIL PROG. INTN CASDIR CHDIR CANCL OK Agora pressione a tecla virtual OK para adentrarmos neste diretório. Digite NXT L NEW . Isto produzirá a seguinte forma de entrada: NEW VARIABLE                                                                                                                                                   Object: Name: Directory Enter New Object EDIT CHOOS CANCL OKCHO S O campo de entrada Object , o primeiro campo de entrada no formulário, é ressaltado por padrão. Este campo de entrada pode manter o conteúdo de uma nova variável que está sendo criada. Dado que não temos neste ponto nenhum conteúdo para o novo subdiretório, simplesmente pulamos este campo de entrada pressionando a tecla com a seta para baixo, △ , uma vez. O campo de entrada Name é agora ressaltado. NEW VARIABLE                                                                                                                                                   Object: Name: Directory Enter variable name EDIT CHOOS CANCL OKCHO S Neste local inserimos o nome do novo subdiretório (ou variável, de acordo 84 pilha. Após esta operação, no caso da minha calculadora, o visor apresenta-se assim: RAD XYZ BIN R∼ pX p HLT {HOME SUBD1} 09:25 17 : MAY ≪ → a b pABS(a - b)p ≫ 1 2 3 4 5 6 Pois bem, vamos armazenar este programa em uma variável, digamos: pDIST. p Agora pressione ENTER para pôr o nome na pilha e, em seguida, STOK para armazenar o programa com este nome. Observe que o programa (digo, seu nome) aparece no primeiro menu, embaixo. Nunca é demais ressaltar: Isto significa que esta variável encontra-se no subdiretório SUBD1, o qual encontra-se dentro do diretório HOME. Então, dando continuidade ao nosso escopo inicial, vamos copiar agora este arquivo (variável na HP) para o sudiretório SUBD2. Para isto pressione FILES para adentrarmos na árvore de diretórios: File Manager                                                                                                                                                                             0 : IRAM 236 KB 1 : ERAM 127 KB 2 : FLASH 699 KB Home 236 KB SUBD2 SUBD1 GENTIL PROG. INTN CASDIR CHDIR CANCL OK Observe que o subdiretório SUBD1 (diretório corrente) já aparece em desta- que. Pressione a tecla virtual OK para adentrarmos nesta pasta; digo, neste subdiretório: Memory: 242522 Select: 0| DIST. PROG 40 EDIT EVAL TREECOPY MOVE RCL O visor indica que existe uma nova variável dentro do subdiretório SUBD1. A faixa em destaque neste visor nos diz que a variável DIST. é do tipo programa e que ocupa 40 bytes de memória. Agora pressione COPY para obter uma cópia deste arquivo. A calculadora responderá com um visor denominado PICK DESTINATION: Gentil 85 PICK DESTINATION                                                                                                                             0 : IRAM 236 KB 1 : ERAM 127 KB 2 : FLASH 699 KB Home 236 KB SUBD2 SUBD1 GENTIL PROG. INTN CASDIR CANCL OK Use a tecla com a seta para cima △ para selecionar o subdiretório SUBD2 e pressione OK . Após isto o visor volta para a tela anterior, isto é, para o subdiretório SUBD1. Para confirmar pressione a tecla virtual TREE entrando na árvore de diretórios: File Manager                                                                                                                                                                             0 : IRAM 236 KB 1 : ERAM 127 KB 2 : FLASH 699 KB Home 236 KB SUBD2 SUBD1 GENTIL PROG. INTN CASDIR CHDIR CANCL OK Vamos agora renomear a variável que acabamos de transferir para o SUBD2. Para isto use a tecla com a seta para cima △ para selecionar o subdiretório SUBD2 e pressione OK . Agora pressione NXTL RENAM . Na nova tela que se apresenta digite um novo nome para a variável DIST. e, após dê ENTER . Pressione ON para retornar à pilha. Excluir subdiretórios Vamos agora excluir os dois subdiretórios criados anteriormente, para tanto: pressione a tecla FILES para ativar o menu FILES. Selecione (destaque), com o aux́ılio da tecla △ , o diretório HOME (que contém os subdiretório que desejamos excluir), assim: File Manager                                                                                                                                                                             0 : IRAM 237 KB 1 : ERAM 127 KB 2 : FLASH 699 KB Home 237 KB SUBD2 SUBD1 GENTIL PROG. INTN CASDIR CHDIR CANCL OK e pressione OK para adentrarmos neste diretório. Um visor similar ao seguinte será apresentado: 86 Memory: 242367 Select: 0| SUBD2 DIR 57 SUBD1 DIR 56 GENTIL DIR 1233 CASDIR DIR 531 EDIT EVAL TREECOPY MOVE RCL Como o subdiretório SUBD2 já está assinalado pressione NXT L PURGE . O seguinte visor será apresentado: p SUBD2 p Are You Sure? YES ABORT NOALL O segmento pSUBD2 p neste formulário é o nome do subdiretório que está sendo exclúıdo. As teclas do menu virtual fornecem as seguintes opções∗: YES : Continue a excluir o subdiretório (ou variável). ALL : Continue a excluir todos os subdiretórios (ou variáveis). ABORT : Não exclua o subdiretório (ou variável) da lista. NO : Não exclua o subdiretório (ou variável). Pressione YES ; o visor agora se apresenta assim: Memory: 242367 Select: 0| SUBD1 DIR 56 GENTIL DIR 1233 CASDIR DIR 531 PURGE SEND RECVRENAM NEW ORDER sem o subdiretório SUBD2. Com o mesmo procedimento anterior excluimos o subdiretório SUBD1. Após excluir o subdiretório SUBD1 pressione a tecla UPDIR para retornar à (nova) arvore de diretórios (ao diretório HOME) agora sem os subdiretórios exclúıdos. ∗Sure: certo, seguro, firme. Gentil 89 RAD XYZ DEC R∼ pX p HLT {HOME} 10:01 18 : MAY 1. Send to Calculator .. 2. Get from Calculator 3. Print display 4. Print .. 5. Transfer .. 6. Start Server 1 2 3 4 5 6 7 CANCL OK 3.2. Agora pressione △ OK para receber a informação.  Quadratura Gaussiana Inrodução (motivação): Com o intuito de apresentar outros recursos dispo- nibilizados pela calculadora, resolvemos implementar mais uma das técnicas de cálculo numérico de integrais, a quadratura gaussiana. Confesso que à medida que fui pesquisando − no manual da HP − 50g − os recursos de que necessitava para a referida implementação fui simplesmente tomado de um sentimento misto de pasmo (assombro) e contentamento∗ com os recursos de computação algébrica (simbólica) desta calculadora. Apresentaremos a seguir a técnica da quadratura gaussiana mas, antes, fa- zemos a observação de que, mesmo que o leitor não esteja interessado nesta técnica, creio que êle só terá a ganhar em acompanhar nossa exposição pois nela estaremos patenteando alguns recursos de Cálculo e Aritmética que, creio, deve ser do interesse da maioria dos usuários da HP − 50g . Uma outra observação que faço é que, desde o ińıcio da composição deste livro, sempre estive atento para não torná-lo extenso (um “outro manual”) as- sim é que não estaremos explorando aqui todos os recursos sobre cálculo e aritimética mas tão somente aqueles que estão em um “entorno” da solução do nosso problema. Uma outra observação é a de que os referidos recursos podem ser trabalhados, na HP − 50g , tanto no modo algébrico quanto no modo de pilha (RPN), nos manteremos fiéis à nossa opção inicial de trabalhar apenas no modo RPN. Quadratura Gaussina Para calcular a integral ∫ b a f(x) dx pela técnica da quadratura gaussiana devemos fazer uma mudança de variável, assim: ∫ b a f(x) dx = ∫ 1 −1 F (t) dt, onde: x = 1 2 · (b− a) t + 1 2 · (b + a) ∴ dx = 1 2 · (b − a) dt e, F (t) = 1 2 · (b− a) · f ( 1 2 · (b− a) t + 1 2 · (b + a) ) ∗Ao perceber que meu problema poderia ser resolvido de um modo “simples e estético”. 90 Gauss nos diz que: ∫ 1 −1 F (t) dt = n−1 ∑ i=0 w i F (t i ) = w0 F (t0) + w1 F (t1) + · · ·+ wn−1 F (tn−1) onde: n− é o número de pontos que escolhemos no intervalo ] − 1, 1 [; w i − são os coeficientes (pesos); t i − são as ráızes. O erro da estimativa acima é dado por: E n = 22n+1 (n!)4 (2n + 1) · ( (2n)! )3 · F (2n)(ξ), −1 < ξ < 1. Fixado arbitrariamente um natural n, t i é a i−ésima raiz do polinômio de Legendre de ordem n: P n (t). Estes polinômios estão dispońıveis na HP − 50g como veremos logo mais. Os coeficientes (pesos) w i , são obtidos pela expressão: w i = 2 (1− t2 i ) · [ P ′ n (t i ) ]2 (4.5) onde P ′ n (t i ) é o valor da derivada de P n (t) avaliada no ponto t i . Bem, posto o nosso problema vejamos agora alguns recursos que a calcula- dora nos fornece para resolvê-lo: O Menu ARITHMETIC O menu ARITHMETIC contém um número de submenus para as aplicações espećıficas na teoria numérica (inteiros, polinômios, etc.), como também um número de funções que se aplicam às operações aritméticas. O menu ARITH- METIC é ativado através da combinação de teclas ARITH . Com o si- nalizador do sistema 117 configurado assim: X 117 Soft MENU, ao pressionar ARITH , o resultado é o seguinte: RAD XYZ BIN R∼ pX p HLT ALG {HOME GENTIL} 22:07 21 : MAY 1 2 3 4 5 6 7 INTEG POLYMODUL PERM DIVIS FACTO Gentil 91 Ao pressionar: POLY NXT L NXT L temos acesso aos polinômios de Legendre. Para obter o polinômio de ordem 4, por exemplo, basta colocar 4 na pilha e pressionar a tecla virtual LEGEN . Podemos fácilmente plotar os polinômios de Legendre de ordem n. Por exemplo, vamos plotar o polinômio de ordem 4. Antes redimensione a janela de plotagem ( WIN ) para: H-View: -1 1 V-View: -1 1 Armazene o seguinte programa: ≪ 4 LEGENDRE ≫ na variável EQ, agora basta ir ao ambiente de plotagem (veja na pág. 68). Você deverá ver algo como: ZOOM (X,Y) TRACE FCN EDIT CANCL Retirando os menus e pondo em destaque as raizes, temos: −1 1 −1 1 x P 4 (x) t t t t Vamos nos concentrar na equação (4.5), então necessitaremos dos zeros do polinômio de Legendre e também de sua derivada. Por exemplo, coloque P 3 (x) na pilha∗, 5x3 − 3x 2 Para obter os zeros deste polinômio inicialmente coloque a variável X na pilha e depois digite ZEROS; a calculadora nos dará os zeros em uma lista: { 0 − √ 15 5 √ 15 5 } ∗Para isto digite, se necessário, a sequência de teclas: ARITH POLY NXT L NXT L 3 LEGEN 94 GENTIL LOPES DA SILVA Gentil Lopes da Silva (1960− ?) nasceu em Boa Vista-RR. Ayahuas- queiro e pai de quatro filhos: Agnus, Aline, Ananda e Aarão. Afora escrever artigos matemáticos, me resta um único hobby: bailar na força da ayahuasca. Por sinal sou produtor (feitor) deste sacramento (enteógeno). Até 1979/1 (ano de conclusão do 2o Grau/atual ensino médio) o autor, não sendo exceção à regra, possuia aversão pela Matemática; tendo sido reprovado em dois anos escolares (6a série e básico − aqui aquelas famosas expressões algébricas: “de dentro para fora: primeiro parentesis, depois colchetes e, por último, chaves” que tortura!...). Em 1979, após ter deixado incompleto um curso por correspondência em eletrônica (Instituto Universal Brasileiro), par- tiu, com “toda” esta bagagem, para Belém-Pa com o intuito de cursar Enga Elétrica. Após um semestre (79/2) de estudos ininterruptos (o autor morava em uma república de estudantes e sobrevivia com uma bolsa da SEC do seu es- tado...“sem dinheiro no banco, sem parentes importantes e vindo do interior...”) o autor foi reprovado no vestibular de jan./80, sendo que nas provas de F́ısica e Matemática (60 questões cada uma) fez 7 e 8 questões, respectivamente (com “chute e tudo”). Acontece que o autor sempre acreditou no velho adágio popular que diz: “Água molhe, pedra dura, tanto bate ate que fura” Uma lição ficou do malogro no vestibular: Precisava rever toda a álgebra elementar (aproximadamente a matemática de 5a a 8a séries). Cruzou com um livro “Álgebra elementar” (de Barnett Rich) − Coleção Schaum − estudou este livro com afinco por três meses ininterruptos, após o que, não mais sentiu dificuldades quanto à Matemática e F́ısica secundárias. Em função disto, sempre que solicitado, sugere a seus alunos que adquiram um forte fundamento de: frações, potênciação, radiciação, polinômios,. . . e por áı vai. Nota: Hoje, chego à conclusão de que a parte “algoritmica” (mecânica) − ou ainda: cálculos, contas − embora essencial (pré-requisito) não chega a ser matemática. Matemática é lógica, é criatividade. Estou tentando contribuir no sentido de se entender (justificar) por que embora um indiv́ıduo não seja um “ex́ımio calculista” mesmo assim pode ter êxito na matemática (lógica). ⊙ ⊙ ⊙ O autor é graduado em Engenharia Elétrica/Eletrônica pela Universidade Federal do Pará e Mestre em Matemática pela Universidade Federal de Santa Catarina. Ensinou nas seguintes instituições: ( i ) Universidade Federal de Roraima; ( ii ) Centro de Educação Tecnológica do Paraná (CEFET-Pr); (iii) Universidade Federal de Santa Catarina; (iv) Faculdades Integradas do Planalto Central (FIPLAC- Braśılia-D.F.); (v) Universidade Federal de Roraima (Novamente/atual). Também trabalhou como engenheiro de telecomunicações do Sistema Te- lebrás. www.dmat.ufrr.br/gentil gentil.silva@gmail.com “Tudo isso, que à primeira vista parece ex- cesso de irrazão, na verdade é o efeito da finura e da extensão do esṕırito humano e o método para encontrar verdades até então desconheci- das.”(Voltaire) “. . . da matemática que é eterna, por- que suas melhores manifestações podem, como as melhores manifestações da lite- ratura, continuar causando uma intensa satisfação a milhares de pessoas, milha- res de anos depois.” (G.H. Hardy) “Nenhuma produção de ordem superior, nenhuma invenção jamais procedeu do homem, mas emanou de uma fonte ultraterrena. Por- tanto, o homem deveria considerá-la um dom inspirado do Alto e aceitá-la com gratidão e ve- neração. Nestas circunstâncias, o homem é so- mente o instrumento de uma Potência Superior, semelhante a um vaso julgado digno de receber um conteúdo divino.”(Goethe) “A obtenção de um resultado novo em pesquisa é, para o cientista, uma fonte de in- tenso prazer, ligado intimamente ao instinto de criação e eternidade, pois, independen- temente da importância da contribuição no contexto da ciência, ou de sua utilização, re- presenta algo acrescentado ao conhecimento humano que marca sua existência na terra” (Pierre Curie (Fı́sico)) “É uma experiência como nenhuma ou- tra que eu possa descrever, a melhor coisa que pode acontecer a um cientista, com- preender que alguma coisa que ocorreu em sua mente corresponde exatamente a alguma coisa que aconteceu na natureza. É sur- preendente, todas as vezes que ocorre. Fi- camos espantados com o fato de que um construto de nossa própria mente possa re- almente materializar-se no mundo real que existe lá fora. Um grande choque, e uma alegria muito grande”(Leo Kadanoff). “Um exame superficial da matemática pode dar uma impressão de que ela é o re- sultado de esforços individuais separados de muitos cientistas espalhados por continen- tes e épocas diversas. No entanto, a lógica interna de seu desenvolvimento nos lembra muito mais o trabalho de um único intelecto, desenvolvendo o seu pensamento sistemático e consistentemente, usando a variedade das individualidades humanas somente como um meio. Assemelha-se a uma orquestra exe- cutando uma sinfonia composta por alguém. Um tema passa de um instrumento a outro, e quando chegou a hora de um dos partici- pantes abandonar o tema, ele é substitúıdo por outro, que o executa com precisão irre- preenśıvel...” (I.R. Shafarevich) “. . . mas é natural também que, com o desenvolvimento da inteligência, se prefira lutar contra inimigos mais importantes tais como a animalidade de cada um a superar, o ignoto a conquistar, o mistério a revelar, e que o amor não seja só para a mulher ge- rar, mas para o super-ser que encarna, com o ideal, um tipo superior de vida.” (Pietro Ubaldi/A Descida dos Ideais) “Em suas fases primitivas o homem não podia adorar senão a um Deus feito à sua imagem e semelhança, porque não sabia con- ceber algo melhor. Atualmente, o Deus cósmico, que a ciência nos deixa entrever, já não cabe dentro das velhas concepções religi- osas. As nossas idéias evoluem intimamente relacionadas ao progresso da nossa capaci- dade de concepção. A religião de amanhã se unirá à ciência e deverá se basear em postu- lados racionalmente demonstrados, se quiser ser aceita.” (P. Ubaldi/A Descida dos Ideais) A m a r i n g o - A y a h u a s c a 95 96
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved