Olá, Lucas. Como vai?
Parabéns pela resolução do desafio! Você estruturou muito bem a lógica do pensamento computacional utilizando o VisuAlg (Portugal). A separação do código criando uma função dedicada para o cálculo da conversão é uma excelente prática de programação, pois deixa o algoritmo modular e fácil de ler.
No entanto, o seu código possui um pequeno detalhe de sintaxe e escopo que pode gerar um erro de execução ou um resultado inesperado na hora de rodar. Vamos analisar juntos para corrigir!
O que precisa ser corrigido?
O problema está na variável resultado dentro da sua função converter_para_dolar.
- Variável global duplicada: Você declarou
resultado: real na seção de variáveis globais do algoritmo principal (var), mas não a declarou como variável local dentro da função. - O caminho do
se inválido: Caso o usuário digite uma taxa menor ou igual a zero, o programa imprimirá "Valor inválido", mas a execução continuará e a função tentará retornar a variável resultado. Como nesse caminho (o do se) a variável não recebeu nenhum valor, ela retornará zero ou um valor indefinido.
Código Corrigido e Otimizado
Podemos resolver isso declarando a variável local dentro da função e garantindo que o programa não quebre caso a taxa seja inválida. Veja a estrutura correta:
algoritmo "Conversor de moedas"
funcao converter_para_dolar(valor: real, taxa: real): real
var
// Declarando a variável local da função
resultado_local: real
inicio
se taxa <= 0 entao
escreval("Taxa de câmbio inválida! Não pode ser menor ou igual a zero.")
resultado_local <- 0
senao
resultado_local <- valor / taxa
fimse
retorne resultado_local
fimfuncao
var
valor_em_reais, taxa_de_cambio, valor_convertido: real
inicio
escreva("Digite o valor em reais (R$): ")
leia(valor_em_reais)
escreva("Digite a taxa de câmbio atual (ex: 5.15): ")
leia(taxa_de_cambio)
valor_convertido <- converter_para_dolar(valor_em_reais, taxa_de_cambio)
// Condicional na saída para exibir o resultado apenas se a conversão deu certo
se taxa_de_cambio > 0 entao
escreva("O valor convertido em dólares é: U$ ", valor_convertido)
fimse
fimalgoritmo
O que mudou?
- Escopo Local: Criamos a variável
resultado_local dentro da própria função. Isso impede que a função misture dados com o programa principal. - Segurança: Se a taxa for zero ou negativa, definimos o retorno como
0 e tratamos o visual do programa no bloco principal para que ele não mostre uma mensagem de conversão confusa para o usuário.
Continue aplicando essa lógica e testando condições excepcionais (como divisões por zero). Esse tipo de atenção diferencia bons programadores!
Espero que possa ter lhe ajudado!