Софтуерно Инженерство
Loading...
+ Нов въпрос
gim13 avatar gim13 5 Точки

Задача 9 от упражнението за условни конструкции на С#

Здравейте,моля да ми подскажете какъв е проблема и къде. С всички стойности който въвеждам работи,но
 "съдията" ми дава 75 точки( на 4 от проверките "гърми" ). 
 
 С линк: https://pastebin.com/zLrPR8Wt

 или направо кода:

using System;

namespace stipendia
{
    class Program
    {
        static void Main(string[] args)
        {
            
                double dohod = double.Parse(Console.ReadLine());
                double uspeh = double.Parse(Console.ReadLine());
                double minZapl = double.Parse(Console.ReadLine());

                double socStipend = minZapl * 0.35;
                double otlichStipend = uspeh * 25;

                if (uspeh < 5.5 && dohod >= minZapl)
                {
                    Console.WriteLine("You cannot get a scholarship!");
                }

                else if (uspeh >= 5.5 && dohod >= minZapl)
                {
                    Console.WriteLine($"You get a scholarship for excellent results {otlichStipend} BGN");
                }
                else if (dohod < minZapl && uspeh > 4.5 && uspeh < 5.5)
                {
                    Console.WriteLine($"You get a Social scholarship {socStipend} BGN");
                }
                else if (dohod < minZapl && uspeh >= 5.5)
                {
                    if (otlichStipend >= socStipend)
                    {
                        Console.WriteLine($"You get a scholarship for excellent results {otlichStipend} BGN");
                    }
                    else
                    {
                        Console.WriteLine($"You get a Social scholarship {socStipend} BGN");
                    }
                }
                else
                {
                    Console.WriteLine("You cannot get a scholarship!");
                }
        }
    }
}
0
Programming Basics with C# 19/02/2019 00:45:16
MitakaBGpro avatar MitakaBGpro 14 Точки

Може ли линк към Judge ? 

0
gim13 avatar gim13 5 Точки

https://judge.softuni.bg/Contests/Compete/Index/1161#8

0
Iv_Konov avatar Iv_Konov 357 Точки

Добро утро, gim13,

 

По мое мнение, трябва да се опростят разсъжденията на отделни if конструкции... Целта е по-лесно разбиране, а и да отделим като два независими случая - 1. социална  и 2. по успех.  

if-else да ползваме само при сравнението на сумите на двете стипендии.

 

using System;

namespace stipendia
{
    class Program
    {
        static void Main(string[] args)
        {

            double dohod = double.Parse(Console.ReadLine());
            double uspeh = double.Parse(Console.ReadLine());
            double minZapl = double.Parse(Console.ReadLine());

            double socStipend = 0;
            double otlichStipend = 0;
            bool yesScolarship = false; // добавено


            if (uspeh >= 4.5 && dohod < minZapl)
            {
                socStipend = minZapl * 0.35;
                yesScolarship = true;
            }

            if (uspeh >= 5.5)
            {
                otlichStipend = uspeh * 25;
                yesScolarship = true;
            }

            if (yesScolarship == false)
            {
                Console.WriteLine("You cannot get a scholarship!");
                return; // добавям, за да не проверява сумите на двете стипендиите (по подразбиране и двете са "0", т.е. включват се в " =" на долната проверка)
            }
           
            if (otlichStipend >= socStipend)
                {
                    Console.WriteLine($"You get a scholarship for excellent results {Math.Floor(otlichStipend)} BGN"); // Math.Floor - добавено
            }
            else
            {
                Console.WriteLine($"You get a Social scholarship {Math.Floor(socStipend)} BGN"); // Math.Floor - добавено
            }
        }
    }
}

 

Поздрави,

Иван

0
19/02/2019 09:10:21
gim13 avatar gim13 5 Точки

Здравей,Iv_Konov.

Благодаря за решението.За мен е важно освен правилното решение ,да разбера и каква

е грешката в моя код,защо не работи на 100%.Ако може да ми посочиш проблема или да

дадеш  стойности при който програмата дава грешка ще съм ти още по-благодарен.

 

Поздрави,

Генади

0
gim13 avatar gim13 5 Точки

" Резултатът се закръгля до по-малкото цяло число. "

Ето това изречение от условието съм пропуснал,забелязах го след като видях кода на Иван.

 

Блогодаря за вниманието,

Генади

0
Iv_Konov avatar Iv_Konov 357 Точки

Здравей, Генади,

 

Имаш основание да си търсиш грешката...
 
Аз преправих програмата ти повечко (пробвах с леки корекции, но не успях). Основанието ми беше - конструкцията if-else-if e много задължаваща..., и според мен трябва да се ползва при зависими/свръзани параметри, а двете стипендии не са обвързани (освен на финала, ако и двете стипендии са възможни).
Възможно е Съдията да вижда нещо... гадая, нека и други да си кажат мнението.

Да, видими грешки има, но лекото преправяне не беше достатъчно да мине теста 100/100... и затова ти премахнах if-else-if...-else конструкцията с директни if-ове.

Тук
else if (dohod < minZapl && uspeh > 4.5 && uspeh < 5.5) // трябва да има равенство - uspeh >= 4.5
                {
                    Console.WriteLine($"You get a Social scholarship {socStipend} BGN");
                }

и на финала - ползването на Math.Floor при резултата...

 

Поздрави,
Иван

0
19/02/2019 12:32:58
gim13 avatar gim13 5 Точки

Привет,отново.

Само с добавянето на   Math.Floor при резултата.. ,теста мина  100/100.

 линк:https://judge.softuni.bg/Contests/Submissions/View/10264227

 

 С благодарности,

Генади

 

0
19/02/2019 13:35:33
Stukz avatar Stukz 2 Точки

Здравейте понеже мен също доста ме измъчи тази задача да попитам как с това решение работещо при всички възможни случаи в Judge ми дава 68/100  https://pastebin.com/FjkpJVPB

0
Iv_Konov avatar Iv_Konov 357 Точки

Здравей, Stukz, 

моля те, махни излишното, маркирано в жълто (само Math.Floor ти е нужно) - на две места го имаш:

{Math.Floor(otilichenStip):f2}

Поздрави,

Иван

0
19/02/2019 18:59:33