Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.83
disker
2 / 2 / 0
Регистрация: 25.01.2012
Сообщений: 88
#1

Диапазон значений - C++

30.01.2012, 18:38. Просмотров 8232. Ответов 7
Метки нет (Все метки)

Числу B нужно присвоить значение в зависимости от того, какое значение у числа А, но проблема в том, что конкретного значения числа А нет. Оно может лежать в таких 5-ти отрезках:

1. [0..0.2)
2. [0.2..0.4)
3. [0.4..0.6)
4. [0.6..0.8)
5. [0.8..1]

Я так подозреваю, что тут нужно использовать что-то вроде оператора switch. Когда-то давно писал программу на QBasic и там, если не ошибаюсь, можно было задать диапазон значений для оператора case. То есть что-то такое, было давно, поэтому код уже точно не помню:
C++
1
2
3
4
5
сase [0..0.2): операция 1
case [0.2..0.4): операция 2
case [0.4..0.6): операция 3
case [0.6..0.8): операция 4
case [0.8..1]: операция 5
Как с этим обстоят дела в С++ ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 18:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Диапазон значений (C++):

Выход за диапазон значений - C++
Как грамотно проверить выход за диапазон значений при операциях возведение в степень, квадратный корень, умножить, делить, плюс, минус....

Диапазон значений в switch - C++
Доброго времени суток. Совсем детский вопрос наверное, но. Как сделать в кейсе диапазон значений, как в делфи 'A'..'Z'?

Диапазон значений указателей - C++
Здравствуйте! Подскажите пожалуйста, как узнать ограничения на значение указателей в системе?

Диапазон значений массива. - C++
Подскажите, пожалуйста, не пойму задачи. В программе из листинга указан же диапазон, и ar указатель... #include <iostream> using...

Диапазон значений для переменных - C++
Всем привет. Недавно начал изучать язык с++ и возник вопрос при решении задачи. Как на языке с/с++ задать конкретный промежуток значений...

Как проверить диапазон значений? - C++
Как в С++ проверить диапазон значений. например : 0<=k<=35.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.01.2012, 18:44 #2
Цитата Сообщение от disker Посмотреть сообщение
Как с этим обстоят дела в С++ ?
На Си можно так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   int a = rand() % 12;
   
   switch (a)
   {
   case 0 ... 2:
      printf("0-2\n");
      break;
      
   case 3 ... 7:
      printf("3-7\n");
      break;
      
   case 8 ... 9:
      printf("8-9\n");
      break;
      
   default:
      printf("over 10\n");
   }
   
   return 0;
}
На C++ придется подходить более серьезно.
1
Teravisor
31 / 31 / 3
Регистрация: 07.08.2011
Сообщений: 89
30.01.2012, 18:46 #3
Я бы писал
C++
1
2
3
4
5
if((B>=0)&&(B<0.2))A=1;
//Копипаст, изменение цифр
else if((B>=0.2)&&(B<0.4))A=1;
else if((B>=0.4)&&(B<0.6))A=1;
//И т.д.
Или сделал бы макрос, чтобы он за меня это делал. Например
C++
1
2
3
#define Fignya(X,Y,Z) if((B>=X)&&(B<Y))A=Z
Fignya(0,0.2,1);
Fignya(0.2,0.4,2);
Ну или не макросом, а функцией. как - тоже можно легко сообразить.

При любом из моих вариантов оно будет работать, но... *WTF/minute зашкалит*
З.Ы. я не знаю способа заставить свитч работать нормально с дробными. Может кто научит?)
1
fasked
Эксперт С++
4937 / 2517 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.01.2012, 18:54 #4
Всегда можно просто набросать горстку if-else-statements и сделать из нее отдельную функцию

C++
1
2
3
4
5
6
7
8
9
10
int calculate_b(int a)
{
   if (a >= 0 && a < 10)
      return 0;
   else
   if (a >= 11 && a < 20)
      return 1;
   else
      return 2;
}
Чуть усовершенствова получаем такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename T>
bool in_between(T a, T min, T max) 
{
   return a >= min && a <= max;
}
 
int calculate_b(int a)
{
   if (in_between(a, 0, 10))
      return 0;
   else
   if (in_between(a, 11, 20))
      return 1;
   else
      return 2;
}
Можно вообще сделать enum, который будет обозначать диапазон значений и уже его использовать в switch:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
enum b_range
{
   B_RANGE_0,
   B_RANGE_1,
   B_RANGE_2
};
 
template<typename T>
bool in_between(T a, T min, T max) 
{
   return a >= min && a <= max;
}
 
b_range get_range(int a)
{
   if (in_between(a, 0, 10))
      return B_RANGE_0;
   else
   if (in_between(a, 11, 20))
      return B_RANGE_1;
   else
      return B_RANGE_2;
}
 
int main()
{
   int a = rand();
   int b = 0;
   
   switch (get_range(a))
   {
   case B_RANGE_0:
      b = 0;
      break;
      
   case B_RANGE_1:
      b = 1;
      break;
      
   case B_RANGE_2:
      b = 2;
      break;
   }
}
А еще можно написать класс, который будет кастоваться в int и обратно
В общем-то есть куча способов, а какой будет предпочтительнее зависит от конкретной задачи.
0
disker
2 / 2 / 0
Регистрация: 25.01.2012
Сообщений: 88
30.01.2012, 19:05  [ТС] #5
Цитата Сообщение от Teravisor Посмотреть сообщение
Я бы писал
C++
1
2
3
4
5
if((B>=0)&&(B<0.2))A=1;
//Копипаст, изменение цифр
else if((B>=0.2)&&(B<0.4))A=1;
else if((B>=0.4)&&(B<0.6))A=1;
//И т.д.
Вот этот скорее всего выберу (правда ещё почитаю литературу что об этом случае говорят) так как у меня действия могут меняться и функцию тут вряд ли можно организовать Хотя немного странно что такой мощный язык и в этом плане слабее какого-то QBasica ... не ожидал
0
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
30.01.2012, 19:07 #6
Цитата Сообщение от Teravisor Посмотреть сообщение
я не знаю способа заставить свитч работать нормально с дробными
На сколько я знаю, такого просто нет. switch с целыми работает.
Я бы как-то так сделал:
C
1
int b(double a) { return ( a >= 0.0 && a < 0.2 ) ? 1 : ( a >= 0.2 && a < 0.4 ) ? 2 : /*...*/ ( a >= 0.8 && a <= 1.0 ) ? 5 : 0; }
1
Teravisor
31 / 31 / 3
Регистрация: 07.08.2011
Сообщений: 89
30.01.2012, 19:13 #7

Не по теме:

Аааа я забыл цифру изменить

Цитата Сообщение от Teravisor Посмотреть сообщение
изменение цифр
Цитата Сообщение от Teravisor Посмотреть сообщение
A=1;
XD



Добавлено через 3 минуты
По делу - мои ифы читабельнее этого кода в одну строчку ...
1
easybudda
30.01.2012, 19:17     Диапазон значений
  #8

Не по теме:

Цитата Сообщение от Teravisor Посмотреть сообщение
По делу - мои ифы читабельнее этого кода в одну строчку ...
В смысле - читать дольше прийдётся... А в прочем, любите простые вещи размусоливать - дело ваше, я не настаиваю...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2012, 19:17
Привет! Вот еще темы с ответами:

Проверка чисел на диапазон допустимых значений - C++
Всем привет! Мне нужно вывести количество введенных чисел и количество чисел, которые принадлежат промежутку. Проблема в том, что функция,...

как понять Диапазон принимаемых значений? - C++
Помогите пожалуйста я не могу понять слово Диапазон принимаемых значений! Заранее Спасибо!

Запросить с консоли целое число и проверить его на попадание в заданный диапазон значений - C++
Задания 1. Запросить с консоли целое число и проверить его на попадание в заданный диапазон значений. Результат такой проверки вывести на...

Написать программу,которая выводит таблицу значений функции >^(x-2)+(x+1). Диапазон изменения аргумента вводится пользователем так же как и шаг пригла - C++
Написать программу,которая выводит таблицу значений функции &gt;^(x-2)+(x+1). Диапазон изменения аргумента вводится пользователем так же как и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.01.2012, 19:17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru