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

тип Double

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

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

Пробвай да напишеш числото с точка вместо запетая или обратното

0
ani99 avatar ani99 3 Точки

Благодаря много! Става със запетаята.

0
TeodorStefanovPld avatar TeodorStefanovPld 1282 Точки

следващия път при такъв проблем си виж регионалните настройки ако не са us-en ще гърмят,колегата отдолу се е усетил почти кое езиковите в случая нямат нищо общо тук са регионалниет кое как чете,най-добре си нагласи да си четеш дробните числа с delimiter . oт настройките и ще забравиш за този проблем. На лекциите не ви ли го показаха обясниха ? това?

0
ani99 avatar ani99 3 Точки

Наистина регионалните настройки са били проблемът. Вече всичко е наред, благодаря!!!

0
MartinPaunov avatar MartinPaunov 77 Точки

Здравей,

Може ли да дадеш малко повече конкретика на това какво се случва. Например да дадеш условие на задача, пейстбин на кода или поне някакъв скрийншот на мястото, където ти дава грешката при четене на входни данни. Също така сподели какъв програмен език използваш, тъй като четенето на входни данни е различно при различните езици. Само с това кратко описание, ще бъде трудно да ти помогнем.

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

Не знам дали е това, провери си и езиковите настройки, трябва да въвеждаш данните на English - Us keyboard.

Ако не е това, добави по-подробно описание на проблема.

Поздрави

0
ani99 avatar ani99 3 Точки

Използвам C# и въвеждам данните на English - Us keyboard. Получава се обаче само ако разделям със запетая. 

1
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