• Nenhum resultado encontrado

AD1: Desconto Racional por Dentro

N/A
N/A
Protected

Academic year: 2021

Share "AD1: Desconto Racional por Dentro"

Copied!
11
0
0

Texto

(1)

Funda¸

ao CECIERJ - Vice Presidˆ

encia de Educa¸

ao Superior a Distˆ

ancia

Curso de Tecnologia em Sistemas de Computa¸

ao

Disciplina: Programa¸

ao com Interfaces Gr´

aficas

AD1 2

o

semestre de 2021.

Professores: Mario Benevides e Paulo Roma

AD1: Desconto Racional por Dentro

1

Descri¸

ao do Problema

Suponha que:

• o pre¸co de uma mercadoria a prazo ´e x reais e que o pre¸co `

a vista ´

e y reais.

• o valor ´e pago em p presta¸c˜

oes mensais iguais a R = x/p com uma de entrada (1+(p−1))

• que o mercado esteja adotando uma remunera¸c˜

ao banc´

aria fixa de t% ao mˆ

es (taxa).

1.1

Descobrindo o Valor Presente

Para determinar se vale a pena comprar a prazo ou n˜

ao, ´

e necess´

ario obter o valor presente

da compra, e descobrir o quanto o comerciante ou a financeira est˜

ao cobrando a mais.

O pre¸co atualizado A, voltando cada parcela para o tempo inicial 0, ´

e a soma de uma

P.G.

1

de raz˜

ao q =

1

(1+t)

e cujo primeiro termo ´

e q: R q

(1−qn) 1−q

, onde R =

x p

´

e o valor de cada

parcela.

1https://www.todamateria.com.br/progressao-geometrica/

(2)

Como, neste exerc´ıcio, a primeira parcela ´

e paga no ato da compra, na realidade, n = p − 1

e deve-se somar

xp

(a entrada):

x

atualizado

= A =

x

p

(1 + q

1 − q

(p−1)

1 − q

).

Com as substitui¸c˜

oes necess´

arias, chega-se a seguinte f´

ormula:

A =

x

p

(1 + t)

p

− 1

t(1 + t)

(p−1)

= x ∗

1 + t

p ∗ CF

, CF =

t

1 − (1 + t)

−p

.

Para calcular

2

o valor das parcelas fixas, no sistema de amortiza¸c˜

ao francˆ

es (Cr´

edito

Direto ao Consumidor - CDC

3

no Brasil), dados o valor do empr´

estimo, v, o n´

umero de

parcelas, p, e a taxa de juros, t, basta usar o Coeficiente de Financiamento, CF (p, t):

R =

x

p

= v ∗

CF (p, t)

f (e)

(valor das presta¸c˜

oes em fun¸c˜

ao de v, t e p),

(1)

Para calcular

4

o valor presente no tempo 0, dados o valor final do empr´

estimo, x, o n´

umero

de parcelas, p, e a taxa de juros, t, basta usar o Coeficiente de Financiamento, CF (p, t):

A =

x

p

f (e)

CF (p, t)

(valor presente em fun¸c˜

ao de x, t e p),

(2)

onde f (e) = 1 + t ou 1, caso haja uma entrada, ou n˜

ao, respectivamente.

´

E comum, o comerciante n˜

ao informar a taxa de juros ou o pre¸co `

a vista, dizendo que os

juros valem zero. Nesse caso, s´

o nos resta usar a taxa Selic como uma base para a taxa de

juros empregada. Portanto, o seu programa deve aceitar trˆ

es op¸c˜

oes:

• Op¸c˜

ao 1: Imprimir o pre¸co atualizado e o percentual pago a mais (

A−yA

∗ 100), ou seja,

o custo estimado do financiamento

5

.

Em geral, a taxa t ´

e muito maior do que a taxa Selic, e `

as vezes vale mais a pena

aplicar o dinheiro no mercado financeiro e pagar `

a vista mais tarde.

Se o pre¸co `

a vista oferecido for maior do que o pre¸co corrigido, vale mais a pena

comprar a prazo, nesse caso.

• Op¸c˜

ao 2: Classificar a adequa¸c˜

ao do parcelamento da seguinte forma.

Se o percentual pago a mais estiver entre 0% e 1%, imprima VALOR BAIXO.

Se o percentual pago a mais estiver entre 1% e 3%, imprima VALOR ACEIT ´

AVEL.

Se estiver entre 3% e 5%, imprima EST ´

A CARO.

Se estiver acima de 5%, imprima VOCˆ

E EST ´

A SENDO ROUBADO.

2Neste caso, A = y = v e n˜ao se conhece x. 3

http://orion.lcg.ufrj.br/python/html/cdc.html 4Neste caso, A = y e n˜ao se conhece y.

(3)

• Op¸c˜

ao 3: Imprimir qual deveria ser o pre¸co total a prazo para ningu´

em sair ganhando

(ou seja, que iguala o pre¸co `

a vista, quando atualizado com a taxa t) e o fator, k =

p∗CFf (e)

,

a ser aplicado (caso vocˆ

e quisesse levar para as lojas, por exemplo, para ter uma base

de compara¸c˜

ao).

1.2

Descobrindo a Taxa Real

Para o caso em que se tenha o valor `

a vista, o n´

umero de presta¸c˜

oes e o valor final a prazo,

mas n˜

ao se conhe¸ca a taxa de juros empregada, ´

e necess´

ario obtˆ

e-la por um m´

etodo num´

erico,

pois n˜

ao existe uma f´

ormula expl´ıcita para isso. Encontrar a taxa t, que produz o pre¸co `

a

vista y, requer o m´

etodo de Newton

6 7

, ou o uso de uma planilha Excel

8

:

x

n+1

= x

n

f (x

n

)

f

0

(x

n

)

com entrada:

y =

x

p

(c − 1)

tb

, onde a = (1 + t)

(p−2)

, b = (1 + t)

(p−1)

, c = (1 + t)

p

f (t) = ytb −

x

p

(c − 1), f

0

(t) = y(b + t(p − 1)a) − xb

(3)

sem entrada:

y =

x

p

(1 − a)

t

, onde a = (1 + t)

−p

, b = (1 + t)

(−p−1)

f (t) = yt −

x

p

(1 − a), f

0

(t) = y − xb

(4)

t

n+1

= t

n

f (t)

f

0

(t)

, t

o

=

x

y

(pre¸co a prazo / pre¸co `

a vista).

(5)

A fun¸c˜

ao (5) ´

e decrescente e converge para t : lim

n→∞

= t. A condi¸c˜

ao de parada pode

ser: |t

n+1

− t

n

| ≤ 1.0 E−04.

6https://en.wikipedia.org/wiki/Newton’s_method 7https://www.youtube.com/watch?v=WuaI5G04Rcw 8

(4)

## A c h a a t a x a que p r o d u z o pre ¸c o `a v i s t a p e l o m ´e t o d o de N e w t o n . # # N o t a : se n ~a o h o u v e entrada , r e t o r n a g e t I n t e r e s t 2 ( x , y , p ) # # T a x a P o u p a n ¸c a : # - 70% da t a x a S e l i c (2% ao ano ) ou # - 1 . 4 0 % ao ano ou # - 0 . 1 1 5 9 % ao m ^e s . # # @ p a r a m x pre ¸c o a p r a z o . # @ p a r a m y pre ¸c o `a v i s t a . # @ p a r a m p n ´u m e r o de p a r c e l a s . # @ r e t u r n taxa , n ´u m e r o de i t e r a ¸c ~o es . # def g e t I n t e r e s t ( x , y , p ):

Exemplo (com entrada): Se p = 10, t = 1% ao mˆ

es, x = $500 e y = $450, ent˜

ao:

• O pre¸co `

a vista ´

e menor do que o pre¸co total corrigido → compre `

a vista.

• Taxa Real = 2.4227% ao mˆes (15 itera¸c˜

oes, fator aplicado = 0.9566)

• Pre¸co a prazo - juros de 1% ao mˆes = $478.30

• Pre¸co `

a vista + juros de 1% ao mˆ

es = $470.42

• Juros Embutidos = ($500.00 - $450.00) / $450.00 * 100 = 11.11%

• Desconto = ($500.00 - $450.00) / $500.00 * 100 = 10.00%

• Excesso = $478.30 - $450.00 = $28.30

• Excesso = ($500 - $470.42) * 0.9566 = $28.30

• Percentual pago a mais = 5.92%

• Valor financiado = $450.00 - $47.04 = $402.96

T a b e l a P r i c e _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | M ^e s | P r e s t a ¸c ~a o | J u r o s | A m o r t i z a ¸c ~a o | S a l d o D e v e d o r | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | | 1 | 4 7 . 0 4 | 4 . 0 3 | 4 3 . 0 1 | 3 5 9 . 9 5 | | 2 | 4 7 . 0 4 | 3 . 6 0 | 4 3 . 4 4 | 3 1 6 . 5 0 | | 3 | 4 7 . 0 4 | 3 . 1 7 | 4 3 . 8 8 | 2 7 2 . 6 3 | | 4 | 4 7 . 0 4 | 2 . 7 3 | 4 4 . 3 2 | 2 2 8 . 3 1 | | 5 | 4 7 . 0 4 | 2 . 2 8 | 4 4 . 7 6 | 1 8 3 . 5 5 | | 6 | 4 7 . 0 4 | 1 . 8 4 | 4 5 . 2 1 | 1 3 8 . 3 5 | | 7 | 4 7 . 0 4 | 1 . 3 8 | 4 5 . 6 6 | 9 2 . 6 9 | | 8 | 4 7 . 0 4 | 0 . 9 3 | 4 6 . 1 1 | 4 6 . 5 8 | | 9 | 4 7 . 0 4 | 0 . 4 7 | 4 6 . 5 8 | 0 . 0 0 | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | | T o t a l | 4 2 3 . 3 7 | 2 0 . 4 2 | 4 0 2 . 9 6 | 0 | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ |

(5)

Note-se que a tabela Price acima foi criada usando a taxa de 1% e n˜

ao a taxa real de

2.4227%. Com uma taxa de 1%, o valor final n˜

ao ser´

a $500, mas sim $470.42. Para que a

tabela seja impressa com a taxa real, esta deve ser calculada:

t, ni = getInterest(450, 400, 10)

• Taxa = 2.4227% - 15 itera¸c˜

oes

• O pre¸co `

a vista ´

e igual ao pre¸co total corrigido.

• Taxa Real = 2.4227%, Itera¸c˜

oes = 15, Fator = 0.9000

• Pre¸co `

a vista + juros de 2.42% ao mˆ

es = $500.00

• Pre¸co a prazo - juros de 2.42% ao mˆes = $450.00

• Juros Embutidos = ($500.00 - $450.00) / $450.00 * 100 = 11.11%

• Desconto = ($500.00 - $450.00) / $500.00 * 100 = 10.00%

• Excesso = $450.00 - $450.00 = $-0.00

• Excesso = ($500.00 - $500.00) * 0.9000 = $-0.00

• Percentual pago a mais = -0.00%

• Coeficiente de Financiamento: 0.113803

• Valor financiado = 450.00 - 50.00 = 400.00

• Presta¸c˜

ao: $50.00

T a b e l a P r i c e _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | M ^e s | P r e s t a ¸c ~a o | J u r o s | A m o r t i z a ¸c ~a o | S a l d o D e v e d o r | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | | 1 | 5 0 . 0 0 | 9 . 6 9 | 4 0 . 3 1 | 3 5 9 . 6 9 | | 2 | 5 0 . 0 0 | 8 . 7 1 | 4 1 . 2 9 | 3 1 8 . 4 1 | | 3 | 5 0 . 0 0 | 7 . 7 1 | 4 2 . 2 9 | 2 7 6 . 1 2 | | 4 | 5 0 . 0 0 | 6 . 6 9 | 4 3 . 3 1 | 2 3 2 . 8 1 | | 5 | 5 0 . 0 0 | 5 . 6 4 | 4 4 . 3 6 | 1 8 8 . 4 5 | | 6 | 5 0 . 0 0 | 4 . 5 7 | 4 5 . 4 3 | 1 4 3 . 0 1 | | 7 | 5 0 . 0 0 | 3 . 4 6 | 4 6 . 5 4 | 9 6 . 4 8 | | 8 | 5 0 . 0 0 | 2 . 3 4 | 4 7 . 6 6 | 4 8 . 8 2 | | 9 | 5 0 . 0 0 | 1 . 1 8 | 4 8 . 8 2 | -0.00 | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | | T o t a l | 4 5 0 . 0 0 | 5 0 . 0 0 | 4 0 0 . 0 0 | 0 | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ |

(6)

1.3

Imprimindo a Tabela Price

A tabela Price

9

indica o quanto se pagou de juros no per´ıodo e o quanto foi amortizado do

principal. Por exemplo, para um empr´

estimo de $23.000 reais, a ser pago em 12 vezes, com

uma taxa de juros de 4,55% ao mˆ

es, temos:

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | M ^e s | P r e s t a ¸c ~a o | J u r o s | A m o r t i z a ¸c ~a o | S a l d o D e v e d o r | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | | n | R = pmt | J | U = pmt - J | PV - U | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | | 1 | 2 5 2 9 . 5 4 | 1 0 4 6 . 5 0 | 1 4 8 3 . 0 4 | 2 1 5 1 6 . 9 6 | | 2 | 2 5 2 9 . 5 4 | 9 7 9 . 0 2 | 1 5 5 0 . 5 2 | 1 9 9 6 6 . 4 4 | | 3 | 2 5 2 9 . 5 4 | 9 0 8 . 4 7 | 1 6 2 1 . 0 7 | 1 8 3 4 5 . 3 7 | | 4 | 2 5 2 9 . 5 4 | 8 3 4 . 7 1 | 1 6 9 4 . 8 3 | 1 6 6 5 0 . 5 4 | | 5 | 2 5 2 9 . 5 4 | 7 5 7 . 6 0 | 1 7 7 1 . 9 4 | 1 4 8 7 8 . 6 0 | | 6 | 2 5 2 9 . 5 4 | 6 7 6 . 9 8 | 1 8 5 2 . 5 7 | 1 3 0 2 6 . 0 3 | | 7 | 2 5 2 9 . 5 4 | 5 9 2 . 6 8 | 1 9 3 6 . 8 6 | 1 1 0 8 9 . 1 8 | | 8 | 2 5 2 9 . 5 4 | 5 0 4 . 5 6 | 2 0 2 4 . 9 8 | 9 0 6 4 . 1 9 | | 9 | 2 5 2 9 . 5 4 | 4 1 2 . 4 2 | 2 1 1 7 . 1 2 | 6 9 4 7 . 0 7 | | 10 | 2 5 2 9 . 5 4 | 3 1 6 . 0 9 | 2 2 1 3 . 4 5 | 4 7 3 3 . 6 2 | | 11 | 2 5 2 9 . 5 4 | 2 1 5 . 3 8 | 2 3 1 4 . 1 6 | 2 4 1 9 . 4 6 | | 12 | 2 5 2 9 . 5 4 | 1 1 0 . 0 9 | 2 4 1 9 . 4 6 | 0 . 0 0 | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | | T o t a l | 3 0 3 5 4 . 5 0 | 7 3 5 4 . 5 0 | 2 3 0 0 0 . 0 0 | 0 | | _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ | ## R e t o r n a a T a b e l a Price , t a m b ´e m c h a m a d a de s i s t e m a f r a n c ^e s # de a m o r t i z a ¸c ~a o . # ´E um m ´e t o d o u s a d o em a m o r t i z a ¸c ~a o de e m p r ´e s t i m o s c u j a p r i n c i p a l # c a r a c t e r ´ı s t i c a ´e a p r e s e n t a r p r e s t a ¸c ~o es ( ou p a r c e l a s ) i g u a i s . # O m ´e t o d o foi a p r e s e n t a d o em 1 7 7 1 por R i c h a r d P r i c e em sua o b r a # " O b s e r v a ¸c ~o es s o b r e P a g a m e n t o s R e m i s s i v o s ". # # @ p a r a m np n ´u m e r o de p r e s t a ¸c ~o es . # @ p a r a m pv v a l o r do e m p r ´e s t i m o . # @ p a r a m t t a x a de j u r o s . # @ p a r a m pmt p a g a m e n t o m e n s a l . # @ r e t u r n uma m a t r i z c u j a s l i n h a s s ~a o l i s t a s com : # ( m ^e s , p r e s t a ¸c ~a o , juros , a m o r t i z a ¸c ~a o , s a l d o d e v e d o r ). # def p r i c e T a b l e ( np , pv , t , pmt ):

Embora as presta¸c˜

oes sejam fixas, ou seja, sabe-se exatamente o quanto vai ser pago a

cada mˆ

es, se a dura¸c˜

ao do empr´

estimo for muito longa e com juros altos, como os cobrados

pelo sistema banc´

ario brasileiro, a amortiza¸c˜

ao ser´

a muito lenta, e, por conseguinte, se pagar´

a

uma quantidade de juros exorbitante.

9

(7)

1.4

Disponibilizando Tudo na Internet

CGI ´

e uma forma padr˜

ao de gerar conte´

udo dinˆ

amico para p´

aginas Web.

CGI significa

Common Gateway Interface e provˆ

e uma interface padr˜

ao entre o servidor HTTP e programas

que geram conte´

udo Web. Esses programas s˜

ao mais conhecidos como scripts CGI, e s˜

ao

escritos com uma linguagem script (em geral interpretada) qualquer, como Python ou Perl,

por exemplo. O servidor HTTP processa esses arquivos script fonte, linha por linha, e chama

as fun¸c˜

oes do CGI quando necess´

ario. A sa´ıda de uma fun¸c˜

ao CGI ´

e enviada ao cliente Web

(navegador) como parte de uma p´

agina Web.

Dessa forma, se utilizarmos o CGI para executar scripts Python no servidor

10

, tudo o que

calculamos pode ser acessado por qualquer navegador e ser muito ´

util na avalia¸c˜

ao de um

empr´

estimo por uma pessoa com acesso `

a Internet

11

.

Portanto, um script CGI como o do c´

odigo 1, pode ser executado num servidor HTTP,

para processar entradas fornecidas atrav´

es de um formul´

ario HTML.

# !/ usr / bin / env p y t h o n 3 # c o d i n g : UTF -8

#

# CGI i n t e r f a c e for CDC c a l c u l a t i o n s . # S h o u l d be c o p i e d to :

# - / L i b r a r y / W e b S e r v e r / CGI - E x e c u t a b l e s / ( M a c O S ) # - / usr / lib / cgi - bin / ( U b u n t u )

# - / var / www / cgi - bin ( F e d o r a ) #

# @ a u t h o r P a u l o R o m a # @ d a t e 2 9 / 0 6 / 2 0 2 0 #

# @ s e e h t t p s :// d e v e l o p e r . m o z i l l a . org / en - US / d o c s / Web / H T M L / E l e m e n t / c o d e

# @ s e e h t t p :// lcg . u f r j . br / p y t h o n / h t m l / cdc . cgi ? np = 1 0 & tax =0& pv = 4 5 0 & pp = 5 0 0 & e =0 # I m p o r t m o d u l e s for CGI h a n d l i n g i m p o r t cgi , c g i t b i m p o r t sys , os , c o d e c s sys . p a t h . a p p e n d ( os . e n v i r o n . get ( " D O C U M E N T _ R O O T " )+ ’ / p y t h o n / l a b s / h i d d e n ’ ) f r o m _ 0 2 f _ r a t i o n a l i m p o r t g e t I n t e r e s t , CF , p r i c e T a b l e , p r i n t T a b l e , \ s e t D o w n P a y m e n t , g e t D o w n P a y m e n t # W h e n P y t h o n p r i n t s U n i c o d e s t r i n g s to the c o n s o l e it u s u a l l y d e t e c t s # the c o n s o l e e n c o d i n g and a u t o m a t i c a l l y e n c o d e s the U n i c o d e s t r i n g s # u s i n g t h a t e n c o d i n g .

# For CGI t h e r e is no t e r m i n a l so the d e f a u l t is a s c i i . # One can c h a n g e s t d o u t to a n o t h e r e n c o d i n g by u s i n g : sys . s t d o u t = c o d e c s . g e t w r i t e r ( ’ u t f 8 ’ )( sys . s t d o u t . b u f f e r ) # we w a n t s o m e e r r o r m e s s a g e s c g i t b . e n a b l e () # C r e a t e i n s t a n c e of F i e l d S t o r a g e 10 https://www.tutorialspoint.com/python/python_cgi_programming.htm 11 http://orion.lcg.ufrj.br/python/html/cdc.cgi?np=12&tax=4.55&pv=23000&pp=30500

(8)

f o r m = cgi . F i e l d S t o r a g e () e r r m s g = " " # Get d a t a f r o m f i e l d s try : np = int ( f o r m . g e t v a l u e ( ’ np ’ )) t = f l o a t ( f o r m . g e t v a l u e ( ’ tax ’ ) ) / 1 0 0 pp = f l o a t ( f o r m . g e t v a l u e ( ’ pp ’ )) pv = f l o a t ( f o r m . g e t v a l u e ( ’ pv ’ )) e x c e p t E x c e p t i o n as err : e r r m s g = " I n v a l i d P a r a m e t e r s : {} " . f o r m a t ( err ) p r i n t ( """ Content - t y p e : t e x t / h t m l ; c h a r s e t = utf -8\ r \ n \ r \ n < html > < h6 >{} </ h6 > < head >

< m e t a n a m e =" v i e w p o r t " c o n t e n t =" w i d t h = device - width , initial - s c a l e =1" > < title > CDC - Cr ´e d i t o D i r e t o ao C o n s u m i d o r CGI Program </ title >

</ head > < body > """ . f o r m a t ( " P y t h o n { 0 [ 0 ] } . { 0 [ 1 ] } . { 0 [ 2 ] } - E n c o d i n g : {1} " . f o r m a t ( sys . v e r s i o n _ i n f o [:3] , sys . g e t d e f a u l t e n c o d i n g ( ) ) ) ) if e r r m s g : p r i n t ( e r r m s g ) sys . e x i t (1) dp = len ( f o r m . v a l u e ) <= 4 p r i n t ( """ < h4 > P a r c e l a s : { } { : d } </ h4 > < h4 > T a x a : { : . 2 f }% </ h4 > < h4 > Pre ¸c o a P r a z o : $ { : . 2 f } </ h4 > < h4 > Pre ¸c o `a V i s t a : $ { : . 2 f } </ h4 > """ . f o r m a t ( " 1+ " if dp e l s e " " , np -1 if dp e l s e np , 1 0 0 * t , pp , pv )) s e t D o w n P a y m e n t ( dp ) # com ou sem e n t r a d a i = g e t I n t e r e s t ( pp , pv , np ) if t <= 0: t = i [ 0 ] * 0 . 0 1 cf = CF ( t , np ) pmt = pv * cf if g e t D o w n P a y m e n t (): pmt /= (1+ t ) np -= 1 # uma p r e s t a ¸c ~a o a m e n o s pv -= pmt # pre ¸c o `a v i s t a m e n o s a e n t r a d a p r i n t ( " < h4 > V a l o r f i n a n c i a d o = $ { : . 2 f } - $ { : . 2 f } = $ { : . 2 f } </ h4 > " . f o r m a t ( pv + pmt , pmt , pv )) p r i n t ( """ < h4 > T a x a R e a l ({} i t e r a ¸c ~o es ): { : . 4 f }% </ h4 > < h4 > C o e f i c i e n t e de F i n a n c i a m e n t o : { : . 6 f } </ h4 >

(9)

< h4 > P r e s t a ¸c ~a o : $ { : . 2 f } </ h4 > < h2 > T a b e l a Price </ h2 > """ . f o r m a t ( i [1] , i [0] , cf , pmt )) ptb = p r i c e T a b l e ( np , pv , t , pmt ) t a b l e = " " for i in r a n g e ( len ( ptb )): t a b l e += " < tr > " for j in r a n g e ( len ( ptb [ 0 ] ) ) : col = " { : . 2 f } " . f o r m a t ( ptb [ i ][ j ]) if i > 0 and \ j > 0 e l s e str ( ptb [ i ][ j ]) t a b l e += ( " < td s t y l e = ’ text - a l i g n : c e n t e r ’ > " if i > 0 e l s e " < th > " ) + \ col + ( " </ td > " if i > 0 e l s e " </ th > " ) t a b l e += " </ tr > " p r i n t ( """ < t a b l e b o r d e r =1 > { c o n t e n t } </ table > """ . f o r m a t ( c o n t e n t = t a b l e )) if F a l s e : # h t m l s u p p r e s s e s s p a c e s p r i n t ( " < pre > " ) # m o n o s p a c e d f o n t p r i n t ( " < code > " ) p r i n t T a b l e ( ptb ) p r i n t ( " </ code > " ) p r i n t ( " </ pre > " ) p r i n t ( " </ body > " ) p r i n t ( " </ html > " )

odigo 1: cdc.cgi

(10)

1.5

Criando o Seu Pr´

oprio Servidor HTTP

´

E relativamente simples criar um servidor HTTP (Hypertext Transfer Protocol ) local em

MacOS

12

,

13

ou Linux

14

. Isso vai facilitar muito os testes do seu c´

odigo Javascript ou Python.

Ambos os sistemas possuem um servidor Apache

15

pr´

e-instalado

16

que pode ser ativado.

Aconselho atribuir um nome ao servidor, por exemplo, o nome do seu computador, e em Linux,

redirecionar o Document Root para fora da raiz (/) do sistema, colocando-o por exemplo em

/home/html.

Em MacOS, os arquivos de configura¸c˜

ao est˜

ao em /etc/apache2. Basicamente, ´

e

ne-cess´

ario editar o arquivo httpd.conf e no diret´

orio extra, os arquivos httpd-ssl.conf

e httpd-vhosts.conf para configurar o m´

odulo ssl.

Opcionalmnete, criar arquivos

para cada usu´

ario no diret´

orio users, se for necess´

ario permitir o acesso ao diret´

orio

Sites (equivalente ao public html em Linux) no home de cada usu´

ario, que poder´

a

ser acessado como: http://localhost/∼user.

O Document Root do Apache2 est´

a em

/Library/WebServer/Documents. Finalmente, para reiniciar o servidor Apache, basta

exe-cutar:

sudo apachectl restart

Em Ubuntu, ´

e poss´ıvel criar um host virtual em /etc/apache2/sites-available, usando

o arquivo 000-default.conf como ponto de partida. Desta forma, n˜

ao ´

e necess´

ario alterar o

arquivo de configura¸c˜

ao global em /etc/apache2/apache2.conf. Algo como cederj.conf:

< V i r t u a l H o s t *:8088 > # p o r t a p a r a o h o s t v i r t u a l S e r v e r N a m e c e d e r j # n o m e do h o s t S e r v e r A l i a s c e d e r j . l o c a l S e r v e r A d m i n r o m a @ l o c a l h o s t # e m a i l do a d m i n i s t r a d o r D o c u m e n t R o o t / h o m e / h t m l # o n d e f i c a m os a r q u i v o s h t m l < D i r e c t o r y "/ h o m e / h t m l " > O p t i o n s I n d e x e s F o l l o w S y m L i n k s A l l o w O v e r r i d e All R e q u i r e all g r a n t e d A d d D e f a u l t C h a r s e t utf -8 # q u e r e m o s a c e n t o s </ D i r e c t o r y > . . . . </ V i r t u a l H o s t >

Para ativar este novo arquivo, deve-se fazer:

sudo a2ensite cederj.conf

Depois, deve-se ativar o m´

odulo CGI:

sudo a2enmod cgid

12https://discussions.apple.com/docs/DOC-3083

13https://jasonmccreary.me/articles/install-apache-php-mysql-mac-os-x-catalina/ 14https://phoenixnap.com/kb/how-to-install-apache-web-server-on-ubuntu-18-04 15https://apache.org

16

(11)

Para reler os arquivos de configura¸c˜

ao do servidor Apache no Ubuntu 18.04 basta usar

17

:

sudo apache2ctl graceful

Em caso de erro, pode-se verificar a validade dos arquivos de configura¸c˜

ao:

sudo apachectl configtest

O Diret´

orio padr˜

ao para colocar os scripts ´

e:

• /Library/WebServer/CGI-Executables, para macOS;

• /usr/lib/cgi-bin, para Ubuntu e

• /var/www/cgi-bin, para Fedora.

Para poder colocar os scripts num diret´

orio qualquer, basta adicionar um arquivo .htaccess,

com o seguinte conte´

udo:

O p t i o n s + E x e c C G I

A d d H a n d l e r cgi - s c r i p t . py

Se a sua distribui¸c˜

ao Linux usar SELinux

18

(Security-Enhanced Linux ), deve-se alterar o

contexto dos arquivos python, para que possam ser executados:

sudo chcon -t httpd_user_script_exec_t *.py

´

E poss´ıvel tamb´

em ativar o servidor seguro que utiliza o m´

odulo ssl para criptografar o

tr´

afego. A configura¸c˜

ao est´

a em /etc/apache2/mods-available/ssl.conf. No entanto, isso

a um pouco mais de trabalho, porque ser´

a necess´

ario criar chaves RSA para identificar o

servidor. Neste curso, isso ´

e absolutamente dispens´

avel. O script pode ser acessado como

http://localhost:porta/cgi-bin/cdc.cgi ou http://cederj:8088/cgi-bin/cdc.cgi.

A porta padr˜

ao 80 pode ser omitida e os argumentos podem ser passados da seguinte forma:

http://localhost/cgi-bin/cdc.cgi?np=12&tax=4.55&pv=23000&pp=30500

´

E poss´ıvel acessar o seu servidor de fora da Intranet (rede local), desde que se saiba o IP

externo da conex˜

ao, e que o seu provedor de Internet n˜

ao utilize CGNAT

19

. Para ter acesso

ao IP externo, pode-se utilizar um servi¸co de redirecionamento qualquer, como o do no-ip

20

.

17https://www.configserverfirewall.com/ubuntu-linux/restart-apache-ubuntu-18/

18SELinux pode controlar que atividades um sistema permite para cada usu´ario, processo e daemon, com especifica¸c˜oes muito precisas.

19https://www.copeltelecom.com/site/blog/conheca-o-cgnat/ 20

Referências

Documentos relacionados

Para compreender quais s˜ ao as dificuldades do usu´ ario ´ e necess´ ario aplicar testes de usabilidade, no caso deste trabalho, ser˜ ao em ferramentas nativas do grupo

de melhorar a utilizac¸˜ao da rede. Por´em, juntamente com o aumento da taxa de bits total do sistema ´e necess´ario atender certos requisitos de banda de cada usu´ario. A

O diret´ orio demo modmac py possui um sub-diret´ orio bin que cont´em o execut´avel de modelagem s´ısmica e um diret´ orio nomeado modelo que cont´em o campo de velocidade

 Informações atuais de ampla divulgação da imprensa sobre aspectos mundiais da vida econômica, social, política e cultural, meio ambiente, saúde e

EMPRESAS CLASSIFICADAS COMO PRODUTORAS BRASILEIRAS INDEPENDENTES NA ANCINE, NOS TERMOS DA INSTRUÇÃO NORMATIVA Nº 91 BEM COMO NÃO ATENDEU O DISPOSTO NOS ITENS 1.1, &#34;C&#34;

A fim de propor novos padrões para a melhoria da qualidade habitacional em HIS, realizou-se uma pesquisa cujo resultado foi diretrizes projetuais para o setor serviço baseadas

de Usu´ ario Requisitar “Buscar Tipo de Conta” Manter Tipo de Conta Flexibilidade Usu´ ario Int. de Usu´ ario Listar Tipo de Conta Manter Tipo de Conta Flexibilidade Continua na

Para que o processo n˜ao se torne algo lento e desgastante, ´e necess´ario grande quantidade de poder computacional (visando uma criptografia n˜ao percept´ıvel ao usu´ario