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

ComplexConditions - Домашна - Задача 16

Здравейте,

Имам проблем с 16-та задача от домашната.

Първо - линка който е посочен в word-файла за тестване на решението не работи.

И второ при опит да присвоя на променлива от тип decimal или double стойност VisualStudio ми дава грешка, че не може да се извършва операция умножение/деление.

suma = euro*0.3;

Тагове:
0
Programming Basics
rosen.ivanov avatar rosen.ivanov 130 Точки

Пробвай зад стойността да сложиш "d" за "double" и "m" за "decimal".

Ето линк: https://judge.softuni.bg/Contests/Practice/Index/179#2

0
03/07/2016 19:56:50
Tanina80 avatar Tanina80 11 Точки

Благодаря за линка...

Така и не разбрах какво стана ... този път го прие, с double, но до колкото четох от форума, ако става въпрос за пари е добре да е в decimal, което май всъщност е тип за число от десетичната бройна система ...

Ще пробвам да почета отново за типовете числа ...

 

0
rosen.ivanov avatar rosen.ivanov 130 Точки

"Ако извършвате пресмятания с пари използвайте типа decimal, а не float или double. В противен случай може да се натъкнете на неприятни аномалии при пресмятанията и грешки в изчисленията!"

Цитат от книгата "Въведение в програмирането със C#".

0
naskodaskalov avatar naskodaskalov 32 Точки

Това е моето решение : 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Trip
{
    class Trip
    {
        static void Main(string[] args)
        {
            double budget = double.Parse(Console.ReadLine());
            string season = Console.ReadLine();

            double moneyToSpend = 0;

            string destination;
            string placeToStay;

            if (budget <= 100)
            {
                destination = "Bulgaria";
                if (season == "summer")
                {
                    placeToStay = "Camp";
                    moneyToSpend = budget * 0.3;
                }
                else
                {
                    placeToStay = "Hotel";
                    moneyToSpend = budget * 0.7;
                }
                Console.WriteLine("Somewhere in {0}", destination);
                Console.WriteLine("{0} - {1:F2}", placeToStay, moneyToSpend);
            } else if (budget <= 1000)
            {
                destination = "Balkans";
                if (season == "summer")
                {
                    placeToStay = "Camp";
                    moneyToSpend = budget * 0.4;
                }
                else
                {
                    placeToStay = "Hotel";
                    moneyToSpend = budget * 0.8;
                }
                Console.WriteLine("Somewhere in {0}", destination);
                Console.WriteLine("{0} - {1:F2}", placeToStay, moneyToSpend);
            } else if (budget > 1000)
            {
                destination = "Europe";
                placeToStay = "Hotel";
                moneyToSpend = budget * 0.9;
                Console.WriteLine("Somewhere in {0}", destination);
                Console.WriteLine("{0} - {1:F2}", placeToStay, moneyToSpend);
            }
        }
    }
}

 

0
03/07/2016 20:29:24
Tanina80 avatar Tanina80 11 Точки

И аз тръгнах да го пиша така ... със стрингови променливи, за място и за къмпинг/хотел, но се отказах и си ги дописах направо. Като, че ли това е по-добрият вариант. Май това, че се опитвам да си спестявам променливи не е много добра практика.

0
Tanina80 avatar Tanina80 11 Точки

http://pastebin.com/qNKYNyT3

това ми е кода

Не разбирам защо трябва да слагам d или m и зад кои стойности... досега не ми е правило такъв проблем

 

0
Plamen27 avatar Plamen27 599 Точки

За съжаление тук няма нищо: http://pastebin.com/qNKYNyT3

                                             This page has been removed!

Използвай decimal - ключа за това в задачата е, че става въпрос за пари - лекторът трябва да го е казал на лекциите и този ред от задачата:

  • Първи ред – Бюджет, реално число в интервала [10.00...5000.00]

Задаваш променливите примерно така:

 var sum = decimal.Parse(Console.ReadLine());
            var season = Console.ReadLine();

            decimal bulSum = sum * 0.30m;
            decimal bulWin = sum * 0.70m;
            decimal balSum = sum * 0.40m;
            decimal balWin = sum * 0.80m;
            decimal euSW = sum * 0.90m;

При аритметични действия с decimal числа слагаш малка буква m след числото, както е показано по-горе.

Ако решиш вярно задачата, но примерно използваш double - judge би трябвало да хвърля грешки.

0
03/07/2016 22:23:10
Tanina80 avatar Tanina80 11 Точки

http://pastebin.com/iDGUu7A9 - Така го прие и с decimal най-накрая .... почти ми стана ясно, за момента ...

Значи проблема в случая е в процентите, примерно в числото 0.3 , когато пресмятаме 30%. Затова ли се налага да слагам "m" след него?

Нещо подобно имаше и в една друга задача от домашното ... за Волейбола ... там като се изчислява 2/3 от дните, трябваше да се запише 2.0/3

0
Tanina80 avatar Tanina80 11 Точки

Ами не ми хвърли грешки с double ... незнам.

0
Plamen27 avatar Plamen27 599 Точки

Не m cе слага като смяташ с decimal числа.

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