Loading...
naskomsm avatar naskomsm 1 Точки

Задача "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}");
        }
    }
}
 

Ако може някой да помогне ще съм много благодарен! smiley

Тагове:
0
Programming Basics 01/07/2018 11:22:06
phenom avatar phenom 0 Точки

А можеш ли да дадеш малко разяснение какво точно си направил? Благодаря!

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

същото което и аз правя в моето решение :Д еднакво дълги са и еднаква логика.,,защо е решил че неговото е по-късо само тои си знае.

0
phenom avatar phenom 0 Точки

Твоето го разбрах, даже откраднах идеята да си направя задачата :D. Като видях негото изглежда много подобно, но не разбрах на else if като зададе false на passed какво точно става. И за това поисках разяснение. Иначе кое е по-кратко не мога да преценя :D

 

0
01/07/2018 17:10:11
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

става същото първия път като е скъсан човека си прави passed=false ако има втори път по ниска от 4 изпуска if -a изпуска passed защото е вече false и влиза в else където чупи цикъла и толкова. Както казах едно към едно са въпрос на изписване,аз предпочитам малко повече код но да е по-ясно.

Реално if проверява едно нещо дали е истина и първата ниска оценка passed e още true прави го на false и 2рия път вече pased e false  и не влиза там,направо го подминава и чупи цикъла това еТова е една от причините поради които не харесвам да има само решение без поне малко обяснение към него. Човек понякога не може да разбере или да се ориентира какво се случва напълно.

0
01/07/2018 18:14:29
kolioi avatar kolioi 641 Точки

@phenom

Има 2 начина да определиш дали ученика е изключен - първият начин, който е по-естествен, е да използваш целочислена променлива, напр int failed = 0; в началото и всеки път, когато има оценка по-ниска от 4, да увеличаваш тази променлива. На всяка итерация проверяваш стойността на failed и когато failed стане 2, излизаш от цикъла. Втория начин е с булева променлива, както аз съм го направил. В тази задача може да се използва for или do-while цикъл вместо while.

0
01/07/2018 23:18:13
DenislavGerdanov avatar DenislavGerdanov 0 Точки

Бихте ли ми казали къде ми  е грешката

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

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

    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 цикъла 

0
DenislavGerdanov avatar DenislavGerdanov 0 Точки

Условието е доста омотано и  сцепено на 2 части и това ме  обърква  доста  

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

Това е нищо нататък става много по сложно. А условието е доста ясно а тук в темата иа примерни решения който можеш да разгледаш.

0
DenislavGerdanov avatar DenislavGerdanov 0 Точки

Виж .... аз бих могъл  да разгледам примерни  решения  и  да го натаманя да  ми излезе, или мога  да зазубря разни конструкции. Ама  работата е там ,  че искам  да го проумея за себе си как  става  и  какво  става.

0
07/11/2018 11:24:55
DragomiraV avatar DragomiraV 0 Точки

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

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

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