Професионална програма
Loading...
SvilenPavlov avatar SvilenPavlov 11 Точки

Sets and Dictionaries Advanced LAB - 2. Average Student Grades

Здравейте!

Получавам само 20/100 с кода тук:https://pastebin.com/EUe5t9bV

 

Интересното е, че по условие трябва да са подреденеи по среден успех от най-голям към най-малък, а първоначално, когато използвам

.OrderByDescending(x => x.Value.Average()) в сортировката на принтирането ми дава 10/100 с 3/3 верни нулеви тестове. А без тази сортировка, дава 20/100 с 2/3 верни нулеви тестове.
Много бих бил благодарен на лекторите, все пак да пускат решенията си в джъджа, защото понякога с тяхното решение не дава 100/100, да не говорим за решениеята в презентациите, които са написани на 2 на 3, и често некоретна стилизация на кода (примерно на if statement отдолу тялото е написано като 1 ред вместо с къдрави скоби).

Тагове:
0
Module: C# Advanced 11/12/2018 11:35:34
StoilValkov avatar StoilValkov 10 Точки

Ето го и моя код някой ще може ли да ми обясни защо ми дажа 60/100 точки и къде ми е грешката.
Благодаря предварително!
https://pastebin.com/nwL9XBWY

 

0
nickwork avatar nickwork 559 Точки

Не съм ти тествал кода но това което забелязвам е 

if (!dictNameAndGrades.ContainsKey(nameAndGrades[0])) => тук проверяваш дали няма такъв ключ

          {

                dictNameAndGrades[nameAndGrades[0]] = new List<double>(); => тук пък му казваш (след проверката като знаем, че няма такъв ключ), на този ключ (който знаем че го няма и не е добавен) nameAndGrades[0] е равен на нов масив от стринг => първо това е ключа ти и той не трябва да е масив а просто стринг., а и не можеш да присвоиш стойност на нещо което не съществува или да инициализираш нещо което го няма ..така че логиката е доста объркана в този случай.. това което трябва да направиш е като видиш че няма такъв ключ да добавиш такъв с командата адд  

dictNameAndGrades.Add(nameAndGrades[0], new List<double>()); и после надолу си продължаваш с кода.

           }

                dictNameAndGrades[nameAndGrades[0]].Add(double.Parse(nameAndGrades[1]));

0
StoilValkov avatar StoilValkov 10 Точки

Мисля че самия запис по този начин   dictNameAndGrades[nameAndGrades[0]] = new List<double>()  би трябвало да създаде нов ключ "namAndGrades[0] и на този ключ да му даде стойност нов масив от double.
Ако не е така значи много съм се оплел.

 

0
nickwork avatar nickwork 559 Точки

Тествах цялото ти решение и да ти кажа, че не си се оплел ами си прав, наистина и такъв синтаксис работи, аз лично никога не съм инициализирал по този начин, а и не съм виждал да се инициализира така и за това си помислих, че там е грешката, но не беше (евала за което)... основният проблем в решението е, че приемаш входните данни като масив на един ред, а те се получават на 2 отделни... вкарах и малко корекция в отпечатването на изхода...пускам ти решението ти преправено да го разгледаш..

 

using System;
using System.Collections.Generic;
using System.Linq;

namespace Average_Student_Grades
{
    class Program
    {
        static void Main(string[] args)
        {
            var num = int.Parse(Console.ReadLine());

            var dictNameAndGrades = new Dictionary<string, List<double>>();

            for (int i = 0; i < num; i++)
            {
                var name = Console.ReadLine();
                var grade = double.Parse(Console.ReadLine());

                if (!dictNameAndGrades.ContainsKey(name))
                {
                    dictNameAndGrades[name] = new List<double>();
                }
                dictNameAndGrades[name].Add(grade);
            }

            foreach (var kvp in dictNameAndGrades.Where(x => x.Value.Sum() / x.Value.Count >= 4.5).OrderByDescending(x => x.Value.Sum() / x.Value.Count))
            {
                var avrageSum = kvp.Value.Average();

                Console.WriteLine($"{kvp.Key} -> {avrageSum:f2}");

                //foreach (var val in kvp.Value)
                //{
                //    Console.Write($"{val:f} ");
                //}

                //Console.WriteLine($"(avg: {avrageSum:f})");
            }
        }
    }
}

0
StoilValkov avatar StoilValkov 10 Точки

Явно си гледал друго условие на тази задача.

Ето това е линк към условието на задачата. 2-ра задача, не виждам условие за сортиране там.
И доколкото видях входа на даннги го взимам правилно.

0
13/03/2020 18:24:44
Judeva avatar Judeva 0 Точки

Смени double с decimal.

0