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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
#1

Что? (оператор "," (запятая)) - C++

09.05.2013, 23:01. Просмотров 1914. Ответов 34
Метки нет (Все метки)

Имеется часть кода, взятого из Википедии.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double *alpha = new double[n - 1];
        double *beta = new double[n - 1];
        double A, B, C, F, h_i, h_i1, z;
        alpha[0] = beta[0] = 0.;
        for (std::size_t i = 1; i < n - 1; ++i)
        {
                h_i = x[i] - x[i - 1], h_i1 = x[i + 1] - x[i];
                A = h_i;
                C = 2. * (h_i + h_i1);
                B = h_i1;
                F = 6. * ((y[i + 1] - y[i]) / h_i1 - (y[i] - y[i - 1]) / h_i);
                z = (A * alpha[i - 1] + C);
                alpha[i] = -B / z;
                beta[i] = (F - A * beta[i - 1]) / z;
        }
Меня заинтересовала строчка
C++
1
h_i = x[i] - x[i - 1], h_i1 = x[i + 1] - x[i];
Неужели через запятую можно писать? И в каких случаях такое можно делать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 23:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что? (оператор "," (запятая)) (C++):

Выяснить, имеется ли пара соседствующих символов ",-" "-," (запятая, тире) в тексте - C++
#include &lt;iostream.h&gt; //Уважаемые программисты помогите переделать эту //Вот задание (Выяснить, имеется ли пара соседствующих символов...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

подсчитать количество операторов, помня, что каждый оператор заканчивается "," - C++
задание 1: В тексте программы на языке С + + (имя файла на диске ввести по запросу) подсчитать количество операторов, помня, что каждый...

Что означает оператор "->" в заголовке функции - C++
Встретил такой код: template &lt;typename T, typename T1&gt; auto compose(T a, T1 b) -&gt; decltype(a + b) { return a+b; } Со всеми его...

Пожалуйтса обясните что обозначает оператор "~" в C++? - C++
Привет всем... Пожалуйтса обясните что обозначает оператор &quot;~&quot; в C++?

Что означает и делает оператор ">>=" - C++
Глупый вопрос, но тем не менее. Что означает и делает оператор &quot;&gt;&gt;=&quot;. Может есть русское описание?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 11:27 #16
Я думаю что это возвращает true в объект cout - ну или что-то наподобии. Как если вместо числа ввести строку то необходимо будет снимаь флаг ошибки - но честно это предположене только.
Я о Условие ?
C++
1
b= false, cout << "false == b. Cycle's terminated."
: (2й вариант) этом. Пишет что не может привести к типу int - но здесь же нет скобок - это должна быть точка следования
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 11:42 #17
распишем по другому эту строчку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool foo(int a,bool & b){
   if(a<0){
      b = false;
      return (std::cout << "false == b. Cycle's terminated.");
   }else{
      return (b = true);
   }
}
 
 
int main(){
    bool b;
    int a=6;
    foo(a,b);
}
1
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 11:58 #18
Вернуло true, даже если а = -7; Здесь понятно(я так думаю)
Но я все равно о другом
C++
1
b = false, cout << "false == b. Cycle's terminated."
здесь вычисляется левый опреатор, а затем вычисляется правый и должно b присвоить true?
Выдает это
Error 2 error C2446: ':' : no conversion from 'int' to 'std::basic_ostream<_Elem,_Traits>' c:\users\Ruslan\documents\visual studio 2005\projects\8.14\8.14\8.14.cpp 41
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 12:03 #19
Цитата Сообщение от Aliru Посмотреть сообщение
здесь вычисляется левый опреатор, а затем вычисляется правый и должно b присвоить true?
так понятнее:
C++
1
2
b = (false, cout << "false == b. Cycle's terminated.")
(b = false), cout << "false == b. Cycle's terminated."
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.07.2013, 12:08 #20
Цитата Сообщение от Aliru Посмотреть сообщение
Да, я это читал - и куда возвращает тогда значение
Это не паскаль, здесь допускается возврат значения вникуда.
0
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 12:13 #21
Да, здесь было понятно - это просто оператор запятая.
А вот здесь
C++
1
2
3
4
5
6
int a =7;
while (b)
{
smthDo();
(a<0) ? (b= false, cout << "false == b. Cycle's terminated.") : (b = true);
}
выдает ошибку
Цитата Сообщение от Aliru Посмотреть сообщение
Error 2 error C2446: ':' : no conversion from 'int' to 'std::basic_ostream<_Elem,_Traits>' c:\users\Ruslan\documents\visual studio 2005\projects\8.14\8.14\8.14.cpp 41
Вопрос почему?
Оператор запятая?
Но в Вашем примере
Цитата Сообщение от Croessmah Посмотреть сообщение
b = (false, cout << "false == b. Cycle's terminated.")
все работает, хотя тоже оператор
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 12:24 #22
http://ideone.com/8XD15x
0
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
20.07.2013, 12:25 #23
Видимо в b сначала пишется bool, а затем basic_ostream<_Elem,_Traits> (т.е. b присваивается cout)
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 12:26 #24
Цитата Сообщение от Aliru Посмотреть сообщение
все работает, хотя тоже оператор
разница только в
C++
1
2
3
4
5
6
//...
false;
return b=std::cout<<"...";
//...
b = false;
return std::cout<<"...";
2
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 13:43 #25
Работает но в моей программе почему то не работает - 41 строка
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// Simpletron.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include <iomanip>
 
using namespace std;
 
int iInputInstruction();
 
void v_PrintMemory(int *);
 
int _tmain(int argc, _TCHAR* argv[])
{
    const int iSize = 100;
    bool b = true;
    int iMemoryStack[iSize]={};
    int iInstructionRegister;
    int iInstructionCounter = 0;
    int iOperationCode;
    int iOperator;
    int iAccamulator = 0;
    v_PrintMemory(iMemoryStack);
    while ( b )
    {
    iMemoryStack [iInstructionCounter] = iInputInstruction();
    iInstructionRegister = iMemoryStack [iInstructionCounter];
    iOperationCode = iInstructionRegister/100;
    iOperator = iInstructionRegister%100;
    switch (iOperationCode)
    {
    case 10:
        while ((!(cin >> iMemoryStack[iOperator])) || (iMemoryStack[iOperator]<-9999 || iMemoryStack[iOperator]>9999))
        {
            cin.clear();
            cin.ignore(50, '\n');
            cout << "Please enter right value!" << endl;
        }
        (iMemoryStack[iOperator] < 0) ? (b = false, cout << "The input've terminated"):(iAccamulator += iMemoryStack[iOperator]);
        break;
    case 11:
        cout << "Value in cell " << noshowpos << iOperator << " is: " << noshowpos << iMemoryStack[iOperator] << endl;
        break;
    case 20:
        iAccamulator = iMemoryStack[iOperator];
        break;
    case 21:
        iMemoryStack[iOperator] = iAccamulator;
        break;
    case 30:
        iAccamulator += iMemoryStack[iOperator];
        break;
    case 31:
        iAccamulator -= iMemoryStack[iOperator];
        break;
    case 32:
        iAccamulator *= iMemoryStack[iOperator];
        break;
    case 33:
        iAccamulator /= iMemoryStack[iOperator];
        break;
    case 40:
        iInstructionCounter = iOperator;
        break;
    case 41:
        if ( iAccamulator < 0 )
            iInstructionCounter = iOperator;
        break;
    case 42:
        if ( iAccamulator == 0 )
            iInstructionCounter = iOperator;
        break;
    case 43:
        b = false;
        cout << "*** Simpletron execution terminated ***" << endl;
        break;
    default:
        cout << "You've input insence Code!" << endl;
        break;
    }
    iInstructionCounter++;
    v_PrintMemory(iMemoryStack);
    }
    cout << iAccamulator;
    _getch();
    return 0;
}
 
int iInputInstruction()
{
    int I;
    while ((!(cin >> I)) || ((I<-9999 || I>-1000) && (I>9999 || I<1000)))
    {
        cin.clear();
        cin.ignore(50, '\n');
        cout << "Please enter right value!" << endl;
    }
    return I;
}
 
void v_PrintMemory(int *A)
{
    cout << "Memory:" << endl;
    for (int i = 0; i < 10; i++)
        cout << right << setw(7) << setfill(' ') << noshowpos << i;
    cout << endl;
    int j = 0;
    for (int i = 0; i < 100; i+=10)
    {
        cout << left << setw(2) << noshowpos << i;
        for (i+j; j < (i+10); j++)
            cout << right << setw(5) << showpos << setfill('0') << internal << A[j] << "  ";
        cout << endl;
    }
}
Добавлено через 28 минут
А здесь не работает
C++
1
2
3
4
5
6
{  int A = 12;
    int B = 1211;
    (A<B) ? (B = 100, cout << "!!!") : (A = 100);
    _getch();
    return 0;
}
Добавлено через 20 минут
C++
1
2
3
4
5
6
7
8
9
10
int B;
    int A=(6,B=8);
    bool c = true;
    cout << endl << B;
    while (B != 100)
    {
        cout << "qgkdf\n";
        (A<B) ? (c = 100, B=100, cout << "!!!") : (c = 100);
        A--;
    }
Так работает, но заменив (с = 100) на (А = 100) опять вылетает Error 3 error C2446: ':' : no conversion from 'int' to 'std::basic_ostream<_Elem,_Traits>' c:\users\documents\visual studio 2005\projects\8.14\8.14\8.14.cpp 36
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 14:03 #26
Цитата Сообщение от Aliru Посмотреть сообщение
Так работает, но заменив (с = 100) на (А = 100)
ну так к int'у же приводите.
Вот так попробуйте:
C++
1
(static_cast<bool>(a = 100)
но это не решение. В данном случае лучше воспользоваться if
0
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 14:08 #27
Я именно это и не могу понять, кого я к инт-у привожу?
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 14:09 #28
Ссылку на поток, которую вернет оператор << для cout
0
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 14:20 #29
А можно где то это почитать подробней. Я совсем ничего не понимаю. Как связан cout в 1м действии с значением А

Добавлено через 7 минут
The types of the 2 operands of the conditional operator needs to be the same.
(A<B) ? (c = 100, B=100, cout << "!!!") : (A = 100);

The type of c = 100, B=100, cout << "!!!" is the type of cout << "!!!", which is std::ostream.

The type of of A = 100 is int.

These 2 types do not match, hence the error.

Это, наверное, так в стандарте написано. Ладно. Но как тогда std::ostream и bool сочетаются - через true false я так понимаю. А есть где-нибудь такое чудесное место где написано все что может случаться
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 14:28 #30
Цитата Сообщение от Aliru Посмотреть сообщение
Но как тогда std::ostream и bool сочетаются - через true false я так понимаю.
operator void*
explicit operator bool
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2013, 14:28
Привет! Вот еще темы с ответами:

С++ консольное приложение win32, матерится на первое "pow" после "if", а на "system" говорит что неопределён. - C++
#define _CRT_SECURE_NO_WARNINGS #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;iostream&gt; #define Pi 3.1416 #include &lt;clocale&gt;...

C2678 бинарный ">>": не найден оператор, принимающий левый операнд типа "std::ostream" - C++
Код: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;typeinfo&gt; #include &lt;ctime&gt; #include &lt;windows.h&gt; #include &lt;ostream&gt; ...

бинарный "++": "Counter" не определяет этот оператор или преобразование к типу приемлемо к встроенному - C++
бинарный &quot;++&quot;: &quot;Counter&quot; не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору #include &lt;iostream&gt; ...

Error C2678: бинарный "<<": не найден оператор, принимающий левый операнд типа "std::ifstream" - C++
Собственно, текст ошибки приведен в названии темы. Сам код: #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iomanip&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.07.2013, 14:28
Ответ Создать тему
Опции темы

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