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;
пуснал съм готово решение но от това което виждам в твоето изпускаш момента че при една ниска оценка for цикъла ти ще се завърти 1 един път и после ако се опита да завърши ще изгърмиш с runtimeerror :Д предполагам е това и ти гърмят 9 10 5 6 7 тест. погледни решението по-горе твоето е близко мисля че ще видиш какво бъркаш/изтърваваш.
Ако правилно те разбирам, искаш да кажеш, че ако един ученик от 12 годишни оценки има една <4, програмата ще изгърми? Защото ако това имаш превдив, пробвала съм и не гърми.
о нима? дори не разгледа и рзликата къде ни е в моето решение което ви пуснах и твоето.ако има една <4 твоя цикъл ще свърши на 12клас а човека може да завърши с едно повтаряне и цикъла става до 13 :Д и съм сигурен че ти гърмят точно тестовете които посочих.това че не променяш учебната година не означава че for цикъла ти няма да мине на +1 и реално там където си 11 клас при теб е 12ти и ще свършиш и ще получиш run time error или просто error заради грешното четене после на подадения вход.
@Yolito
Виж решението на MPeychev малко по-нагоре. Най-доброто решение, +1 от мен.
Накратко, има 2 вида оценки - добри (по-големи или равни на 4) и лоши (по-малки от 4). Добрите могат да бъдат най-много 12 на брой, а лошите не повече от 2. Правим си 2 променливи за добрите и лошите оценки и в цикъл четем следващата оценка.
Това може да стане и с for цикъл, но с do-while е по-лесно. След това печатаме резултата, например така
И накрая всичко това го слагаме в още един цикъл
100 точки в джадж.
П.П. Вътрешният do-while цикъл може да се замени с for цикъл например така
Разбрах вече каква ми е грешката. Много благодаря! Истината е, че не съм усмислила условието правилно и не се замислих, както Вие казвате, че ако човека повтори един път той ще трябва да въвежда плюс още една оценка.
https://pastebin.com/5pCLX5ci - Това е поправеното ми решение. Мина 100/100 в judge.
Ето моето решение:
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}");
}
}
}
}
}