Софтуерно Инженерство
Loading...
Lescet avatar Lescet 25 Точки

Задачите: Metric Converter и Speed Info

Здравейте,

Двете задачи са от Simple Conditional Statements, едната metric я решавам със Switch Case, другата я решавам като използвам if else .. и операторите && и || . Въпросът ми може ли да се решат само с If else без операторите && и без суитч кейс ... При втората, като я решавам с if else ми прави повече от една проверка в смисъл изписва ми едновременно ако числото е над 100 и над 1000, например ако е 1100 .. Благодаря !

Тагове:
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

Аии разбира се, че може. Някога в езиците е нямало switch, а програми пак са се писали :-) В някои езици все още няма, де (пр. python).

Ако смениш case-овете с elseif-ове няма причина да не стане.

switch (age) {

      case 22: // do something         break;

      case 25: // do something else          break;

}

 

Е абсолютно същото като

if (age == 22) { // do something } else if (age == 25) { // do something else }

Ако искаш без else if ще трябва да проверяваш дали е и различно от предходните условия. Помисли над това : Питаш дали годините на някого не са повече 20, после ELSE IF питаш дали не са повече от 10. Ако въведеш 30, ще влезе в първата проверка. Но нека сега погледнем нещата с отделни IF-ове без ELSE IF - ще влезе и в двете проверки. Вариантът ти е във втората, да изключиш първата - т.е. По-големи от ДЕСЕТ и едновременно по-малки от ДВАДЕСЕТ.

if (age > 20) {

   // do smth

} else if (age > 10) {

   // do smth else

}

 

би било

if (age > 20) {

   // do smth

}

if (age > 10 && age <= 20) {

   // do smth else

}

 

Логическите оператори са евентуално или вложени условия или паралелни такива. Замисли се - ако искаш годините да са равни на 22 ИЛИ на 25 това са две отделни проверки (паралелни)

if (age == 22) {  // do something  }

if (age == 25) {  // do exactly the same thing }

 

Съответно ако искаш годините да са по-големи от 25 и едновременно по-малки от 30, това означава че след като влезеш в условието да са по-големи от 25, трябва да провериш дали все пак са по-малки от 30. Т.е. при подадени години 50 ще влезеш в първото условие, но вложеното условие за 30 ще ги филтрира. Обаче при 27 ще влезе в първото условие и след това и във второто.

if (age > 25) {

    if (age < 30) {

          // do smth for age > 25 && age < 30

     }

}

Може би за такива неща трябва да се замисляш с думи, не с код, за да не се бъркаш. Кодът се пише лесно. Логиката е важна. В интерес на истината това са неща, които най-вероятно са говорени в училище в часове по Логика (мисля така се казваше предметът?). Например казвай си ги с такива изречение "Ако годините на Пешо са повече от 25 и по-малко от 30, той трябва да..." и неговият еквивалент "Ако годините на пешо са повече от 25, ако след това годините па Пешо са по-малко от 30, той трябва да..."

Но в крайна сметка защо би искал да усложняваш живота си и да не използваш определени операции, оператори или конструкции?

3
Lescet avatar Lescet 25 Точки

Благодаря за изчерпателния отговор, оценявам го! Идеята беше без логически оператори и без switch case за задачата Speed info, Защо не искам да ги ползвам, предположих, че щом е Simple Conditions и все още не сме ги взели, може би е хубаво да пробваме да не ги използваме :) Ако ги ползвам я решавам без проблем.  : ))

0
gabi.ivanova avatar gabi.ivanova 370 Точки

Ако знаеш нещо, ползвай го без значение дали сте го взели или не. :) Ако просто се чудиш дали може да спестиш логическите оператори (ако съм разбрала правилно) в условието на if-a - да можеш, с вложени if-ове
 

else if (speed <= 1000 && speed > 150)
{
    Console.WriteLine("ultra fast");
}


Nested ifs

else if (speed <= 1000)
{
    if (speed > 150)
    {
       Console.WriteLine("ultra fast");
    }
}

 

А операторът || може да се избегне с 2 if-a като проверяваш за всяко условие. 
 

0