4
respostas

Pseudocódigos e Algoritmo em Linguagem Natural – Conversor de Moeda

  • Por Ricardo Costa Val do Rosario auxiliado por Microsoft Copilot 365

Algoritmo em Linguagem Natural – Conversor de Moedas

# 1.	Início do programa
    - Exibir mensagem: "Digite o valor em reais (R$):"
    - Ler o valor informado pelo usuário → valor_em_reais
    - Exibir mensagem: "Digite a taxa de câmbio (quantos reais equivalem a 1 dólar):"
    - Ler a taxa informada pelo usuário → taxa_de_cambio

# 2.	Definir a função de conversão
    - Nome da função: converter_para_dolar
    - Parâmetros de entrada: valor_em_reais, taxa_de_cambio
    - Passos dentro da função: 
a.	Calcular valor_convertido = valor_em_reais / taxa_de_cambio
b.	Retornar valor_convertido

# 3.	No programa principal
    - Chamar a função converter_para_dolar(valor_em_reais, taxa_de_cambio)
    - Guardar o resultado em valor_em_dolares
    - Exibir mensagem: "Com a taxa atual, o valor em dólares é: US$ [valor_em_dolares]"
# 4.	Fim do programa

Exemplo prático

- Entrada: 
valor_em_reais = 500
taxa_de_cambio = 5,00

Cálculo: 
valor_convertido = 500 / 5 = 100
- Saída: 
Com a taxa atual, o valor em dólares é: US$ 100,00"
  • Esse modelo é reutilizável e flexível: se no futuro a agência quiser incluir conversão para euros,
    libras ou ienes, basta criar novas funções semelhantes ou adaptar a existente.

O que é Pseudocódigo

- Pseudocódigo é uma forma informal de escrever algoritmos, usando uma mistura de linguagem
natural (português, inglês, etc.) com estruturas típicas de programação (como se, enquanto, função).
- Ele não é executável por um computador, mas serve como um rascunho para planejar a lógica antes de 
escrever em uma linguagem real.
- Pense nele como uma receita de bolo: você descreve os passos, mas não precisa usar a sintaxe rígida de 
uma linguagem de programação.

Aplicações Práticas

1. Ensino de lógica de programação: iniciantes focam na lógica sem se preocupar com detalhes técnicos.
2. Planejamento de sistemas: equipes usam pseudocódigo para alinhar ideias antes de codificar.
3. Documentação: facilita a comunicação entre programadores e pessoas não técnicas.

Exemplo em Pseudocódigo (Visualg/Portugol)

algoritmo "ConversorMoedas"
var
   valor_em_reais, taxa_de_cambio, valor_em_dolares: real

funcao converter_para_dolar(valor: real, taxa: real): real
inicio
   retorne valor / taxa
fimfuncao

inicio
   escreva("Digite o valor em reais (R$): ")
   leia(valor_em_reais)

   escreva("Digite a taxa de câmbio (quantos reais equivalem a 1 dólar): ")
   leia(taxa_de_cambio)

   valor_em_dolares <- converter_para_dolar(valor_em_reais, taxa_de_cambio)

   escreval("Com a taxa atual, o valor em dólares é: US$ ", valor_em_dolares:2:2)
fimalgoritmo

Prós & Contras

1. Vantagens
•	Clareza: fácil de entender até para quem não programa.
•	Flexibilidade: não exige sintaxe rígida.
•	Didático: ótimo para aprender lógica antes de mergulhar em linguagens como Python, Java ou C.
•	Colaboração: facilita comunicação entre equipes multidisciplinares.
2. Desafios
•	Não é executável: precisa ser traduzido para uma linguagem real.
•	Falta de padrão: cada pessoa pode escrever de um jeito, o que pode gerar confusão.
•	Detalhes técnicos ausentes: não lida com bibliotecas, tipos complexos ou otimizações.

Sobre o uso de //

1. O símbolo // é usado em linguagens de programação reais (como C, Java, JavaScript) para indicar comentários.
2. No pseudocódigo, não existe uma regra universal: você pode usar //, #, ou até escrever "Comentário:" antes da frase.
3. Em ambientes como Visualg, o comentário é feito com //, mas isso é uma convenção da ferramenta, não do 
pseudocódigo em si.

Resumindo:

1. Pseudocódigo é um rascunho lógico que serve para pensar e comunicar algoritmos. 
2. Ele pode usar // para comentários se você quiser, mas isso não é obrigatório — depende da convenção ou da
ferramenta usada.

Transformando o pseudocódigo em duas versões:

Python real (executável)

# Função para converter reais em dólares
def converter_para_dolar(valor_em_reais, taxa_de_cambio):
    return valor_em_reais / taxa_de_cambio

# Programa principal
valor_em_reais = float(input("Digite o valor em reais (R$): "))
taxa_de_cambio = float(input("Digite a taxa de câmbio (quantos reais equivalem a 1 dólar): "))

valor_em_dolares = converter_para_dolar(valor_em_reais, taxa_de_cambio)

print(f"Com a taxa atual, o valor em dólares é: US$ {valor_em_dolares:.2f}")

    Exemplo de execução
•	Entrada: 
valor_em_reais = 500
taxa_de_cambio = 5.00
•	Saída: 
Com a taxa atual, o valor em dólares é: US$ 100.00

Representação em JSON

{
  "entrada": {
    "valor_em_reais": 500.00,
    "taxa_de_cambio": 5.00
  },
  "processo": "valor_em_dolares = valor_em_reais / taxa_de_cambio",
  "saida": {
    "valor_em_dolares": 100.00
  }
}
4 respostas

Diferença entre Python e JSON

1. Python → é uma linguagem de programação, você escreve código que roda no computador.
2. JSON → é um formato de dados (JavaScript Object Notation), usado para armazenar e transportar informações. 
- Ele não calcula nada sozinho, mas pode ser lido por programas em Python, Java, JavaScript etc.
- Como o Python pode gerar automaticamente um JSON com os dados de entrada, o processo e o resultado da conversão. 
- Isso é muito útil em sistemas reais, porque o JSON é o formato mais usado para troca de informações entre aplicações 
(APIs, bancos de dados, integrações etc.).

Código em Python com Exportação para JSON

import json

# Função para converter reais em dólares
def converter_para_dolar(valor_em_reais, taxa_de_cambio):
    return valor_em_reais / taxa_de_cambio

# Programa principal
valor_em_reais = float(input("Digite o valor em reais (R$): "))
taxa_de_cambio = float(input("Digite a taxa de câmbio (quantos reais equivalem a 1 dólar): "))

valor_em_dolares = converter_para_dolar(valor_em_reais, taxa_de_cambio)

# Exibir resultado no console
print(f"Com a taxa atual, o valor em dólares é: US$ {valor_em_dolares:.2f}")

# Estrutura de dados em Python (dicionário)
dados = {
    "entrada": {
        "valor_em_reais": valor_em_reais,
        "taxa_de_cambio": taxa_de_cambio
    },
    "processo": "valor_em_dolares = valor_em_reais / taxa_de_cambio",
    "saida": {
        "valor_em_dolares": round(valor_em_dolares, 2)
    }
}

Converter para JSON (string formatada)

json_resultado = json.dumps(dados, indent=4, ensure_ascii=False)

# Exibir JSON no console
print("\nRepresentação em JSON:")
print(json_resultado)

# Opcional: salvar em arquivo
with open("conversao.json", "w", encoding="utf-8") as arquivo:
    json.dump(dados, arquivo, indent=4, ensure_ascii=False)

Exemplo de execução

    Entrada:
•	valor_em_reais = 500
•	taxa_de_cambio = 5.00
    Saída no console:
Com a taxa atual, o valor em dólares é: US$ 100.00
Arquivo conversao.json gerado:
{
    "entrada": {
        "valor_em_reais": 500.0,
        "taxa_de_cambio": 5.0
    },
    "processo": "valor_em_dolares = valor_em_reais / taxa_de_cambio",
    "saida": {
        "valor_em_dolares": 100.0
    }
}

Vantagens de integrar JSON

1. Interoperabilidade: qualquer sistema (Java, C#, JavaScript, etc.) consegue ler esse formato.
2. Padronização: facilita a comunicação entre serviços de uma agência de viagens (ex.: site, app, sistema de 
reservas).
3. Armazenamento: pode ser salvo em arquivos ou bancos NoSQL (como MongoDB).

Simulação 01

[Como esse conversor de moedas poderia ser usado em um cenário de API — ou seja, um sistema de 
reservas de viagens que recebe um valor em reais e devolve o valor em dólares em formato JSON.]

# Criando uma API simples com Flask (Python)
[O Flask é um microframework em Python muito usado para criar APIs de forma rápida e didática. Veja como ficaria:
from flask import Flask, request, jsonify

app = Flask(__name__)

# Função de conversão
def converter_para_dolar(valor_em_reais, taxa_de_cambio):
    return valor_em_reais / taxa_de_cambio

# Rota da API
@app.route('/converter', methods=['POST'])
def converter():
    dados = request.get_json()  # Recebe os dados em JSON
    valor_em_reais = dados['valor_em_reais']
    taxa_de_cambio = dados['taxa_de_cambio']
    
    valor_em_dolares = converter_para_dolar(valor_em_reais, taxa_de_cambio)
    
    resposta = {
        "entrada": dados,
        "saida": {
            "valor_em_dolares": round(valor_em_dolares, 2)
        }
    }
    return jsonify(resposta)

if __name__ == '__main__':
    app.run(debug=True)
    

Exemplo de Requisição (Cliente → Servidor)

[Um cliente (pode ser outro sistema, um app ou até o Postman) enviaria um POST para a API:]
POST /converter
Content-Type: application/json

{
  "valor_em_reais": 500,
  "taxa_de_cambio": 5.0
}

    Resposta da API (Servidor → Cliente)
{
  "entrada": {
    "valor_em_reais": 500,
    "taxa_de_cambio": 5.0
  },
  "saida": {
    "valor_em_dolares": 100.0
  }
}

Vantagens desse modelo

1. Automatização: qualquer sistema pode consumir essa API e obter o valor convertido.
2. Escalabilidade: fácil de integrar em sites, apps móveis ou sistemas internos da agência.
3. Padronização: JSON é universal, então funciona em qualquer linguagem.

Simulação 02

[Como um cliente em Python pode consumir a API que criamos com Flask usando a biblioteca requests. 
Assim você verá o ciclo completo: 
o app de viagens envia os dados em reais → a API responde em dólares → o cliente exibe o resultado.]

    Código do Cliente em Python (consumindo a API)
import requests

# URL da API (supondo que esteja rodando localmente na porta 5000)
url = "http://127.0.0.1:5000/converter"

# Dados de entrada
payload = {
    "valor_em_reais": 500,
    "taxa_de_cambio": 5.0
}

# Enviando requisição POST com JSON
response = requests.post(url, json=payload)

# Verificando resposta
if response.status_code == 200:
    dados = response.json()
    print("Resposta da API:")
    print(dados)
else:
    print("Erro na requisição:", response.status_code)

    O que o cliente envia
{
  "valor_em_reais": 500,
  "taxa_de_cambio": 5.0
}

    O que a API responde
{
  "entrada": {
    "valor_em_reais": 500,
    "taxa_de_cambio": 5.0
  },
  "saida": {
    "valor_em_dolares": 100.0
  }
}

Como isso se encaixa no sistema de viagens

•	O site da agência poderia enviar o valor da compra em reais para a API.
•	A API converte e devolve em dólares.
•	O app do cliente exibe o valor convertido, útil para turistas estrangeiros.

O Pacote Completo

1.	Algoritmo em linguagem natural.
2.	Pseudocódigo (Visualg).
3.	Código em Python.
4.	Representação em JSON.
5.	API com Flask.
6.	Cliente em Python consumindo a API.

Implantando a API em Cloud Computing

  • Em Cloud Computing (ex.: Heroku, Render, Azure) a API fica acessível remotamente para todos de qualquer lugar
    desde que se tenha acesso a rede de internet compatível e permissão de acesso.
# Os 03 caminhos bem usados para Implantar uma API Flask na Nuvem:
    
# 1. Heroku (mais simples para começar)
•	Passos básicos: 
1.	Instalar o Heroku CLI.
2.	Criar um arquivo requirements.txt com as dependências (ex.: Flask e gunicorn).
3.	Criar um arquivo Procfile com: 
4.	web: gunicorn app:app
(supondo que seu arquivo principal se chama app.py).
5.	Fazer login no Heroku (heroku login).
6.	Criar o app (heroku create nome-do-app).
7.	Fazer deploy (git push heroku main).
•	Resultado: você ganha uma URL pública como https://nome-do-app.herokuapp.com/converter.

# 2. Google Cloud Run (serverless, escala automático)
•	Você empacota sua API Flask em um container Docker.
•	Com um único comando, o Google Cloud Run cria a infraestrutura e gera uma URL pública.
•	Guia oficial: Deploy Flask no Cloud Run.

# 3. Azure App Service (ótimo para quem já usa Microsoft)
•	Você pode subir o código direto ou empacotar em container.
•	Ele cuida de escalabilidade, monitoramento e segurança.
•	Tutorial oficial: Implantar Flask no Azure.

# Exemplo de Estrutura de Arquivos para Deploy (Heroku)

/meu-projeto
│── app.py              # sua API Flask
│── requirements.txt    # dependências
│── Procfile            # instruções de execução
│── runtime.txt         # versão do Python (opcional)
requirements.txt
Flask==2.3.2
gunicorn==20.1.0
Procfile
web: gunicorn app:app

Vantagens de levar para a nuvem

•	Acessível de qualquer lugar 
•	Escalável: suporta muitos usuários sem você se preocupar com servidores.
•	Integração fácil: apps móveis, sites e sistemas podem consumir sua API.
•	Profissionalismo: sua agência de viagens teria um serviço confiável e moderno.

Passo a Passo – Deploy Flask no Heroku

    # 1. Preparar o projeto
    Crie uma pasta para o projeto e coloque dentro:
•	app.py → seu código Flask (a API de conversão).
•	requirements.txt → lista de dependências.
•	Procfile → instruções de execução no Heroku.
•	(opcional) runtime.txt → versão do Python.
    
    # 2. Arquivos necessários
app.py (exemplo simplificado):
from flask import Flask, request, jsonify

app = Flask(__name__)

def converter_para_dolar(valor_em_reais, taxa_de_cambio):
    return valor_em_reais / taxa_de_cambio

@app.route('/converter', methods=['POST'])
def converter():
    dados = request.get_json()
    valor_em_reais = dados['valor_em_reais']
    taxa_de_cambio = dados['taxa_de_cambio']
    valor_em_dolares = converter_para_dolar(valor_em_reais, taxa_de_cambio)
    return jsonify({
        "entrada": dados,
        "saida": {"valor_em_dolares": round(valor_em_dolares, 2)}
    })

if __name__ == '__main__':
    app.run()
requirements.txt:
Flask==2.3.2
gunicorn==20.1.0
Procfile (sem extensão):
web: gunicorn app:app
runtime.txt (opcional, para fixar versão do Python):
python-3.10.12

    # 3. Instalar ferramentas
•	Git
•	Heroku CLI
•	Python já deve estar instalado.

    
# 4. Comandos no terminal
# entrar na pasta do projeto
cd meu-projeto

# inicializar repositório git
git init
git add .
git commit -m "Primeiro commit da API de conversão"

# login no Heroku
heroku login

# criar app no Heroku (nome único)
heroku create conversor-moedas-ricardo

# enviar código para o Heroku
git push heroku master   # ou: git push heroku main

# abrir no navegador
heroku open

# 5. Testar a API
Depois do deploy, você terá uma URL como:
https://conversor-moedas-ricardo.herokuapp.com/converter
Teste com curl, Postman ou até mesmo com o cliente Python requests:
import requests

url = "https://conversor-moedas-ricardo.herokuapp.com/converter"
payload = {"valor_em_reais": 500, "taxa_de_cambio": 5.0}

resposta = requests.post(url, json=payload)
print(resposta.json())
Saída esperada:
{
  "entrada": {
    "valor_em_reais": 500,
    "taxa_de_cambio": 5.0
  },
  "saida": {
    "valor_em_dolares": 100.0
  }
}

O ciclo completo de ideia → lógica → código → integração → nuvem.

1.	Algoritmo em linguagem natural
2.	Pseudocódigo (Visualg)
3.	Python executável
4.	JSON estruturado
5.	API Flask
6.	Cliente Python
7.	Deploy em Cloud (Heroku)

Cibersegurança – Autenticação por Token (JWT)

- JWT (JSON Web Token) é como um crachá digital: o servidor gera um token assinado quando o usuário faz login. 

# Vantagens: 
•	Esse token é enviado pelo cliente em cada requisição, geralmente no cabeçalho HTTP (Authorization: Bearer <token>).
•	O servidor valida o token antes de permitir o acesso à rota protegida.
•	Assim, não é preciso guardar sessão no servidor, o que torna o sistema mais escalável e seguro.

Exemplo de API Flask com JWT

from flask import Flask, request, jsonify
import jwt
import datetime

app = Flask(__name__)
app.config['SECRET_KEY'] = 'minha_chave_secreta'  # troque por algo seguro

# Função de conversão
def converter_para_dolar(valor_em_reais, taxa_de_cambio):
    return valor_em_reais / taxa_de_cambio

# Rota de login (gera token)
@app.route('/login', methods=['POST'])
def login():
    dados = request.get_json()
    usuario = dados.get("usuario")
    senha = dados.get("senha")

Exemplo simples: usuário fixo

if usuario == "admin" and senha == "1234":
    token = jwt.encode(
        {
            'usuario': usuario,
            'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
        },
        app.config['SECRET_KEY'],
        algorithm="HS256"
    )
    return jsonify({'token': token})
return jsonify({'mensagem': 'Credenciais inválidas'}), 401

Rota protegida

@app.route('/converter', methods=['POST'])
def converter():
    token = request.headers.get('Authorization')
    if not token:
        return jsonify({'mensagem': 'Token ausente'}), 403

   try:
        token = token.split(" ")[1]  # remove "Bearer"
        jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"])
    except Exception as e:
        return jsonify({'mensagem': 'Token inválido ou expirado'}), 403

   dados = request.get_json()
    valor_em_reais = dados['valor_em_reais']
    taxa_de_cambio = dados['taxa_de_cambio']
    valor_em_dolares = converter_para_dolar(valor_em_reais, taxa_de_cambio)

   return jsonify({
        "entrada": dados,
        "saida": {"valor_em_dolares": round(valor_em_dolares, 2)}
    })

if __name__ == '__main__':
    app.run(debug=True)

Fluxo de uso

1.	Login → cliente envia usuário/senha para /login.
Exemplo: 
{ "usuario": "admin", "senha": "1234" }
Resposta: 
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6..." }

2.	Requisição protegida → cliente envia o token no cabeçalho:

3.	Authorization: Bearer <token>

# Exemplo de payload: 

{ "valor_em_reais": 500, "taxa_de_cambio": 5.0 }
Resposta: 
{
  "entrada": { "valor_em_reais": 500, "taxa_de_cambio": 5.0 },
  "saida": { "valor_em_dolares": 100.0 }
}

Prós & Contras

1. Vantagens
•	Segurança: só quem tem token válido acessa.
•	Escalabilidade: não precisa guardar sessão no servidor.
•	Flexibilidade: pode incluir permissões no token (ex.: admin, cliente).
2. Desafios
•	Precisa proteger bem a chave secreta.
•	Tokens expiram, então é necessário lidar com renovação.
•	Em sistemas grandes, pode ser necessário usar refresh tokens e OAuth2.

Para Consolidação do Conhecimento

•	Revise os exemplos que já construímos (pseudocódigo, Python e JSON).
•	Tente rodar o código em Python no seu computador e brincar com valores diferentes.
•	Se quiser, anote dúvidas para discussões futuras no Fórum.

Oi, Ricardo! Como vai?

Seu pseudocódigo está bem estruturado e a explicação sobre vantagens e limitações ficou clara. Gostei de como você trouxe também uma versão em Python e até em JSON, mostrando diferentes representações da mesma lógica.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!