Академический Документы
Профессиональный Документы
Культура Документы
3. Entrada de Dados
Um programa precisa de uma maneira ordenada para a entrada dos dados. A
maneira mais natural de fazê-lo é através da pilha, porém a calculadora oferece maneiras
mais apresentáveis. Todos os exemplos devem ser feitos no DBUG para melhor
compreensão.
3.1 INPUT
Um dos comandos para se obter dados é o INPUT que nos apresenta uma tela com
um título e um valor padrão em um editor similar à linha de comandos. Para realizar isto, o
comando necessita de dois argumentos: uma string no nível 2 que será o título da tela e
outra string no nível 1 que será o texto que aparecerá na linha de comandos.
23
Minicurso de UserRPL Fellipe Carvalho de Oliveira
Exemplo:
«
"Digite um número"
""
INPUT OBJ→
»
No nosso editor o atalho para o INPUT é CTRL + F5
3.2 CHOOSE
CHOOSE se usa para escolher uma entre várias opções. Requer 3 argumentos: no
nível 3 da pilha uma string que será o título da lista, no nível 2 uma lista com os elementos
entre os quais escolher e no nível 1 o número correspondente a opção default, geralmente
se coloca 1.
Este comando cria um menu de escolha no centro do display que permite a escolha
usando o cursor (setas para cima e para baixo). Exemplo:
Aplicando-lhe CHOOSE:
A barra deve ser deslocada até o objeto desejado e em seguida pressionada a tecla
ENTER ou OK para efetuarmos a escolha, ou CANCEL para cancelarmos. Se a função foi
cancelada teremos como resposta o valor 0 na pilha. Se a função foi confirmada temos o
valor 1 como resposta, e na segunda linha da pilha, teremos a opção (objeto) selecionada.
24
Minicurso de UserRPL Fellipe Carvalho de Oliveira
Exemplo:
«
"Qual sua matéria predita"
{
Filosofia
Música
Latim
}
1
CHOOSE
»
No nosso editor o atalho para o CHOOSE é CTRL + F6
3.3 INFORM
O INFORM permite-nos desenhar formulários para a introdução de dados mediante
título, texto descritivo, de ajuda e de um tipo de objeto específico (facultativo). No nível 2
devolve os valores armazenados (que o usuário digitou) numa lista, e no nível 1 um valor
que pode ser 1 se o formulário for desenhado corretamente e se se aperta OK ou ENTER
ou 0 caso se cancele o formulário.
Sintaxe:
1- Nome que leva o formulário, este nome deve estar em string.
2- Elementos do formulário {{“nome” “ajuda” TIPO DE OBJETO(S)}}
3- Número de colunas que pode ser das seguintes formas: nº colunas, { nº colunas},
{nº colunas espaço}.
4- Valores Reset estes são os valores que restauram quando se pressiona a opção
reset do menu do formulário {VALORES RESET}
5- Valores iniciais estes são valores de iniciais {VALORES INICIAIS}
6- INFORM
Aplicando-lhe INFORM
25
Minicurso de UserRPL Fellipe Carvalho de Oliveira
Exemplo:
«
"Formulário de nomes"
{
{ "nome 1" "primeiro nome" 2 }
{ "nome 2" "segundo nome" }
{ "nome 3" "terceiro nome" }
}
{1 0}
{ Ataulfo Lago Mário }
{ Lira Alves Carlos }
INFORM
»
3.4 PROMPT
Este comando interrompe o programa e mostra uma mensagem na parte superior do
display.
Sintaxe:
String que contém a mensagem superior
PROMPT
Digite os valores de entrada separados por espaço SPC
ENTER
Os valores digitados pelo usuário irão para a pilha cada um em um nível na mesma
ordem em que foram digitados.
Logo após o PROMPT o programa é pausado automaticamente e o HALT é
acionado. Para seguir a execução normal digite CONT e aperte ENTER.
26
Minicurso de UserRPL Fellipe Carvalho de Oliveira
3.5 DISP – FREEZE – HALT
O comando DISP mostra uma string em determinada fila da tela (enumeradas de 1 a
7, a tela é divida em 7 filas) ele precisa de dois argumentos: no nível 2 a string de
mensagem e no nível 1 o número da fila do display onde será mostrada a imagem. Sozinho
este comando só age enquanto dura a execução. Portanto usa-se outro comando para reter
a tela do display chamado FREEZE. Este último comando retém a tela e precisa de um
argumento para decidir que área da tela será congelada. A tabela a seguir mostra as
possibilidades:
O comando FREEZE é interrompido assim que se aperta qualquer tecla, portanto até
aqui não é feita entrada de dados, para tanto se utiliza o comando HALT que retorna à tela
de comando para que se possa realizar operações: No nosso caso pôr dados na pilha. Para
seguir a execução normal do programa use o CONT. Observe que o comando HALT por si
só já seria suficiente para interromper a execução e permitir a entrada de dados (ou realizar
quaisquer operações). Geralmente usa-se o comando CLLCD para limpar a área da pilha e
a área de estado antes da execução do DISP.
Exemplo:
« CLLCD
"orale" 4 DISP 0 FREEZE HALT
• →a
« a2^ » »
27
Minicurso de UserRPL Fellipe Carvalho de Oliveira
4. Apresentação de Dados
Comumente após a execução de um programa ou durante este, devemos apresentar
alguns resultados. Igualmente ao caso passado a calculadora possui bons comandos para
apresentar dados. Execute todos os exemplos no DBUG.
4.1 MSGBOX
MSGBOX mostra um quadro de mensagem e o único argumento que necessita é
uma string, porém se queremos adicionar-lhe números ou outros objetos, simplesmente
temos que converter-lhes em strings e somar-lhes.
Exemplo:
«
"Digite o raio do círculo"
""
INPUT OBJ→•
0 →r a
«
r 2 ^ 'a' STO
"A ÁREA DO CÍRCULO É: "
a •→STR +
MSGBOX
»
»
4.2 TAG
A apresentação de dados se dá na pilha mediante a criação de um objeto etiquetado
(criado pelo comando →TAG). O objeto do nível 2 da pilha se atrela ao do nível 1 .
28
Minicurso de UserRPL Fellipe Carvalho de Oliveira
Exemplo:
«
"Digite sua idade"
""
INPUT OBJ•
"Sua idade é" •→TAG
»
29
Minicurso de UserRPL Fellipe Carvalho de Oliveira
"A Multiplicação " 1 DISP
"do primeiro pelo " 2 DISP
"segundo é: " a •→STR + 3 DISP
0 FREEZE
»
30
Minicurso de UserRPL Fellipe Carvalho de Oliveira
31
Minicurso de UserRPL Fellipe Carvalho de Oliveira
Observe que a rotina que calcula a média foi guardada na variável global ‘media’
podendo ter sido chamada em outro instante. Na verdade o uso da função ‘media’ no
exemplo anterior se enquadra no contexto da técnica das sub-rotinas que consiste na
possibilidade de um programa ser acessado por outro. Uma situação em que é
recomendável o uso de sub-rotina é quando temos um conjunto de instruções que é
utilizado em diversas partes de um programa e para que não seja reescrito diversas vezes é
colocado em um programa a parte onde o primeiro programa (podemos chamá-lo de
principal) acessa o segundo (sub-rotina). Exemplo:
Salve o seguinte o programa ‘media’ no emulador da calculadora;
Digite e compile o seguinte código:
«
"Notas"
{
"1ª nota 1º bimestre: "
"2ª nota 1º bimestre: "
"1ª nota 2º bimestre: "
"2ª nota 2º bimestre: "
}
{10}
{}
{}
INFORM
DROP OBJ→• DROP
•→ a1 a2 b1 b2
« a1 a2 media
b1 b2 media
media
"A média semestral é" •→TAG
» »
32
Minicurso de UserRPL Fellipe Carvalho de Oliveira
Na depuração de códigos para que as sub-rotinas sejam acessadas avance não
mais em , porém em .
Porém antes de se realizar um programa que será utilizado como sub-rotina sempre
será melhor verificar se há algum comando que realize a operação matemática que se
deseja fazer, estes sempre são muito mais rápidos. Alguns serão vistos nos próximos
tópicos:
5.1 Somatório
Argumento: Somatório no primeiro nível
Sintaxe:
‘Σ(incógnita = valor inicial, valor final, equação ou objeto algébrico)' EVAL.
Exemplo:
« 'Σ(I=1,3,I+3)' EVAL »
5.2 Derivadas
Para derivada de função da incógnita X usa-se o comando DERVX
Argumento: Função de X no primeiro nível
Sintaxe:
'função de X' DERVX
Exemplo:
« 'LN(X)' DERVX »
33
Minicurso de UserRPL Fellipe Carvalho de Oliveira
5.3 Integrais
Para integral indefinida de função da incógnita X usa-se o comando INTVX (é
necessário que se esteja no modo exato e não no numérico).
Argumento: Função de X no primeiro nível
Sintaxe:
'função de X' INTVX
Exemplo:
«
'X^2' INTVX
»
34
Minicurso de UserRPL Fellipe Carvalho de Oliveira
Para integral definida usa-se o comando ∫.
Argumento: Nível 4 o limite inferior, no nível 3 o limite superior, no nível 2 a função
da variável e no primeiro nível a variável.
Sintaxe: limite inferior limite superior 'função da variável escolhida' 'variável'
Exemplo:
«
2 5 'x^2-2' 'x' ∫
»
«
«
'd1d1y(x)-x=0' 'y(x)' DESOLVE
»
Os cC0, cC1 ..... cCn que aparecem no resultado são as constantes de integração
35
Minicurso de UserRPL Fellipe Carvalho de Oliveira
6. Estruturas de Programação
Uma estrutura de programação (Decisão ou Repetição) permite a um usuário tomar
uma decisão sobre como o programa deve ser executado, dependendo das condições
dadas ou dos valores de argumentos em particular. Um uso cuidadoso e inteligente destas
estruturas torna possível a criação de programas com extraordinária flexibilidade. Diríamos
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. Aqui mais do que nunca é necessário executar
todos os exercícios no DBUG.
36
Minicurso de UserRPL Fellipe Carvalho de Oliveira
START... STEP funciona exatamente da mesma forma que o START...
NEXT, exceto que permite especificar um incremento diferente de 1.
Sintaxe:
“… início fim
START
cláusula do laço
incremento
STEP
…”
Exemplo: O programa seguinte toma um número x da pilha e calcula o
quadrado deste número x/3 vezes.
«
9 →• x
«
x1
START
x SQ
-3
STEP
»
»
START toma dois números da pilha (início e fim) e os armazena como valor
inicial e final para o contador do laço. Depois, executa a cláusula do laço. STEP toma
o incremento da pilha e incrementa o contador com este valor. O incremento pode
ser positivo ou negativo. Se for positivo, executa novamente a cláusula do laço
quanto o contador é menor ou igual ao fim. Se o incremento é negativo, executa o
laço quando o contador é maior ou igual ao fim.
37
Minicurso de UserRPL Fellipe Carvalho de Oliveira
”
Exemplo: O programa a seguir calcula o Fatorial de um número:
«
"Digite N"
""
INPUT OBJ•
•→ n
« 1 'produtorio' STO
1n
FOR i
produtorio i * 'produtorio' STO
NEXT
'produtorio' EVAL
»
»
FOR toma dois números da pilha (início e fim) e os armazena como valores
inicial e final para o contador de iterações, depois cria uma variável local contador
como contador de iterações. Depois, se executa a cláusula do laço. NEXT
incrementa o contador em 1 e verifica se este valor é menor ou igual ao fim. Se for,
executa novamente a cláusula do laço. Ao sair do laço o contador é apagado, ou
seja, ele só existe dentro da cláusula do laço.
38
Minicurso de UserRPL Fellipe Carvalho de Oliveira
2
STEP
»
FOR toma dois números da pilha (início e fim) e os armazena como valores
inicial e final para o contador de iterações, depois cria uma variável local contador
como contador de iterações. Depois, executa a cláusula do laço. STEP toma o
incremento da pilha e incrementa o contador com este valor, e verifica se o valor do
contador é menor ou igual ao fim. Se for, executa novamente a cláusula do laço. Ao
sair do laço o contador é apagado, ou seja, ele só existe dentro da cláusula do laço.
39
Minicurso de UserRPL Fellipe Carvalho de Oliveira
MSGBOX
UNTIL r n ==
END
»
»
DO começa a cláusula do laço. UNTIL finaliza a cláusula do laço e começa a
cláusula de teste. A cláusula de teste deixa o resultado do teste na pilha. END extrai
o resultado deste teste da pilha. Se o valor é zero, executa novamente a cláusula do
laço; caso contrário, a execução do programa continua após o END.
40
Minicurso de UserRPL Fellipe Carvalho de Oliveira
41
Minicurso de UserRPL Fellipe Carvalho de Oliveira
Cláusula verdadeira
ELSE
Cláusula falsa
END . . .
“
Esta estrutura executa uma seqüência de comandos se o teste resultar
verdadeiro e outra, caso seja falso. Se a cláusula-de-teste for um objeto algébrico,
ela é automaticamente convertida para um valor numérico. A palavra IF inicia a
cláusula-de-teste, a qual deixa o resultado (0 ou 1) na pilha. THEN remove este
resultado. Se o valor é diferente de 0, a cláusula-verdadeira é executada; caso
contrário, a cláusula-falsa é executada. Após ter executado a cláusula apropriada, o
programa prossegue com a instrução seguinte à END.
Exemplo:
(U.E. CE. - 80) Considere a sequência de números reais definidas por:
42
Minicurso de UserRPL Fellipe Carvalho de Oliveira
1N1-
FOR i
*
NEXT
"O Resultado é" •→TAG
»
»
Observe que neste exemplo usou-se uma matriz para guardar valores. Se
fôssemos usar as operações normais na pilha faríamos:
«
"Digite N
"
""
INPUT OBJ• • n
«
1n
FOR i
IF i 2 MOD 0 ==
THEN
DUP
ELSE
i1+2/
END
NEXT
1n1-
FOR i
*
NEXT
"O resultado é" •TAG
»
»
6.2.3 CASE – THEN – END – END
A estrutura CASE... END permite executar uma série de casos (testes). O
primeiro teste que tem um resultado verdadeiro causa a execução da correspondente
cláusula verdadeira, finalizando a estrutura CASE... END. Opcionalmente, pode-se
incluir após o último teste uma cláusula de default que se executará se todos os
testes forem falsos.
43
Minicurso de UserRPL Fellipe Carvalho de Oliveira
Sintaxe:
«
... CASE Cláusula de teste 1
THEN
Seqüências a se executar se a cláusula de teste 1 for verdadeira
END (Cláusula de teste 2)
THEN
Seqüências a se executar se a cláusula de teste 2 for verdadeira
END
Seqüências-padrão a se executar (se nenhuma das cláusulas anteriores for
verdadeira), que são opcionais.
END
...
»
Exemplo:
Testar o tipo da variável. Não se esqueça de atribuir-lhe objeto.
«
CLLCD
→• y
«
CASE y TYPE 2 ==
THEN
"A variável é uma string " MSGBOX
END y TYPE 5 ==
THEN
"A variável é uma lista " MSGBOX
END y TYPE 8 ==
THEN
"A variável é um programa " MSGBOX
END
END
»
»
44
80
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 nı́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.
Estruturas de Programação
“. . . que o meu pensamento quis aproxima-
se dos problemas do espı́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 possı́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; daı́
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:
F OR − N EXT
• Estruturas cı́clicas : F OR − ST EP
W HILE − REP EAT − EN D
(
IF − T HEN − EN D
• Estruturas condicionais :
IF − T HEN − ELSE − EN D
25
26
contador (ou variável de controle) é o I, que irá variar de 1 até N , o que concorda
com a variação de i no somatório em (3.1).
Para que o leitor entenda o funcionamento (lógica) do programa sugerimos
que o mesmo seja executado com o auxı́lio do DBUG. (ver 1.4, pág. 15).
Existe uma fórmula para o somatório dado em (3.1), assim:
N
X N · (N + 1)
i = 1 + 2 + 3 + ··· + N =
i=1
2
n! = n(n − 1)(n − 2) · · · 1
n · (n − 1)
an = a1 + (n − 1) · r, S n = n · a1 + ·r
2
para o cálculo do n-ésimo termo e para a soma dos n primeiros termos, respec-
tivamente.
Embora a segunda fórmula possa ser programada diretamente (e mais fácilmente),
faremos um programa, para o cálculo da soma dos termos de uma P.A., utili-
zando a primeira fórmula − como mais um exemplo de utilização do FOR-
NEXT. O programa fica assim:
28
≪ → a1 r N
≪ 0 pS p STO
1 N FOR n
p
a1 + (n − 1) ∗ r p EVAL
S + p S p STO
NEXT S p p SOMAp p →TAG
≫
≫
{1 5 8 2}
Sub-rotinas
Um recurso (ou técnica) bastante utilizado em programação é o que se chama
de sub-rotina, que consiste na possibilidade de um programa ser acessado por
um outro.
Uma situação em que é recomendável o uso de sub-rotina é quando temos
um conjunto de instruções que é utilizado em diversas partes de um programa e
para que não seja reescrito diversas vezes, é colocado em um programa à parte
onde o primeiro programa (podemos chamá-lo de principal) acessa o segundo
(sub-rotina). Podemos resumir a idéia no seguinte diagrama:
Gentil 29
P.P.
Sub-rotina
≪ → M N
≪ M FAT
N FAT
M N − FAT
∗ / p pCOMB(M, N) p p →TAG
≫
≫
30
M
M
P.P. N
N
FAT
y3
y0
y2 yn−2
y1 yn
y4
p p p p p p
x0 = a x1 x2 x3 x4 ··· xn−2 xn−1 xn = b
Onde:
h
I= (y + 4y1 + 2y2 + 4y3 + 2y4 + · · · + 2yn−2 + 4yn−1 + yn ) (3.3)
3 0
com erro dado por,
(b − a)5 (4)
ε=− f (ξ), a ≤ ξ ≤ b.
180n4
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
Exercı́cios
Nota: Os exercı́cios seguintes devem ser implementados com FOR-NEXT.
1) Faça um programa para sair com os N primeiros termos de uma P.A. (pro-
gressão aritmática), de dois modos distintos:
( a ) em uma lista ( b ) em um vetor.
2) Faça um programa para calcular o produto dos N primeiros termos de uma
P.A.
3) Faça um programa para calcular a soma dos N primeiros termos de uma
P.G.
n
X
4) Faça um programa para calcular o seguinte somatório: i2 .
i=1
5) Seja a sequência,
1 · 2 + 2 · 3 + 3 · 4 + · · · + n · (n + 1)
[ a1 a 2 . . . an ] · [ b 1 b 2 . . . b n ] = a1 · b 1 + a2 · b 2 + · · · + an · b n
10) Faça um programa para sair com um vetor contendo os N primeiros termos
de uma P.G., usando a fórmula de recorrência (definição) de uma P.G.:
a1 = a
a
n
= an−1 · q, n ≥ 2.
11) Faça um programa para sair (em lista ou vetor) com os N primeiros termos
das seguintes sequências :
34
( i ) a1 = 4; an = (−1)n · an−1 .
( ii ) a1 = −2; an = (an−1 )2 .
( iii ) (U.F.CE -81) Os termos da sucessão a1 , a2 , . . . , an , estão relacionados
pela fórmula an+1 = 1 + 2 · an , onde n = 1, 2, 3, . . .. Se a1 = 0, então a6 é:
a ) 25 b ) 27 c ) 29 d ) 31
2 + a2n
a1 = 1 e an+1 =
2an
Nota: Lembramos que nestes exercı́cios queremos que você faça um pouco mais
do que o exercı́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
a1 =4 b 1 =5
e
a
n+1 = 1 + a2 b
n+1
1
= 1+b
n n
Se P = an · bn , tem-se:
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 (a0 , a1 , a2 , . . .) onde a0 = 1 e an+1 = an +n,
para todo n ∈ N, a soma dos 7 primeiros termos é
a ) 41 b ) 42 c ) 43 d ) 63 e ) 64
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:
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
a11 a12 b11 b12 a11 − b11 a12 − b12
A−B= − =
a21 a22 b21 b22 a21 − b21 a22 − b22
Agora temos que:
|a11 − b11 |
|a12 − b12 |
d(A, B) = max
|a21 − b21 |
|a22 − b22 |
Para as matrizes dadas no desafio temos:
|1− 5|
|2− 7| 4
5
d(A, B) = max ⇒ d(A, B) = max =5
|3− 6|
|4− 8| 3
4
Gentil 37
− Onde: O laço maior fixa as linhas; o primeiro laço interno ao maior varia as
colunas e calcula o valor absoluto da diferença dos elementos de mesma posição;
o segundo laço interno encontra o maior valor de cada linha (de A − B), e o
último laço encontra o maior valor dentre os maiores valores obtidos nas linhas
(de A − B). Para maiores detalhes, execute-o no DBUG.
Nota: Veja a função MAX na tabela de funções para números reais (pág. 6).
Exercı́cios
Nota: Os exercı́cios seguintes devem ser implementados com FOR-NEXT.
17) (U. MACK. - 73) Sendo A = ( aij ) uma matrix quadrada de ordem 2 e
aij = j − i2 , o determinante da matriz A é:
Então, vamos calcular esta soma, incrementando n, até que a mesma seja posi-
tiva. Temos,
≪ 1 p n p STO
p
WHILE 2n(n − 1) − 81n ≤ 0 p
REPEAT p n p INCR DROP
END n
≫
Exercı́cios
Pn
20) Determine n tal que i=1 2i = 4088.
21) Resolva o problema anterior utilizando a fórmula para a soma dos termos
a ·qn −a
de uma P.G.: Sn = 1 q−1 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 X
X 30
(−2i + 3j) = 300
j=1 i=1
2 −1 2 −1 2 −1 2 −1 2 −1 ...
−1 3 −1 3 −1 3 −1 3 −1 3 ...
28) Diz-se que o número real L é limite da sequência (xn ) de números reais, e
escreve-se L = lim xn ou L = lim xn , quando para cada número real ε > 0,
n→∞
dado arbitrariamente, for possı́vel obtermos um inteiro n0 ∈ N tal que |xn −L| <
ε sempre que n > n0 . Em linguagem simbólica:
Exemplos:
i ) A sequência dada por 1, 21 , 31 , . . . , n1 , . . . tem 0 como limite;
√
ii ) A sequência dada por xn = n n tem 1 como limite.
Faça um programa no qual entramos com ε > 0 e o mesmo saia com o n0 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.
PRG BRCH IF
≪ ... 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
p
A < 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.
42
≪ → A B ≪ → A B
≪ IF ≪ IF
p
A B < A < Bp
THEN A THEN A
END END
≫ ≫
≫ ≫
≪ → N
≪ IF pF P (N/2) == 0p
THEN p p O número é par. p p
END
≫
≫
≪ → N
≪ IF
N 2 MOD 0 ==
THEN p p O número é par. p p
END
≫
≫
PRG BRCH IF
≪ ... IF
cláusula-de-teste
THEN
cláusula-verdadeira
ELSE
cláusula-falsa
END . . .
≫
Esta estrutura executa uma sequência de comandos se o teste resultar ver-
dadeiro e outra, caso seja falso. Se a cláusula-de-teste for um objeto algébrico,
ela é automáticamente convertida para um valor numérico.
A palavra IF inicia a cláusula-de-teste, a qual deixa o resultado (0 ou 1) na
pilha. THEN remove este resultado. Se o valor é diferente de 0, a cláusula-
verdadeira é executada; caso contrário, a cláusula-falsa é executada. Após ter
executado a cláusula apropriada, o programa prossegue com a instrução seguinte
à END.
Exemplo 18: (Nos diz se um número é par ou ı́mpar).
O programa seguinte nos diz se um número é par ou ı́mpar.
≪ → N
≪ IF pF P (N/2) == 0p
THEN p p O número é par. p p
ELSE p p O número é impar. p p
END
≫
≫
44
≪ → N
≪ 1 N
FOR n
IF pF P (n/2) == 0 p
THEN n 2 /
ELSE n 1 + 2 /
END
NEXT N ROW→
≫
≫
a ) 48 b ) 30 c ) 36 d ) 42
≪ → N
≪ [ 0 ] { N } RDM pA p STO
1 N FOR n
IF pF P (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
Então A se escreve:
1 1 1 1 1 1
1 4 9 1 1 9
a) b) 4 1 c) 1 4 d) e) 4 1
1 1 9 1 4 9
9 9 9 9 6 6
≪ → 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,
(−1)j−1 j−1
i−1 , se i < j;
aij = (−1)i−1 , se i = j;
0, se i > j.
satisfaz a relação A2 = I.
46
≪ → L r
≪ 1 N FOR I
1 N FOR J
IF p I < J p
THEN
p
(−1) ∧ (J − 1) ∗ COMB(J-1, I-1)p EVAL
ELSE
IF p I == 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 = L, quando,
x→a
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 f (x) = f (d), onde f (d) =
x→d
a · d2 + b · d + c.
No referido opúsculo deduzimos a seguinte fórmula,
n o
ε
min 1, a
a (2d+ |a| )+b , se a (2d − 1) + b ≥ 0;
δ(ε) = n o (3.7)
−ε
min 1, , se a (2d − 1) + b < 0.
a
a (2d− |a| )+b
n −ε o
δ(ε) = min 1, a
a (2d − |a| )+b
n −ε o n εo
= min 1, 1 = min 1,
1 · ( 2 · (−3) − |1| )+0 7
n ε o
δ(ε) = min 1, a
a (2d + |a| ) + b
n 0, 03 o n o
= min 1, 1 = min 1; 0, 0075 = 0, 0075
1 · ( 2 · 0 + |1| )+3
≪ → a b d ε
≪ IF p a ∗ (2 ∗ d − 1) + b ≥ 0 p
THEN 1
p
ε/(a ∗ (2 ∗ d + a/ABS(a)) + b) p EVAL
pp
MIN δ(ε) p p →TAG
ELSE 1
p
− ε/(a ∗ (2 ∗ d − a/ABS(a)) + b) p EVAL
pp
MIN δ(ε) p p →TAG
END
≫
≫
Nota: Caracteres como δ e ε são acessados pressionando-se as teclas
CHARS
.
Para acessar outros caracteres, além dos que são mostrados de imediato,
pressione △
(botão prateado). Coloque (com auxı́lio dos botões prateados) o
cursor sobre o sı́mbolo desejado aı́ é só pressionar a tecla virtual ECHO 1 .
48
(b − a)5 (4)
ε=− f (ξ), a ≤ ξ ≤ b.
80n4
Antes de implementar esta fórmula vamos fazer um programa para gerar a
sequência dos coeficientes:
Antes vamos armazenar f (x) numa variável, isto pode ser feito assim:
p
≪→ x LN(x ∧ 3 + (EXP(x) + 1))p ≫
≪ → 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:
Z Z
I= f (x, y) dx dy
D
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:
yn = d
p
yn−1
p
.. ..
. . (xi , yj )
yj s
p
.. .. ··· ···
. .
y1
p
y0 = c
p
p p p p p p x
x0 = a x1 x2 ··· xi ··· xn−1 xn = b
Rd
Chamando c
f (x, y) dy de G(x), isto é,
Z d
G(x) = f (x, y) dy (3.10)
c
podemos escrever:
Z b
I= G(x) dx
a
Para resolver esta integral simples aplicaremos a segunda regra de Simpson
(equação (3.8), pág. 48), assim:
3h
I= G(x0 ) + 3G(x1 ) + 3G(x2 ) + 2G(x3 ) + 3G(x4 ) + 3G(x5 ) + 2G(x6 ) + · · ·
8
+ 3G(xn−2 ) + 3G(xn−1 ) + G(xn ) (3.11)
Observe que, para cada i fixo, devemos calcular a integral da função (de uma
única variável) f (xi , 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:
h
G(xi ) = f (xi , y0 ) + 4f (xi , y1 ) + 2f (xi , y2 ) + 4f (xi , y3 ) + 2f (xi , y4 ) + · · ·
3
+ 2f (xi , yn−2 ) + 4f (xi , yn−1 ) + f (xi , yn )
hy
I= 3hx
8 3 F (x0 , y0 ) + 4F (x0 , y1 ) + 2F (x0 , y2 ) + 4F (x0 , y3 ) + ···+ 4F (x0 , yn−1 ) + F (x0 , yn )
+ 3· hy
3 F (x1 , y0 ) + 4F (x1 , y1 ) + 2F (x1 , y2 ) + 4F (x1 , y3 ) + ···+ 4F (x1 , yn−1 ) + F (x1 , yn )
+ 3· hy
3 F (x2 , y0 ) + 4F (x2 , y1 ) + 2F (x2 , y2 ) + 4F (x2 , y3 ) +···+ 4F (x2 , yn−1 ) + F (x2 , yn )
+ 2· hy
3 F (x3 , y0 ) + 4F (x3 , y1 ) + 2F (x3 , y2 ) + 4F (x3 , y3 )+···+ 4F (x3 , yn−1 ) + F (x3 , yn )
+ 3· hy
3 F (x4 , y0 ) + 4F (x4 , y1 ) + 2F (x4 , y2 ) + 4F (x4 , y3 )+···+ 4F (x4 , yn−1 ) + F (x4 , yn )
+ 3· hy
3 F (x5 , y0 ) + 4F (x5 , y1 ) + 2F (x5 , y2 ) + 4F (x5 , y3 )+···+ 4F (x5 , yn−1 ) + F (x5 , yn )
+ 2· hy
3 F (x6 , y0 ) + 4F (x6 , y1 ) + 2F (x6 , y2 ) + 4F (x6 , y3 )+···+ 4F (x6 , yn−1 ) + F (x6 , yn )
− − − − − − − − − − − − − − − − − − − − − − − − − − − − − − −−
hy
+ 3· 3 F (xn−2 , y0 ) + 4F (xn−2 , y1 ) + 2F (xn−2 , y2 ) + 4F (xn−2 , y3 )+···+ F (xn−2 , yn )
+ 3· hy
3 F (xn−1 , y0 ) + 4F (xn−1 , y1 ) + 2F (xn−1 , y2 ) + 4F (xn−1 , y3 )+···+ F (xn−1 , yn )
hy
+ 3 F (xn , y0 ) + 4F (xn , y1 ) + 2F (xn , y2 ) + 4F (xn , y3 )+···+ 4F (xn , yn−1 ) + F (xn , yn )
− − − − − − − − − − − − − − − − − − − − − − − − − − − − − − −−
+ 3· F (xn−2 , y0 ) + 4F (xn−2 , y1 ) + 2F (xn−2 , y2 ) + 4F (xn−2 , y3 )+···+ F (xn−2 , yn )
+ 3· F (xn−1 , y0 ) + 4F (xn−1 , y1 ) + 2F (xn−1 , y2 ) + 4F (xn−1 , y3 )+···+ F (xn−1 , yn )
+ 1· F (xn , y0 ) + 4F (xn , y1 ) + 2F (xn , y2 ) + 4F (xn , y3 )+···+ 4F (xn , yn−1 ) + F (xn , yn )
Ou ainda,
52
F (x0 , y0 ) F (x0 , y1 ) F (x0 , y2 ) ... F (x0 , yny )
F (x , y ) F (x , y ) F (x1 , y2 ) ... F (x1 , yny )
1 0 1 1
... ... ... ... ...
F (xnx , y0 ) F (xnx , y1 ) F (xnx , y2 ) . . . F (xnx , yny )
Vamos tomar como exemplo o cálculo da seguinte integral:
Z π/2 Z 0,4 (
0 ≤ y ≤ 0, 4
I= (y 2 + y) cos x dy dx,
0 0 0 ≤ x ≤ π/2
Comentários:
a) Este programa calcula a matriz F (xi , yj ) para: a ≤ x ≤ b, c ≤ y ≤ d.
nx e ny é o número de subintervalos nos intervalos [ a, b ] e [ c, d ], respecti-
vamente.
b) Na segunda linha (10 TRNC) truncamos o passo hx pois, caso contrário,
dá problema no FOR-STEP (para incrementos envolvendo π).
Por exemplo, para a HP , π2 + π4 6= 3π π π 3π
4 ; na verdade, 2 + 4 > 4 . Confirme
isto na sua calculadora.
c) Dentro do FOR x (12 RND) arredondamos o resultado da função; isto
se deve a que, por exemplo, cos π2 = −5, 1034 × 10−12 e não 0 como deveria ser.
Com este arredondamento na matriz sai 0 mesmo.
Por exemplo, entrando no programa anterior com os seguintes dados:
→ 0 π/2 0 0, 4 3 4
Gentil 53
f (x, y) f (x, y)
π r r r r r π r
6 6
π r r r r r π r
3 3
π r r r r r π r r r r r
2 2
x x
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 π/2 0 0, 4 3 4
PRG NXT
TEST L
p q p OR q p q p AND q p q p XOR q p p̄
V V V V V V V V F V F
V F V V F F V F V F V
F V V F V F F V V
F F F F F F F F F
p q p OR q p q p AND q p q p XOR q p p̄
1 1 1 1 1 1 1 1 0 1 0
1 0 1 1 0 0 1 0 1 0 1
0 1 1 0 1 0 0 1 1
0 0 0 0 0 0 0 0 0
a ) 12 b ) 14 c) 7 d ) 13 e) 6
≪ → N M
≪ N M FOR n
IF p FP(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
≪ → N M
≪ N M FOR n
IF p FP(n/2) == 0 OR FP(n/3) == 0 p
THEN n
END
NEXT DEPTH →LIST
≫
≫
Exercı́cios
30) (F. SANTANA - 83) Dadas as matrizes A = ( aij )2 , tal que
1 + i, se i = j;
aij =
0, se i 6= j.
−1 4 1 −4 −1 4 1 −4 1 4
a) b) c) d) e)
−1 −2 −1 −2 1 2 1 2 1 2
Então A2 é a matriz:
−1 −1 0 −1 −1 1 0 1 0 1
a) b) c) d) e)
1 0 1 1 0 1 −1 1 −1 −1
33) (UFRS - 83) A = ( aij ) é uma matriz de ordem 2 × 2 com aij = 2−i se
i = j e aij = 0 se i 6= j. A inversa de A é:
1
− 21 2 0
" # " #
0 0
2 2 0 −2 0
a) b) c) d) e) 1
0 1
0 − 41 0 4 0 −4 0 22
4
Gentil 57
34) (FCM STA CASA - 81) Seja a matriz A = ( aij ), de ordem 3, tal que
1 se i < j;
aij = k se i = j e k ∈ R;
−1 se i > j.
Se o determinante de A é igual a zero, então k pertence ao conjunto:
√ √
a ) k ∈ { −3, 1, 3 } b ) k ∈ { −2, 1, 2 } c ) k ∈ { 0, 1/3, 1/2 } d ) k ∈ { − 3, 3 }
e ) k ∈ { −1/3, 1/3 }
35) (U. MACK - 80 ) Seja a função f : R → R definida por
|x| + 3 se |x| ≤ 2;
f (x) =
|x − 3| se |x| > 2