Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.74
Nurik
3 / 3 / 3
Регистрация: 17.04.2012
Сообщений: 25
#1

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

12.07.2012, 21:01. Просмотров 5062. Ответов 12
Метки нет (Все метки)

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

Например

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

Реализовать условие "больше или равно", "меньше или равно" для простых дробей в классе
как реализовать условие больше или равно, меньше или равно для простых дробей в...

При вводе целого числа вывести, больше, меньше или равно 40
Составить программу, через операторы ветвления. Что бы при вводе целого числа...

Как можно в памяти уместить больше данных ?Большой массив или список маленьких массивов ?
сабж выше

Можно ли как-то заставить сработать одновременно все case у оператора switch?
Вопрос в заголовке темы:)

При выборе case 1 всегда черный экран? как правильно указать путь в case
Доброго времени суток) проблема с компиляций когда при компилирование...

switch-case, как писать в самом case
Такс дело вот в чём,прога работает всё хорошо,вот только мне не нравится как...

12
Ksan
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
12.07.2012, 21:39 #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;
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
12.07.2012, 22:52 #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;
}
0
Миниатюры
Как можно в case вставить знак больше или равно?  
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 02:44 #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;
}
1
Миниатюры
Как можно в case вставить знак больше или равно?  
-=ЮрА=-
Заблокирован
Автор FAQ
13.07.2012, 02:57 #5
Кстати можно реализвать ввод не только целых но и вещественных
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
unsigned long n = 0;
ниже отработка для типа данного параметра double - т.е
C++
1
2
3
4
5
int main()
{
    double n = 0;
    while(1)
    {...
0
Миниатюры
Как можно в case вставить знак больше или равно?  
yleart
60 / 45 / 12
Регистрация: 07.10.2011
Сообщений: 139
13.07.2012, 09:28 #6
Так же можно сделать через операцию ?:

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

Не по теме:

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

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

0
yleart
60 / 45 / 12
Регистрация: 07.10.2011
Сообщений: 139
13.07.2012, 10:17 #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 (хотя как написать).
Если не так, простите за оффтоп -_-
1
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,438
Записей в блоге: 30
13.07.2012, 13:05 #9
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Nurik Посмотреть сообщение
Как можно в case вставить знак больше или равно?
Никак. В стандартный switch можно только перечислять значения, как это указано в посте 3. Но поскольку ты пользуешься Qt, то наверняка используешь компилятор gcc/g++. В gnu-расширениях switch позволяет задавать диапазоны

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

C
switch (x)
{
  case 1 ... 5:
    /* код */
    break;
 
  case 6 ... 25:
    /* код */
    break;
 
  ...
}
Спасибо! Именно это мне было и нужно =)
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,438
Записей в блоге: 30
13.07.2012, 13:17 #11
Цитата Сообщение от Nurik Посмотреть сообщение
Именно это мне было и нужно =)
Но надо понимать, что на других компиляторах (отличных от gcc) такой код не скомпилируется
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
13.07.2012, 13:33 #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:
.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7004 / 3297 / 448
Регистрация: 04.12.2011
Сообщений: 9,128
Записей в блоге: 5
13.07.2012, 14:46 #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;
}
1
13.07.2012, 14:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2012, 14:46
Привет! Вот еще темы с решениями:

Вместо каждого пробела вставить в строку восклицательный знак
И вставить вместо каждого пробела восклицательный знак. Повторять до тех пор,...

В строке между словами вставить знак \ Подредактировать код программы
#include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main(void)...

Можно ли как нибудь вставить свой файл
Можно ли как нибудь вставить свой файл в ехе и чтобы при запуске он копировался...

Вставить после каждого знака пунктуации в символьном массиве знак табуляции
Помогите пожалуйста решить задачи на языке Си 1. Вставить после каждого знака...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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