Професионална програма
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 368 Точки

Това е кода ти малко преправен...направил съм я по този начин, но тук идеята не е да се реши с масив, а по начина по който ти беше тръгнал да я решаваш с 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 368 Точки

:) защото с приоритет е от начало действието умножение...(пример 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