Задача "03. Graduation pt.2 " от While-Loop.
Здравейте , имам някакво решение на задачата но не е довършено и не мога да се сетя как трябва да бъде... Това е условието:
"Напишете програма, която изчислява средната оценка на ученик от цялото му обучение. На първия ред ще
получите името на ученика, а на всеки следващ ред неговите годишни оценки. Ученикът преминава в
следващия клас, ако годишната му оценка е по-голяма или равна на 4.00. Ако ученикът бъде скъсан повече
от един път, то той бива изключен и програмата приключва, като се отпечатва името на ученика и в кой
клас бива изключен.
При успешно завършване на 12-ти клас да се отпечата :
"{име на ученика} graduated. Average grade: {средната оценка от цялото обучение}"
В случай, че ученикът е изключен от училище, да се отпечата:
"{име на ученика} has been excluded at {класа, в който е бил изключен} grade"
Стойността трябва да бъде форматирана до втория знак след десетичната запетая."
Това е моето решение и judge ми дава 44/100.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Graduation
{
class Program
{
static void Main(string[] args)
{
string name = Console.ReadLine();
double grades = 1;
double sum = 0;
while (grades <= 12)
{
double grade = double.Parse(Console.ReadLine());
if (grade >= 4.00)
{
sum = sum + grade;
grades++;
}
}
double average = sum / 12;
Console.WriteLine($"{name} graduated. Average grade: {average:F2}");
}
}
}
Ако може някой да помогне ще съм много благодарен!
А можеш ли да дадеш малко разяснение какво точно си направил? Благодаря!
същото което и аз правя в моето решение :Д еднакво дълги са и еднаква логика.,,защо е решил че неговото е по-късо само тои си знае.
Твоето го разбрах, даже откраднах идеята да си направя задачата :D. Като видях негото изглежда много подобно, но не разбрах на else if като зададе false на passed какво точно става. И за това поисках разяснение. Иначе кое е по-кратко не мога да преценя :D
става същото първия път като е скъсан човека си прави passed=false ако има втори път по ниска от 4 изпуска if -a изпуска passed защото е вече false и влиза в else където чупи цикъла и толкова. Както казах едно към едно са въпрос на изписване,аз предпочитам малко повече код но да е по-ясно.
Реално if проверява едно нещо дали е истина и първата ниска оценка passed e още true прави го на false и 2рия път вече pased e false и не влиза там,направо го подминава и чупи цикъла това еТова е една от причините поради които не харесвам да има само решение без поне малко обяснение към него. Човек понякога не може да разбере или да се ориентира какво се случва напълно.
@phenom
Има 2 начина да определиш дали ученика е изключен - първият начин, който е по-естествен, е да използваш целочислена променлива, напр int failed = 0; в началото и всеки път, когато има оценка по-ниска от 4, да увеличаваш тази променлива. На всяка итерация проверяваш стойността на failed и когато failed стане 2, излизаш от цикъла. Втория начин е с булева променлива, както аз съм го направил. В тази задача може да се използва for или do-while цикъл вместо while.
Бихте ли ми казали къде ми е грешката
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _2.Graduating
{
class Graduating
{
static void Main(string[] args)
{
string nameOfStudent = Console.ReadLine();
double gradesCounter = 1;
double sumOfGrades = 0;
int failedAttempt = 0;
while (gradesCounter < 12)
{
double currentGrade = double.Parse(Console.ReadLine());
sumOfGrades = sumOfGrades + currentGrade;
gradesCounter++;
}
double averageGrade = 0;
if (averageGrade > 4)
averageGrade = sumOfGrades / 12;
{
Console.WriteLine($"{nameOfStudent} graduated. Average grade: {averageGrade:F2}");
}
if (gradesCounter<=4)
{
failedAttempt++;
if(failedAttempt > 2)
{
Console.WriteLine($"{nameOfStudent} has been excluded at {gradesCounter} grade");
}
}
}
}
}
като за начало това трябва да ти е в while цикъла не извън него примерно. прочети пак условието къде и какво ти искат. Явно не си разбрал добре,условието или как работи while цикъла
Условието е доста омотано и сцепено на 2 части и това ме обърква доста
Това е нищо нататък става много по сложно. А условието е доста ясно а тук в темата иа примерни решения който можеш да разгледаш.
Виж .... аз бих могъл да разгледам примерни решения и да го натаманя да ми излезе, или мога да зазубря разни конструкции. Ама работата е там , че искам да го проумея за себе си как става и какво става.
Ето и моето решение :
using System;
namespace _08._Graduation_pt._2
{
class Program
{
static void Main(string[] args)
{
string NameStydent = Console.ReadLine();
double evalation = 1;
double total = 0;
while (evalation <= 12)
{
double input = double.Parse(Console.ReadLine());
if (input >= 4)
{
total += input;
evalation++;
}
if (input < 4)
{
total += input;
Console.WriteLine($"{NameStydent} has been excluded at {evalation} grade");
return;
}
}
Console.WriteLine($"{NameStydent} graduated. Average grade: {total / 12:f2}");
}
}
}