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

значи while цикъла ти е ок . Обаче изпускаш че ако два пъти има под 4 трябва да прекъснеш програмата.

реално аз бих добавил един bool и една променлива  bool stillLearing=  int notPassed<2. и ще сложа bool като второ условие в while цикъла за да съм сигурен че ако го скъсат 2 пъти ще прекъсна всичко.като просто правиш else на твоята проверка и ако не е >=4.00 notpassed+=1

и после ти остава извън цикъла да направиш една проверка 

stilllearning ако е true значи е изкарал и 12 клас изписваш това което си направил 

а ко stilllearning e false изписваш другото условие което са ви казали. като за класа в които са го изключили ти е grades до момента.

И един съвет кръщаваи си по-добре променливите grades grade е малко объркващо sum.. 

по -добре било  yearlyGradesTotal вместо sum. class или classYear вместо grades.

https://pastebin.com/K3jTayuX ето нещо такова смених и имената на променливите.

0
01/07/2018 11:42:30
naskomsm avatar naskomsm 1 Точки

Благодаря ти много! Реших проблема с твоята помощsmiley

0
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
BobyTopalova avatar BobyTopalova 26 Точки

https://pastebin.com/wGjePEsW 

Това е моето решение. Дано ти помогне

0
Dean.02 avatar Dean.02 15 Точки

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string name = Console.ReadLine();
            int GradesNumber = 0;
            double sum = 0;
            int Fail = 0;

            while(GradesNumber < 12 && Fail <=1)
            {
                double grade = double.Parse(Console.ReadLine());
                if (grade>=4)
                {
                    GradesNumber++;
                    sum += grade;
                }
                else
                {
                    Fail++;
                }
            }

            if (Fail <= 1)
            {
                double avgGrade = sum / 12;
                Console.WriteLine($"{name} graduated. Average grade: {avgGrade:f2}");
            }
            else
            {
                Console.WriteLine($"{ name} has been excluded at {++GradesNumber} grade");
            }
        }
    }
}

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