Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
1

"цепной" <<

12.02.2010, 06:45. Показов 1876. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я просто не в курсе, так можно:
C++
1
cout << "Here is 5: " << 5 << "\ n";
?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2010, 06:45
Ответы с готовыми решениями:

Найти значение цепной дроби
Дано целое положительное n. Найти...

Рекурсивное вычисление цепной дроби
Народ помогите, как сделать рекурсивную функцию для этого y(n) = , n - число ступеней.

Решение цепной дроби рекурсией
Здравствуйте, у меня такая проблема: при вводе x и N программа дальше не работает (выдает, что стек...

Решение цепной дроби рекурсией
надо решить задачу рекурсией и без неё не могу преобразовать уравнение мучилась-мучилась, но...

16
paladin
286 / 187 / 7
Регистрация: 25.02.2009
Сообщений: 589
12.02.2010, 07:00 2
а почему нельзя?
Только вот "\ n" ???
Может
C++
1
cout << "Here is 5: " << 5 << endl;
1
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
12.02.2010, 17:50 3
Можно и endl, и "\n". Первое идеологически правильнее (ну и имеет кой-какие дополнительные эффекты, но это уже тонкости).
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2010, 05:01  [ТС] 4
Цитата Сообщение от Nick Alte Посмотреть сообщение
ну и имеет кой-какие дополнительные эффекты
. Тогда правильнее второе. Тем более, идеологически.
Идеология c заключается в избавлении программиста от всего лишнего в коде.
Индексы элементов массива не проверяются в соответствии с идеологией языка, чтобы минимизировать время доступа.
Даже это сочли лишним, хотя именно это один из самых необходимых эффектов, а текстовые эффекты вредны всегда, когда они побочны. Нужен текстовый эффект - выводи управляющий символ именно для этого эффекта, а не нужен, так зачем от него ещё специально избавляться, когда он проявится из-за псеводоупрощений типа замены "\n" на endl? Вопрос же относится вот к чему: если я подряд поставлю два оператора, то куда бедет выведен операнд второго: в поток, или в операнд первого оператора? Если вы говорите, что "цепная" форма допустима, буду её пользоваться, если бы вы сказали, что так нельзя, писал бы
C++
1
2
3
cout<<"y=";
cout<<y;
cout<<"\n"
вместо
C++
1
cout<<"y="<<y<<"\n";
.
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
24.02.2010, 05:22 5
Скажем так, для интереса попробуйте вот такую программу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int a;
int func()
{
  return a++;
}
 
int main()
{
  a = 0;
  cout << func() << func()<<func() << endl;
//-----------------
  a = 0;
  cout << func();
  cout << func();
  cout << func();
  cout << endl;
  return 0;
}
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2010, 05:40  [ТС] 6
Тестил здесь.
Output:
210
012
. Ну и где сдесь эффект эндла?
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
24.02.2010, 07:30 7
Это не эффект ендла, просто если несколько сиаутов идут подряд, то они выполняются в порядке объявления. А для цепной записи с права на лево.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2010, 10:07  [ТС] 8
Что такое сиауты?
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
24.02.2010, 10:49 9
Цитата Сообщение от taras atavin Посмотреть сообщение
Что такое сиауты?
cout - читается так.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.02.2010, 12:44  [ТС] 10
С конца здесь не каут выполняется, а инкременты, причём, у них ещё и общий приоритет надо всеми каутами. Уж это даже я понял.

Добавлено через 5 минут
Подумай вот о чём: куда выодит второй
C++
1
<<
? В поток, возвращенный первым
C++
1
<<
. Но тогда, пока первый не отработает, второму выводить некуда.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
24.02.2010, 16:35 11
Здесь дело не в приоритете выполнения инкремента, а в вызовах функций и порядке вычисления аргументов. Ведь запись cout << что-то есть по сути cout.operator<<(*this, что-то);
Если "размотать" всю цепочку вызовов, то так и получится.

Добавлено через 22 минуты
Апичатка: имелось в виду cout& operator<<(cout&, что-то);
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.02.2010, 04:54  [ТС] 12
Тогда в "цепи"
C++
1
cout<<op1<<op2<<op3<<op4;
соотвествует
C++
1
(((cout.operator<<(op1)).operator<<(op2)).operator<<(op3)).operator<<(op4);
, а в том примере сначала вычислились все аргументы, начиная с последнего, а потом всё это вывелось.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
25.02.2010, 10:20 13
А вычислялось оно начиная с последнего вот почему: вот у нас выражение
cout<<op1<<op2<<op3<<op4;

Рассмотрим каноническую форму оператора: cout& operator<<(cout&, что-то); - функция operator<<() принимает два аргумента, причем первый (левый) должен вычисляться в cout,
а второй (правый) - в нечто, имеющее смысл для вывода.
Рассмотрим два варианта разбора: (cout) << (op1<<op2<<op3<<op4); и (cout<<op1<<op2<<op3) << (op4);
В первом варианте левый аргумент может быть вычислен (а чего его вычислять-то?) в cout, зато правый не может быть вычислен ни во что осмысленное. Поэтому этот вариант отпадает. Во втором варианте левый аргумент может быть вычислен (последовательно рекурсивно) в cout, а правый (а чего его тут вычислять-то?) - в op4. Таким образом, второй вариант приемлем для компилятора. Ну и так далее рекурсивно.....
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.02.2010, 05:42  [ТС] 14
А если написать
C++
1
2
3
int x;
int y;
cout<<x<<y;
, что тогда получится?
C++
1
x<<y
может быть вычислен путём сдвига x на y бит.

Добавлено через 2 минуты
http://codepad.org/BZvWh6dv

Добавлено через 1 минуту
http://codepad.org/cqrDjyYJ

Добавлено через 30 секунд
http://codepad.org/Xi6smIAo

Добавлено через 1 минуту
http://codepad.org/QwR7JG2S
http://codepad.org/V9wNbJ9p
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
26.02.2010, 08:02 15
Не надо путать операцию поместить в поток и операцию сдвига.
1
paladin
286 / 187 / 7
Регистрация: 25.02.2009
Сообщений: 589
26.02.2010, 08:24 16
Цитата Сообщение от taras atavin Посмотреть сообщение
А если написать
C++
1
2
3
int x;
int y;
cout<<x<<y;
Расставляй скобки, избегай неоднозначностей (хотя в данном примере никакой неоднозначности нет). Не заставляй коллег напрягать извилины в попытках разобрать, что ты хотел получить.
Хочешь сдвиг, пиши явно:
C++
1
cout << (x << y);
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.02.2010, 06:33  [ТС] 17
Я хочу вывод в поток, что и делает компил. Но ведь это надо знать, что порядок этого оператора всегда слева на право, так как анализ на основе только возможности вычисления операндов как раз и приводит к неоднозначности, которой на самом деле нет.
0
27.02.2010, 06:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2010, 06:33
Помогаю со студенческими работами здесь

Рекурсия: вычисление цепной дроби
Не могу разобраться в функции для написания рекурсии

Решение цепной дроби рекурсией С++

Преобразование цепной дроби в обычное число
Помогите, пожалуйста, написать программу на примере числа Пи: =&gt; 3.1415926

Вычисление цепной дроби (рекурсивно и итеративно)
Как это вообще сделать ??? Нужно с помощь. рекурсии и без неё С++.

Рекурсивная функция для цепной дроби
Подскажите, пожалуйста как написать рекурсию для такой дроби

Рекурсия: вычисление значения цепной дроби
Вычислить дробь: 1/(1+(1/1+(1/1+...))) используя рекурсию. Значение n задаёт количество ступеней....


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru