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;
Моля за помощ къде бъркам в същата задача:
string name = Console.ReadLine();
double sum = 0;
while (name != "END")
{
for (int grades = 1; grades <= 12; grades++)
{
double grade = double.Parse(Console.ReadLine());
if (name == "END")
{
Console.WriteLine(name);
return;
}
else if (grade < 4.00)
{
Console.ReadLine();
Console.WriteLine(($"{name} has been excluded at {grades} grade"));
grades++;
return;
}
else if (grade >= 4.00)
{
sum += grade;
}
}
double average = sum / 12;
Console.WriteLine(($"{name} graduated. Average grade: {average:F2}"));
name = Console.ReadLine();
}
if (name == "END")
{
Console.WriteLine(name);
return;
}
else if (grade < 4.00)
{
Console.ReadLine();
Console.WriteLine(($"{name} has been excluded at {grades} grade"));
grades++;
return;
}
пак същите грешки като колежката чупиш само вътрешния for цикъл s при еnd а после чакаш пак да четеш а няма как да има име. Иначе бъркаш и с <4.00 искат като получи повече от 1 път тоест късаш го на 2 път... и не е нужно да изписваш нищо при тези проверки. Така или иначе всеки излишен ред ти се брои за грешка.
Някой друг може ли да предложи решение?
Не е ли това целта?
В условието пише, че трябва да чете много ученици, докато не получи "END", така че защо ми е да го чупя при друг случай, освен "END"?
като получиш end и си още в вътрешния цикъл първо няма да изпишеш докъде си стигнала с оценките на настоящия ученик,и второ ти ще счупиш само for цикъла no while ще си остане и долу като прочетеш пак name-това е вероятно runtime error дава. мога да ви я реша. Така или иначе ми писна да правя едни design patterns. ще завъртя един код набързо това е от programing basic june нали?
Най-после те схванах! (Blond much?! :>)
Няма нужда да се занимаваш. Мисля, че ще се справя, след това разяснение. :)
Наистна много ми помогна, защото въобще не бях помислила за този случай. Благодаря!
Здравей,
Ето още едно работещо решение https://pastebin.com/RNVZPf0B Реално решението на задачата се състои от решението на 03. Graduation pt.2 вкарано в още един цикъл.