Софтуерно Инженерство
Loading...
ani99 avatar ani99 3 Точки

тип Double

Здаравейте! Имам проблем с входните данни. Задачите ми се чупят при въвеждане на реално число на конзолата. Аз не виждам  грешка при декларация или другаде...не знам защо става така. Чака ме изпит в края на тази седмиц на Основи на програмирането. Моля за помощ!!!

Тагове:
0
Programming Basics 14/06/2018 11:08:50
NikolayNeykov92 avatar NikolayNeykov92 618 Точки

Отиваш в Control Panel\Clock, Language, and Region

избираш Change date, time, or number formats

избираш Additional Settings...

след това променяш Decimal Symbol: на точка

Apply ok и е готово.

https://ibb.co/cwfHQJ

 

0
ani99 avatar ani99 3 Точки

Открих го преди малко, много благодаря!

0
ani99 avatar ani99 3 Точки

Ето тук се появи нещо друго, което не разбирам:

int students = int.Parse(Console.ReadLine());

            double group1 = 0;
            double group2 = 0;
            double group3 = 0;
            double group4 = 0;

            double marksGroup1 = 0;
            double marksGroup2 = 0;
            double marksGroup3 = 0;
            double marksGroup4 = 0;

 

            for (int i = 1; i <=students; i++)
            {
                double mark = double.Parse(Console.ReadLine());

             
                if (mark >= 2.00 && mark < 3.00)
                {
                    group1++;
                    marksGroup1 = marksGroup1 + mark;
                }

                else if (mark >= 3.00 && mark < 4.00)
                {
                    group2++;
                    marksGroup2 = marksGroup2 + mark;

                }
                else if (mark >= 4.00 && mark < 5.00)
                {
                    group3++;
                    marksGroup3 = marksGroup3 + mark;

                }
                else
                {
                    group4++;
                    marksGroup4 = marksGroup4 + mark;

                }
            }

            double percentsGroup1 = group1 * 100 / students;
            double percentsGroup2 = group2 * 100 / students;
            double percentsGroup3 = group3 * 100 / students;
            double percentsGroup4 = group4 * 100 / students;
            

            Console.WriteLine($"Top students: { percentsGroup4:F2}%");
            Console.WriteLine($"Between 4.00 and 4.99: {percentsGroup3:F2}%");
            Console.WriteLine($"Between 3.00 and 3.99: {percentsGroup2:F2}%");
            Console.WriteLine($"Fail: {percentsGroup1:F2}%");

            double average = (marksGroup1 + marksGroup2 + marksGroup3 + marksGroup4) / students;
            Console.WriteLine($"Average: {average:F2}");

 

group1, group2, group3 и group4 пазят броя на учениците в групи според оценките следователно са от целочислен тип данни. Когато ги декларирах като int обаче изходните данни не бяха точни. Реших, че щом оперирам с тези променливи и резултатът очаквам да е реално число, може би и променливите трябва да са от реален тип. В случая обаче това, струва ми се, няма логика, защото group1, group2, group3 и group4 винаги ще бъдат цели числа. Къде ми е грешката?

0
NikolayNeykov92 avatar NikolayNeykov92 618 Точки

Защото при челочислените типове числа се извършва целочислено деление (без остатък)

и съответно няма да има числа след десетичната запетая и резултата може да бъде

различен от очаквания. Например :

int group1 = 1;

int students = 200;

double percentsGroup1 = group1 * 100 / students;

percentsGroup1 ще бъде равно на 0;

а ако group1 и students са double pecentsGroup1 ще бъде равно на 0.5;

 

0
ani99 avatar ani99 3 Точки

Ясно! Осъзнах го и затова промених типа, но все пак не бях сигурна в истинноста на моя извод. Много благодаря за Вашата отзивчивост!!!

0