Loading...
Antoniya86 avatar Antoniya86 0 Точки

Graduation pt.3* C#

Здравейте!

Предварително благодаря за всяка помощ/идея.

Условие:

Напишете програма, която чете информация за много ученици и изчислява средната оценка за всеки ученик,
докато не се получи командата "END". За всеки ученик първият ред от конзолата ще бъде неговото име, а
всеки следващ неговите годишни оценки. Ученикът преминава в следващия клас, ако годишната му оценка е
по-голяма или равна на 4.00. Ако ученикът бъде скъсан повече от един път бива изключен и четенето на
информация за него приключва, като се отпечатва името на ученика и в кой клас бива изключен. При
успешно завършване на 12-ти клас да се отпечата неговата средна оценка за цялостното му обучение, като се
взимат само успешните оценки. За успешни оценки се считат всички оценки, които са по-големи или равни
на 4.00. Стойността трябва да бъде форматирана до втория знак след десетичната запетая.

Мое решение :

https://pastebin.com/988Tra1w

Проверка с дебъг и примерния input : уж всичко си върви

Мнение на judge:

50/100

1 до 4 тест - верни, 5, 6 и 7 - грешни, 8 - верен, 9 и 10 - грешни;

 

 

EDIT: Намерих си грешка. Не се нулираха notPassingYears. Поправено е. Продължава да дава 50/100;

 

Тагове:
0
Programming Basics 16/07/2018 10:01:12
Yolito avatar Yolito 9 Точки

https://pastebin.com/PUFWHV9h - Аз го решиих таха и имам само 50/100 точки. Ако някой може да ме светне къде в грешката. В Judje ми дава 5/10 Time error.

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

пуснал съм готово решение но от това което виждам в твоето изпускаш момента че при една ниска оценка for цикъла ти ще се завърти 1 един път и после ако се опита да завърши ще изгърмиш с runtimeerror :Д предполагам е това и ти гърмят 9 10  5 6 7 тест. погледни решението по-горе твоето е близко мисля че ще видиш какво бъркаш/изтърваваш.

0
Yolito avatar Yolito 9 Точки

Ако правилно те разбирам, искаш да кажеш, че ако един ученик от 12 годишни оценки има една <4, програмата ще изгърми? Защото ако това  имаш превдив, пробвала съм и не гърми.

 

0
19/07/2018 11:19:49
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

о нима? дори не разгледа и рзликата къде ни е в моето решение което ви пуснах и твоето.ако има една <4 твоя цикъл ще свърши на 12клас а човека може да завърши с едно повтаряне и цикъла става до 13 :Д  и съм сигурен че ти гърмят точно тестовете които посочих.това че не променяш учебната година не означава че for цикъла ти няма да мине на +1 и реално там където си 11 клас при теб е 12ти и ще свършиш и ще получиш run time error или просто error заради грешното четене после на подадения вход.

0
17/07/2018 23:00:03
kolioi avatar kolioi 641 Точки

@Yolito

Виж решението на MPeychev малко по-нагоре. Най-доброто решение, +1 от мен.

Накратко, има 2 вида оценки - добри (по-големи или равни на 4) и лоши (по-малки от 4). Добрите могат да бъдат най-много 12 на брой, а лошите не повече от 2. Правим си 2 променливи за добрите и лошите оценки и в цикъл четем следващата оценка.

int goodGrades = 0, badGrades = 0;
double sum = 0;
do
{
    double grade = double.Parse(Console.ReadLine());
    if (grade >= 4)
    {
        goodGrades++;
        sum += grade;
    }
    else
        badGrades++;
} while (goodGrades < 12 && badGrades < 2);

Това може да стане и с for цикъл, но с do-while е по-лесно. След това печатаме резултата, например така

if (badGrades < 2)
    Console.WriteLine($"{name} graduated. Average grade: {sum / 12:F2}");
else
    Console.WriteLine($"{name} has been excluded at {goodGrades + 1} grade");

И накрая всичко това го слагаме в още един цикъл

using System;
class Program
{
    static void Main()
    {
        string name;
        while ((name = Console.ReadLine()) != "END")
        {
           ......
        }
    }
}

100 точки в джадж.

П.П. Вътрешният do-while цикъл може да се замени с for цикъл например така

int goodGrades, badGrades;
for (goodGrades = 0, badGrades = 0; goodGrades < 12 && badGrades < 2;)
{
  ....
}

 

0
18/07/2018 12:51:33
Yolito avatar Yolito 9 Точки

Разбрах вече каква ми е грешката. Много благодаря! Истината е, че не съм усмислила условието правилно и не се замислих, както Вие казвате, че ако човека повтори един път той ще трябва да въвежда плюс още една оценка.

https://pastebin.com/5pCLX5ci - Това е поправеното ми решение. Мина 100/100 в judge.

0
19/07/2018 11:20:04
KalinaYY avatar KalinaYY 3 Точки

Ето моето решение:

using System;

namespace GraduationPt3
{
    class Program
    {
        static void Main(string[] args)
        {

            while (true)
            {
                double gradeSum = 0;
                int classCounter = 1;
                int counterFail = 0;
                string name = string.Empty;
                string command = Console.ReadLine();
                if (command == "END")
                {
                    break;
                }
                else
                {
                    name = command;
                }

                while (classCounter <= 12)
                {
                    double grade = double.Parse(Console.ReadLine());
                    if (grade >= 4)
                    {
                        gradeSum += grade;
                        classCounter++;
                    }
                    else
                    {
                        counterFail++;
                    }

                    if (counterFail == 2)
                    {
                        Console.WriteLine($"{name} has been excluded at {classCounter} grade");
                        break;
                    }
                }
                if (counterFail < 2)
                {
                    Console.WriteLine($"{name} graduated. Average grade: {(gradeSum / 12):f2}");
                }
            }

        }
    }
}
 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.