Loading...
rosenrusev avatar rosenrusev 175 Точки

[Homework] C# Basics - Conditional Statements

Здравейте,

 

Отварям тема за новото домашно.

Решенията ми ще следват едно по едно след като съм готов с всяко от тях :)

1. Problem 1 - Exchange If Greater . Използвал съм  XOR алгоритъм за размяна на стойностите на две променливи без да е необходима трета. Повече инфо тук: XOR_swap_algorithm .

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

В тази задача третата проверка е объркана. Трябва резултата да е 4.5 5.5 (по условие). Втората грешка в условието е, че стойностите не са целочислени (третата проверка).

2. Problem 2 - Bonus Score . Използвал съм switch-case.

3. Problem 3 - Check for a Play Card. Използвал съм switch statement.

4. Problem 4 - Multiplication Sign. Допълнителна информация към задачата Subset_sum_problem . Така написана задачата обхваща 8 случая при комбинация на всички позиции с положителна и отрицателна стойност. Използвал съм if оператори.

5. Problem 5 - The Biggest of Three Numbers . Използвал съм if-else.

6. Problem 6 - The Biggest of Five Numbers. Използвал съм 5 условия if-else.

7. Problem 7 - Sort 3 Numbers with Nested Ifs . Използвал съм if-else.

8. Problem 8 - Digit As Word . Използвал съм switch statement.

9. Problem 9 - Play with Int, Double and String . Използвал съм switch statement.

10.//TODO. Как се парсва дата и време Инфо от msdn .

11.//TODO

12.//TODO

Тагове:
35
Programming Basics
Sekklow avatar Sekklow 3 Точки

Problem 1 - Няма нужда да оставяш conditional statements na default-а. 

Problem 5 - Ред 27     else if (c > a) можеш да го заместиш с else.

0
Filkolev avatar Filkolev 4482 Точки

@peter_katarov,

Копирам ти въпроса от темата, която беше заключена по-рано днес:

"Здравейте!

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

Моето решение на задачата, напълно работещо, е следното:

http://pastebin.com/qygT26dS

На 14-и ред, където въвеждам if expression-а за границите на beer time-а, първоначално използвах && , но програмата не сработи и за всеки валиден час връщаше "Non-beer time :(" . Когато смених оператора на || , програмата сработи безотказно.

 if ((time > start) || (time < end))

Но нали || е оператор "или", т.е. true || false => true ? В такъв случай, ако въведеното време е след start-а, но и след end-а, целият expression би приел стойност True и пак би се изпълнил statement-а долу (beer time) .

Защо не работи с && ( и ) , а работи  с || ( или ) ?"

 

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

Пробва ли да дебъгнеш? Виж как се парсват датите - 3 сутринта е преди 1 следобед, от там идва проблемът с &&.

Може примерно да го заобиколиш като обърнеш нещата - ако въведеният час е между 3 АМ и 1 РМ - не е бирено време, биреното време остава в else. За целта start ще е 3 АМ, end ще е 1 РМ. Има различни варианти.

1
Dakov avatar Dakov 4 Точки

Едно ламерско решение от мен за 5-та и 6-та задача:

Mod Edit: Нарушена т. 12 от Правилата на форума: Във всеки пост е позволено цитирането на не повече от 15 реда код. Ако искате да споделите по-дълъг код, използвайте сайтове като Pastebin и Github Gist).

До: админа сори,

първи линк в гибхът, сори ако нещо не баца, това е 6та по ЛАМЕРСКИ:

https://gist.github.com/Dakov1/684ca1a518dd4dd17810

лека от мен,

2
15/10/2014 18:11:54
Ivan.Nikolov avatar Ivan.Nikolov 8 Точки

cool решенията си ги бива, въпреки че се искат цикли за 6. Интересни варианти.

0
nadicako avatar nadicako -1 Точки

Аз си представях задача 1 по-проста. Не съм задавала 3та променлива и имам само едно условие. ТУК.

-1
RoYaL avatar RoYaL Trainer 6849 Точки

Залагам, че exchange values of variables означава, да присвоиш стойността на съответните променливи разменено и чак тогава да принтираш :)

2
Mkey5 avatar Mkey5 16 Точки

Браво ,колега :)) !

1
wolfylambova avatar wolfylambova 4 Точки

Здравейте :)
Някой може ли да ми помогне и да ми каже какво липсва на кода ми за задача 14.Pairs.
По прицип си върви, но вместо output ми изписва на конзолата System.Collections.Generic.List`1[int32].
 Тъй като тази грешка доколкото знам е от типа ''ArgumentOutOfRangeException: Argument is out of range.'',
(въпреки че не разбирам къде гърми откъм памет) опитах и с long,BigInteger и тн, но едва ли е това.
Ето го кода:

Mod Edit: Нарушена т. 12 от Правилата на форума: Във всеки пост е позволено цитирането на не повече от 15 реда код. Ако искате да споделите по-дълъг код, използвайте сайтове като Pastebin и Github Gist).

0
22/10/2014 18:01:09
Filkolev avatar Filkolev 4482 Точки

В C# така не може да принтираш елементите от даден списък (в Java става). Трябва ти за целта цикъл, примерно foreach. Това е грешката при принтирането накрая.

Излизането от обхвата на масива става заради ограниченията на втория цикъл, трябва да е: 

for (int p = 0; p < arrayNumbers.Length - 1; p += 2)

В противен случай на последнпото завъртане ще излезеш от границите.

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

Всъщност, ти друга грешка получаваш ли освен че не се принтира това, което искаш? Не се разбира от въпроса. Принтирането на списък по този начин ти връща типа данни, това не е грешка Argument Out Of Range нито Out Of Memory.

1
22/10/2014 17:35:47
Bosco avatar Bosco 3 Точки

Може ли някой да ми обясни какво се печели с използването на nested ifs при положение че има по кратки варианти (които също са в материала който сме учили)? Например на 5-та задача, гледам няколко колеги са я решили чрез

if (a > b)

            {
                if (a > c)
                {
                    Console.WriteLine("{0}", a);
 
и т.н
 
А аз я реших чрез
 
 if (a > b && a > c)
            {
                Console.WriteLine("The biggest number is: {0}", a);
            }
            else if (b > a && b > c)
            {...........................................................
 
И после като погледнах решенията на другите и се учудих защо го правят така, дали аз пак не съм разбрал нещо, какво се печели с иф във иф-а? Четвърта задача също няколко човека бяха писали 3-4 иф-а един в друг и не можах да го разбера. Може да се направи по просто с иф на един ред чрез операторите за сравнение. Така го виждам аз поне, и за това питам ако имам някакъв gain от nested ifs, в тези случаи, който съм пропуснал undecided
0
29/10/2014 11:02:04
g.stoyanov avatar g.stoyanov 776 Точки

if(a>b)

{

    if(a>c)

    {

         return a;

     }

    else

    {

        return c;

     }

}

else if(b > c)

{

    return b;

}

else

{

    return c;

 }

 

При този начин се стига до отговора на задачата с две логически проверки ;), независимо кое от числата е по голямо. Докато при твоето решение може да стигне броиката на логическите проверки до 6.

1
29/10/2014 11:32:02
djumi91 avatar djumi91 6 Точки

Това са моите решения. Отворен съм към всякакви критики :)

Решения

0
jumparo avatar jumparo 26 Точки

Здравейте,колеги

Доста се порових ,така и не разбрах условието на четвърта задача!Прочетох в Google за Subset sum problem,но от примерите в домашното изобщо не ми се вързаха. Ще може ли някой да ми го обясни ?
Може и на лично.

Благодаря предварително!

0
SimeonStoykov avatar SimeonStoykov 114 Точки

В четвърта задача въвеждаш 3 числа и приемаш че се умножават 3-те и спрямо знаците им трябва да прецениш какъв ще е знака на произведението (на резултата от умножението на 3-те числа) и да го принтираш на конзолата. Например, ако трите числа са положителни трябва да отпечаташ +, защото като умножиш 3 положителни числа резултата е положително число. Ако обаче едното от 3-те е отрицателно, то резултата пак ще е отрицателно, например: -5 * 5 * 2 = -50, тоест трябва да отпечаташ само "-" на конзолата (интересува те знака, а не самия резултат и самите числа). Ако имаш 2 отрицателни обаче с 1 положително то резултата е +, защото минус по минус дава плюс и като го умножиш по плюс пак си остава плюс. А ако дори едно от числата ти е 0, то крайния резултат от умножението винаги ще е 0 и затова отпечатваш 0 на конзолата. Надявам се да разбра идеята.

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