Construindo menus interativos com C++ e imprimindo em Terminais console

Construindo menus interativos com C++ e imprimindo em Terminais console

Carlos Alberto Dias da Silva Filho

Então, primeiro, o que é esse tal de menu interativo? Simples! Um menu interativo é como um cardápio de restaurante (Análogo aos problemas reais), onde a gente tem várias opções e pode escolher o que quer fazer.

No nosso caso, vamos criar um programa que mostra opções para o usuário e ele decide o que quer fazer, tipo um chef escolhendo os ingredientes.

Um menu interativo é essencialmente um conjunto de opções apresentadas ao usuário, permitindo que ele faça escolhas e interaja com o programa de maneira mais controlada. Isso é útil em muitas situações, desde jogos até sistemas de configuração.

Impressão no Console em C++:

Aamos entender como exibir informações no console. Em C++, usamos a biblioteca iostream para isso. Aqui está um exemplo:

Aqui, cout é como nossa caneta para escrever no console, e endl é usado para pular uma linha.

O usuário escolhe digitando o número correspondente à opção desejada, e utilizamos um bloco switch para determinar a ação associada a essa escolha.

A função cin é utilizada em C++ para realizar a entrada de dados a partir do console. Ela pertence à biblioteca <iostream> e trabalha em conjunto com a função cout, utilizada para a saída de dados.

No Exemplo Acima da foto, o programa está esperando o usuário digitar um valor, que será armazenado na variável escolha. A entrada é realizada até que o usuário pressione a tecla "Enter". O tipo de dado esperado é determinado pelo tipo da variável que está sendo lida, neste caso, um número inteiro (int).

O problema do cálculo da Argamassa

Importância e Escopo das Variáveis no Problema do Cálculo da Argamassa.

Vamos dar uma olhada mais aprofundada nas variáveis que estamos utilizando no nosso problema do cálculo da argamassa. Entender por que declaramos essas variáveis e onde elas são declaradas é crucial para o sucesso do nosso programa.

  1. escolha: Esta variável armazenará a escolha do usuário no menu interativo que construímos anteriormente.
  2. valorTotal, desconto, an, a1, n, r, valorParcela, valorPago, quantidadeCimento: Essas são variáveis relacionadas ao cálculo da argamassa. Cada uma tem um papel específico, como armazenar o valor total da compra, o desconto aplicado, parâmetros para cálculos matemáticos, e outros.
  3. valorComDesconto e numParcelas: Estas são inicializadas com valores padrão (0 e 0, respectivamente). valorComDesconto será utilizado para armazenar o valor total considerando o desconto aplicado, e numParcelas será usado para contar o número de parcelas escolhidas pelo usuário.

Escopo das Variáveis:

Repare que essas variáveis são declaradas fora de qualquer função (como main()), o que as torna variáveis globais. Elas podem ser acessadas de qualquer lugar no código, facilitando o compartilhamento de informações entre diferentes partes do programa.

O que é e qual o problema de variáveis Globais

Variáveis globais são aquelas declaradas fora de qualquer função, tornando-as acessíveis a partir de qualquer parte do programa. Enquanto podem ser convenientes em algumas situações, o uso indiscriminado de variáveis globais pode acarretar diversos problemas, alguns dos quais são:

Dificuldade de Rastreamento (Traceability): Em programas grandes, torna-se desafiador rastrear a origem e modificação de variáveis globais, tornando a manutenção do código mais difícil.
Concorrência e Conflitos: Em ambientes multitarefa, variáveis globais podem causar problemas de concorrência se várias partes do programa tentarem modificá-las simultaneamente, levando a resultados inesperados ou bugs difíceis de diagnosticar.
Acoplamento Excessivo: Variáveis globais podem criar dependências entre diferentes partes do código, aumentando o acoplamento entre módulos. Isso pode dificultar a reutilização e a modularidade do código.
Poluição do Espaço de Nomes: Variáveis globais aumentam o risco de colisões de nomes, especialmente em programas grandes desenvolvidos por equipes, onde diferentes desenvolvedores podem inadvertidamente usar o mesmo nome para variáveis globais.
Segurança: Variáveis globais podem ser acessadas e modificadas de qualquer lugar do programa, o que pode ser um risco de segurança se não forem utilizadas com cuidado.
Testabilidade: Código que depende fortemente de variáveis globais pode ser mais difícil de testar, pois as variáveis globais podem ter efeitos colaterais em diferentes partes do programa, tornando os testes menos isolados e previsíveis.

Boas Práticas:

Escopo Local: Sempre que possível, prefira declarar variáveis com o menor escopo necessário. Isso reduz a complexidade do código e limita o impacto de mudanças.
Passagem de Parâmetros: Em vez de usar variáveis globais, considere passar parâmetros entre funções. Isso facilita a compreensão do fluxo de dados no programa e reduz a dependência de variáveis globais.
Encapsulamento: Agrupe variáveis relacionadas em estruturas ou classes. Isso ajuda a organizar o código, reduzir o acoplamento e facilitar a manutenção.


O Comando do e switch em C++

Esses comandos são super úteis para controlar o fluxo do nosso programa e tomarmos decisões baseadas em diferentes situações.

O Comando do - A Estrutura de Repetição:

O comando do é utilizado para criar loops, ou seja, repetir um bloco de código enquanto uma condição for verdadeira. Aqui está um exemplo simples:

Neste exemplo, o programa irá imprimir a contagem de 1 a 5. A estrutura do-while garante que o bloco de código seja executado pelo menos uma vez, mesmo que a condição seja falsa inicialmente.

O Comando switch - Tomando Decisões Múltiplas:

O comando switch é utilizado para tomar decisões múltiplas com base no valor de uma expressão. Vejamos um exemplo relacionado ao nosso problema do cálculo da argamassa:


No exemplo acima, o switch nos permite realizar ações diferentes com base na escolha do usuário. Cada case representa uma opção possível, e o default é acionado se a escolha não corresponder a nenhum dos case especificados.

https://onlinegdb.com/5aJ4Izw2h


  1. Opção 2 - Progressão Aritmética (case 2):
  2. O aluno deve inserir a lógica para calcular o termo da progressão aritmética (an) com base nos valores de a1, n, e r.
  3. Opção 3 - Cálculo de Parcelas (case 3):
  4. O aluno deve inserir a lógica para calcular o número de parcelas (numParcelas) com base no valor total e nos valores das parcelas informados pelo usuário.
  5. Opção 4 - Cálculo da Quantidade de Areia (case 4):
  6. O aluno deve inserir a lógica para calcular a quantidade de toneladas de areia com base na quantidade de cimento (quantidadeCimento) e na opção de argamassa escolhida (opcaoArgamassa).
Adicione lógica para calcular e exibir a quantidade de toneladas de areia Dica: Utilize as variáveis quantidadeCimento e opcaoArgamassa para realizar o cálculo

A Progressão

A lógica de cálculo da quantidade de toneladas de areia, dependendo da opção de argamassa escolhida. Vou fornecer um exemplo com cálculos fictícios para ilustrar a ideia. Note que os valores reais precisam ser determinados com base em fórmulas específicas ou dados de projeto.

  1. Proporção de Areia (proporcaoAreia): Cada opção de argamassa tem uma proporção específica de areia em relação à quantidade de cimento. Utilizamos uma variável proporcaoAreia para armazenar essa informação.
  2. Switch para Opção de Argamassa: Utilizamos um switch para tratar cada opção de argamassa separadamente. No exemplo, caso 1 representa uma proporção de 3 partes de areia para 1 parte de cimento, caso 2 representa uma proporção de 2 partes de areia para 1 parte de cimento.
  3. Cálculo da Quantidade de Areia: Multiplicamos a quantidade de cimento pelo valor da proporção de areia para obter a quantidade de areia necessária.
  4. Exibição do Resultado: Finalmente, exibimos a quantidade de toneladas de areia necessárias com base na escolha do usuário.

O Switch Aninhado


A estrutura de um switch dentro de outro, conhecida como switch aninhado, é utilizada quando há a necessidade de tomar decisões mais complexas e encadear múltiplos casos. Nesse caso específico, onde estamos tratando a opção 4 para calcular a quantidade de toneladas de areia, o switch aninhado é utilizado para lidar com diferentes opções de argamassa.

A escolha de utilizar um switch dentro de outro é uma questão de organização e legibilidade do código. Vamos analisar os motivos detalhadamente:

  1. Diferentes Opções de Argamassa:
  2. Cada tipo de argamassa pode ter uma lógica de cálculo diferente, como proporções específicas de areia para cimento. Um switch externo é utilizado para selecionar a opção geral da argamassa.
  3. Lógica Específica para Cada Opção:
  4. Dentro do switch externo, um novo switch é utilizado para lidar com as diferentes opções específicas de argamassa. Cada case interno contém a lógica específica para calcular a quantidade de areia com base na escolha do usuário.
  5. Facilidade de Manutenção:
  6. O uso de switch aninhado pode tornar o código mais fácil de entender e manter, especialmente quando há várias opções distintas. Cada case interno é responsável por uma opção específica, facilitando a identificação e modificação de lógicas individuais.
  7. Evitar Código Repetitivo:
  8. Se a lógica para cada opção de argamassa fosse tratada em um bloco único, poderia haver repetição de código. Com o switch aninhado, você pode isolar a lógica específica de cada opção, evitando duplicação e melhorando a manutenção do código.
  9. Hierarquia de Decisões:
  10. O uso de switch aninhado cria uma hierarquia de decisões, onde o switch externo trata a escolha geral da argamassa e o switch interno lida com as opções específicas dentro dessa categoria.


Report Page