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

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

Войти
Регистрация
Восстановить пароль
 
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
#1

Оптимизация условия цикла while - C++

06.02.2012, 21:01. Просмотров 1042. Ответов 10
Метки нет (Все метки)

Доброго времени суток, друзья! Я еще совсем новичок в С++. Подскажите плз как оптимизировать следующее условие выхода из цикла while. Уж очень громоздко выглядит, и что-то внутри меня подсказывает что это можно как-то сократить

char ch = 'a';
while (ch != 42 && ch != 43 && ch != 45 && ch != 47)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2012, 21:01     Оптимизация условия цикла while
Посмотрите здесь:

Оптимизация цикла for - C++
Скажите, пожалуйста, как оптимизируется первый цикл? И чем он отличается от второго? Первый цикл: int a = 2; for (int i = 0; i < 5;...

Оптимизация цикла for - C++
Исходные данные: имеется цикл for, прерывание которого невозможно(должен выполнить все итерации). #include <iostream> int main() {...

Условия остановки цикла - C++
А как задать условие для: 1) Допустим идет цикл вычислений. Необходимо прервать вычисления при условии, что 3 последних вычислений будут...

Условия цикла в функции - C++
int reverse_number(int number) { int n = 0; while(number) { n = 10*n + number%10; number /= 10; ...

Проверка условия окончания цикла for - C++
Здраствуйте. Проблема заключается в следующем. Есть следующий цикл: for( int i=2; !((n%i||d%i)&&!(n%i&&d%i))==0 ; i++){ ...

Условия цикла for, числа double - C++
День добрый. Решал недавно задачку с одного сайта, задачка простая была, но после решения и подглядывания решения от авторов наткнулся на...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
06.02.2012, 21:42     Оптимизация условия цикла while #2
так например?
C++
1
while(ch < 42 && ch > 47)
ITDeveloper
85 / 85 / 5
Регистрация: 14.01.2011
Сообщений: 263
06.02.2012, 21:46     Оптимизация условия цикла while #3
Цитата Сообщение от R136a1 Посмотреть сообщение
так например?
C++
1
while(ch < 42 && ch > 47)

а как же значения 44 и 46
KristopherRobin
137 / 133 / 6
Регистрация: 11.09.2011
Сообщений: 407
06.02.2012, 21:56     Оптимизация условия цикла while #4
по мне так нормальное условие. для удобного чтения можешь так написать:

C++
1
2
3
4
while ( ch != 42 && 
    ch != 43 && 
    ch != 45 && 
    ch != 47)
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
06.02.2012, 21:59     Оптимизация условия цикла while #5
Цитата Сообщение от daite_dve Посмотреть сообщение
char ch = 'a';
while (ch != 42 && ch != 43 && ch != 45 && ch != 47)
а че объявление символьное а проверка числовая
а значения точно десятичные???(шеснадцетиричные пишут так 0x42)
упростить не получится а проще записать так
C
1
2
char ch = 'a';
 while (ch != '*' && ch != '+' && ch != '-' && ch != '/')
это если ты написал правильно и то символы это десятичные значения
если имел ввиду шеснадцетиричное
то
C++
1
2
char ch = 'a';
 while (ch != 'B' && ch !='C' && ch !='E' && ch !='G')
x1Mike7x
216 / 129 / 6
Регистрация: 06.11.2010
Сообщений: 234
06.02.2012, 22:38     Оптимизация условия цикла while #6
Если всяких значений ch может быть очень много, то можно все "нежелательные" символы завести в строку и искать в ней или ch не равняется какому-то символу.
C++
1
2
3
4
5
6
#include <string>
.....................................................
std::string ololo = "+-*/";
while ( ololo.find( ch ) == std::string::npos )
{
}
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
06.02.2012, 23:34  [ТС]     Оптимизация условия цикла while #7
да, видимо ничего красивее чем
C++
1
2
3
4
while ( ch != 42 && 
          ch != 43 && 
          ch != 45 && 
          ch != 47)
не используя
C++
1
#include <string>
нельзя...
А на что проверять, на символы, на десятеричную или шестнадцатеричную, это мне кажется не суть, запись от этого не сократится.

Спасибо всем за ответы! Если что, то писал калькулятор:

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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    char con = 'a';
    do
    {
    char ch = 'a';
    char act = 'a';
    double num1 = 0;
    double num2 = 0;
    double res = 0;
    cout << "Enter the first number, an action and the second number: ";
    while (ch != 42 && 
               ch != 43 && 
               ch != 45 && 
               ch != 47)
    {
    ch = getche();
    if (ch != 42 && 
            ch != 43 && 
            ch != 45 && 
            ch != 47)
    {
        num1 = num1 * 10 + (ch - 48);
    }
    else
    {
        act = ch;
    }
    }
    cin >> num2;
    switch(act)
    {
    case 42:
        res = num1 * num2;
        break;
    case 43:
        res = num1 + num2;
        break;
    case 45:
        res = num1 - num2;
        break;
    case 47:
        res = num1 / num2;
        break;
    }
    cout << "Result: " << num1 << act << num2 << "=" << res << endl << "Continue? (y/n): ";
    cin >> con;
    }
    while (con != 'n');
    return 0;
}
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
07.02.2012, 00:32     Оптимизация условия цикла while #8
Цитата Сообщение от daite_dve Посмотреть сообщение
А на что проверять, на символы, на десятеричную или шестнадцатеричную, это мне кажется не суть, запись от этого не сократится.
запись не сократится(может даже увеличится из за кавычек)
но понятно будет что ты имел ввиду
не надо комментировать
а так другой человек с ходу не поймет
да и сам через полгода будешь вспоминать что написал
самодокументированая программа, однако

Добавлено через 2 минуты
Цитата Сообщение от daite_dve Посмотреть сообщение
num1 = num1 * 10 + (ch - 48);
а что будет если я букву нажму ???
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
07.02.2012, 01:55  [ТС]     Оптимизация условия цикла while #9
Цитата Сообщение от ValeryS Посмотреть сообщение
а что будет если я букву нажму ???
ХА! сейчас проверю))

P.S.: насчет понятности ты прав.. реально же потом сходу не пойму что это математические действия.

Добавлено через 8 минут
Выдает:

Enter the first number, an action and the second number: b-50
Result: 50-50=0
Continue? (y/n):

Оно и понятно, у 'b' аски код 98, потом я вычитаю из него 48, и остается 50. И вот результат. Можно конечно вставить условие чтобы num1 и num2 содержали только символы от 0 до 9. Но сейчас такой цели не стоит, так что не буду заморачиваться)

Добавлено через 1 час 6 минут
Я только что открыл для себя магию дэвида блэйна! Друзья, как так? Т.е. оператор
C++
1
cin >> n1 >> oper >> n2;
сам распознает все что нужно? Например: ввожу 3/2, нажимаю энтэр, и вуаля: n1 = 3, n2 = 2, oper - '/'.

Вот написание моего калькулятора (ответ из книжки):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
int main()
{
    double num1,num2,res;
    char act,ch;
    do{
        cout << "Input a number, an action and another number: ";
        cin >> num1 >> act >> num2;
        switch (act){
            case '+': res = n1 + n2; break;
            case '-': res = n1 - n2; break;
            case '*': res = n1 * n2; break;
            case '/': res = n1 / n2; break;}
    cout << "Result: " << res;
    cout << "\nContinue? (y/n)";
    cin >> ch;
    }while (ch != 'n');
    return 0;
 
}
Получается все мои старания по придумыванию как вытащить из потока ввода нужные символы оказались напрасны...
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
07.02.2012, 06:31     Оптимизация условия цикла while #10
Цитата Сообщение от daite_dve Посмотреть сообщение
}while (ch != 'n');
вот здесь можно добавить проверку на большую букву
C++
1
while ((ch != 'n' )&&( ch != 'N') )
Добавлено через 7 минут
Цитата Сообщение от daite_dve Посмотреть сообщение
switch (act){
case '+': res = n1 + n2; break;
case '-': res = n1 - n2; break;
case '*': res = n1 * n2; break;
case '/': res = n1 / n2; break;}
вот здесь добавить еще одну ветку (по умолчанию) если будет введен не правильный act
C++
1
2
deafault:
cout << "Error operation";
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2012, 08:56     Оптимизация условия цикла while
Еще ссылки по теме:

При выполнении условия не выходит из цикла - C++
При выполнении условия не выходит из цикла а продолжается и выходит за границы #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Оптимизация цикла (перебор 5000000 элементов) - C++
Можно ли как-то оптимизировать данный цикл? for (i=10000000; i&lt;15000000; i++) { for (k = i, j = 0; j &lt; 8; j++, k /= 10) ...

Повторение цикла при наступлении определенного условия - C++
Добрый день! Я пишу игру и пытаюсь сделать разыгровку первого хода. Загвоздка в следующем: мне нужно, чтобы при условии &quot;ничья&quot; цикл...

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


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

Или воспользуйтесь поиском по форуму:
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
07.02.2012, 08:56  [ТС]     Оптимизация условия цикла while #11
да, спасибо за ответ
P.S.:пошел изучать работу cin))
Yandex
Объявления
07.02.2012, 08:56     Оптимизация условия цикла while
Ответ Создать тему
Опции темы

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