Професионална програма
Loading...
zhivko1985 avatar zhivko1985 34 Точки

Лице на правоъгълник в равнината - домашна работа

Здравейте , 

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

Ста въпрос за задача 8 - Лице на правоъгълник в равнината

Във Visual Studio след компилиране получавам търсения резултат , но в judge.softuni.bg ми дава грешка.

Къде греша ?

 

            var a = double.Parse(Console.ReadLine());
            var b = double.Parse(Console.ReadLine());
            double area = a * b;
            double perimeter = 2 * (a + b);
            Console.WriteLine(area);
            Console.WriteLine(perimeter);

 

 

1
Programming Basics
deforse avatar deforse 1 Точки

Сега седя и се мъча с въпросната задача. От лекцията не беше коментирано за въпросната функция "Math.Max". Усетих се,  че трябва да е функция, но "Max/Min" не беше коментирано и посмъртно нямаше как да го ползвам. Това, че упражненията не се записват е крайно гадно. 

Ще ползвам "пищова" , но не си е работа да седя и да преписвам код. 

0
Nlzlatkov avatar Nlzlatkov 0 Точки

Съгласен съм колега.

Не знам видеото на коя лекция си гледал(ако си дистанционна, като мен), но в това, което аз гледах също не беше обърнато внимание на Math.Max и Math.Min. Оставам с впечатлението, че на упражненията се казват неща, които на лекциите не се обясняват. И да, много е гадно, че упражненията не се записват.

Всъщнот задачата е много готина и с цел точно да ни подсети за тези фукции като math.abs/max/min. За това са дадени и отрицателни стойности-за да видиш, че изхода не ти излиза и да те подсети от къде идва проблема. Но за тези, които се бъхтим сами вкъщи(или поне за някои, като мен) е малко по-трудно.

0
13/09/2018 20:36:13
deforse avatar deforse 1 Точки

Аз гледам на Ивайло Димитров. Определено му харесвам подхода и как води. Не се оплаквам. Просто като онлайн, както повечето колеги в такъв тип обучение, съчетаваме още 1000 неща, и като се нагласих да си правя домашните от упражненията установих, че половината неща въобще нямам идея как да станат, пердвид, че не сме ги минавали. Като гледам и следващата задача "Конзолен междувалутен конвертор" - се използват IF-ове, което ще се разглежда другата седмица.

0
Nlzlatkov avatar Nlzlatkov 0 Точки

Да и аз него го гледам.

Ами да и аз така си помислих. Просто няма как да го направиш с 4 валути без if.

Прегледах пак презентацията от 8ми и if няма.

А тогава у мен назрява въпроса, защо имаме домашно върху нещо, което не е взето на лекция, а ще се вземе на 15.09 и защо срокът за него е едва до 16.09?

0
13/09/2018 21:49:45
IttyBitty avatar IttyBitty 26 Точки

Колеги, гледам сме на едно и също ниво с вас - тепърва започваме да учим програмиране, онлайн сме, та даже гледаме един и същ лектор. laugh

Относно сроковете: всяка събота взимаме лекция и към нея имаме домашни. Всяка неделя имаме упражнения и домашни към нея. Та, домашните от лекцията в събота трябва да са готови в срок от 7 дни, тоест до другата събота, същотото е и с упражненията - взимаме ги в неделя и до другата неделя трябва да сме готови с домашните. Та относно задачата, която дискутирате за валутите, точно вчера по нея написах един коментар с подробно обяснение как я реших, като се стремях да не използвам if-еlse конструкция, нито swich case и т.н., защото по график още не сме ги изучили и гледам с минимални знания да реша задачата, без да използвам неща, които все още не сме взели. laugh

В самото начало на курса ни пообясниха за MSDN документацията (но повече за нея пише в книгата на Наков http://www.introprogramming.info/wp-content/uploads/2018/07/CSharp-Principles-Book-Nakov-v2018.pdf ), в чиято библиотека има каквото на човек му трябва за всякакви видове езици, но специално за dictionary (в задачката ми) изрових от http://www.tutorialsteacher.com/csharp/csharp-dictionary

Вкарваме dictionary (досущ речник), въвеждаме в него типове променливи и техните стойности и ги съхраняваме(в случая валутите и курсовете им), след което ги изписваме на конзолата в 3 отделни реда (в първия въвеждаме число, втория е за 1вата валута, от която преобразуваме във 2рата и съответно самата 2ра валута, в която искаме да видим крайния резултат) и печатим на конзолата, като си подполагаме със F2 да закръгли до втората запетая. В Judge ми даде 100/100. 

namespace Currency_Converter
{
    class Currency_Converter
    {
        static void Main(string[] args)
        {
            double money = double.Parse(Console.ReadLine()); 
            string firstCurrency = Console.ReadLine();
            string secondCurrency = Console.ReadLine();
            
            Dictionary<string, double> dict = new Dictionary<string, double>()
            { {"BGN", 1} , {"USD", 1.79549} , {"EUR", 1.95583} , {"GBP", 2.53405} };

            double result = money * (dict[firstCurrency] / dict[secondCurrency]);

            Console.WriteLine($"{result:F2} {secondCurrency}");
            
        }
    }
}

 

А относно dict - може да промените името му на currencies например или както пожелаете, но аз реших да го оставя така. 

Надявам се да съм била полезна. Късмет!

0
deforse avatar deforse 1 Точки

Въпросната задача я пропуснах. Иначе елегантно решение на "IttyBitty". 

Поздрави!

0
Nlzlatkov avatar Nlzlatkov 0 Точки

Моя код е по-скоро за графата "как да не го правим", но исках да не използвам твоя и същевременно да използвам взетото към момента за if-else. Да, голяма хамалогия е. Освен, че не са наименувани възможно най-добре, по-скоро мисля, че логиката би била интересна на някой. Ако намери грешка да се обърне към Judge- 100/100. :) Аз имам своите съмнения, но ще ги оставя тайна за сега :)))

Иначе-безспорно, твоя код е много "фин".

 

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

namespace CurencyConverter
{
    class Program
    {
        static void Main(string[] args)
        {
            double sum = double.Parse(Console.ReadLine());
            string exchangeFrom = Console.ReadLine(); //BGN,USD,EUR,GBP
            string exchangeTo = Console.ReadLine(); //BGN,USD,EUR,GBP

            double toBgn = 1;
            double bgnToUsd = 1.79549;
            double bgnToEur = 1.95583;
            double bgnToGbp = 2.53405;

            ////BGN
            if (exchangeFrom == "BGN" && exchangeTo != "EUR" && exchangeTo != "GBP") //BGN-USD
            {
                Console.WriteLine(Math.Round(sum / bgnToUsd, 2));
            }
            else if (exchangeFrom == "BGN" && exchangeTo != "USD" && exchangeTo != "GBP") //BGN-EUR
            {
                Console.WriteLine(Math.Round(sum / bgnToEur, 2));
            }
            else if (exchangeFrom == "BGN" && exchangeTo != "USD" && exchangeTo != "EUR") //BGN-GBP
            {
                Console.WriteLine(Math.Round(sum / bgnToGbp, 2));
            /////USD
            }
            else if (exchangeFrom == "USD" && exchangeTo != "EUR" && exchangeTo != "GBP") //USD-BGN
            {
                Console.WriteLine(Math.Round(sum * bgnToUsd, 2));
            }
            else if (exchangeFrom == "USD" && exchangeTo != "BGN" && exchangeTo != "GBP") //USD-EUR
            {
                Console.WriteLine(Math.Round(sum * bgnToUsd / bgnToEur, 2));
            }
            else if (exchangeFrom == "USD" && exchangeTo != "BGN" && exchangeTo != "EUR") //USD-GBP
            {
                Console.WriteLine(Math.Round(sum * bgnToUsd / bgnToGbp, 2));
            }
            //////EUR
            else if (exchangeFrom == "EUR" && exchangeTo != "USD" && exchangeTo != "GBP") //EUR-BGN
            {
                Console.WriteLine(Math.Round(sum * bgnToEur, 2));
            }
            else if (exchangeFrom == "EUR" && exchangeTo != "BGN" && exchangeTo != "GBP") //EUR-USD
            {
                Console.WriteLine(Math.Round(sum * bgnToEur / bgnToUsd, 2));
            }
            else if (exchangeFrom == "EUR" && exchangeTo != "BGN" && exchangeTo != "USD") //EUR-GBP
            {
                Console.WriteLine(Math.Round(sum * bgnToEur / bgnToGbp, 2));
            }
            ////GBP
            else if (exchangeFrom == "GBP" && exchangeTo != "USD" && exchangeTo != "GBP") //GBP-BGN
            {
                Console.WriteLine(Math.Round(sum * bgnToGbp, 2));
            }
            else if (exchangeFrom == "GBP" && exchangeTo != "BGN" && exchangeTo != "EUR") //GBP-USD
            {
                Console.WriteLine(Math.Round(sum * bgnToGbp / bgnToUsd, 2));
            }
            else if (exchangeFrom == "GBP" && exchangeTo != "BGN" && exchangeTo != "USD") //GBP-EUR
            {
                Console.WriteLine(Math.Round(sum * bgnToGbp / bgnToEur, 2));
            }

 

 

 


        }
    }
}

 

0
16/09/2018 18:46:01
Nlzlatkov avatar Nlzlatkov 0 Точки

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

0
IttyBitty avatar IttyBitty 26 Точки

Да, и аз обмислих същия вариянт, но ми се струваше твърде дълго, а гледам да избягвам да пиша подобни кодове. Иначе браво, върши работа кода на Nlzlatkov

0
18/09/2018 02:41:34
Nlzlatkov avatar Nlzlatkov 0 Точки

Нещо не виждам частта от коментара ти за toyshop. И на мен ми гърми, а в visual работи. Но явно нещо грешно имплементираме условието. Според мен разковничето е в if-a, т.е. каква ще напишем в него. Че if-a е свързан с това, дали играчките са 50, повече или по-марко, това е ясно. Пробвах да вкарам променливите в if-else, пробвах извън и като цяло упоритж не гледах видеото, макар, че когато се решиш да го прегледам установих, че не сме я решили. С моето взех 60/100.

0
IttyBitty avatar IttyBitty 26 Точки

Да, тъкмо попитах за Toy Shop къде бъркам и точно след това си намерих грешката и просто edit-нах коментара. :D Иначе бях изпуснала едното "=" на втория if, където пресмятах дали ще стигнат парите за ваканцията. Даваше ми още в самото начало 90/100 и доста упорито търсех грешката. Вече е 100 от 100. Ето и моя код: https://pastebin.com/32Wh0wAS (тук не съм добавила все още равното при изчисленията дали печалбата ще стигне за ваканцията и ако да, да изпише "Yes, ...! "). Мисля, че пиша що-годе четливи кодове.

Първо въвеждам в конзолата входните данни, после написвам цените на всяка играчка на отделен ред, пресмятам всички спечелени пари като умножавам всяка една играчка с нейната цена и ги събирам. След това смятам всички играчки общо, въвеждам променливата discount (отстъпка) и пиша, че е равна на 0, защото след това от if-а се променя стойността на отстъпката и трябва да я използвам по-нататък в кода, а не да "живее" само в if-а. След това смятам крайната печалба, наема (той задължително се вади, не е нужден if за него), също и печалбата (profit) и накрая използвам втория if, където ако печалбата е по-голяма ИЛИ РАВНА! (за това равно говорех, че съм изпуснала :D) да изпише на конзолата, че парите стигат, else, че не достигат. :D 

0
BukTopcku avatar BukTopcku 0 Точки

Здравейте колеги, относно задачата с лицето на правоъгълника стигнах до задънена улица и честно казано като човек който няма опит, немога да разбера какво не е наред. Програмата работи, вади значи до втория след десетичната запетая, но.... тука идва голямото НО , закръгля ... , а не трябва .. 

var x1 = double.Parse(Console.ReadLine());
            var y1 = double.Parse(Console.ReadLine());
            var x2 = double.Parse(Console.ReadLine());
            var y2 = double.Parse(Console.ReadLine());

            var lenght = Math.Abs(x1 - x2);
            var weight = Math.Abs(y1 - y2);

            var area = Math.Round(lenght * weight);
            var perimeter = Math.Round(2 * (lenght + weight));

            Console.WriteLine($"{area:f2}");
            Console.WriteLine($"{perimeter:f2}");

Не моля за правилно решение, а за разяснение къде бъркам , и какво трябва да се случи, ако ще дори само насока :)

0
Iv_Konov avatar Iv_Konov 383 Точки

Здравей, 

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

            var area = Math.Round(lenght * weight);
            var perimeter = Math.Round(2 * (lenght + weight));

            Console.WriteLine($"{area:f2}");
            Console.WriteLine($"{perimeter:f2}");

 

Относно Math.Round, ако не укажеш до кой знак да се закръглява, той маха всичко след  запетайката!

(вероятно точно този ефект не го искаш)

double round = Math.Round(45.67852, 2);     // 45.68 -  в този случай закръгляване до втори знак

 

Поздрави,

Иван
 

0