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