1
resposta

[Sugestão] Cálculo da média de alunos por pisciplina utilizando dicionários

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Desafios
{
    internal class Dicionarios
    {
        public static void Dict()
        {
            var notasAlunos = new Dictionary<string, Dictionary<string, List<int>>>()
            {
                {
                    "Yasmin",
                    new Dictionary<string, List<int>>
                    {
                        { "C#", new List<int> { 8, 7, 6 } },
                        { "Java", new List<int> { 7, 6, 5 } },
                        { "Python", new List<int> { 9, 8, 8 } }
                    }
                },

                {
                    "Ariane",
                    new Dictionary<string, List<int>>
                    {
                        { "C#", new List<int> { 6, 5, 4 } },
                        { "Java", new List<int> { 8, 7, 6 } },
                        { "Python", new List<int> { 6, 10, 5 } }
                    }
                },
                {
                    "Davi",
                    new Dictionary<string, List<int>>
                    {
                        { "C#", new List<int> { 2, 3, 10 } },
                        { "Java", new List<int> { 8, 8, 8 } },
                        { "Python", new List<int> { 7, 7, 7 } }
                    }
                }
            };

            Console.WriteLine("Notas dos alunos:");
            var mediaAlunos = new Dictionary<string, double>(); // Dicionário para armazenar a média de cada aluno
            foreach (var aluno in notasAlunos)
            {
                Console.WriteLine("\n---------------------------------------------");
                Console.WriteLine($"Aluno: {aluno.Key}"); //aluno.key contem o nome do aluno
                double mediaAluno = 0;
                int totalNotas = 0;
                foreach (var disciplina in aluno.Value) // aluno.value contem outro dict com suas disciplinas e notas
                {
                    Console.WriteLine($"\nDisciplina: {disciplina.Key}"); //contem o nome da disciplina
                    Console.WriteLine($"Notas: {string.Join(", ", disciplina.Value)}"); // disciplina.value contem uma lista de notas da disciplina, string.Join exibe as notas separadas por vírgula
                    double mediaDisciplina = disciplina.Value.Average(); // Calcula a média das notas da disciplina
                    mediaAluno += mediaDisciplina * disciplina.Value.Count; // Multiplica a média pela quantidade de notas para calcular a média ponderada
                    totalNotas += disciplina.Value.Count; // Soma a quantidade de notas para calcular a média final do aluno
                    Console.WriteLine($"\nMédia: {mediaDisciplina:F2}");
                }
                mediaAluno /= totalNotas;
                mediaAlunos[aluno.Key] = mediaAluno;
                Console.WriteLine($"\nMédia geral do aluno {aluno.Key}: {mediaAluno:F2}\n");
                Console.WriteLine("\n---------------------------------------------");

            }
        }
    }
}
1 resposta

Oi, Yasmin!

Agradeço por compartilhar seu código com a comunidade Alura.

Seu uso de dicionários aninhados tá muito bem estruturado. O cálculo da média ponderada ficou claro e bem implementado. A forma como você iterou sobre os dados mostra domínio na manipulação de coleções em C#.

Continue firme nos estudos.

Alura

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