Loading...
VesselinTonchev avatar VesselinTonchev 5 Точки

Компилаторът майтап ли си прави?

Здравейте, банда :)

Накратко, искам да видгна на степен и ползвам следното:

Math.Pow(snowballValue, snowballQuality);

Нищо не се получава, но като пробвам същото в Immidiate window  си ми го смята коректно. WTF!?!?! Това е кодът:

using System;

namespace Snowballs
{
    class Program
    {
        static void Main(string[] args)
        {
            int snowballs = 2;

            int snowwballSnow = 0;
            int snowballTime = 0;
            int snowballQuality = 0;
            int counter = 0;
            int snowballValue = 0;
            int finalScore = snowballValue;
            int pow = 0;

            while (counter <= snowballs)
            {
                snowwballSnow = int.Parse(Console.ReadLine());
                snowballTime = int.Parse(Console.ReadLine());
                snowballQuality = int.Parse(Console.ReadLine());


                snowballValue = (snowwballSnow / snowballTime);// ^ snowballQuality;
                Math.Pow(snowballValue, snowballQuality);

                if (snowballValue > finalScore)
                {
                    finalScore = snowballValue;
                }

                counter++;
            }
            Console.WriteLine($"{snowballs} : {snowballTime} = {snowballValue} ({snowballQuality})");
        }
    }
}

 

0
Module: C# Advanced
kkaraivanov avatar kkaraivanov 486 Точки

Здравей колега! Ами грешката мисля че е в

Math.Pow(snowballValue, snowballQuality);

Реално резултата от метода не го присвояваш на никоя променлива и странно кой резултат искаш да ти се промени? В класа Math няма войд методи, следователно ти трябва променлива на която да присвоиш върнатата стойност.

0
05/02/2020 18:25:10
VesselinTonchev avatar VesselinTonchev 5 Точки

Доколкото разбирам функцията, би трябвало да правя присвояването с

snowballValue

Реално казвам,

Math.Pow(вдигни snowballValue, на степен snowballQuality);

Или не го разбирам правилно? Не ми приема за валиден код:

int var = Math.Pow(snowballValue, snowballQuality);

Аз го извъртях с цикъл, ама не искам така, мега дърводелско е. Искам да го напрвя с тази готова функция... :(

0
kkaraivanov avatar kkaraivanov 486 Точки

Предполагам си натрупал много информация която трябва да си дадеш време да обработиш.

1 - var е съкращение от variable и преди беше ползвана за "жива" променлива в кода, която можеш да използваш за извличане на натрупаните данни в нея. Сега се ползва за "съкратен" достъп до int, char, string и т.н. общо взето за деклариране на обект в кода ти. Представи си ако си създал клас с име "KonvertAndCalculateAnywereVariable". Променливата "var" замества името на класа, т.е. ако искаш да го декларираш променлива за класа в зависимост от логиката на класа, декларацита ще изглежда нещо подобно - var myVariable = new KonvertAndCalculateAnywereVariable().

2 - Прозореца за тестове "Immediate window" извиква метода Math.Pow() и ти показва какъв изход ще имаш с подадените стойности, тоест какво можеш да очакваш като резултат. Ако търсиш функционалност и резултат от кода си, трябва да присвоиш променлива на MathPow(), като съобразиш какъв тип данни да бъде тя. Мисълта ми е, че "int var" в случая не е решение защото ако "var" е име на променрива, то int  не е типа който Math.Pow ще върне, а ако  очакваш "var" да присвои типа, то би трябвало да махнеш int и след var да дадеш име на променлива.

3 - на кратко, проблема от задачата се решава с променливи тип decimal. По принцип би трябвало да стане и с double, но след последната точност при закръгляне след десетичната запетая приложено от ъпдейта на Net.Core, Judge няма да ти върне грешка ако ползваш decimal, а в конкретния случай ти е необходим типа BigInteger.

ето примерен код за да ме разбереш какво искам да кажа

using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;

namespace Snowballs
{
    class Program
    {
        static void Main(string[] args)
        {
            int numberOfSnowballs = int.Parse(Console.ReadLine());
            BigInteger[] bestResult = { -1, 0, -1, 0 };

            for (int i = 0; i < numberOfSnowballs; i++)
            {
                BigInteger snowballSnow = BigInteger.Parse(Console.ReadLine()); // index 0
                BigInteger snowballTime = BigInteger.Parse(Console.ReadLine()); // index 1
                int snowballQuality = int.Parse(Console.ReadLine());    // index 2

                BigInteger numberOfThrows = snowballSnow / snowballTime;
                BigInteger snowballValue = BigInteger.Pow(numberOfThrows, snowballQuality); // index 3
                
                if (bestResult[3] < snowballValue)
                {
                    bestResult[0] = snowballSnow;
                    bestResult[1] = snowballTime;
                    bestResult[2] = snowballQuality;
                    bestResult[3] = snowballValue;
                }
            }

            Console.WriteLine($"{bestResult[0]} : {bestResult[1]} = {bestResult[3]} ({bestResult[2]})");
        }
    }
}

Типът и променливата

BigInteger snowballValue

 приемат стойност от метода "Pow" на класа "BigInteger", който от своя страна имплиментира типа BigInteger, което е еквивалент на "Math.Pow" който е метод за тип данни double. Стойността е всъщност числото повдигнато на степен, която търсиш..... :)

0
05/02/2020 23:16:03
VesselinTonchev avatar VesselinTonchev 5 Точки

Значи, това е финалното, знам, че се разпрострях, но не исках да го правя с масиви, тъй като задачата е от преди да ги вземем. Не знаех, че Math.Pow работи с определни типове данни. C double "заспа"! Много ти Благодаря, оказа ми страхотна помощ! А относно var, тъпо го написах. Просто име на някакв аvariable. Все едно int test.

using System;

namespace Snowballs
{
    class Program
    {
        static void Main(string[] args)
        {
            int snowballs = 2;

            double snowballSnow = 0;
            double snowballTime = 0;
            double snowballQuality = 0;
            int counter = 0;
            double snowballValue = 0;
            double finalScore = snowballValue;
            double pow = 0;
            double finalsnowballSnow = 0;
            double finalsnowballTime = 0;
            double finalsnowballQuality = 0;

            while (counter < snowballs)
            {
                snowballSnow = int.Parse(Console.ReadLine());
                snowballTime = int.Parse(Console.ReadLine());
                snowballQuality = int.Parse(Console.ReadLine());

                snowballValue = 0;
                pow = 0;
                snowballValue = (snowballSnow / snowballTime);
                pow = Math.Pow(snowballValue, snowballQuality);

                if (pow > finalScore)
                {
                    snowballValue = pow;
                    finalScore = pow;
                    finalsnowballSnow = snowballSnow;
                    finalsnowballTime = snowballTime;
                    finalsnowballQuality = snowballQuality;
                }

                counter++;
            }
            Console.WriteLine($"{finalsnowballSnow} : {finalsnowballTime} = " +
                $"{finalScore} ({finalsnowballQuality})");
        }
    }
}

 

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