Loading...
Tanina80 avatar Tanina80 11 Точки

Задача 4 от изпита на 26 март 2016

Нищо не ми стана ясно по тази задача...

Целта е да се въведат n числа, и да се изведат на екран колко процента от тях се делят на 2, 3 и 4.

При условие, че броят на въведените числа е цяло число, броят на числата, които се делят на 2, 3 или 4 също е цяло число ... не ми стана ясно, защо когато декларирам променливите за брой числа да са от тип int ми дава грешка?

След като прочетох решението на задачата и смених да са от тип ... var p1 = 0.0; се получи, но не схващам къде  е разликата ....

Това беше първоначалният ми код, който незнайно за мен защо, не върши работа:

 

using System;

namespace Division04
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine()); //100% и брой променливи num които ще въвеждаме
            int p1 = 0; //брой променливи num които се делят без остатък на 2
            int p3 = 0; //брой променливи num които се делят без остатък на 3
            int p4 = 0; //брой променливи num които се делят без остатък на 4


            for (int m = 1; m<=n; m++)
            {
                var num = int.Parse(Console.ReadLine()); // променлива в която се въвежда число

                if (num % 2 == 0) p1++;
                if (num % 3 == 0) p3++;
                if (num % 4 == 0) p4++;
            }

            Console.WriteLine("{0:f2}%", (p1 / n) * 100);
            Console.WriteLine("{0:f2}%", (p3 / n) * 100);
            Console.WriteLine("{0:f2}%", (p4 / n) * 100);
        }
    }
}

Ако на някой му е ясно защо не върви ... да пробва да ми обясни, ако иска ...

0
Programming Basics
borislav9212 avatar borislav9212 745 Точки

Здравей,

Да се отпечатат на конзолата 3 реда, всеки от които съдържа процент между 0% и 100%, с точност две цифри след десетичната точка, например 25.00%, 66.67%, 57.14%.

Това означава.че изхода е double, кастваш го къm double и готово.

            double result1 = (double)p1 * 100 / n;
            double result2 = (double)p3 * 100 / n;
            double result3 = (double)p4 * 100 / n;

            Console.WriteLine("{0:f2}%", result1);
            Console.WriteLine("{0:f2}%", result2);
            Console.WriteLine("{0:f2}%", result3);

1
Tanina80 avatar Tanina80 11 Точки

Да...това ...ми е ясно, че процента не е цяло число вече ...

Не ми е ясно компютърът защо не се сеща, че е double :)))

Това, което си написал ти...е друг вариант явно ...първият вариант е още като ги декларирам р1, р3, р4 да са от тип double, тогава се сеща, че резултата е също double. Явно трябва да го укажа това задължително по един от двата начина ...това разбирам до момента.

 

1
05/07/2016 21:23:14
borislav9212 avatar borislav9212 745 Точки

По твоя начин никъде не си задала, че е double и програмата гърми. Компилаторът си ги отчита по default - int.

0
Tanina80 avatar Tanina80 11 Точки

Ok. Мисля, че ми се изясни. Thanks 

1
Alex0101 avatar Alex0101 374 Точки

Здравей. Като делиш р/n, n e int възприема целия израз за инт. После го умножаваш с 100 , за да получиш % и пак си остава инт. В плейсхолдера очакваш плаваща запетая с това f. Имаш много варианти, за да угодиш на типа данни. Аз бих добавил .0 на 100 -> 100.0 или 100d, което ще го направи double и ще мине. Защото инт умножен по инт дава инт, а по дабъл- дабъл.Също може да кажеш, че п ти е дабъл, но това ще доведе до ядове.

 

Надявам се да съм успял да ти отговоря конкретно на въпроса,защо не се компилира в твоя случай.

Успех

0
Tanina80 avatar Tanina80 11 Точки

Усетих аз, че има скрити хитринки с тези 2.0, m при операции и другите подобни... Благодаря за отговорите.

Лошото е че ... единият път компилаторът се лъже с едно другият път с друго..., ако си задам едната променлива да е инт другата дабъл и пак гърми. Дава, че не може инт*дабъл. Явно трябва да се решават още задачи за да го усвоя.

 

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