Loading...
milen8204 avatar milen8204 296 Точки

[Homework] C# Basics - Console Input/Output - Problem {5} - Formatting Numbers

Здравейте,

Ето моето решенмие на задачата, проблема идва от там, че при отпечатването на "b" или аз не мога да го направя или е допусната малка неточност в отговорите.

трябва да се получат следните резултати:

a b c result
254 11.6 0.5 |FE   |0011111110|        11.60|0.500      |
499 -0.5559 10000 |1F3  |0111110011|        -0.56|10000     |
0 3 -0.1234 |0     |0000000000|              3|-0.123     |

При отпечатване на резултата мястото (placeholder-а) за "b", съм го форматирал по следния начин {5,10:#.##}, което работи коректно само за 3-тия случай когато b = 3, когато b = 11.6, показва 11.6 (а не 11.60), а при b = -0.5559, показва "-.56". Някой от вас ще ми каже "Що не го форматираш така: {5,-10:0.00} или {5,-10:F2}", но и при двата случая работи коректно за 1-вия и втория пример, но при b = 3 покава 3.00, а не 3. От тук си мисля, че автора на задачата или е пропуснал в резултата ".00" след 3-ката или при 11.6 е сложил нулата по инерция. Естествено, че аз съм пълен лаик във форматирането и може да има и трети вариант и затова пускам тази тема :).

1
Programming Basics 17/10/2014 16:50:57
StanDimitroff avatar StanDimitroff 90 Точки

На мен ми работи коректно. Ето А защо има 5 в placeholder-a? Ами 3 като реално число си е 3.0.....0, а тъй като изрично задаваш да е с две цифри след десетичната запетая ти го форматира така.

0
milen8204 avatar milen8204 296 Точки

 StanDimitroff  , не ти работи коректно виж добре резултатите при третия пример , когато b = 3. Дава ти "3.00", а в условието е посочено, че трябва да ти дава "3".

Освен това ако позволиш един два съвета: в Console.Write("{0,-10:x}",intA); може да замениш "х" с "Х" за да ти изписва с главни букви, числото в 16-тична бройна система (както е в примера). Така както си го направил ти пропускаш, че в резултата има и вертикални черти, които разделят резултатите за а, b, и с един от друг. :), Но иначе основната идея си я схванал според мен.

1
nikolai4enceto avatar nikolai4enceto 1 Точки

В условието пише, че "b" и "c" трябва да са floating-point numbers, което значи, че автоматично ще ти се добавя ".00"(разбира се, ако ги парсваш към floating-point променлива). Аз лично си мисля за един вариант: Можеш да провериш дали въведеното число е цяло и, ако е такова, да го превърнеш в целочислено и след това да го принтираш :? не знам дали ще стане. Все пак си мисля, че има допусната грешка в условието :)

0
Lyubo avatar Lyubo 172 Точки

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

0
milen8204 avatar milen8204 296 Точки

@Lyubo  Знам я тази тема, но още е въпрос на обсъждане дали е добре или не да има отделна за всяка задача или да се изсипят всички в една тема (както е направил колегата, в посочената от теб тема). Моето лично мнение е, че не е добре да се обсъждат 14 задачи в една тема. Освен това тази тема пусната от колегата да си покаже решенията, а моята е по - скоро за неточност в условието или нещо такова и съвсем не съм съгласен, че темата ми се повтаря с посочената от теб.

1
Lyubo avatar Lyubo 172 Точки

Правила на форума: 9. Когато пускате тема за домашно, задължително пускайте само една тема за цялото домашно. Теми за всякa задача по отделно ще бъдат изтривани.

Мисля че темите се припокриват, защото освен че може да си постнеш решението там, може и да поискаш съвет или да зададеш въпрос относно задачата, и не на последно място може да видиш няколко различни решения на задачата. Засега мисля че задачите трябва да са в една тема защото са кратки, а и това улеснява търсенето за момента.

0
milen8204 avatar milen8204 296 Точки

Ако беше моята тема, начин за решение на проблема,  да напълно си прав, но по - скоро е за проблем в условието, не мислиш ли ?

1
tinta avatar tinta 4 Точки

Така или иначе е отворена тема за конкретната задача - ще питам тук.

Проверката 0 <= a <= 500 я направих така:

int a;
bool isAInt = int.TryParse(Console.ReadLine(), out a) && (0 <= a && a <= 500);
Console.WriteLine(isAInt ? ("The value of the integer is correct: " + a) : ("Please enter a correct value for integer (0 <= a <= 500)!"));

Как ви се струва? Чудя се така ли да го оставя или да го заменя с while loop...

Въобще има ли нк правило - кое е по-добре да се ползва?

0
milen8204 avatar milen8204 296 Точки

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

1
Tisho_Todorov avatar Tisho_Todorov 8 Точки

Здравейте, Изглежда колегата Милен е напълно прав за задачата и условието при мен се получи същия проблем с b = 3.00 в третия вариант, както гледам не е имало и конкретен отговор от 19.03.2014 досега. Мисля, че би било добра практика да има теми които да не се доблират както казват правилата, но все пак темата е от преди 6 месеца - добра практика е да се пускат нови теми от новите групи студенти, които сега се сбласкват с различни проблеми от тези на студентите от преди 6 месеца за да може да се отговаря на актуалните за момента въпроси и проблеми за пример може да си напишем програма която изчислява възможността студент който е учил съответното ниво преди 6 месеца да ви отговори на въпроса. Ето и моят опит за решаването на задачата:

Останалите решения са на адрес: http://pastebin.com/u/Tisho_Todorov

1
17/10/2014 23:35:22
alex.mitev avatar alex.mitev 20 Точки

Здравейте, принципно може да се изместват и с PadRight/PadLeft():

 

 string bTwoDecimal = String.Format("{0:F2}", b).PadLeft(10);

Пример 

0
Samuil.Petrow avatar Samuil.Petrow 1550 Точки

Привет,

Само искам да вметна, че падванията в общия случай в Judge при задачите с рисуване са забранени да се ползват. Ако някой се чуди защо не му се получава очакваното изпечатване :) Иначе в реалната практика е доста удобно и често използвано.

0
alex.mitev avatar alex.mitev 20 Точки

Виж, това не го знаех, мерси.

Като се замислиш, с падване лесно могат да се попълват символите за рисуването:) има логика

 

 

1
inktech.n.kikov avatar inktech.n.kikov 42 Точки

хм страно и при мен не се получава примерни 11.6 ми е 11.60, а 3 - 3.0.Ето това е кода,който написах:

class FormatingNumber
{
    static void Main()
    {
     Console.WriteLine("insert an integer number:");
     int hexNumber = Convert.ToInt32(Console.ReadLine());
     string hex = Convert.ToString(hexNumber, 16);
     string toBinary = Convert.ToString(hexNumber, 2);
     Console.WriteLine("insert a floating point number:");
     double numA = double.Parse(Console.ReadLine());
     Console.WriteLine("insert one more float number:");
     double numB = double.Parse(Console.ReadLine());
     Console.WriteLine("|{0,-10} |{1,10}|{2,10:F2}|{3,-10:F3}|", hex.ToUpper(), toBinary.PadLeft(10, '0'), numA, numB);
       
    }
}

0
darimi27 avatar darimi27 8 Точки

http://pastebin.com/QjdpUWBs така го направих аз. Всички тестове минават коректно , но ми дава 80т. в judge. На последния гърми , за това няма да е лошо да качите и тестовете от джъдж.

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