Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Projeto] Algoritmo para calcular a média

void CalcularAMedia()
{
    string NomeDaBanda;
    double Media;

    Console.Clear();
    Console.WriteLine("Informe a banda na qual você deseja calcular a média");
    NomeDaBanda = Console.ReadLine()!;
    if (BandasRegistradas.ContainsKey(NomeDaBanda))
    {
        Media = BandasRegistradas[NomeDaBanda].Average();
        Console.WriteLine($"A média da sua banda é {Media}");
        Thread.Sleep(3000);
        Console.Clear();
        ExibicaoDeMenu();

    }
    else
    {
        Console.WriteLine($"Desculpe. Mas a banda, {NomeDaBanda} não exite");
        Console.WriteLine("Precione qualquer tecla para voltar ao menu principal");
        Console.ReadKey();
        Console.Clear();
        ExibicaoDeMenu();

    }
}
CalcularAMedia();

Algoritmo funcionando perfeitamente. Caso alguém tenha uma interpretação do código mais simples, fique a vontade para compartilhar :)

4 respostas

Olá, Natan!

O algoritmo que você compartilhou está funcionando perfeitamente. Parabéns! Vou mostrar aqui uma interpretação possível também.

Uma forma mais simples de calcular a média de vendas de uma banda específica seria utilizando a função Average() diretamente no dicionário BandasRegistradas. Veja como ficaria:

void CalcularAMedia()
{
    Console.Clear();
    Console.WriteLine("Informe o nome da banda para calcular a média de vendas:");
    string nomeDaBanda = Console.ReadLine();

    if (BandasRegistradas.ContainsKey(nomeDaBanda))
    {
        double media = BandasRegistradas[nomeDaBanda].Average();
        Console.WriteLine($"A média de vendas da banda {nomeDaBanda} é {media}");
    }
    else
    {
        Console.WriteLine($"Desculpe, a banda {nomeDaBanda} não existe.");
    }

    Console.WriteLine("Pressione qualquer tecla para voltar ao menu principal");
    Console.ReadKey();
    Console.Clear();
    ExibicaoDeMenu();
}

CalcularAMedia();

Nessa versão simplificada, removi a variável NomeDaBanda e utilizei nomeDaBanda em minúsculo para seguir as convenções de nomenclatura do C#. Também removi a chamada Thread.Sleep(3000) para evitar a pausa no programa.

Bons estudos!

void CalcularAMedia()
{
    string NomeDaBanda;
    
    Console.Clear();
    Console.WriteLine("Informe a banda na qual você deseja calcular a média");
    NomeDaBanda = Console.ReadLine()!;
    if (BandasRegistradas.ContainsKey(NomeDaBanda))
    {
        List <int> Nota = BandasRegistradas[NomeDaBanda];
        Console.WriteLine($"A média é: {Nota.Average()} da banda: {NomeDaBanda}");
        Thread.Sleep(3000);
        Console.Clear();
        ExibicaoDeMenu();

    }
    else
    {
        Console.WriteLine($"Desculpe. Mas a banda, {NomeDaBanda} não exite");
        Console.WriteLine("Precione qualquer tecla para voltar ao menu principal");
        Console.ReadKey();
        Console.Clear();
        ExibicaoDeMenu();

    }
}
CalcularAMedia();

Fiz outras alterações no mesmo código, e me veio uma dúvida. Declarei uma lista do tipo "int" para a variável "Nota" e depois eu exibi o seu valor correspondente ao usuário. Depedendo do valor que o usuário me der, o seu resultado será quebrado, EX. "7,8" ou qualquer outro número quebrado. Mas por que ele exibi e mesmo assim funciona com número quebrado sendo que a variável "Nota" é do tipo "int"? E outra dúvida, declarar uma variável com a sua inicial maiúscula ou minúscula interfere em algum?

solução!

Ótimo, vou esclarecer as suas dúvidas:

  1. Números Quebrados (Ponto Flutuante) em Variável do Tipo Inteiro: No C#, uma variável do tipo int (inteiro) armazena apenas valores inteiros, ou seja, números sem parte fracionária. Quando você calcula a média de uma lista de números inteiros usando o método .Average() e o resultado é um número quebrado (ponto flutuante), isso acontece porque o próprio método .Average() retorna um valor do tipo double, que é um tipo de ponto flutuante capaz de representar números com parte fracionária. Mesmo que você atribua o resultado a uma variável do tipo int, o valor real será armazenado na variável, mas sem perder a parte fracionária, pois o tipo int não é capaz de armazenar decimais.

  2. Convenções de Nomenclatura: Em C#, a convenção geral é usar o estilo CamelCase, onde o nome de variáveis começa com letra minúscula e as palavras subsequentes começam com maiúscula. Por exemplo: nomeDaBanda, notasDaBanda. Isso torna o código mais legível e alinhado com as práticas de programação em C#. É uma prática recomendada seguir essas convenções, pois facilita a leitura e manutenção do código, além de ser amplamente aceita pela comunidade de desenvolvedores.

Em resumo, variáveis do tipo int não armazenam valores quebrados (decimais), mas o resultado de operações como a média pode ser um número quebrado. Quanto à nomenclatura, seguir as convenções de CamelCase torna o código mais claro e legível.

Bons estudos!

Obrigado meu caro!