Переключатель с диапазоном значений

0

Поэтому я должен определить базовый оклад для сотрудника на основе количества лет работы сотрудника в компании.

Я должен сделать это, используя структуры переключателей, и мне заданы диапазоны следующим образом:

Количество лет работы_ __ _ Базовая зарплата

 0 – 5                  $ 9,500 
 6 – 11                 $12,700 
12 – 17                 $15,300 
18 – 29                 $22,600 
 >= 30                  $26,800

Итак, как мне сделать диапазоны для случаев, если я не хочу, чтобы правильный случай для всех чисел?

Это не слишком много хлопот с этим, но тогда я должен выяснить комиссию, основанную на продажах, и имеет диапазоны $ 0-3999.99 и $ 16,000-23,999.99.

Теги:
visual-studio
switch-statement

3 ответа

1
Лучший ответ

Поэтому для первой части вам просто нужно объявить коммутатор, где несколько случаев следуют одному коду. Как это:

int baseSalary
switch (yearsWorked)
{
  case 0:
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    baseSalary = 9500;
    break;

  case 6:
  case 7:
  case 8:
  case 9:
  case 10:
  case 11:
    baseSalary = 12700;
    break;

  ... etc ...
}

Для второй части коммутатор для каждого отдельного номера в диапазоне тысяч довольно неосуществим, но с небольшим умным разделением его можно сделать одинаково легким. Если вы разделите 2000 на 1000, вы получите 2, и если вы разделите 2500 на 1000, вы также получите 2 (с остатком 500). Используя это, вы можете сгенерировать оператор switch:

int sales = 2100;
int salesRange = sales / 1000; // (salesRange = 2)

int commission
switch (salesRange)
{
  case 0:  // $0-999 sales
  case 1:  // $1000-1999 sales
  case 2:  // $2000-2999 sales
  case 3:  // $3000-3999 sales
    commission = <some number here>;
    break;

  ... etc ...
}

При этом предполагается, что "использовать переключатель" является частью школьного задания или аналогичного. Как говорили другие люди, вам лучше использовать операторы if с диапазоном (например, if (sales >= 0 && sales <= 3999)), чем использовать переключатель для такого рода вещей.

  • 0
    Отдел это решение, спасибо!
  • 0
    Назначение заставило нас сначала сделать это, используя операторы if, а затем с делами Если было намного проще.
Показать ещё 1 комментарий
2

Если вы вынуждены использовать инструкцию switch то рассмотрите тот факт, что несколько случаев могут быть соединены вместе:

switch (years) {
  case 0:
  case 1:
  case 2:
  ..
    return 9500;
  case 6:
  case 7:
  ..
}

Но утверждение if кажется более подходящим для проблемы:

if (years >= 0 && years <= 5)
  ..
else if (years >= 6 && years <= 11)
  ..
  • 0
    К сожалению, я не могу использовать заявления if вообще.
  • 0
    Я выписал смену лет таким образом, но затем для комиссии диапазон слишком велик, чтобы сделать это.
0

Если вам необходимо динамическое создание диапазонов без жесткого кодирования, вы можете использовать этот фрагмент

struct BaseSalary
{
    int requiredExperience; // years in company
    int amount;             // salary amount
};

struct SortCondition
{
    bool operator()(const BaseSalary& lhs, const BaseSalary& rhs)
    {
        return lhs.requiredExperience < rhs.requiredExperience;
    }
};

struct SearchCondition
{
    bool operator() (const BaseSalary& s, int exp)
    {
        return s.requiredExperience < exp;
    }
};

// Fill base salary list in any appropriate way

BaseSalary s1;
s1.requiredExperience = 3; // [0 - 3]
s1.amount = 3500;

BaseSalary s2;            // (3 - 7]
s2.requiredExperience = 7;
s2.amount = 7000;

BaseSalary s3;              // (7-10]
s3.requiredExperience = 10;
s3.amount = 11000;


std::vector<BaseSalary> salaries;
salaries.push_back(s2);
salaries.push_back(s3);
salaries.push_back(s1);

// Sort salaries in ascending order of experience

std::sort(salaries.begin(), salaries.end(), SortCondition());


// Get base salary based on experience

int exp_to_search = 5;

std::vector<BaseSalary>::iterator it = std::lower_bound(salaries.begin(), salaries.end(), some_exp, SearchCondition());
if(it == salaries.end())
{
    // > 10 years
}
else
{
    int amount = it->amount;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню