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

Как можно в case вставить знак больше или равно? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.74
Nurik
3 / 3 / 0
Регистрация: 17.04.2012
Сообщений: 25
12.07.2012, 21:01     Как можно в case вставить знак больше или равно? #1
Как можно в case вставить знак больше или равно?

Например

C++ (Qt)
1
2
3
4
5
6
switch(n){
    case : //Вот в этой строке нужно знать больше ли n одного и меньше ли четверки
        cout<<"few";
        case : //Вот этой строке нужно знать больше ли n десяти
               cout<<"several";
    }
Можно реализовать такое в операторе switch ?
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2012, 21:01     Как можно в case вставить знак больше или равно?
Посмотрите здесь:

C++ Вставить после каждого знака пунктуации в символьном массиве знак табуляции
C++ В строке между словами вставить знак \ Подредактировать код программы
C++ Как можно в памяти уместить больше данных ?Большой массив или список маленьких массивов ?
C++ Можно ли как нибудь вставить свой файл
C++ switch-case, как писать в самом case
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.07.2012, 21:39     Как можно в case вставить знак больше или равно? #2
Nurik, насколько я знаю, нет. Но! Если передать управление в другую функцию, то можно пользоваться ифами и после первого совпадения - возвращаться в исходную функцию.

Как-то так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void comm(string command)
{
    if(command == "dfg")
    {
        ... // действия
        return ;
    }
    if(command == "fgddf")
    {
       действия
       return ;
    }
}
 
int main()
{
  string command;
  cin >> command;
  comm(command);
  return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
12.07.2012, 22:52     Как можно в case вставить знак больше или равно? #3
Цитата Сообщение от Nurik Посмотреть сообщение
Как можно в case вставить знак больше или равно?

Например

C++ (Qt)
1
2
3
4
5
6
switch(n){
    case : //Вот в этой строке нужно знать больше ли n одного и меньше ли четверки
        cout<<"few";
        case : //Вот этой строке нужно знать больше ли n десяти
               cout<<"several";
    }
Можно реализовать такое в операторе 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
#include <iostream>
using namespace std;
 
int main()
{
    int n = 0;
    while(1)
    {
        cout<<"Enter n : ";cin>>n;
        if(n < 0)
            n = n*(-1);//ÎòðèöГ*òåëüГ*ûå Г§Г*Г*Г·ГҐГ*ГЁГї Г*ГҐ Г°Г*Г±Г±Г¬Г*òðèâГ*ГҐГ¬
        switch(n)
        {
        //Ïðîâåðÿåì ìåГ*ГјГёГҐ ëè n 4-Гµ
        case 0:
        case 1:
        case 2:
        case 3:
            cout<<"|n| is less than 4"<<endl;
            break;
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
            cout<<"|n| is in interval [4;10]"<<endl;
            break;
        default:
            cout<<"|n| is more than 10"<<endl;
            break;
        };
    }
    return 0;
}
Миниатюры
Как можно в case вставить знак больше или равно?  
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 02:44     Как можно в case вставить знак больше или равно? #4
Nurik, пораскинув мозгами решил представить твоему вниманию алгоритм пробора значений
[0;10^3] [10^3;10^4], [10^4;10^5] и т.д.
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <climits>
#include <iostream>
using namespace std;
 
int getpwr(unsigned long val)
{
    int pwr = 0;
    while(val /= 10)
        pwr = pwr + 1;
    return pwr;
}
 
int main()
{
    unsigned long n = 0;
    while(1)
    {
        cout<<"Enter n : ";
        if(!(cin>>n) && cin.get() != '\n')
        {
            //Г‡Г*Г№ГЁГ№ВёГ*Г*ûé ââîä
            cin.clear();
            cin.sync ();
            cout<<"Bad input\n";
        }
        else
        switch(getpwr(n))
        {
        case 0:
        case 1:
        case 2:
            cout<<"|n| is in interval [0;10^3)"<<endl;
            break;
        case 3:
            cout<<"|n| is in interval [10^3;10^4)"<<endl;
            break;
        case 4:
            cout<<"|n| is in interval [10^4;10^5)"<<endl;
            break;
        case 5:
            cout<<"|n| is in interval [10^5;10^6)"<<endl;
            break;
        case 6:
            cout<<"|n| is in interval [10^6;10^7)"<<endl;
            break;
        case 7:
            cout<<"|n| is in interval [10^7;10^8)"<<endl;
            break;
        case 8:
        case 9:
            cout<<"|n| is in interval [10^8;10^9)"<<endl;
            break;
        //åñëè Г¤Г*ëüøå äåëГ*ГІГј ГІГ® âûõîäèì Г§Г* ïðåäåëû LONG_MAX
        default:
            cout<<"Enter value is not in accessable intervals"<<endl;
            break;
        };
    }
    return 0;
}
Миниатюры
Как можно в case вставить знак больше или равно?  
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 02:57     Как можно в case вставить знак больше или равно? #5
Кстати можно реализвать ввод не только целых но и вещественных
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
unsigned long n = 0;
ниже отработка для типа данного параметра double - т.е
C++
1
2
3
4
5
int main()
{
    double n = 0;
    while(1)
    {...
Миниатюры
Как можно в case вставить знак больше или равно?  
yleart
 Аватар для yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
13.07.2012, 09:28     Как можно в case вставить знак больше или равно? #6
Так же можно сделать через операцию ?:

Добавлено через 17 минут
Правда, если много условий, то будет проблема с читабельностью, но все равно покороче
-=ЮрА=-
13.07.2012, 09:37
  #7

Не по теме:

yleart, суть проблеммы не в использовании условного или тернарного оператора (который являет собой тот же условный оператор), а в использовании switch :

Цитата Сообщение от Nurik Посмотреть сообщение
Как можно в case вставить знак больше или равно?
Цитата Сообщение от Nurik Посмотреть сообщение
Можно реализовать такое в операторе switch ?

yleart
 Аватар для yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
13.07.2012, 10:17     Как можно в case вставить знак больше или равно? #8
Я подумал, что нужна конструкция вида:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
int main()
{
   int n;
   std::cin >> n;
   switch( (n > 1 && n < 4) ? 1: 2 )  
   {
      case 1: std::cout << "YES" << std::endl;
      return 0;
      case 2: std::cout << "NO" << std::endl;
      return 1;
   }
   return 0;
   
}
а если нужны проверки, то будет нечитабельный аргумет switch (хотя как написать).
Если не так, простите за оффтоп -_-
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
13.07.2012, 13:05     Как можно в case вставить знак больше или равно? #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nurik Посмотреть сообщение
Как можно в case вставить знак больше или равно?
Никак. В стандартный switch можно только перечислять значения, как это указано в посте 3. Но поскольку ты пользуешься Qt, то наверняка используешь компилятор gcc/g++. В gnu-расширениях switch позволяет задавать диапазоны

C
switch (x)
{
  case 1 ... 5:
    /* код */
    break;
 
  case 6 ... 25:
    /* код */
    break;
 
  ...
}
Nurik
3 / 3 / 0
Регистрация: 17.04.2012
Сообщений: 25
13.07.2012, 13:15  [ТС]     Как можно в case вставить знак больше или равно? #10
Цитата Сообщение от Evg Посмотреть сообщение
Никак. В стандартный switch можно только перечислять значения, как это указано в посте 3. Но поскольку ты пользуешься Qt, то наверняка используешь компилятор gcc/g++. В gnu-расширениях switch позволяет задавать диапазоны

C
switch (x)
{
  case 1 ... 5:
    /* код */
    break;
 
  case 6 ... 25:
    /* код */
    break;
 
  ...
}
Спасибо! Именно это мне было и нужно =)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
13.07.2012, 13:17     Как можно в case вставить знак больше или равно? #11
Цитата Сообщение от Nurik Посмотреть сообщение
Именно это мне было и нужно =)
Но надо понимать, что на других компиляторах (отличных от gcc) такой код не скомпилируется
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.07.2012, 13:33     Как можно в case вставить знак больше или равно? #12
case предназначен для множественного сравнения с конкретными перечислимыми значениями.
C++
1
2
3
4
5
6
7
switch (c)
{
 case -10:
 break;
 case <20: // Первый кэейс относится и к диапазону второго, что не допустимо
 break;
}
, а для (>-10)&&(<20) уже есть диапазонный синтаксис
C++
1
case -9..19:
.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2012, 14:46     Как можно в case вставить знак больше или равно?
Еще ссылки по теме:

C++ как реализовать условие больше или равно, меньше или равно для простых дробей в классе?
При вводе целого числа вывести, больше, меньше или равно 40 C++
Ввести массив целых чисел. Вставить число 0 между элементами, имеющими разный знак C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6156 / 2885 / 281
Регистрация: 04.12.2011
Сообщений: 7,680
Записей в блоге: 3
13.07.2012, 14:46     Как можно в case вставить знак больше или равно? #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
else switch(getpwr(n))
Неконстантное выражение у этого свича. Похоже он улыбается.)
А если уж совсем без if'ов но так:
C++
1
2
3
4
5
int a=((int)(n>1) *(int)(n<4))*4 + (int)(n>10) * 10;
switch(a){
case 4 : cout<<"1>n>4 \t   n= "<<n<<endl;
case 10 : cout<<"n>10  \t   n= "<<n<<endl;
}
Yandex
Объявления
13.07.2012, 14:46     Как можно в case вставить знак больше или равно?
Ответ Создать тему
Опции темы

Текущее время: 04:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru