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

Основи на програмирането (Домашно 25.06.2016) Проблеми

Здравейте ,

Имам нужда от малко помощ и акъл :)

Реших си задачата за конвертора на мерни единици но имам малък проблем и не разбирам защо се получава така . Когато дифинирам var in = 39.3700787; in  ми го подчертава като грешка и не ми бачка програмата . Преименувах го на inch и всичко заспа и върви , но judge системата реши че трябва да ми е гадно и тя подава мерна едимица in . За това тя ми режи 18 точки . Някои може ли да сподели защо ми го дава като грешка или какво трябва да допиша за да дефенирам че това е променлива ?

 

using System;

namespace _08.Convert
{
    class Program
    {
        static void Main(string[] args)
        {
            var value = double.Parse(Console.ReadLine());
            var input = Console.ReadLine();
            // Enter m , mm , cm , mi , inch , km , ft , yd 
            var output = Console.ReadLine();
            // Enter m , mm , cm , mi , inch , km , ft , yd

            var meter = 1;
            var mm = 1000;
            var cm = 100;
            var mi = 0.000621371192;
            var inch = 39.3700787;
            var km = 0.001;
            var ft = 3.2808399;
            var yd = 1.0936133;

            switch (input)
            {
                case "m":
                    break;
                case "mm":
                    value = value / mm;
                    break;
                case "cm":
                    value = value / cm;
                    break;
                case "mi":
                    value = value / mi;
                    break;
                case "inch":
                    value = value / inch;
                    break;
                case "km":
                    value = value / km;
                    break;
                case "ft":
                    value = value / ft;
                    break;
                case "yd":
                    value = value / yd;
                    break;
                default:
                    break;
            }
            switch (output)
            {
                case "m":
                    break;
                case "mm":
                    value = value * mm;
                    break;
                case "cm":
                    value = value * cm;
                    break;
                case "mi":
                    value = value * mi;
                    break;
                case "inch":
                    value = value * inch;
                    break;
                case "km":
                    value = value * km;
                    break;
                case "ft":
                    value = value * ft;
                    break;
                case "yd":
                    value = value * yd;
                    break;
                default:
                    break;
                
            }
            Console.WriteLine(value + " " + output);
        }
    }
}
 

aastefanov avatar aastefanov 5 Точки

При променлива с име in, кодът ти се чупи, защото е запазена дума.

Нямаш никакъв проблем да оставиш променливата inch, но все пак да използваш case "in".

0
yGaByGa avatar yGaByGa 21 Точки

Здравей ,

Тоест когато използвам in , трябва да го слагам в двойни кавички "in" ? Така ли се прави ?

Може ли да споделиш как е правилно да се запише ?

0
aastefanov avatar aastefanov 5 Точки

Оставяш променливата като var inch, а в switch конструкцията пишеш нещо от рода на:

case "in":
    value = value / inch;

 

0
yGaByGa avatar yGaByGa 21 Точки

Благодаря много , получи се 100/100 :) 

0
borislav9212 avatar borislav9212 746 Точки

"in" е в синъо, значи е linq, class,methods, или нещо такова, не знама точно какво е, търсих в нета но не можах да намеря какво е. Проблема се решава като смениш името на променливата да не е " in ". Каквото искаш може да сложиш , дори и " pesho ". Тук важното е да не променяш case, там трябва да си е "in", защото ако е друго име Judge прави проверка точно за "in" и не го открива и от там ти идват и по-малкото точки. http://pastebin.com/stePQ1dZ

0
26/06/2016 21:04:55
yGaByGa avatar yGaByGa 21 Точки

Здравейте хора , 

Някъде по пътя съм изкривил логиката и ми дава по 30/100 . Едни от резултатите ми излизат с - дртуги вместо 6 ми излиза 5 ... странна работа :(

Може ли да ме насочите малко къде съм оплел нещата или ще е по лесно да напиша на ново ?

По слециално бонус точките в принтирането съм оплел много :(

 

using System;

namespace _06.BonusPoint
{
    class BonustPoint
    {
        static void Main(string[] args)
        {
            Console.Write("Enter score: ");
            double number = double.Parse(Console.ReadLine());
            double result = number;
            double bonus = 0;

            if (number >= 1000)
            {
                result = result + result * 10 / 100;
            }
            else if (number >= 100)
            {
                result = result + result * 20 / 100;
            }
            else
            {
                result += 5;
            }

            if (number % 2 == 0)
            {
                bonus = result++;
            }
            else if (number % 5 == 0)
            {
                bonus = result += 2;
            }
            Console.WriteLine("Bonus score: " + (bonus - number));
            Console.WriteLine("Total score: " + result);
        }
    }
}
 

0
DimitarKarev avatar DimitarKarev 86 Точки

промяната на bonus = result++; към  bonus = result +=1; оправя донякъде нещата и получаваш 70/100 точки но има още няколко неща който трябва да се оправят. Ето моето решение:

var number = double.Parse(Console.ReadLine());
            var bonus = 0.0;
            if (number <= 100)
            {
                bonus += 5;
            }
            else if (number > 1000)
            {
                bonus += (number * 0.1);               
            }
            else 
            {
                bonus += (number * 0.2); 
            }
            if (number % 2 == 0)
            {
                bonus += 1;
            }
            else if (number % 10 == 5)
            {
                bonus += 2;
            }
            Console.WriteLine(bonus);
            Console.WriteLine(bonus + number);

0
AntonBogdanov92 avatar AntonBogdanov92 6 Точки

При мен гърми на 3,4 теста: http://pastebin.com/mkhcwmhY  -> получавам 60/100.. Вече зациклих,предполагам грешката е елементарна,но.. :/ Ще се радвам някой да помогне ;)

0
27/06/2016 00:22:44
borislav9212 avatar borislav9212 746 Точки

yGaByGa имаш няколко грешки. Така както си написал кода number влиза и в двата if , трябва да ги ограничиш -> if (number > 100 && number <=1000). Като е double, трябва да е 0.0. Трябва да намериш totalscore. Ето ти кода редактиран, прегледай го и ще го разбереш -> http://pastebin.com/TiMftUzw

0
26/06/2016 22:45:12
Radoslav98 avatar Radoslav98 0 Точки

Моето решение

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

namespace MetricConverter
{
    class Program
    {
        static void Main(string[] args)
        {
            double num = double.Parse(Console.ReadLine());
            string metric = Console.ReadLine();
            string metric1 = Console.ReadLine();
            var currencies = new Dictionary<string, double>()
            {
                {"m" , 1},
                {"mm", 1000 },
                {"cm", 100 },
                {"mi", 0.000621371192},
                {"in", 39.3700787},
                {"km", 0.001},
                {"ft", 3.2808399},
                {"yd", 1.0936133}
            };
            double result = num / currencies[metric] * currencies[metric1];

            Console.WriteLine("{0} {1}", result,  metric1);
        }
    }
}
 

0