4
respostas

Controle de Despesas

< Inicio >
i - Faça enquanto o valor da despesa for diferente de Zero.
Ii - Digite um valor por vez < Valor da Despesa >; < Nome da Despesa>
O processo se repete acumulando os valores digitados no campo < Valor da despesa >
Iii - Digite “0” o Valor Total é calculado somando os valores cadastrados e finaliza o processo de repetição
< Fim >

4 respostas

Olá! Como vai?

Seu algoritmo para o controle de despesas está excelente! Você utilizou uma estrutura lógica muito sólida, baseada no conceito de laço de repetição com sentinela (o valor "0"), que é uma das formas mais eficientes de processar uma quantidade indefinida de dados.

Aqui estão os destaques do seu pensamento estruturado:

1. O Uso do Laço "Enquanto" (While)

Ao definir que o processo deve ocorrer enquanto o valor for diferente de zero, você criou um fluxo dinâmico. Isso permite que o usuário registre desde uma única conta de luz até uma lista extensa de compras de mercado sem precisar reiniciar o programa.

2. Decomposição de Dados

Você identificou corretamente que cada entrada precisa de dois atributos: o Valor (para o cálculo matemático) e o Nome (para a identificação ou abstração do gasto).

3. Acumulador Matemático

O conceito de "acumular os valores digitados" é o que chamamos na programação de variável acumuladora. Ela funciona como uma memória temporária que guarda a soma parcial até que o gatilho de parada (o "0") seja acionado.

4. Condição de Parada (Sentinela)

O passo iii é o fechamento perfeito para o algoritmo: ele limpa o fluxo e entrega o resultado final (a saída), evitando que o programa entre em um loop infinito.


Dica de Ouro para o Futuro:

Quando você for transformar esse algoritmo em código Python, lembre-se de converter o valor digitado para float(), pois despesas geralmente envolvem centavos.

Seu raciocínio lógico está muito bem organizado e pronto para ser traduzido para qualquer linguagem de programação! Parabéns pela clareza no desenvolvimento do desafio.

Espero que possa ter lhe ajudado!

Se você quisesse adicionar uma verificação para que o usuário não digitasse valores negativos (o que não faria sentido em uma despesa), onde você colocaria essa regra no seu fluxo?

Mais uma vez obrigada Evandro.
Respondendo seu questionamento, eu colocaria na primeira linha
i - Faça enquanto o valor for menor ou igual a zero;

seria isso?

Olá, Estudante. Como vai?

Fico muito feliz em ver você interagindo e pensando nos desvios de lógica! Essa é a mentalidade exata de quem desenvolve softwares robustos: tentar prever onde o usuário pode errar para proteger o sistema.

Sobre a sua resposta: quase isso! Você teve uma excelente intuição ao pensar em usar o "menor", mas se mudarmos a linha principal para Faça enquanto o valor for menor ou igual a zero, o seu programa vai fazer o oposto do que queríamos. Ele fecharia na mesma hora em que você digitasse uma despesa positiva (como R$ 50,00) e ficaria preso rodando apenas se você digitasse números negativos ou zero.

Para ajustar isso sem quebrar a sua condição de parada (que é o número zero), a melhor estratégia é adicionar uma estrutura de validação (um Se) logo após o usuário digitar o valor.


Como estruturar o fluxo com a validação

O segredo é deixar o laço principal rodando enquanto for diferente de zero, mas, assim que o valor entra, o programa testa se ele é válido antes de somar. Veja como o seu algoritmo ficaria blindado e impecável:

< Início >
i - Faça enquanto o valor da despesa for diferente de Zero.
ii - Digite um valor por vez: < Valor da Despesa >; < Nome da Despesa >

  • Se o < Valor da Despesa > for menor que Zero:
    Exiba a mensagem: "Valor inválido! Despesas não podem ser negativas."
    (O programa ignora esse valor e volta para o passo ii sem somar)
  • Caso Contrário:
    O processo acumula o valor digitado no campo < Valor Total >.
    iii - Se for digitado “0”: o Valor Total final é exibido e o processo de repetição é encerrado.
    < Fim >

Por que essa é a melhor abordagem?

Ao colocar um filtro de "Se for menor que zero" dentro da repetição, você cria uma camada de proteção. Se o usuário digitar sem querer -15 em vez de 15, o programa avisa o erro, descarta o número negativo e dá uma nova chance para ele digitar o valor correto, mantendo o programa aberto.

Esse encadeamento de um teste lógico (Se) dentro de uma repetição (Enquanto) é a espinha dorsal de qualquer sistema de caixa ou controle financeiro do mercado de trabalho!

Conseguiu perceber como o Se ajuda a filtrar o valor sem precisar fechar o programa inteiro? Se quiser testar mais alguma melhoria, como você faria se o usuário tentasse deixar o < Nome da Despesa > em branco?

Espero que possa ter lhe ajudado!

Mais uma vez agradeço Evandro pelas correções sempre pontuais e instrutivas. Percebi como o "Se" ajuda mesmo a filtrar os valores sem fechar o programa. Vou fazer as modifações no código e testar. Obrigada!