Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Разъясните смысл условия цикла


Автор: Ober 18.8.2011, 21:55
В учебнике приведен пример программы которая, в принципе мне понятна, не понятен один момент:
есть объявление
Код

enum RequestType{ ZERO_BALANCE=1,CREDIT_BALANCE,DEBIT_BALANCE,END};


есть функция

Код

int getRequest()
{
  int request; 
  

  cout << "\nEnter request" << endl
    << " 1 - List accounts with zero balances" << endl                            
    << " 2 - List accounts with credit balances" << endl
    << " 3 - List accounts with debit balances" << endl
    << " 4 - End of run" << fixed << showpoint;
    
    do 
    {
      cout << "\n? ";
      cin >> request;
    }while( request << ZERO_BALANCE && request >> END );
    
  return request;
} getRequest


не понятен смысл условия цикла while
Он выполняется пока ...? 
Заранее спасибо.

И еще, если такое вообще есть, подскажите справочник с описанием стандартных заголовочных файлов примерно в таком виде :

#include <iostream>
Функции
width(int x)    минимальное число знаков до следующего вывода
fill(char x)    устанавливает символ-заполнитель и возвращает предыдущий символ-заполнитель. По умолчанию в качестве символа-заполнителя используется пробел
precision(int x)    устанавливает число значащих знаков для чисел с плавающей точкой

Манипуляторы
endl    перевод строки
flush    выгружает содержимое буфера в поток
dec    меняет формат вывода числа на десятичный
oct    меняет формат вывода числа на восьмеричный
hex    меняет формат вывода числа на шестнадцатеричный
ws    извлекает и удаляет символы пустых промежутков из потока
showpos    показывает + перед неотрицательными числами
showpoint    показывает десятичную точку
noshowpoint    скрывает десятичную точку

Автор: bsa 18.8.2011, 22:38
это тоже самое, что: (request << 1) && (request >> 4)
что эквивалентно: (result & 0x7f) && (request & 0xf0), а это эквивалентно (request & 0x70).
Смысла данного цикла не вижу.

Автор: Ober 18.8.2011, 22:47
Цитата(bsa @ 18.8.2011,  22:38)
это тоже самое, что: (request << 1) && (request >> 4)
что эквивалентно: (result & 0x7f) && (request & 0xf0), а это эквивалентно (request & 0x70).
Смысла данного цикла не вижу.

Но что в данном случае вообще означает, к примеру 
Код

request << 1
 ?

Автор: boostcoder 18.8.2011, 23:37
Цитата(Ober @  18.8.2011,  21:55 Найти цитируемый пост)
подскажите справочник с описанием стандартных заголовочных файлов

http://cplusplus.com/reference/

Автор: Ober 18.8.2011, 23:41
Цитата(boostcoder @ 18.8.2011,  23:37)
Цитата(Ober @  18.8.2011,  21:55 Найти цитируемый пост)
подскажите справочник с описанием стандартных заголовочных файлов

http://cplusplus.com/reference/

Большое спасибо, правда с Английским не очень, нужно поднапрячся. А случайно нет аналогов на русском ?

Автор: volatile 18.8.2011, 23:46
Цитата(Ober @  18.8.2011,  22:47 Найти цитируемый пост)
Но что в данном случае вообще означает, к примеру 
request << 1

сдвиг влево.

Цитата(Ober @  18.8.2011,  21:55 Найти цитируемый пост)
   do 
    {
      cout << "\n? ";
      cin >> request;
    }while( request << ZERO_BALANCE && request >> END );
Здесь явно бред.
Но что хотели, вобщем-то понятно:
Код

    }while( request < ZERO_BALANCE || request > END );

Автор: boostcoder 18.8.2011, 23:49
Цитата(Ober @  18.8.2011,  23:41 Найти цитируемый пост)
А случайно нет аналогов на русском ?

не встречал

Добавлено через 1 минуту и 25 секунд
Цитата(Ober @  18.8.2011,  21:55 Найти цитируемый пост)
 }while( request << ZERO_BALANCE && request >> END );

похоже на опечатку

Добавлено через 1 минуту и 48 секунд
Ober, что за книжка?

Автор: borisbn 19.8.2011, 08:05
Цитата(Ober @  18.8.2011,  23:41 Найти цитируемый пост)
А случайно нет аналогов на русском ?

мне так понравилось, что я теперь буду тулить это везде smile
user posted image

А если серьёзно - не читай документацию на русском, практически 0x64 % переводов страдают неточностями.
По поводу условия - явно очепятка. Вместо << и >> должно быть < и > соотв.

Автор: Ober 20.8.2011, 18:03
Цитата(boostcoder @ 18.8.2011,  23:49)
Цитата(Ober @  18.8.2011,  23:41 Найти цитируемый пост)
А случайно нет аналогов на русском ?

не встречал

Добавлено @ 23:50
Цитата(Ober @  18.8.2011,  21:55 Найти цитируемый пост)
 }while( request << ZERO_BALANCE && request >> END );

похоже на опечатку

Добавлено @ 23:51
Ober, что за книжка?

Книга, "Как программировать на С++" П. Деител, Х. Деител, 5 издание.

Автор: mes 20.8.2011, 18:29
Цитата(Ober @  20.8.2011,  17:03 Найти цитируемый пост)
Книга, "Как программировать на С++" П. Деител, Х. Деител, 5 издание. 

в оригинале  так :
Код

int getRequest()
{
   ...
   do // input user request
   {
      cout << "\n? ";
      cin >> request;
   } while ( request < ZERO_BALANCE && request > END );


     return request;
} // end function getRequest

Автор: Ober 20.8.2011, 22:10
Цитата(mes @ 20.8.2011,  18:29)
Цитата(Ober @  20.8.2011,  17:03 Найти цитируемый пост)
Книга, "Как программировать на С++" П. Деител, Х. Деител, 5 издание. 

в оригинале  так :
Код

int getRequest()
{
   ...
   do // input user request
   {
      cout << "\n? ";
      cin >> request;
   } while ( request < ZERO_BALANCE && request > END );


     return request;
} // end function getRequest

У меня в электронном виде, возможно при сканировании, что-то не то скопировало.

Автор: volatile 20.8.2011, 23:14
Цитата(mes @  20.8.2011,  18:29 Найти цитируемый пост)
в оригинале  так :
...
   } while ( request < ZERO_BALANCE && request > END );

Значит и в оригинале тоже опечатка, так как это  условие никогда не выполнится.
Нужно так:
Цитата(volatile @  18.8.2011,  23:46 Найти цитируемый пост)
 }while( request < ZERO_BALANCE || request > END );


Добавлено через 2 минуты и 41 секунду
при условии, что:
Цитата(Ober @  18.8.2011,  21:55 Найти цитируемый пост)
enum RequestType{ ZERO_BALANCE=1,CREDIT_BALANCE,DEBIT_BALANCE,END};


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)