Loading...
tuxxy avatar tuxxy 3 Точки

PB C# - Conditional Statements - 04. Metric Converter

Привет,

Другата седмица ще взимаме if-ове, но аз като един примерен ученик се опитвам да вървя малко по напред с материала и си решавам задачите предварително както мога и после гледам да попивам още от материала, Курсът го изгледах целия още преди да съм го започнал принципно. За тази задача написах един код, но като видях какво решение е дадено се хванах за главата (това ми е второто плясване по челото за дължина на кода) колко съм си усложнил живота. Та... Просто имам едно флуудене във форума с въпрос: Дайте ми някакво трето мнение по въпроса къде ми куца нещо (освен може би математиката) и къде да наблегна повече та да не си правя толкова сложна иначе кратката задача. Или пък да си карам курса и да не ми дреме, че пиша 60 реда вместо 10 - то апетита идва с яденото :)

Условието (04 задача) - https://softuni.bg/downloads/svn/programming-basics-v4/course-content/course-resources/CSharp/03.PB-CSharp-Conditional-Statements/03.3%20PB-CSharp-Conditional-Statements-Exercise.docx

Да се напише програма, която преобразува разстояние между следните 3 мерни единици: mm, cm, m. Използвайте съответствията от таблицата по-долу:
входна единица    изходна единица
1 meter (m)    1000 millimeters (mm)
1 meter (m)    100 centimeters (cm)

Решението ми - https://pastebin.com/eLvzAmcB

П.П. Благодаря Ви СофтУни. Запалихте един човек, който първо е хванал отвертката да седне пред монитора.

Тагове:
0
Programming Basics
svetoslav_0 avatar svetoslav_0 1009 Точки

Бях тръгнал да ти описвам примерно решение, с което ще стане по-кратко и по-лесно, но всъщност забелязах, че това вече е направено в насоките под условито на задачата. Каквато и да е входната мерна единица, првърни я в метри. После от метри в изходната мерна единица. А ти сравняваш всяко с всяко, което няма лошо, но ако имаш 10 мерни единици - всяко с всяко означава 100 проверки, а ако обръщаш първо в метри - 10 проверки, после от метри в изходната - още 10 проверки - общо 20. Значително по-малко :)

1
Krassi_Daskalova avatar Krassi_Daskalova 2 Точки
С JAVA, но ще ти помогне :)

import java.util.Scanner;

public class Metric {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        double num = Double.parseDouble(scanner.nextLine());
        String measure = scanner.nextLine();
        String finalMeasure = scanner.nextLine();
        double finalNum = 0;

        if (measure.equals("mm") && finalMeasure.equals("cm")) {
            finalNum = num / 10;
        } else if (measure.equals("mm") && finalMeasure.equals("m")) {
            finalNum = num / 1000;
        } else if (measure.equals("cm") && finalMeasure.equals("mm")) {
            finalNum = num * 10;
        } else if (measure.equals("cm") && finalMeasure.equals("m")) {
            finalNum = num / 100;
        } else if (measure.equals("m") && finalMeasure.equals("mm")) {
            finalNum = num * 1000;
        } else if (measure.equals("m") && finalMeasure.equals("cm")) {
            finalNum = num * 100;
        }
        System.out.printf("%.3f", finalNum);
    }
}
0
20/03/2019 15:17:18
Iv_Konov avatar Iv_Konov 383 Точки

Здравей, tuxxy,

 

Да, и според мен най-оптималното решение е по предложението на  svetoslav_0. Аз бих добавил и кратък пример със switch, който за еднообразни променливи ми се струва най-удобен за четене и разбиране. Има и още един детайл - когато условието на задачата се основава на метри (т.е. дадено е 1м на какво се равнява), то най-удобно е да ползваме метрите за междинно превръщане (не се налага да смятаме ръчно). Добавил съм за яснота и инчове от себи се,  за да се покаже, че всяка нова мярка води до два нови реда в кода... 

Разбира се, не трябва да се забравя и превръщането на метър в метър  (не се знае как е настроен Съдията и дали търси такъв вход /изход) - ние и на ум го смятаме, но Съдията преценява... :)  Това го пиша предвид решението на Krassi_Daskalova - там не виждам превръщане на m/m, mm/mm и cm/cm, дори и да минава през Съдията 100/100, не ми се струва съвсем коректно...

 

==================================

1 meter (m)    1000 millimeters (mm)
1 meter (m)    100 centimeters (cm)
1 meter (m)    39.37 inches (inch)

==================================

            double sumToConvert = double.Parse(Console.ReadLine());
            string inputMeasure = Console.ReadLine();
            string outputMeasure = Console.ReadLine();

            //пример: на колко инча са равни 2мм? - (2мм / 1000) * 39.37

            switch (inputMeasure) // тук превръщаме всичко към метри
            {
                case "m": sumToConvert /= 1; break;
                case "mm": sumToConvert /= 1000; break;
                case "cm": sumToConvert /= 100; break;
                case "inch": sumToConvert /= 39.37; break;
                default:
                    break;
            }

            switch (outputMeasure) // а тук получените метри ги превръщаме към търсената мярка
            {
                case "m": sumToConvert *= 1; break;
                case "mm": sumToConvert *= 1000; break;
                case "cm": sumToConvert *= 100; break;
                case "inch": sumToConvert *= 39.37; break;
                default:
                    break;
            }

            Console.WriteLine($"{sumToConvert:f3}");

=======================================

 

Поздрави,

Иван

0
tuxxy avatar tuxxy 3 Точки

Изясниха ми се неща и изникнаха други въпроси с които почвам да се мъча след малко. Благодаря на всички Ви за отговорите.

0
EvgeniJD avatar EvgeniJD 35 Точки

Направих го по 3 различни начина и в judge не мога да изкарам повече от 33/100. Аз ли бъркам някъде или има проблеми с judge?Ако някой е изкарал 100/100 нека да си публикува кода, моля!

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