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
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки
Best Answer

https://pastebin.com/fshgxFCm така много е коварно условието не знам дали ще се справите. Ето го минава 100/100

значи за всеки ученик ще ви дадат достатъчно оценки за да завърши или да го скъсат. Сега особенноста идва че ако получите една ниска оценка и не намалите i-- поредното завъртане на цикъла ще изгърмите в един момент,защото реално ако тои получи една оценка ниска и после няма друга трябва да завърши а с for цикъл до 12 завъртания ще излезете извън цикъла така. Другото е че аз малко си обърках и проверката с bool. И реално какво се случва, при първата ниска оценка влиза и си променя bool на false ако влезе 2 път вече чупи целия цикъл и изписва какво е станало. накрая проверката е за shoolyears-1=12 защото почваме от 1 клас и ако завъртя до 12 и има  поне едно повтаряне това ще е 13,та ако имам 13-1 години = 12 клас значи е завършил и влизаме там ако не значи се е прецакал. Сорри малко се забавих но докато се усетя че първоналчалната ми проверка за bool ми чупи кода при вариант  може след това да завърши ми отне няколко събмита и да пренапиша логиката.

0
Antoniya86 avatar Antoniya86 0 Точки

В крайна сметка изоставих for идеята и стана с два while един в друг.

Наистина е интересно как го реши с for и директно си го записвам за преразглеждане на свежа глава. :)

Много благодаря, че отдели време! Лека и спокойна вечер и спорна работа!

0
SimeonKV avatar SimeonKV 55 Точки
  1.   if (yearGrade < 4 )

  2.                     {

  3.                         if (!isStuding)

  4.                         {

  5.                             break;

  6.                         }

  7.                         isStuding = false;

  8.                         i--;

  9.                     }

Приятел може ли пак малко пояснение на тази част от твоя код. isStudying = true, после в if - проверките го правиш false, на първия if има break; какво трябва при false и break; да продължи или да се break-не!? а после i -- как се намалява и до колка, като е със стойност true? е как програмата разбира да се break-не като i-- просто декрементира дадена стойнст! Мерси предварително :) :)

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

значи при първата оценка <4  ще влезеш вътре и ще провериш ако досега не е имало ниска оценка пропускаш if-в него очакваш isstuding=false и ще го пропуснеш ,но вече имаш една ниска оценка и затова isstuding ти става false,и тъй като тази година е нулева си намаляш i-- с 1.

ако не влезеш 2ри път тук ученика завършва и всичко е ок. Ако влезеш 2ри път  if- проверката ще върне true и ще прекъснеш цикъла.и ще се върнеш в while.

0
19/07/2018 11:21:13
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки
  1.    string hmm = Console.ReadLine();

  2.                     if (hmm == "END")

  3.                     {

  4.                         return;

  5.                     }

това тук ще ти счупи само for цикъла и после както си направила програмата ще чака да и подадеш ново име или пак end за да счупи и while цикъла 

-1
petrova_nk avatar petrova_nk 0 Точки

Моля за помощ къде бъркам в същата задача:

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();
                
            }

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

     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 път... и не е нужно да изписваш нищо при тези проверки. Така или иначе всеки излишен ред ти се брои за грешка.

-1
petrova_nk avatar petrova_nk 0 Точки

Някой друг може ли да предложи решение?

0
SimeonKV avatar SimeonKV 55 Точки

https://pastebin.com/xPWhuGC7 Някой може ли да ми каже къде точно греша? Всичко ми изглежда логически точно! Благодаря много!

ПС : кода ми е на JAVA защото не исках да правя ново тема за същата задача!

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