Loading...
Aleksandar.K avatar Aleksandar.K 3 Точки

Programming Fundamentals Mid Exam - 29 February 2020 Group 1

https://pastebin.com/kY9EeyeV

Задачата нее довършена но немога да си обясня защо уравнението currentBonus не ми се пресмята правилно.

Дава ми резултат 0 защото I е 0, защо не взима индекса на позиция 0 и с него да се сметне уравнението.

Благодаря предварително!

Тагове:
0
Fundamentals Module 29/06/2020 14:28:38
nickwork avatar nickwork 657 Точки

Това е кода ти малко преправен...направил съм я по този начин, но тук идеята не е да се реши с масив, а по начина по който ти беше тръгнал да я решаваш с int.MinValue, да презаписваш стойности и т.н.т. Не ти даваше правилните стойности, защото , първо не използваше правилните типове данни на всякъде... (това е едната от уловките в тази задача...), второ формулата ти е грешна => използваш countOfStudents а просто трябва да използваш цифрата 5 ({total bonus} = {student attendances} / {course lectures} * (5 + {additional bonus})) и трето не използваш закръгляне до най близкото цяло число.

 

using System;
using System.Linq;

namespace _29Februari2020_.Bonus_Scoring_System
{
    class Program
    {
        static void Main(string[] args)
        {
            int countOfStudents = int.Parse(Console.ReadLine());
            int countOfLectures = int.Parse(Console.ReadLine());
            int theBonus = int.Parse(Console.ReadLine());

            if(countOfStudents == 0)
            {
                Console.WriteLine($"Max Bonus: 0.");
                Console.WriteLine($"The student has attended 0 lectures.");

                return;
            }

            int[] atendenceOfStudent = new int[countOfStudents];


            for (int i = 0; i < countOfStudents; i++)
            {
                atendenceOfStudent[i] = int.Parse(Console.ReadLine());
            }

            double maxAtendence = atendenceOfStudent.Max();

            double currentBonus = 0;
            currentBonus = Math.Round(maxAtendence / countOfLectures * (5 + theBonus));

            Console.WriteLine($"Max Bonus: {currentBonus}.");
            Console.WriteLine($"The student has attended {maxAtendence} lectures.");
        }
    }
}

0
Aleksandar.K avatar Aleksandar.K 3 Точки

Много благодаря за помощта. Интересно ми е и защо това https://imgur.com/a/QBNnlym не се пресмята правилно.

0
nickwork avatar nickwork 657 Точки

:) защото с приоритет е от начало действието умножение...(пример 1 + 2 * 3 = 7, а не 9 както някои си мислят :) )...в твоят случей не си сложил скоби тук (countOfStudents+theBonus) за да дадеш приоритет на това действтие да се извърши преди умножението...без скоби се получава все едно 

(atendenceOfStudent[i] / countOfLectures*countOfStudents)+theBonus => пресмята се от начало делението, после резултата се умножава и на края към него се прибавя бонуса, а трябва да бъде от начало делението, след това към бонуса прибавяме числото 5 и накрая двете произведения ги умножаваме резултата от това (atendenceOfStudent[i] / countOfLectures) умножено на резултата на това (5+theBonus;)....малко заплетено стана...ама си мисля, че ще разбереш логиката :) 

0
Aleksandar.K avatar Aleksandar.K 3 Точки

При условие,че това са ми входните данни ((5,25,30)12,19,24,,16,20) в този случай i=0 което следва ,че atendenceOfStudent[i]=12, и тук немога да разбера защо (дори и всичко да е отделено със скоби) Visual studio пресмята atendenceOfStudent[i]=0 а не на 12 и от там идва моят проблем.

 

0
nickwork avatar nickwork 657 Точки

Много не можах да схвана идеята ти, но смени всичко което ти е инт на double и си мисля, че ще се оправи...както по горе писах има уловка с типовете данни в тази задача...направи няколко опита да делиш инт на дабъл и обратното за да видиш какво се получава...на пример ако искаме да запишем в променлива int result = 5 / 2 ; трябва да получим 2.5....но защото това е инт не можем да запишем целият резултат => стойността след десетичната запетая и резултата ще бъде просто 2 а не 2.5...смени всичко на double... направи малко опити ...смятам, че това те мъчи..

0
Aleksandar.K avatar Aleksandar.K 3 Точки

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

0
nickwork avatar nickwork 657 Точки

А получи ли се каквото искаше ?

0
Aleksandar.K avatar Aleksandar.K 3 Точки

Да след като направих масива double нещата се получиха. Благодаря 

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